#!/bin/bash # # Volt Platform - Integration Tests # set -euo pipefail SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" PROJECT_DIR="$(dirname "$SCRIPT_DIR")" VOLT="$PROJECT_DIR/build/volt" # Colors RED='\033[0;31m' GREEN='\033[0;32m' YELLOW='\033[1;33m' NC='\033[0m' pass() { echo -e "${GREEN}✓${NC} $1"; } fail() { echo -e "${RED}✗${NC} $1"; exit 1; } skip() { echo -e "${YELLOW}○${NC} $1 (skipped)"; } # Test counter TESTS_PASSED=0 TESTS_FAILED=0 run_test() { local name="$1" shift if "$@" >/dev/null 2>&1; then pass "$name" ((TESTS_PASSED++)) else fail "$name" ((TESTS_FAILED++)) fi } # Check if binary exists if [[ ! -x "$VOLT" ]]; then echo "Building volt first..." cd "$PROJECT_DIR" make build fi echo "================================" echo "Volt Platform Integration Tests" echo "================================" echo "" # Test 1: Binary runs echo "=== CLI Tests ===" run_test "volt --help" $VOLT --help run_test "volt vm --help" $VOLT vm --help run_test "volt desktop --help" $VOLT desktop --help run_test "volt k8s --help" $VOLT k8s --help # Test 2: VM commands (need sudo for full test) echo "" echo "=== VM Tests (sudo required) ===" if [[ $EUID -ne 0 ]]; then skip "VM creation (requires root)" skip "VM listing (requires root)" skip "VM destruction (requires root)" else # Create test VM TEST_VM="volt-test-$$" run_test "Create VM" $VOLT vm create "$TEST_VM" --image volt/server run_test "List VMs" $VOLT vm list run_test "VM directory exists" test -d "/var/lib/volt/vms/$TEST_VM" run_test "SystemD unit created" test -f "/etc/systemd/system/volt-vm@${TEST_VM}.service" # Cleanup run_test "Destroy VM" $VOLT vm destroy "$TEST_VM" run_test "VM directory removed" test ! -d "/var/lib/volt/vms/$TEST_VM" fi # Test 3: Desktop commands echo "" echo "=== Desktop Tests ===" run_test "ODE profiles defined" grep -q "office" "$PROJECT_DIR/pkg/ode/ode.go" run_test "Desktop command exists" $VOLT desktop --help # Test 4: K8s commands echo "" echo "=== Kubernetes Tests ===" run_test "K8s node --help" $VOLT k8s node --help run_test "K8s status" $VOLT k8s status # Test 5: Configuration files echo "" echo "=== Config Tests ===" run_test "Server image config" test -f "$PROJECT_DIR/configs/images/server.yaml" run_test "Desktop image config" test -f "$PROJECT_DIR/configs/images/desktop-productivity.yaml" run_test "Edge image config" test -f "$PROJECT_DIR/configs/images/edge.yaml" run_test "K8s node config" test -f "$PROJECT_DIR/configs/images/k8s-node.yaml" run_test "Server kernel config" test -f "$PROJECT_DIR/configs/kernels/kernel-server.config" run_test "Desktop kernel config" test -f "$PROJECT_DIR/configs/kernels/kernel-desktop.config" run_test "Seccomp profile" test -f "$PROJECT_DIR/configs/seccomp/server.json" # Test 6: Build scripts echo "" echo "=== Build Script Tests ===" run_test "build-kernels.sh exists" test -x "$PROJECT_DIR/scripts/build-kernels.sh" run_test "build-images.sh exists" test -x "$PROJECT_DIR/scripts/build-images.sh" run_test "install.sh exists" test -x "$PROJECT_DIR/scripts/install.sh" # Summary echo "" echo "================================" echo "Test Summary" echo "================================" echo -e "Passed: ${GREEN}$TESTS_PASSED${NC}" echo -e "Failed: ${RED}$TESTS_FAILED${NC}" echo "" if [[ $TESTS_FAILED -gt 0 ]]; then exit 1 fi echo -e "${GREEN}All tests passed!${NC}"