secubox-openwrt/luci-app-system-hub/tests/README.md

398 lines
8.8 KiB
Markdown

# System Hub Testing Guide
Comprehensive testing suite for the diagnostic profiles feature in luci-app-system-hub.
## Test Structure
```
tests/
├── README.md # This file
├── test-profiles.sh # Unit tests (shell-based)
├── MANUAL_TESTS.md # Manual testing checklist
├── integration/
│ └── test-diagnostic-workflow.sh # End-to-end workflow test
└── frontend/
└── test-diagnostics-ui.js # Browser console tests
```
## Quick Start
### Run All Tests
```bash
# On the router (via SSH)
cd /usr/share/system-hub/tests # or wherever tests are installed
./test-profiles.sh
./integration/test-diagnostic-workflow.sh
```
### Run Individual Test Suites
See detailed instructions below for each test type.
---
## 1. Unit Tests
**File**: `test-profiles.sh`
**Type**: Shell script
**Execution**: On the router via SSH
**Duration**: ~30 seconds
### What It Tests
- Profile listing (list_diagnostic_profiles RPC)
- Profile retrieval (get_diagnostic_profile RPC)
- Profile-based diagnostic collection
- Archive filename formatting
- Profile flag overrides
- All 5 profiles individually
### Running Unit Tests
```bash
# SSH to the router
ssh root@192.168.8.205
# Navigate to tests directory
cd /usr/share/system-hub/tests # adjust path if needed
# Run unit tests
./test-profiles.sh
```
### Expected Output
```
========================================
System Hub Diagnostic Profiles Unit Tests
========================================
Starting test run at Mon Dec 30 16:00:00 2025
TEST 1: list_diagnostic_profiles returns valid JSON
==================================================
✅ PASS: list_diagnostic_profiles returns valid JSON
TEST 2: At least 5 profiles available
======================================
✅ PASS: At least 5 profiles returned (found 5)
...
========================================
Test Results Summary
========================================
Passed: 15
Failed: 0
Total: 15
✅ All tests passed!
```
### Exit Codes
- `0`: All tests passed
- `1`: Some tests failed
---
## 2. Integration Tests
**File**: `integration/test-diagnostic-workflow.sh`
**Type**: Shell script
**Execution**: On the router via SSH
**Duration**: ~60 seconds
### What It Tests
Complete end-to-end workflow:
1. List available profiles
2. Select a specific profile
3. Collect diagnostics with profile
4. Verify archive creation
5. Verify profile name in filename
6. List diagnostics
7. Download archive (RPC)
8. Delete archive
9. Verify deletion
### Running Integration Tests
```bash
# SSH to the router
ssh root@192.168.8.205
# Navigate to integration tests
cd /usr/share/system-hub/tests/integration
# Run workflow test
./test-diagnostic-workflow.sh
```
### Expected Output
```
========================================
Diagnostic Workflow Integration Test
========================================
Testing complete workflow with performance-problems profile
STEP 1: Listing available profiles
---------------------------------------
✅ SUCCESS: Profiles listed
- network-issues
- performance-problems
- security-audit
- wifi-problems
- full-diagnostic
STEP 2: Selecting performance-problems profile
---------------------------------------
✅ SUCCESS: Profile retrieved
Name: performance-problems
Label: Problèmes Performance
Tests: disk,latency
...
========================================
✅ ALL WORKFLOW STEPS PASSED
========================================
```
---
## 3. Frontend Validation Tests
**File**: `frontend/test-diagnostics-ui.js`
**Type**: JavaScript (browser console)
**Execution**: In browser developer tools
**Duration**: ~5 seconds
### What It Tests
- Profile grid rendering
- Profile button attributes
- Profile selection highlighting
- Toggle switch updates
- Description box display
- All 5 profiles present in UI
### Running Frontend Tests
1. **Open LuCI** in your browser
2. **Navigate** to System → System Hub → Diagnostics
3. **Open Developer Tools** (F12)
4. **Switch to Console tab**
5. **Copy and paste** the entire contents of `test-diagnostics-ui.js`
6. **Run** the tests:
```javascript
runAllTests()
```
### Expected Output
```
========================================
Diagnostic Profiles Frontend Tests
========================================
Starting tests at 4:00:00 PM
📋 TEST 1: Profile grid renders
================================
✅ PASS: Profile grid element exists
✅ PASS: At least 5 profile buttons rendered (found 5, expected at least 5)
📋 TEST 2: Profile buttons have correct attributes
===================================================
✅ PASS: Profile button has data-profile attribute
✅ PASS: Profile button contains icon span
...
========================================
Test Results Summary
========================================
Passed: 12
Failed: 0
Total: 12
✅ All tests passed!
```
---
## 4. Manual Tests
**File**: `MANUAL_TESTS.md`
**Type**: Documented checklist
**Execution**: Manual testing in LuCI
**Duration**: ~30-45 minutes
### What It Tests
- Comprehensive user workflows
- Visual appearance and styling
- Error handling
- Edge cases
- Regression testing
### Running Manual Tests
1. **Open** `MANUAL_TESTS.md`
2. **Follow** each test case step-by-step
3. **Record** results in the document
4. **Sign off** at the end
### Test Cases Included
- Test Case 1: Profile Selector Display
- Test Case 2: Network Issues Profile
- Test Case 3: Performance Problems Profile
- Test Case 4: Security Audit Profile with Anonymization
- Test Case 5: WiFi Problems Profile
- Test Case 6: Full Diagnostic Profile
- Test Case 7: Profile Override
- Test Case 8: Profile Switching
- Test Case 9: Archive Download and Deletion
- Test Case 10: Multiple Profiles in Sequence
- Regression Tests (3 additional tests)
---
## Testing Checklist
Use this checklist to ensure complete test coverage:
- [ ] Unit tests run successfully
- [ ] Integration tests run successfully
- [ ] Frontend tests run successfully
- [ ] Manual test cases completed
- [ ] All test cases passed
- [ ] Edge cases tested
- [ ] Regression tests passed
- [ ] Documentation reviewed
---
## Continuous Integration
### Automated Testing
To run tests automatically on each deployment:
```bash
# Example CI script
#!/bin/bash
echo "Running System Hub Profile Tests..."
# Deploy to test router
./deploy.sh test-router
# Run tests via SSH
ssh root@test-router "cd /usr/share/system-hub/tests && ./test-profiles.sh"
TEST_RESULT=$?
ssh root@test-router "cd /usr/share/system-hub/tests/integration && ./test-diagnostic-workflow.sh"
INTEGRATION_RESULT=$?
# Check results
if [ $TEST_RESULT -eq 0 ] && [ $INTEGRATION_RESULT -eq 0 ]; then
echo "✅ All automated tests passed"
exit 0
else
echo "❌ Tests failed"
exit 1
fi
```
---
## Troubleshooting
### Unit Tests Failing
**Problem**: `ubus call` commands fail
**Solutions**:
- Verify rpcd is running: `/etc/init.d/rpcd status`
- Restart rpcd: `/etc/init.d/rpcd restart`
- Check ACL permissions are deployed
- Verify user has luci-app-system-hub ACL
### Integration Tests Failing
**Problem**: Archive creation fails
**Solutions**:
- Check `/tmp/system-hub/diagnostics/` directory exists
- Verify disk space: `df -h`
- Check system logs: `logread | grep system-hub`
### Frontend Tests Failing
**Problem**: Profile buttons not found
**Solutions**:
- Clear browser cache (Ctrl+Shift+R)
- Verify diagnostics.js is deployed
- Check browser console for JavaScript errors
- Ensure LuCI cache is cleared: `rm -rf /tmp/luci-*`
### Manual Tests Failing
**Problem**: UI doesn't match expected results
**Solutions**:
- Logout and login again (ACL refresh)
- Clear browser cache completely
- Verify all files deployed correctly
- Check browser compatibility (use latest Chrome/Firefox)
---
## Test Maintenance
### Adding New Tests
1. **Unit Tests**: Add new test functions to `test-profiles.sh`
2. **Integration Tests**: Create new script in `integration/`
3. **Frontend Tests**: Add new test functions to `test-diagnostics-ui.js`
4. **Manual Tests**: Add new test case to `MANUAL_TESTS.md`
### Updating Tests
When adding new profiles or features:
1. Update test expectations (profile count, names, etc.)
2. Add tests for new functionality
3. Run full test suite to ensure no regressions
4. Update this README if test procedures change
---
## Contributing
When contributing tests:
- Follow existing patterns and conventions
- Add comments explaining what is being tested
- Include both positive and negative test cases
- Update documentation
- Test on actual hardware before submitting
---
## Support
For questions about testing:
- Check test output for specific error messages
- Review router logs: `logread`
- Check RPC backend: `ubus call luci.system-hub list`
- Verify deployment: `opkg list-installed | grep system-hub`
---
## License
Same license as luci-app-system-hub (MIT or GPL-2.0).