secubox-openwrt/luci-app-system-hub/tests/integration/test-diagnostic-workflow.sh

204 lines
6.0 KiB
Bash
Executable File

#!/bin/sh
# Integration Test: Complete diagnostic workflow with profiles
# Tests end-to-end user workflow from profile selection to archive download
. /lib/functions.sh
. /usr/share/libubox/jshn.sh
# Colors
GREEN='\033[0;32m'
RED='\033[0;31m'
YELLOW='\033[1;33m'
NC='\033[0m'
echo "========================================"
echo "Diagnostic Workflow Integration Test"
echo "========================================"
echo "Testing complete workflow with performance-problems profile"
echo ""
# Step 1: List available profiles
echo -e "${YELLOW}STEP 1:${NC} Listing available profiles"
echo "---------------------------------------"
profiles=$(ubus call luci.system-hub list_diagnostic_profiles 2>&1)
if [ $? -ne 0 ]; then
echo -e "${RED}❌ FAILED${NC}: Could not list profiles"
echo "$profiles"
exit 1
fi
echo -e "${GREEN}✅ SUCCESS${NC}: Profiles listed"
echo "$profiles" | jsonfilter -e '@.profiles[*].name' | sed 's/^/ - /'
echo ""
# Step 2: Select performance-problems profile
echo -e "${YELLOW}STEP 2:${NC} Selecting performance-problems profile"
echo "---------------------------------------"
profile=$(ubus call luci.system-hub get_diagnostic_profile '{"name":"performance-problems"}' 2>&1)
if [ $? -ne 0 ]; then
echo -e "${RED}❌ FAILED${NC}: Could not get profile"
echo "$profile"
exit 1
fi
echo -e "${GREEN}✅ SUCCESS${NC}: Profile retrieved"
echo " Name: $(echo "$profile" | jsonfilter -e '@.name')"
echo " Label: $(echo "$profile" | jsonfilter -e '@.label')"
echo " Tests: $(echo "$profile" | jsonfilter -e '@.tests')"
echo ""
# Step 3: Collect diagnostics using profile
echo -e "${YELLOW}STEP 3:${NC} Collecting diagnostics with profile"
echo "---------------------------------------"
archive=$(ubus call luci.system-hub collect_diagnostics '{"profile":"performance-problems"}' 2>&1)
if [ $? -ne 0 ]; then
echo -e "${RED}❌ FAILED${NC}: Could not collect diagnostics"
echo "$archive"
exit 1
fi
success=$(echo "$archive" | jsonfilter -e '@.success')
if [ "$success" != "true" ]; then
echo -e "${RED}❌ FAILED${NC}: Collection reported failure"
echo "$archive"
exit 1
fi
filename=$(echo "$archive" | jsonfilter -e '@.file')
size=$(echo "$archive" | jsonfilter -e '@.size')
echo -e "${GREEN}✅ SUCCESS${NC}: Archive created"
echo " Filename: $filename"
echo " Size: $size bytes"
echo ""
# Step 4: Verify archive exists
echo -e "${YELLOW}STEP 4:${NC} Verifying archive exists on filesystem"
echo "---------------------------------------"
archive_path="/tmp/system-hub/diagnostics/$filename"
if [ ! -f "$archive_path" ]; then
echo -e "${RED}❌ FAILED${NC}: Archive file not found at $archive_path"
exit 1
fi
echo -e "${GREEN}✅ SUCCESS${NC}: Archive file exists"
ls -lh "$archive_path" | awk '{print " Size: " $5 " Modified: " $6 " " $7 " " $8}'
echo ""
# Step 5: Verify archive contains profile name
echo -e "${YELLOW}STEP 5:${NC} Verifying profile name in filename"
echo "---------------------------------------"
if echo "$filename" | grep -q "performance-problems"; then
echo -e "${GREEN}✅ SUCCESS${NC}: Filename contains profile name"
echo " $filename"
else
echo -e "${RED}❌ FAILED${NC}: Profile name not in filename"
echo " Expected: performance-problems"
echo " Found: $filename"
exit 1
fi
echo ""
# Step 6: List diagnostics to verify it appears
echo -e "${YELLOW}STEP 6:${NC} Listing diagnostics archives"
echo "---------------------------------------"
diagnostics=$(ubus call luci.system-hub list_diagnostics 2>&1)
if [ $? -ne 0 ]; then
echo -e "${RED}❌ FAILED${NC}: Could not list diagnostics"
echo "$diagnostics"
rm -f "$archive_path"
exit 1
fi
if echo "$diagnostics" | grep -q "$filename"; then
echo -e "${GREEN}✅ SUCCESS${NC}: Archive appears in diagnostics list"
echo "$diagnostics" | jsonfilter -e '@.archives[*].name' | grep "$filename" | sed 's/^/ - /'
else
echo -e "${RED}❌ FAILED${NC}: Archive not in diagnostics list"
rm -f "$archive_path"
exit 1
fi
echo ""
# Step 7: Download archive (simulate)
echo -e "${YELLOW}STEP 7:${NC} Downloading archive (verifying RPC)"
echo "---------------------------------------"
download=$(ubus call luci.system-hub download_diagnostic "{\"name\":\"$filename\"}" 2>&1)
if [ $? -ne 0 ]; then
echo -e "${RED}❌ FAILED${NC}: Could not download archive"
echo "$download"
rm -f "$archive_path"
exit 1
fi
download_success=$(echo "$download" | jsonfilter -e '@.success')
if [ "$download_success" != "true" ]; then
echo -e "${RED}❌ FAILED${NC}: Download reported failure"
rm -f "$archive_path"
exit 1
fi
echo -e "${GREEN}✅ SUCCESS${NC}: Download RPC successful"
echo " (Archive data would be base64 encoded for browser download)"
echo ""
# Step 8: Delete archive
echo -e "${YELLOW}STEP 8:${NC} Deleting archive"
echo "---------------------------------------"
delete=$(ubus call luci.system-hub delete_diagnostic "{\"name\":\"$filename\"}" 2>&1)
if [ $? -ne 0 ]; then
echo -e "${RED}❌ FAILED${NC}: Could not delete archive"
echo "$delete"
rm -f "$archive_path"
exit 1
fi
delete_success=$(echo "$delete" | jsonfilter -e '@.success')
if [ "$delete_success" != "true" ]; then
echo -e "${RED}❌ FAILED${NC}: Delete reported failure"
rm -f "$archive_path"
exit 1
fi
echo -e "${GREEN}✅ SUCCESS${NC}: Archive deleted"
echo ""
# Step 9: Verify deletion
echo -e "${YELLOW}STEP 9:${NC} Verifying archive was deleted"
echo "---------------------------------------"
if [ -f "$archive_path" ]; then
echo -e "${RED}❌ FAILED${NC}: Archive file still exists after deletion"
rm -f "$archive_path"
exit 1
fi
echo -e "${GREEN}✅ SUCCESS${NC}: Archive file removed from filesystem"
echo ""
# Final summary
echo "========================================"
echo -e "${GREEN}✅ ALL WORKFLOW STEPS PASSED${NC}"
echo "========================================"
echo "Successfully tested complete diagnostic workflow:"
echo " 1. List profiles"
echo " 2. Get specific profile"
echo " 3. Collect diagnostics with profile"
echo " 4. Verify archive creation"
echo " 5. Verify profile name in filename"
echo " 6. List diagnostics"
echo " 7. Download archive (RPC)"
echo " 8. Delete archive"
echo " 9. Verify deletion"
echo ""
exit 0