Some checks failed
particle-os CI / Test particle-os (push) Failing after 1s
particle-os CI / Integration Test (push) Has been skipped
particle-os CI / Security & Quality (push) Failing after 1s
Test particle-os Basic Functionality / test-basic (push) Failing after 1s
particle-os CI / Build and Release (push) Has been skipped
212 lines
5.7 KiB
Bash
Executable file
212 lines
5.7 KiB
Bash
Executable file
#!/bin/bash
|
||
|
||
# Test script for basic particle-os functionality
|
||
# Focuses on core features without complex CI/CD or apt-cacher-ng
|
||
|
||
set -euo pipefail
|
||
|
||
echo "🧪 Testing basic particle-os functionality"
|
||
echo "=========================================="
|
||
|
||
# Configuration
|
||
RECIPE_DIR="recipes"
|
||
BUILD_DIR="bib"
|
||
|
||
# Colors for output
|
||
RED='\033[0;31m'
|
||
GREEN='\033[0;32m'
|
||
YELLOW='\033[1;33m'
|
||
BLUE='\033[0;34m'
|
||
NC='\033[0m' # No Color
|
||
|
||
# Helper functions
|
||
log_info() {
|
||
echo -e "${BLUE}ℹ️ $1${NC}"
|
||
}
|
||
|
||
log_success() {
|
||
echo -e "${GREEN}✅ $1${NC}"
|
||
}
|
||
|
||
log_warning() {
|
||
echo -e "${YELLOW}⚠️ $1${NC}"
|
||
}
|
||
|
||
log_error() {
|
||
echo -e "${RED}❌ $1${NC}"
|
||
}
|
||
|
||
# Test 1: Check if particle-os is built
|
||
test_particle_os_build() {
|
||
log_info "Testing particle-os build..."
|
||
|
||
if [ ! -f "$BUILD_DIR/particle-os" ]; then
|
||
log_warning "particle-os not built, building now..."
|
||
cd "$BUILD_DIR"
|
||
if go build -o particle-os cmd/builder/main.go; then
|
||
log_success "particle-os built successfully"
|
||
else
|
||
log_error "Failed to build particle-os"
|
||
return 1
|
||
fi
|
||
cd ..
|
||
else
|
||
log_success "particle-os already built"
|
||
fi
|
||
}
|
||
|
||
# Test 2: Test basic CLI functionality
|
||
test_cli_basic() {
|
||
log_info "Testing basic CLI functionality..."
|
||
|
||
cd "$BUILD_DIR"
|
||
|
||
# Test help
|
||
if ./particle-os --help > /dev/null 2>&1; then
|
||
log_success "Help command works"
|
||
else
|
||
log_error "Help command failed"
|
||
return 1
|
||
fi
|
||
|
||
# Test version
|
||
if ./particle-os version > /dev/null 2>&1; then
|
||
log_success "Version command works"
|
||
else
|
||
log_error "Version command failed"
|
||
return 1
|
||
fi
|
||
|
||
# Test list
|
||
if ./particle-os list > /dev/null 2>&1; then
|
||
log_success "List command works"
|
||
else
|
||
log_error "List command failed"
|
||
return 1
|
||
fi
|
||
|
||
cd ..
|
||
}
|
||
|
||
# Test 3: Test recipe validation
|
||
test_recipe_validation() {
|
||
log_info "Testing recipe validation..."
|
||
|
||
local recipes=("minimal-test" "simple-server" "debian-test")
|
||
local valid_count=0
|
||
|
||
for recipe in "${recipes[@]}"; do
|
||
if [ -f "$RECIPE_DIR/$recipe.yml" ]; then
|
||
if "$BUILD_DIR/particle-os" validate "$RECIPE_DIR/$recipe.yml" > /dev/null 2>&1; then
|
||
log_success "$recipe.yml is valid"
|
||
((valid_count++))
|
||
else
|
||
log_error "$recipe.yml validation failed"
|
||
fi
|
||
else
|
||
log_warning "$recipe.yml not found"
|
||
fi
|
||
done
|
||
|
||
log_info "Valid recipes: $valid_count/${#recipes[@]}"
|
||
}
|
||
|
||
# Test 4: Test container inspection
|
||
test_container_inspection() {
|
||
log_info "Testing container inspection..."
|
||
|
||
if "$BUILD_DIR/particle-os" container debian:trixie-slim > /dev/null 2>&1; then
|
||
log_success "Container inspection works"
|
||
else
|
||
log_warning "Container inspection failed (may need container runtime)"
|
||
fi
|
||
}
|
||
|
||
# Test 5: Test minimal recipe build (dry run if possible)
|
||
test_minimal_build() {
|
||
log_info "Testing minimal recipe build..."
|
||
|
||
if [ -f "$RECIPE_DIR/minimal-test.yml" ]; then
|
||
log_info "Attempting to build minimal-test recipe..."
|
||
|
||
# Check if we can run with sudo (CI environment)
|
||
if [ "$EUID" -eq 0 ]; then
|
||
log_info "Running as root, attempting actual build..."
|
||
cd "$BUILD_DIR"
|
||
if ./particle-os build --verbose ../recipes/minimal-test.yml; then
|
||
log_success "Minimal recipe build completed"
|
||
else
|
||
log_warning "Minimal recipe build failed (expected during development)"
|
||
fi
|
||
cd ..
|
||
else
|
||
log_info "Not running as root, testing recipe validation only..."
|
||
if "$BUILD_DIR/particle-os" validate "$RECIPE_DIR/minimal-test.yml" > /dev/null 2>&1; then
|
||
log_success "Minimal recipe validation passed"
|
||
else
|
||
log_error "Minimal recipe validation failed"
|
||
fi
|
||
fi
|
||
else
|
||
log_warning "minimal-test.yml not found, skipping build test"
|
||
fi
|
||
}
|
||
|
||
# Test 6: Test environment variable handling (apt-cacher-ng optional)
|
||
test_environment_variables() {
|
||
log_info "Testing environment variable handling..."
|
||
|
||
# Test APT_CACHER_NG_URL environment variable (optional)
|
||
export APT_CACHER_NG_URL="http://test-cache:3142"
|
||
|
||
if [ "$APT_CACHER_NG_URL" = "http://test-cache:3142" ]; then
|
||
log_success "Environment variable APT_CACHER_NG_URL set correctly"
|
||
else
|
||
log_error "Failed to set APT_CACHER_NG_URL environment variable"
|
||
fi
|
||
|
||
# Reset to empty (apt-cacher-ng is optional)
|
||
unset APT_CACHER_NG_URL
|
||
log_info "apt-cacher-ng is optional - system works without it"
|
||
}
|
||
|
||
# Main test execution
|
||
main() {
|
||
echo
|
||
log_info "Starting basic functionality tests..."
|
||
echo
|
||
|
||
# Run all tests
|
||
test_particle_os_build
|
||
echo
|
||
|
||
test_cli_basic
|
||
echo
|
||
|
||
test_recipe_validation
|
||
echo
|
||
|
||
test_container_inspection
|
||
echo
|
||
|
||
test_minimal_build
|
||
echo
|
||
|
||
test_environment_variables
|
||
echo
|
||
|
||
# Summary
|
||
echo "=========================================="
|
||
log_success "Basic functionality tests completed!"
|
||
echo
|
||
log_info "Next steps:"
|
||
echo "1. Test basic CLI functionality: ./bib/particle-os --help"
|
||
echo "2. Validate recipes: ./bib/particle-os validate recipes/minimal-test.yml"
|
||
echo "3. Test container inspection: ./bib/particle-os container debian:trixie-slim"
|
||
echo "4. When ready, test building: sudo ./bib/particle-os build recipes/minimal-test.yml"
|
||
echo
|
||
log_info "Focus on getting core functionality working before adding complex features!"
|
||
}
|
||
|
||
# Run main function
|
||
main "$@"
|