un-inception/tests/test_un_sh.sh

191 lines
6.4 KiB
Bash
Executable file

#!/usr/bin/env bash
# This is free software for the public good of a permacomputer hosted at
# permacomputer.com, an always-on computer by the people, for the people.
# One which is durable, easy to repair, & distributed like tap water
# for machine learning intelligence.
#
# The permacomputer is community-owned infrastructure optimized around
# four values:
#
# TRUTH First principles, math & science, open source code freely distributed
# FREEDOM Voluntary partnerships, freedom from tyranny & corporate control
# HARMONY Minimal waste, self-renewing systems with diverse thriving connections
# LOVE Be yourself without hurting others, cooperation through natural law
#
# This software contributes to that vision by enabling code execution across 42+ programming languages through a unified interface, accessible to all.
# Code is seeds to sprout on any abandoned technology.
# Test suite for un.sh (Bash implementation)
set -euo pipefail
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
UN_SH="$SCRIPT_DIR/../un.sh"
TEST_DIR="$SCRIPT_DIR/../../test"
# Colors
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
BLUE='\033[0;34m'
NC='\033[0m' # No Color
# Test counters
TESTS_RUN=0
TESTS_PASSED=0
TESTS_FAILED=0
# Test result tracking
test_passed() {
TESTS_PASSED=$((TESTS_PASSED + 1))
TESTS_RUN=$((TESTS_RUN + 1))
echo -e "${GREEN}✓ PASS${NC}: $1"
}
test_failed() {
TESTS_FAILED=$((TESTS_FAILED + 1))
TESTS_RUN=$((TESTS_RUN + 1))
echo -e "${RED}✗ FAIL${NC}: $1"
if [ -n "${2:-}" ]; then
echo -e "${RED} Error: $2${NC}"
fi
}
test_skipped() {
echo -e "${YELLOW}⊘ SKIP${NC}: $1"
}
# Unit Tests
echo -e "${BLUE}=== Unit Tests for un.sh ===${NC}"
# Test: Script exists and is executable
if [ -f "$UN_SH" ] && [ -x "$UN_SH" ]; then
test_passed "Script exists and is executable"
else
test_failed "Script exists and is executable" "File not found or not executable"
fi
# Test: Usage message when no arguments
if output=$("$UN_SH" 2>&1) && [ $? -eq 1 ]; then
if echo "$output" | grep -q "Usage:"; then
test_passed "Shows usage message with no arguments"
else
test_failed "Shows usage message with no arguments" "Expected usage message"
fi
else
# Script should exit with 1
if echo "$output" | grep -q "Usage:"; then
test_passed "Shows usage message with no arguments"
else
test_failed "Shows usage message with no arguments" "Expected usage message"
fi
fi
# Test: Error on non-existent file
if output=$("$UN_SH" /tmp/nonexistent_file_12345.xyz 2>&1); then
test_failed "Handles non-existent file" "Should exit with error"
else
if echo "$output" | grep -qi "not found\|error"; then
test_passed "Handles non-existent file"
else
test_failed "Handles non-existent file" "Expected error message, got: $output"
fi
fi
# Test: Error on unknown extension
UNKNOWN_FILE="/tmp/test_unknown_ext_$$.unknownext"
echo "test" > "$UNKNOWN_FILE"
if output=$("$UN_SH" "$UNKNOWN_FILE" 2>&1); then
test_failed "Handles unknown file extension" "Should exit with error"
rm -f "$UNKNOWN_FILE"
else
if echo "$output" | grep -qi "cannot detect\|unknown\|error"; then
test_passed "Handles unknown file extension"
else
test_failed "Handles unknown file extension" "Expected error message, got: $output"
fi
rm -f "$UNKNOWN_FILE"
fi
# Test: Error when auth not set
has_hmac="${UNSANDBOX_PUBLIC_KEY:-}${UNSANDBOX_SECRET_KEY:-}"
has_legacy="${UNSANDBOX_API_KEY:-}"
if [ -n "$has_hmac" ] || [ -n "$has_legacy" ]; then
TEST_FILE="$TEST_DIR/fib.py"
if [ -f "$TEST_FILE" ]; then
# Temporarily unset auth keys
OLD_PUB="${UNSANDBOX_PUBLIC_KEY:-}"
OLD_SEC="${UNSANDBOX_SECRET_KEY:-}"
OLD_KEY="${UNSANDBOX_API_KEY:-}"
unset UNSANDBOX_PUBLIC_KEY
unset UNSANDBOX_SECRET_KEY
unset UNSANDBOX_API_KEY
if output=$("$UN_SH" "$TEST_FILE" 2>&1); then
test_failed "Requires authentication" "Should exit with error when auth not set"
else
if echo "$output" | grep -qE "UNSANDBOX_(API_KEY|PUBLIC_KEY|SECRET_KEY)"; then
test_passed "Requires authentication"
else
test_failed "Requires authentication" "Expected auth error message"
fi
fi
[ -n "$OLD_PUB" ] && export UNSANDBOX_PUBLIC_KEY="$OLD_PUB"
[ -n "$OLD_SEC" ] && export UNSANDBOX_SECRET_KEY="$OLD_SEC"
[ -n "$OLD_KEY" ] && export UNSANDBOX_API_KEY="$OLD_KEY"
else
test_skipped "Requires authentication (test file not found)"
fi
else
test_skipped "Requires authentication (auth already not set)"
fi
# Integration Tests (require auth)
has_hmac="${UNSANDBOX_PUBLIC_KEY:-}${UNSANDBOX_SECRET_KEY:-}"
has_legacy="${UNSANDBOX_API_KEY:-}"
if [ -n "$has_hmac" ] || [ -n "$has_legacy" ]; then
echo -e "\n${BLUE}=== Integration Tests for un.sh ===${NC}"
# Test: Can execute Python file
if [ -f "$TEST_DIR/fib.py" ]; then
if output=$("$UN_SH" "$TEST_DIR/fib.py" 2>&1); then
if echo "$output" | grep -q "fib(10)"; then
test_passed "Executes Python file successfully"
else
test_failed "Executes Python file successfully" "Expected fibonacci output"
fi
else
test_failed "Executes Python file successfully" "Script failed: $output"
fi
else
test_skipped "Executes Python file successfully (fib.py not found)"
fi
# Test: Can execute Bash file
if [ -f "$TEST_DIR/fib.sh" ]; then
if output=$("$UN_SH" "$TEST_DIR/fib.sh" 2>&1); then
if echo "$output" | grep -q "fib(10)"; then
test_passed "Executes Bash file successfully"
else
test_failed "Executes Bash file successfully" "Expected fibonacci output"
fi
else
test_failed "Executes Bash file successfully" "Script failed: $output"
fi
else
test_skipped "Executes Bash file successfully (fib.sh not found)"
fi
else
echo -e "\n${YELLOW}Skipping integration tests (UNSANDBOX authentication not configured)${NC}"
fi
# Summary
echo -e "\n${BLUE}=== Test Summary ===${NC}"
echo "Total: $TESTS_RUN | Passed: $TESTS_PASSED | Failed: $TESTS_FAILED"
if [ $TESTS_FAILED -eq 0 ]; then
echo -e "${GREEN}All tests passed!${NC}"
exit 0
else
echo -e "${RED}Some tests failed!${NC}"
exit 1
fi