- Add README.md with project overview, features, installation, and usage - Document current Phase 3 completion status - Include architecture diagrams and security information - Add roadmap for Phase 4-5 - Update status.md to reflect current codebase state
191 lines
5.0 KiB
Bash
Executable File
191 lines
5.0 KiB
Bash
Executable File
#!/bin/bash
|
|
# Phase 1 Test Suite Runner
|
|
#
|
|
# Runs all Phase 1 tests and verifies deliverables
|
|
|
|
set -e
|
|
|
|
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
PROJECT_ROOT="$(dirname "$SCRIPT_DIR")"
|
|
cd "$PROJECT_ROOT"
|
|
|
|
echo "=========================================="
|
|
echo "Linux Hello - Phase 1 Test Suite"
|
|
echo "=========================================="
|
|
echo ""
|
|
|
|
# Colors for output
|
|
RED='\033[0;31m'
|
|
GREEN='\033[0;32m'
|
|
YELLOW='\033[1;33m'
|
|
NC='\033[0m' # No Color
|
|
|
|
PASSED=0
|
|
FAILED=0
|
|
SKIPPED=0
|
|
|
|
test_passed() {
|
|
echo -e "${GREEN}✓${NC} $1"
|
|
((PASSED++))
|
|
}
|
|
|
|
test_failed() {
|
|
echo -e "${RED}✗${NC} $1"
|
|
((FAILED++))
|
|
}
|
|
|
|
test_skipped() {
|
|
echo -e "${YELLOW}⊘${NC} $1"
|
|
((SKIPPED++))
|
|
}
|
|
|
|
# Check if running on Linux
|
|
if [[ "$OSTYPE" != "linux-gnu"* ]]; then
|
|
echo "Warning: Not running on Linux, some tests will use mocks"
|
|
fi
|
|
|
|
echo "Phase 1 Deliverables Checklist:"
|
|
echo "-------------------------------"
|
|
|
|
# 1. Project scaffolding
|
|
echo -n "Checking project scaffolding... "
|
|
if [ -f "Cargo.toml" ] && [ -f "linux-hello-daemon/Cargo.toml" ] && [ -f "linux-hello-cli/Cargo.toml" ] && [ -f "pam-module/Makefile" ]; then
|
|
test_passed "Project scaffolding"
|
|
else
|
|
test_failed "Project scaffolding (missing files)"
|
|
fi
|
|
|
|
# 2. Build check
|
|
echo -n "Building project... "
|
|
if cargo build --quiet 2>/dev/null; then
|
|
test_passed "Project builds successfully"
|
|
else
|
|
test_failed "Project build failed"
|
|
echo "Run 'cargo build' to see errors"
|
|
fi
|
|
|
|
# 3. Unit tests
|
|
echo ""
|
|
echo "Running unit tests..."
|
|
if cargo test --lib --quiet 2>/dev/null; then
|
|
test_passed "Unit tests pass"
|
|
else
|
|
test_failed "Unit tests failed"
|
|
echo "Run 'cargo test --lib' to see details"
|
|
fi
|
|
|
|
# 4. Integration tests
|
|
echo ""
|
|
echo "Running integration tests..."
|
|
# Note: Integration tests are in tests/ directory and may require camera hardware
|
|
if cargo test --package linux-hello-tests --test detection_test --quiet 2>/dev/null; then
|
|
test_passed "Face detection integration tests pass"
|
|
else
|
|
test_failed "Face detection integration tests failed"
|
|
fi
|
|
|
|
if cargo test --package linux-hello-tests --test camera_test --quiet 2>/dev/null; then
|
|
test_passed "Camera integration tests pass (or skipped if no hardware)"
|
|
else
|
|
# Camera tests may fail if no camera hardware - that's OK
|
|
test_skipped "Camera integration tests (may require camera hardware)"
|
|
echo "Run 'cargo test --package linux-hello-tests --test camera_test' to test with camera"
|
|
fi
|
|
|
|
if cargo test --package linux-hello-tests --test cli_test --quiet 2>/dev/null; then
|
|
test_passed "CLI integration tests pass"
|
|
else
|
|
test_skipped "CLI integration tests (may have issues, check manually)"
|
|
fi
|
|
|
|
# 5. PAM module compilation
|
|
echo ""
|
|
echo "Checking PAM module..."
|
|
cd pam-module
|
|
if make clean && make 2>/dev/null; then
|
|
cd ..
|
|
test_passed "PAM module compiles"
|
|
else
|
|
cd ..
|
|
test_failed "PAM module compilation failed"
|
|
fi
|
|
|
|
# 6. Camera enumeration
|
|
echo ""
|
|
echo "Testing camera enumeration..."
|
|
if cargo run --bin linux-hello -- status --camera 2>/dev/null | grep -q "Camera:"; then
|
|
test_passed "Camera enumeration works"
|
|
else
|
|
test_skipped "Camera enumeration (no cameras or requires hardware)"
|
|
fi
|
|
|
|
# 7. CLI commands
|
|
echo ""
|
|
echo "Testing CLI commands..."
|
|
|
|
# Config command
|
|
if cargo run --bin linux-hello -- config 2>/dev/null | grep -q "general"; then
|
|
test_passed "CLI config command works"
|
|
else
|
|
test_failed "CLI config command failed"
|
|
fi
|
|
|
|
# Status command
|
|
if cargo run --bin linux-hello -- status 2>/dev/null >/dev/null; then
|
|
test_passed "CLI status command works"
|
|
else
|
|
test_failed "CLI status command failed"
|
|
fi
|
|
|
|
# 8. Frame capture (if camera available)
|
|
echo ""
|
|
echo "Testing frame capture..."
|
|
TEMP_DIR=$(mktemp -d)
|
|
if cargo run --bin linux-hello -- capture --output "$TEMP_DIR" --count 1 2>/dev/null; then
|
|
if [ "$(ls -A $TEMP_DIR 2>/dev/null)" ]; then
|
|
test_passed "Frame capture works"
|
|
else
|
|
test_skipped "Frame capture (no frames captured, may need camera)"
|
|
fi
|
|
else
|
|
test_skipped "Frame capture (requires camera hardware)"
|
|
fi
|
|
rm -rf "$TEMP_DIR"
|
|
|
|
# 9. Face detection
|
|
echo ""
|
|
echo "Testing face detection..."
|
|
if cargo test --test detection_test --quiet 2>/dev/null; then
|
|
test_passed "Face detection works"
|
|
else
|
|
test_failed "Face detection tests failed"
|
|
fi
|
|
|
|
# 10. IR emitter control
|
|
echo ""
|
|
echo "Testing IR emitter control..."
|
|
if cargo test --test camera_test ir_emitter --quiet 2>/dev/null; then
|
|
test_passed "IR emitter control works"
|
|
else
|
|
test_skipped "IR emitter control (may require specific hardware)"
|
|
fi
|
|
|
|
echo ""
|
|
echo "=========================================="
|
|
echo "Test Summary"
|
|
echo "=========================================="
|
|
echo -e "${GREEN}Passed:${NC} $PASSED"
|
|
echo -e "${RED}Failed:${NC} $FAILED"
|
|
echo -e "${YELLOW}Skipped:${NC} $SKIPPED"
|
|
echo ""
|
|
|
|
if [ $FAILED -eq 0 ]; then
|
|
echo -e "${GREEN}Phase 1 tests completed successfully!${NC}"
|
|
echo ""
|
|
echo "Phase 1 Milestone: Capture IR frames and detect faces ✓"
|
|
exit 0
|
|
else
|
|
echo -e "${RED}Some tests failed. Please review and fix issues.${NC}"
|
|
exit 1
|
|
fi
|