- Rename all modules: clawdie-shell-{func}.sh → shell-{func}.sh
- Update references in firstboot.sh and installerconfig
- Update self-detection case statements in each module
- Reduces naming redundancy and improves clarity
Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com>
225 lines
6.2 KiB
Bash
Executable file
225 lines
6.2 KiB
Bash
Executable file
#!/bin/sh
|
|
# Unit tests for clawdie-shell-pkg.sh
|
|
# Run: sh test-clawdie-shell-pkg.sh
|
|
# POSIX-compliant (no trap ERR on FreeBSD)
|
|
|
|
set -u
|
|
|
|
TESTDIR="/tmp/clawdie-test-pkg-$$"
|
|
mkdir -p "$TESTDIR"
|
|
cd "$TESTDIR"
|
|
|
|
# Setup test environment
|
|
mkdir -p "$TESTDIR/etc/pkg/repos"
|
|
mkdir -p "$TESTDIR/var/cache/pkg/bastille"
|
|
mkdir -p "$TESTDIR/mnt/media/packages"
|
|
mkdir -p "$TESTDIR/var/log"
|
|
|
|
# Create sample USB packages
|
|
touch "$TESTDIR/mnt/media/packages/node24-24.0.0.pkg"
|
|
touch "$TESTDIR/mnt/media/packages/bash-5.2.26.pkg"
|
|
touch "$TESTDIR/mnt/media/packages/git-2.45.0.pkg"
|
|
|
|
# Environment overrides
|
|
export PKG_CONF_DIR="$TESTDIR/etc/pkg/repos"
|
|
export FREEBSD_REPO_CONF="$PKG_CONF_DIR/FreeBSD.conf"
|
|
export CLAWDIE_USB_REPO_CONF="$PKG_CONF_DIR/Clawdie-USB.conf"
|
|
export USB_MOUNT_POINT="$TESTDIR/mnt/media"
|
|
export USB_PKG_PATH="$TESTDIR/mnt/media/packages"
|
|
export BASTILLE_PKG_CACHE="$TESTDIR/var/cache/pkg/bastille"
|
|
export LOG_FILE="$TESTDIR/var/log/clawdie-pkg-test.log"
|
|
export PROGRESS_FILE="$TESTDIR/var/log/clawdie-pkg-progress-test"
|
|
|
|
# Initialize log/progress files
|
|
touch "$LOG_FILE"
|
|
touch "$PROGRESS_FILE"
|
|
|
|
# Source the module (now all paths are overridden)
|
|
. "$(dirname "$0")/clawdie-shell-pkg.sh"
|
|
|
|
# Color codes
|
|
RED='\033[0;31m'
|
|
GREEN='\033[0;32m'
|
|
NC='\033[0m'
|
|
|
|
# Test counter
|
|
TESTS_PASSED=0
|
|
TESTS_FAILED=0
|
|
|
|
# Helper: assert
|
|
assert_eq() {
|
|
local name="$1"
|
|
local expected="$2"
|
|
local actual="$3"
|
|
|
|
if [ "$expected" = "$actual" ]; then
|
|
echo "${GREEN}✓${NC} $name"
|
|
TESTS_PASSED=$((TESTS_PASSED + 1))
|
|
else
|
|
echo "${RED}✗${NC} $name"
|
|
echo " Expected: $expected"
|
|
echo " Actual: $actual"
|
|
TESTS_FAILED=$((TESTS_FAILED + 1))
|
|
fi
|
|
}
|
|
|
|
assert_file_exists() {
|
|
local name="$1"
|
|
local file="$2"
|
|
|
|
if [ -f "$file" ]; then
|
|
echo "${GREEN}✓${NC} $name"
|
|
TESTS_PASSED=$((TESTS_PASSED + 1))
|
|
else
|
|
echo "${RED}✗${NC} $name (file not found: $file)"
|
|
TESTS_FAILED=$((TESTS_FAILED + 1))
|
|
fi
|
|
}
|
|
|
|
assert_file_contains() {
|
|
local name="$1"
|
|
local file="$2"
|
|
local pattern="$3"
|
|
|
|
if [ -f "$file" ] && grep -q "$pattern" "$file"; then
|
|
echo "${GREEN}✓${NC} $name"
|
|
TESTS_PASSED=$((TESTS_PASSED + 1))
|
|
else
|
|
echo "${RED}✗${NC} $name"
|
|
echo " File: $file"
|
|
echo " Pattern: $pattern"
|
|
TESTS_FAILED=$((TESTS_FAILED + 1))
|
|
fi
|
|
}
|
|
|
|
# ============================================================================
|
|
# TEST SUITE
|
|
# ============================================================================
|
|
|
|
echo "=== Clawdie Shell Package Module Tests ==="
|
|
echo ""
|
|
|
|
# Test 1: ABI Detection
|
|
echo "Test Group: ABI Detection"
|
|
abi=$(clawdie_shell_pkg_detect_abi)
|
|
if echo "$abi" | grep -q "FreeBSD"; then
|
|
echo "${GREEN}✓${NC} ABI detection returns FreeBSD format"
|
|
TESTS_PASSED=$((TESTS_PASSED + 1))
|
|
else
|
|
echo "${RED}✗${NC} ABI detection failed (got: $abi)"
|
|
TESTS_FAILED=$((TESTS_FAILED + 1))
|
|
fi
|
|
echo ""
|
|
|
|
# Test 2: FreeBSD.conf Creation
|
|
echo "Test Group: FreeBSD.conf Creation"
|
|
abi=$(clawdie_shell_pkg_detect_abi)
|
|
clawdie_shell_pkg_write_freebsd_conf "$abi"
|
|
|
|
assert_file_exists "FreeBSD.conf created" "$FREEBSD_REPO_CONF"
|
|
assert_file_contains "FreeBSD.conf has url" "$FREEBSD_REPO_CONF" "pkg.FreeBSD.org"
|
|
assert_file_contains "FreeBSD.conf has enabled" "$FREEBSD_REPO_CONF" "enabled: yes"
|
|
assert_file_contains "FreeBSD.conf has priority" "$FREEBSD_REPO_CONF" "priority: 10"
|
|
echo ""
|
|
|
|
# Test 3: Clawdie-USB.conf Creation
|
|
echo "Test Group: Clawdie-USB.conf Creation"
|
|
clawdie_shell_pkg_write_clawdie_usb_conf
|
|
|
|
assert_file_exists "Clawdie-USB.conf created" "$CLAWDIE_USB_REPO_CONF"
|
|
assert_file_contains "Clawdie-USB.conf has file:// URL" "$CLAWDIE_USB_REPO_CONF" "file://"
|
|
assert_file_contains "Clawdie-USB.conf has enabled" "$CLAWDIE_USB_REPO_CONF" "enabled: yes"
|
|
assert_file_contains "Clawdie-USB.conf has high priority" "$CLAWDIE_USB_REPO_CONF" "priority: 100"
|
|
echo ""
|
|
|
|
# Test 4: Cache Seeding
|
|
echo "Test Group: Cache Seeding"
|
|
clawdie_shell_pkg_seed_cache
|
|
|
|
# Check if packages were copied
|
|
if [ -f "$BASTILLE_PKG_CACHE/node24-24.0.0.pkg" ]; then
|
|
echo "${GREEN}✓${NC} Packages seeded to cache"
|
|
TESTS_PASSED=$((TESTS_PASSED + 1))
|
|
else
|
|
echo "${RED}✗${NC} Cache seeding failed"
|
|
TESTS_FAILED=$((TESTS_FAILED + 1))
|
|
fi
|
|
|
|
cached_count=$(find "$BASTILLE_PKG_CACHE" -name "*.pkg" -type f 2>/dev/null | wc -l)
|
|
if [ "$cached_count" -ge 3 ]; then
|
|
echo "${GREEN}✓${NC} At least 3 packages cached ($cached_count found)"
|
|
TESTS_PASSED=$((TESTS_PASSED + 1))
|
|
else
|
|
echo "${RED}✗${NC} Too few packages cached ($cached_count, expected 3+)"
|
|
TESTS_FAILED=$((TESTS_FAILED + 1))
|
|
fi
|
|
echo ""
|
|
|
|
# Test 5: Validation
|
|
echo "Test Group: Validation"
|
|
if clawdie_shell_pkg_validate 2>/dev/null; then
|
|
echo "${GREEN}✓${NC} Validation passes"
|
|
TESTS_PASSED=$((TESTS_PASSED + 1))
|
|
else
|
|
echo "${RED}✗${NC} Validation failed"
|
|
TESTS_FAILED=$((TESTS_FAILED + 1))
|
|
fi
|
|
echo ""
|
|
|
|
# Test 6: Full Setup Flow
|
|
echo "Test Group: Full Setup Flow"
|
|
|
|
# Reset test dirs
|
|
rm -rf "$TESTDIR/etc/pkg/repos"/*
|
|
rm -rf "$TESTDIR/var/cache/pkg/bastille"/*
|
|
mkdir -p "$TESTDIR/var/cache/pkg/bastille"
|
|
|
|
# Run full setup
|
|
clawdie_shell_pkg_setup 2>/dev/null
|
|
|
|
assert_file_exists "Setup creates FreeBSD.conf" "$FREEBSD_REPO_CONF"
|
|
assert_file_exists "Setup creates Clawdie-USB.conf" "$CLAWDIE_USB_REPO_CONF"
|
|
|
|
if grep -q "\[PKG\] COMPLETE" "$PROGRESS_FILE"; then
|
|
echo "${GREEN}✓${NC} Progress checkpoint logged"
|
|
TESTS_PASSED=$((TESTS_PASSED + 1))
|
|
else
|
|
echo "${RED}✗${NC} Progress checkpoint not found"
|
|
TESTS_FAILED=$((TESTS_FAILED + 1))
|
|
fi
|
|
echo ""
|
|
|
|
# Test 7: Error Handling - Missing USB
|
|
echo "Test Group: Error Handling"
|
|
|
|
# Create env where USB path doesn't exist
|
|
export USB_PKG_PATH="/nonexistent/path"
|
|
if clawdie_shell_pkg_seed_cache 2>/dev/null; then
|
|
# Should succeed but skip (not fail)
|
|
echo "${GREEN}✓${NC} Gracefully handles missing USB path"
|
|
TESTS_PASSED=$((TESTS_PASSED + 1))
|
|
else
|
|
echo "${RED}✗${NC} Should not fail on missing USB path"
|
|
TESTS_FAILED=$((TESTS_FAILED + 1))
|
|
fi
|
|
echo ""
|
|
|
|
# ============================================================================
|
|
# SUMMARY
|
|
# ============================================================================
|
|
|
|
echo "=== Test Results ==="
|
|
echo "${GREEN}Passed: $TESTS_PASSED${NC}"
|
|
echo "${RED}Failed: $TESTS_FAILED${NC}"
|
|
echo ""
|
|
|
|
# Cleanup
|
|
rm -rf "$TESTDIR"
|
|
|
|
if [ $TESTS_FAILED -eq 0 ]; then
|
|
echo "${GREEN}✓ All tests passed!${NC}"
|
|
exit 0
|
|
else
|
|
echo "${RED}✗ Some tests failed${NC}"
|
|
exit 1
|
|
fi
|