un-inception/tests/test_un_cob.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

141 lines
5.7 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
# Comprehensive tests for un.cob (COBOL UN CLI Inception implementation)
# COBOL is challenging to test directly due to compilation requirements
# This shell wrapper provides test coverage
# Run with: bash test_un_cob.sh
# Color codes
GREEN='\033[32m'
RED='\033[31m'
BLUE='\033[34m'
RESET='\033[0m'
# Test counters
PASSED=0
FAILED=0
print_test() {
local name="$1"
local result="$2"
if [ "$result" = "true" ]; then
echo -e "${GREEN}✓ PASS${RESET}: $name"
PASSED=$((PASSED + 1))
else
echo -e "${RED}✗ FAIL${RESET}: $name"
FAILED=$((FAILED + 1))
fi
}
echo ""
echo -e "${BLUE}========================================${RESET}"
echo -e "${BLUE}UN CLI Inception Tests - COBOL${RESET}"
echo -e "${BLUE}========================================${RESET}"
echo ""
# Test Suite 1: Extension Detection (using grep to verify COBOL source)
echo -e "${BLUE}Test Suite 1: Extension Detection${RESET}"
UN_COB="../un.cob"
if [ ! -f "$UN_COB" ]; then
UN_COB="/home/fox/git/unsandbox.com/cli/inception/un.cob"
fi
# Check if un.cob has the extension mappings
if [ -f "$UN_COB" ]; then
grep -q 'WHEN ".jl".*MOVE "julia"' "$UN_COB" && print_test "Detect .jl as julia" "true" || print_test "Detect .jl as julia" "false"
grep -q 'WHEN ".r".*MOVE "r"' "$UN_COB" && print_test "Detect .r as r" "true" || print_test "Detect .r as r" "false"
grep -q 'WHEN ".cr".*MOVE "crystal"' "$UN_COB" && print_test "Detect .cr as crystal" "true" || print_test "Detect .cr as crystal" "false"
grep -q 'WHEN ".f90".*MOVE "fortran"' "$UN_COB" && print_test "Detect .f90 as fortran" "true" || print_test "Detect .f90 as fortran" "false"
grep -q 'WHEN ".cob".*MOVE "cobol"' "$UN_COB" && print_test "Detect .cob as cobol" "true" || print_test "Detect .cob as cobol" "false"
grep -q 'WHEN ".pro".*MOVE "prolog"' "$UN_COB" && print_test "Detect .pro as prolog" "true" || print_test "Detect .pro as prolog" "false"
grep -q 'WHEN ".forth".*MOVE "forth"' "$UN_COB" && print_test "Detect .forth as forth" "true" || print_test "Detect .forth as forth" "false"
grep -q 'WHEN ".4th".*MOVE "forth"' "$UN_COB" && print_test "Detect .4th as forth" "true" || print_test "Detect .4th as forth" "false"
grep -q 'WHEN ".py".*MOVE "python"' "$UN_COB" && print_test "Detect .py as python" "true" || print_test "Detect .py as python" "false"
grep -q 'WHEN ".rs".*MOVE "rust"' "$UN_COB" && print_test "Detect .rs as rust" "true" || print_test "Detect .rs as rust" "false"
grep -q 'WHEN OTHER.*MOVE "unknown"' "$UN_COB" && print_test "Detect unknown extension" "true" || print_test "Detect unknown extension" "false"
else
echo -e "${RED}ERROR: un.cob not found${RESET}"
exit 1
fi
# Test Suite 2: API Integration
echo ""
echo -e "${BLUE}Test Suite 2: API Integration${RESET}"
if [ -z "$UNSANDBOX_API_KEY" ]; then
echo -e "${BLUE} SKIP${RESET}: API integration test (UNSANDBOX_API_KEY not set)"
else
# Test if COBOL can be compiled
if command -v cobc &> /dev/null; then
# Try to compile un.cob
if cobc -x -o /tmp/test_un_cob "$UN_COB" 2>/dev/null; then
print_test "COBOL compilation successful" "true"
rm -f /tmp/test_un_cob
else
print_test "COBOL compilation successful" "false"
fi
else
echo -e "${BLUE} SKIP${RESET}: Compilation test (cobc not available)"
fi
fi
# Test Suite 3: End-to-End Functional Test
echo ""
echo -e "${BLUE}Test Suite 3: End-to-End Functional Test${RESET}"
if [ -z "$UNSANDBOX_API_KEY" ]; then
echo -e "${BLUE} SKIP${RESET}: E2E test (UNSANDBOX_API_KEY not set)"
else
FIB_FILE="../../test/fib.cob"
if [ ! -f "$FIB_FILE" ]; then
FIB_FILE="/home/fox/git/unsandbox.com/cli/test/fib.cob"
fi
if [ -f "$FIB_FILE" ]; then
if command -v cobc &> /dev/null; then
# Compile and run
if cobc -x -o /tmp/test_un_cob "$UN_COB" 2>/dev/null; then
OUTPUT=$(/tmp/test_un_cob "$FIB_FILE" 2>&1)
echo "$OUTPUT" | grep -q "fib(10) = 55" && print_test "E2E: fib.cob produces fib(10) = 55" "true" || print_test "E2E: fib.cob produces fib(10) = 55" "false"
echo "$OUTPUT" | grep -q "fib(5) = 5" && print_test "E2E: fib.cob produces fib(5) = 5" "true" || print_test "E2E: fib.cob produces fib(5) = 5" "false"
echo "$OUTPUT" | grep -q "fib(0) = 0" && print_test "E2E: fib.cob produces fib(0) = 0" "true" || print_test "E2E: fib.cob produces fib(0) = 0" "false"
rm -f /tmp/test_un_cob
else
echo -e "${BLUE} SKIP${RESET}: E2E test (compilation failed)"
fi
else
echo -e "${BLUE} SKIP${RESET}: E2E test (cobc not available)"
fi
else
echo -e "${BLUE} SKIP${RESET}: E2E test (fib.cob not found)"
fi
fi
# Test Suite 4: Error Handling
echo ""
echo -e "${BLUE}Test Suite 4: Error Handling${RESET}"
grep -q 'WHEN OTHER.*MOVE "unknown"' "$UN_COB" && print_test "Unknown extension handling" "true" || print_test "Unknown extension handling" "false"
# Verify the DETECT-LANGUAGE procedure exists
grep -q 'DETECT-LANGUAGE' "$UN_COB" && print_test "Extension detection procedure exists" "true" || print_test "Extension detection procedure exists" "false"
# Print summary
TOTAL=$((PASSED + FAILED))
echo ""
echo -e "${BLUE}========================================${RESET}"
echo -e "${BLUE}Test Summary${RESET}"
echo -e "${BLUE}========================================${RESET}"
echo -e "${GREEN}Passed: $PASSED${RESET}"
echo -e "${RED}Failed: $FAILED${RESET}"
echo -e "${BLUE}Total: $TOTAL${RESET}"
if [ $FAILED -gt 0 ]; then
echo ""
echo -e "${RED}TESTS FAILED${RESET}"
exit 1
else
echo ""
echo -e "${GREEN}ALL TESTS PASSED${RESET}"
exit 0
fi