un-inception/tests/run_all_tests.sh
Russell Ballestrini a4f9bfa377 Add HMAC authentication to all 42 implementations
- Update all un.* implementations to use HMAC-SHA256 signing
- Headers: Authorization (Bearer public_key), X-Timestamp, X-Signature
- Signature: HMAC-SHA256(secret_key, "timestamp:METHOD:path:body")
- Fix test suite issues (bash arithmetic, ES module compat, TCL shebang)
- Add CLAUDE.md with inception testing documentation
- Update README.md with HMAC auth and dependency table
- All 38 implementations pass inception test via un2
2025-12-28 14:24:03 -05:00

198 lines
6.1 KiB
Bash
Executable file
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#!/bin/bash
# UN CLI Inception - Complete Test Matrix Runner
# Tests ALL 42 language implementations with unit, integration, and functional tests
# Color codes
GREEN='\033[0;32m'
RED='\033[0;31m'
YELLOW='\033[1;33m'
BLUE='\033[0;34m'
CYAN='\033[0;36m'
NC='\033[0m'
# Change to tests directory
cd "$(dirname "$0")"
INCEPTION_DIR=".."
TEST_DIR="."
echo -e "${CYAN}╔══════════════════════════════════════════════════════════════╗${NC}"
echo -e "${CYAN}║ UN CLI Inception - Complete Test Matrix ║${NC}"
echo -e "${CYAN}║ 42 Languages × 3 Test Types = The Matrix ║${NC}"
echo -e "${CYAN}╚══════════════════════════════════════════════════════════════╝${NC}"
echo ""
# Check API auth keys
if [ -z "$UNSANDBOX_PUBLIC_KEY" ] || [ -z "$UNSANDBOX_SECRET_KEY" ]; then
if [ -z "$UNSANDBOX_API_KEY" ]; then
echo -e "${YELLOW}WARNING:${NC} UNSANDBOX authentication not configured"
echo "Integration and functional tests will be skipped"
echo "Set HMAC keys: export UNSANDBOX_PUBLIC_KEY=... UNSANDBOX_SECRET_KEY=..."
echo "Or legacy key: export UNSANDBOX_API_KEY=..."
echo "Run: source ../../vars.sh"
echo ""
fi
fi
# Counters
passed=0
failed=0
skipped=0
# Function to check if command exists
has_cmd() {
command -v "$1" >/dev/null 2>&1
}
# Function to run a test and track result
run_test() {
local name=$1
local interpreter=$2
local test_file=$3
local extra_args=$4
printf "%-20s" "$name"
# Check if interpreter exists
if ! has_cmd "$interpreter"; then
echo -e "${YELLOW}SKIP${NC} ($interpreter not found)"
((skipped++))
return
fi
# Check if test file exists
if [ ! -f "$test_file" ]; then
echo -e "${YELLOW}SKIP${NC} (test file missing)"
((skipped++))
return
fi
# Run the test
if $interpreter $extra_args "$test_file" >/dev/null 2>&1; then
echo -e "${GREEN}PASS${NC}"
((passed++))
else
echo -e "${RED}FAIL${NC}"
((failed++))
fi
}
# Function to run shell-based test
run_shell_test() {
local name=$1
local test_file=$2
printf "%-20s" "$name"
if [ ! -f "$test_file" ]; then
echo -e "${YELLOW}SKIP${NC} (test file missing)"
((skipped++))
return
fi
if bash "$test_file" >/dev/null 2>&1; then
echo -e "${GREEN}PASS${NC}"
((passed++))
else
echo -e "${RED}FAIL${NC}"
((failed++))
fi
}
echo -e "${BLUE}━━━ Scripting Languages ━━━${NC}"
run_test "Python" "python3" "test_un_py.py"
run_test "JavaScript" "node" "test_un_js.js"
run_test "TypeScript" "npx" "test_un_ts.ts" "ts-node"
run_test "Ruby" "ruby" "test_un_rb.rb"
run_test "PHP" "php" "test_un_php.php"
run_test "Perl" "perl" "test_un_pl.pl"
run_test "Lua" "lua" "test_un_lua.lua"
run_shell_test "Bash" "test_un_sh.sh"
echo ""
echo -e "${BLUE}━━━ Systems Languages ━━━${NC}"
run_test "Go" "go" "test_un_go.go" "run"
# Rust, C, C++, D, Zig, Nim, V require compilation - skip for now
printf "%-20s" "Rust"
echo -e "${YELLOW}SKIP${NC} (requires compilation)"
((skipped++))
printf "%-20s" "C"
echo -e "${YELLOW}SKIP${NC} (requires compilation)"
((skipped++))
printf "%-20s" "C++"
echo -e "${YELLOW}SKIP${NC} (requires compilation)"
((skipped++))
printf "%-20s" "D"
echo -e "${YELLOW}SKIP${NC} (requires compilation)"
((skipped++))
printf "%-20s" "Zig"
echo -e "${YELLOW}SKIP${NC} (requires compilation)"
((skipped++))
printf "%-20s" "Nim"
echo -e "${YELLOW}SKIP${NC} (requires compilation)"
((skipped++))
printf "%-20s" "V"
echo -e "${YELLOW}SKIP${NC} (requires compilation)"
((skipped++))
echo ""
echo -e "${BLUE}━━━ JVM/.NET Languages ━━━${NC}"
run_test "Groovy" "groovy" "test_un_groovy.groovy"
run_test "Kotlin" "kotlinc" "test_un_kt.kt" "-script"
# Java, C#, F# require compilation
printf "%-20s" "Java"
echo -e "${YELLOW}SKIP${NC} (requires compilation)"
((skipped++))
printf "%-20s" "C#"
echo -e "${YELLOW}SKIP${NC} (requires compilation)"
((skipped++))
printf "%-20s" "F#"
echo -e "${YELLOW}SKIP${NC} (requires compilation)"
((skipped++))
run_test "Dart" "dart" "test_un_dart.dart"
echo ""
echo -e "${BLUE}━━━ Functional Languages ━━━${NC}"
run_test "Haskell" "runhaskell" "test_un_hs.hs"
run_test "OCaml" "ocaml" "test_un_ml.ml"
run_test "Clojure" "clj" "test_un_clj.clj" "-M"
run_test "Scheme" "guile" "test_un_scm.scm"
run_test "CommonLisp" "sbcl" "test_un_lisp.lisp" "--script"
run_test "Erlang" "escript" "test_un_erl.erl"
run_test "Elixir" "elixir" "test_un_ex.exs"
echo ""
echo -e "${BLUE}━━━ Scientific/Exotic Languages ━━━${NC}"
run_test "Julia" "julia" "test_un_jl.jl"
run_test "R" "Rscript" "test_un_r.r"
run_test "Crystal" "crystal" "test_un_cr.cr"
# Fortran, COBOL require compilation
printf "%-20s" "Fortran"
echo -e "${YELLOW}SKIP${NC} (requires compilation)"
((skipped++))
run_shell_test "COBOL" "test_un_cob.sh"
run_test "Prolog" "swipl" "test_un_pro.pro" "-g main -t halt"
run_test "Forth" "gforth" "test_un_forth.fth"
echo ""
echo -e "${BLUE}━━━ Other Languages ━━━${NC}"
run_test "TCL" "tclsh" "test_un_tcl.tcl"
run_test "Raku" "raku" "test_un_raku.raku"
run_shell_test "Objective-C" "test_un_m.sh"
run_test "Deno" "deno" "test_un_deno.ts" "run --allow-read --allow-env --allow-net"
echo ""
# Summary
echo -e "${CYAN}══════════════════════════════════════════════════════════════${NC}"
echo ""
total=$((passed + failed + skipped))
echo -e "Results: ${GREEN}$passed PASS${NC} | ${RED}$failed FAIL${NC} | ${YELLOW}$skipped SKIP${NC} | Total: $total"
echo ""
if [ $failed -eq 0 ]; then
echo -e "${GREEN}The matrix is complete. All available tests passed.${NC}"
exit 0
else
echo -e "${RED}$failed test(s) failed.${NC}"
exit 1
fi