225 lines
No EOL
5.9 KiB
Bash
Executable file
225 lines
No EOL
5.9 KiB
Bash
Executable file
#!/bin/bash
|
|
# Safe Testing Script for Debian Atomic Terminal Installer
|
|
# This script ONLY uses containers and never touches the host system
|
|
|
|
set -e
|
|
|
|
# Colors for output
|
|
RED='\033[0;31m'
|
|
GREEN='\033[0;32m'
|
|
YELLOW='\033[1;33m'
|
|
BLUE='\033[0;34m'
|
|
NC='\033[0m' # No Color
|
|
|
|
log() {
|
|
echo -e "${GREEN}[SAFE-TEST]${NC} $1"
|
|
}
|
|
|
|
warn() {
|
|
echo -e "${YELLOW}[WARNING]${NC} $1"
|
|
}
|
|
|
|
error() {
|
|
echo -e "${RED}[ERROR]${NC} $1"
|
|
exit 1
|
|
}
|
|
|
|
# Test 1: Container build
|
|
test_container_build() {
|
|
log "Testing container build..."
|
|
|
|
if just build; then
|
|
log "✅ Container built successfully"
|
|
return 0
|
|
else
|
|
error "❌ Container build failed"
|
|
return 1
|
|
fi
|
|
}
|
|
|
|
# Test 2: Container functionality (safe)
|
|
test_container_functionality() {
|
|
log "Testing container functionality..."
|
|
|
|
# Test if container can start
|
|
if podman run --rm --entrypoint /bin/bash debian-atomic-tui-installer:latest -c "echo 'Container is working'"; then
|
|
log "✅ Container can start and run commands"
|
|
else
|
|
error "❌ Container cannot start"
|
|
fi
|
|
|
|
# Test if install script exists
|
|
if podman run --rm --entrypoint /bin/bash debian-atomic-tui-installer:latest -c "test -f /usr/local/bin/install-debian-atomic"; then
|
|
log "✅ Install script exists in container"
|
|
else
|
|
error "❌ Install script not found in container"
|
|
fi
|
|
|
|
# Test if welcome script exists
|
|
if podman run --rm --entrypoint /bin/bash debian-atomic-tui-installer:latest -c "test -f /usr/local/bin/welcome"; then
|
|
log "✅ Welcome script exists in container"
|
|
else
|
|
error "❌ Welcome script not found in container"
|
|
fi
|
|
|
|
# Test if help script exists
|
|
if podman run --rm --entrypoint /bin/bash debian-atomic-tui-installer:latest -c "test -f /usr/local/bin/help"; then
|
|
log "✅ Help script exists in container"
|
|
else
|
|
error "❌ Help script not found in container"
|
|
fi
|
|
}
|
|
|
|
# Test 3: Script syntax validation
|
|
test_script_syntax() {
|
|
log "Testing script syntax..."
|
|
|
|
# Test installation script syntax
|
|
if bash -n scripts/install.sh; then
|
|
log "✅ Installation script syntax is valid"
|
|
else
|
|
error "❌ Installation script has syntax errors"
|
|
fi
|
|
|
|
# Test test script syntax
|
|
if bash -n scripts/test-container.sh; then
|
|
log "✅ Test script syntax is valid"
|
|
else
|
|
error "❌ Test script has syntax errors"
|
|
fi
|
|
}
|
|
|
|
# Test 4: Configuration files
|
|
test_config_files() {
|
|
log "Testing configuration files..."
|
|
|
|
if [ -f config/installer.conf ]; then
|
|
log "✅ Configuration file exists"
|
|
else
|
|
error "❌ Configuration file not found"
|
|
fi
|
|
|
|
if [ -f README.md ]; then
|
|
log "✅ README exists"
|
|
else
|
|
error "❌ README not found"
|
|
fi
|
|
|
|
if [ -f QUICK_START.md ]; then
|
|
log "✅ Quick start guide exists"
|
|
else
|
|
error "❌ Quick start guide not found"
|
|
fi
|
|
}
|
|
|
|
# Test 5: Justfile commands
|
|
test_justfile() {
|
|
log "Testing justfile commands..."
|
|
|
|
# Test help command
|
|
if just help > /dev/null 2>&1; then
|
|
log "✅ Help command works"
|
|
else
|
|
warn "⚠️ Help command failed"
|
|
fi
|
|
|
|
# Test status command
|
|
if just status > /dev/null 2>&1; then
|
|
log "✅ Status command works"
|
|
else
|
|
warn "⚠️ Status command failed"
|
|
fi
|
|
}
|
|
|
|
# Test 6: Container filesystem extraction (safe)
|
|
test_filesystem_extraction() {
|
|
log "Testing filesystem extraction..."
|
|
|
|
# Create a temporary container to extract filesystem
|
|
local temp_container="temp-extract-$(date +%s)"
|
|
|
|
# Create container
|
|
podman create --name "$temp_container" debian-atomic-tui-installer:latest
|
|
|
|
# Extract filesystem to build directory
|
|
if podman export "$temp_container" | tar -x -C build/ 2>/dev/null; then
|
|
log "✅ Filesystem extraction works"
|
|
|
|
# Check for key files
|
|
if [ -f build/boot/vmlinuz-* ]; then
|
|
log "✅ Kernel found in extracted filesystem"
|
|
else
|
|
warn "⚠️ Kernel not found in extracted filesystem"
|
|
fi
|
|
|
|
if [ -f build/boot/initrd.img-* ]; then
|
|
log "✅ Initrd found in extracted filesystem"
|
|
else
|
|
warn "⚠️ Initrd not found in extracted filesystem"
|
|
fi
|
|
|
|
if [ -f build/usr/local/bin/install-debian-atomic ]; then
|
|
log "✅ Install script found in extracted filesystem"
|
|
else
|
|
warn "⚠️ Install script not found in extracted filesystem"
|
|
fi
|
|
else
|
|
error "❌ Filesystem extraction failed"
|
|
fi
|
|
|
|
# Clean up
|
|
podman rm "$temp_container" > /dev/null 2>&1 || true
|
|
}
|
|
|
|
# Test 7: Container cleanup
|
|
test_container_cleanup() {
|
|
log "Testing container cleanup..."
|
|
|
|
# Remove any existing test containers
|
|
podman rm -f test-tui-installer 2>/dev/null || true
|
|
|
|
log "✅ Container cleanup completed"
|
|
}
|
|
|
|
# Run all safe tests
|
|
run_safe_tests() {
|
|
log "Starting safe container-based tests..."
|
|
echo ""
|
|
|
|
test_script_syntax
|
|
test_config_files
|
|
test_justfile
|
|
test_container_build
|
|
test_container_functionality
|
|
test_filesystem_extraction
|
|
test_container_cleanup
|
|
|
|
log "All safe tests completed successfully!"
|
|
}
|
|
|
|
# Main function
|
|
main() {
|
|
echo "Debian Atomic Terminal Installer - Safe Test Suite"
|
|
echo "================================================"
|
|
echo ""
|
|
echo "This test suite ONLY uses containers and never touches the host system."
|
|
echo ""
|
|
|
|
run_safe_tests
|
|
|
|
echo ""
|
|
echo "✅ All safe tests passed!"
|
|
echo ""
|
|
echo "The terminal installer is ready for use."
|
|
echo ""
|
|
echo "Next steps:"
|
|
echo "1. Install genisoimage: sudo dnf install genisoimage"
|
|
echo "2. Create ISO: just create-iso"
|
|
echo "3. Test ISO: just test-iso"
|
|
echo "4. Use in VM or on hardware"
|
|
echo ""
|
|
echo "Note: All testing is done safely in containers only."
|
|
}
|
|
|
|
# Run main function
|
|
main "$@" |