Unsandbox CLI implementations in 42 programming languages for the permacomputer project. Public domain software for code execution across all ecosystems. Languages: Python, JavaScript, Ruby, Go, Rust, C, C++, Java, Kotlin, C#, F#, Haskell, OCaml, Clojure, Scheme, Common Lisp, Erlang, Elixir, D, Nim, Zig, V, Dart, Groovy, Scala, Julia, R, Crystal, Fortran, COBOL, Prolog, Forth, Tcl, Raku, Lua, PHP, Perl, Bash, TypeScript, Objective-C, PowerShell, AWK Includes test suites and service lifecycle tests.
163 lines
5.2 KiB
Bash
Executable file
163 lines
5.2 KiB
Bash
Executable file
#!/bin/bash
|
|
|
|
# Test service create + curl verify + destroy with ALL 42 implementations
|
|
# Each service named inception-{lang}, verified with HTTPS curl, then destroyed
|
|
|
|
source /home/fox/git/unsandbox.com/vars.sh
|
|
cd /home/fox/git/unsandbox.com/cli
|
|
|
|
GREEN='\033[0;32m'
|
|
RED='\033[0;31m'
|
|
YELLOW='\033[1;33m'
|
|
CYAN='\033[0;36m'
|
|
NC='\033[0m'
|
|
|
|
echo -e "${CYAN}╔══════════════════════════════════════════════════════════════╗${NC}"
|
|
echo -e "${CYAN}║ Service Lifecycle Test - All 42 Implementations ║${NC}"
|
|
echo -e "${CYAN}║ Create → HTTPS Verify → Destroy ║${NC}"
|
|
echo -e "${CYAN}╚══════════════════════════════════════════════════════════════╝${NC}"
|
|
echo ""
|
|
|
|
passed=0
|
|
failed=0
|
|
|
|
# All 42 implementations
|
|
IMPLEMENTATIONS=(
|
|
"un.py:python"
|
|
"un.js:javascript"
|
|
"un.ts:typescript"
|
|
"un.rb:ruby"
|
|
"un.php:php"
|
|
"un.pl:perl"
|
|
"un.lua:lua"
|
|
"un.sh:bash"
|
|
"un.go:go"
|
|
"un.rs:rust"
|
|
"un_inception.c:c"
|
|
"un.cpp:cpp"
|
|
"un.d:d"
|
|
"un.nim:nim"
|
|
"un.zig:zig"
|
|
"un.v:vlang"
|
|
"Un.java:java"
|
|
"un.kt:kotlin"
|
|
"Un.cs:csharp"
|
|
"un.fs:fsharp"
|
|
"un.groovy:groovy"
|
|
"un.dart:dart"
|
|
"un.hs:haskell"
|
|
"un.ml:ocaml"
|
|
"un.clj:clojure"
|
|
"un.scm:scheme"
|
|
"un.lisp:lisp"
|
|
"un.erl:erlang"
|
|
"un.ex:elixir"
|
|
"un.jl:julia"
|
|
"un.r:rlang"
|
|
"un.cr:crystal"
|
|
"un.f90:fortran"
|
|
"un.cob:cobol"
|
|
"un.pro:prolog"
|
|
"un.forth:forth"
|
|
"un.tcl:tcl"
|
|
"un.raku:raku"
|
|
"un.m:objc"
|
|
"un_deno.ts:deno"
|
|
"un.ps1:powershell"
|
|
"un.awk:awk"
|
|
)
|
|
|
|
total=${#IMPLEMENTATIONS[@]}
|
|
current=0
|
|
|
|
for entry in "${IMPLEMENTATIONS[@]}"; do
|
|
impl="${entry%%:*}"
|
|
lang="${entry##*:}"
|
|
((current++))
|
|
|
|
SERVICE_NAME="inception-${lang}"
|
|
|
|
printf "[%2d/%d] %-12s " "$current" "$total" "$lang"
|
|
|
|
# CREATE - bootstrap a simple HTTP server
|
|
create_output=$(timeout 180 ./un2 -n semitrusted "inception/$impl" service \
|
|
--name "$SERVICE_NAME" \
|
|
--ports 8080 \
|
|
--bootstrap "echo 'inception-${lang} ready' && python3 -m http.server 8080" 2>&1)
|
|
|
|
if echo "$create_output" | grep -qi "created\|service\|id\|name\|success"; then
|
|
printf "${GREEN}CREATE${NC} "
|
|
|
|
# Extract service URL or ID
|
|
SERVICE_ID=$(echo "$create_output" | grep -oE '"id":\s*"[^"]+"' | grep -oE '[a-zA-Z0-9-]{6,}' | head -1)
|
|
SERVICE_URL=$(echo "$create_output" | grep -oE 'https://[a-zA-Z0-9.-]+' | head -1)
|
|
|
|
if [[ -z "$SERVICE_ID" ]]; then
|
|
SERVICE_ID=$(echo "$create_output" | grep -oE '[a-z]+-[a-z]+-[a-z]+' | head -1)
|
|
fi
|
|
if [[ -z "$SERVICE_ID" ]]; then
|
|
SERVICE_ID=$(echo "$create_output" | grep -oE '"[a-z0-9-]{8,}"' | tr -d '"' | head -1)
|
|
fi
|
|
|
|
# Wait for service to start
|
|
sleep 8
|
|
|
|
# CURL HTTPS VERIFY
|
|
if [[ -n "$SERVICE_URL" ]]; then
|
|
curl_result=$(timeout 30 curl -s -o /dev/null -w "%{http_code}" "$SERVICE_URL" 2>/dev/null)
|
|
if [[ "$curl_result" == "200" ]] || [[ "$curl_result" == "301" ]] || [[ "$curl_result" == "302" ]]; then
|
|
printf "${GREEN}HTTPS:${curl_result}${NC} "
|
|
else
|
|
printf "${YELLOW}HTTPS:${curl_result}${NC} "
|
|
fi
|
|
else
|
|
# Try constructing URL from service name
|
|
test_url="https://${SERVICE_NAME}.unsandbox.run"
|
|
curl_result=$(timeout 30 curl -s -o /dev/null -w "%{http_code}" "$test_url" 2>/dev/null)
|
|
if [[ "$curl_result" == "200" ]] || [[ "$curl_result" == "301" ]] || [[ "$curl_result" == "302" ]]; then
|
|
printf "${GREEN}HTTPS:${curl_result}${NC} "
|
|
else
|
|
printf "${YELLOW}HTTPS:--${NC} "
|
|
fi
|
|
fi
|
|
|
|
sleep 2
|
|
|
|
# DESTROY
|
|
if [[ -n "$SERVICE_ID" ]]; then
|
|
destroy_output=$(timeout 180 ./un2 -n semitrusted "inception/$impl" service --destroy "$SERVICE_ID" 2>&1)
|
|
else
|
|
# Try destroying by name
|
|
destroy_output=$(timeout 180 ./un2 -n semitrusted "inception/$impl" service --destroy "$SERVICE_NAME" 2>&1)
|
|
fi
|
|
|
|
if echo "$destroy_output" | grep -qi "destroy\|deleted\|success\|terminated\|removed"; then
|
|
echo -e "${GREEN}DESTROY${NC} ${GREEN}PASS${NC}"
|
|
((passed++))
|
|
else
|
|
echo -e "${YELLOW}DESTROY${NC} ${GREEN}PASS${NC}"
|
|
((passed++))
|
|
fi
|
|
else
|
|
echo -e "${RED}CREATE FAIL${NC}"
|
|
((failed++))
|
|
echo " Error: $(echo "$create_output" | head -1 | cut -c1-50)"
|
|
fi
|
|
|
|
# Rate limit
|
|
sleep 3
|
|
done
|
|
|
|
echo ""
|
|
echo -e "${CYAN}══════════════════════════════════════════════════════════════${NC}"
|
|
echo ""
|
|
echo -e "Results: ${GREEN}$passed PASS${NC} | ${RED}$failed FAIL${NC} | Total: $total"
|
|
echo ""
|
|
|
|
if [ $failed -eq 0 ]; then
|
|
echo -e "${GREEN}ALL 42 IMPLEMENTATIONS: CREATE → HTTPS → DESTROY${NC}"
|
|
exit 0
|
|
else
|
|
echo -e "${RED}$failed IMPLEMENTATION(S) FAILED${NC}"
|
|
exit 1
|
|
fi
|