docs: Update test counts to 638 tests, add badges to README

This commit is contained in:
russell@unturf.com 2026-01-18 08:11:24 -05:00
parent efde6f5dc5
commit 04f6cf6eaf
4 changed files with 28 additions and 13 deletions

View file

@ -155,7 +155,11 @@ for impl in un.py un.js un.rb un.go un.php un.pl un.lua; do
done done
``` ```
The test suite in `tests/run_all_tests.sh` currently skips languages without local interpreters. Use the inception pattern with `un` to achieve 100% test coverage. ### CI Test Status
**638 tests passing across 42 languages with 100% pass rate.**
The CI runs the full inception test matrix on every tag release and smart change detection on regular pushes. See [docs/INCEPTION-TESTING.md](docs/INCEPTION-TESTING.md) for details.
## Directory Structure ## Directory Structure

View file

@ -2,6 +2,8 @@
The UN CLI written in every language it can execute. **42 implementations, one unified interface.** The UN CLI written in every language it can execute. **42 implementations, one unified interface.**
[![638 Tests Passing](https://img.shields.io/badge/tests-638%20passing-brightgreen)](docs/INCEPTION-TESTING.md) [![42 Languages](https://img.shields.io/badge/languages-42-blue)](docs/INCEPTION-TESTING.md) [![100% Pass Rate](https://img.shields.io/badge/pass%20rate-100%25-success)](docs/INCEPTION-TESTING.md)
> "If you replace every line of un.c with a different programming language, but it still executes code on unsandbox... is it still un?" > "If you replace every line of un.c with a different programming language, but it still executes code on unsandbox... is it still un?"
## Download UN CLI ## Download UN CLI

View file

@ -267,6 +267,7 @@ static char* get_accounts_csv_path(void) {
} }
// Ensure ~/.unsandbox directory exists // Ensure ~/.unsandbox directory exists
__attribute__((unused))
static void ensure_unsandbox_dir(void) { static void ensure_unsandbox_dir(void) {
const char *home = getenv("HOME"); const char *home = getenv("HOME");
if (!home) { if (!home) {
@ -341,6 +342,7 @@ static UnsandboxCredentials* load_credentials_from_csv(int account_index) {
} }
// Count total accounts in CSV // Count total accounts in CSV
__attribute__((unused))
static int count_accounts_in_csv(void) { static int count_accounts_in_csv(void) {
char *path = get_accounts_csv_path(); char *path = get_accounts_csv_path();
if (!path) return 0; if (!path) return 0;
@ -791,6 +793,7 @@ long long extract_json_number(const char *json, const char *key) {
// Count objects in a JSON array (for malloc sizing) // Count objects in a JSON array (for malloc sizing)
// Returns number of top-level objects in array, or 0 if not found/empty // Returns number of top-level objects in array, or 0 if not found/empty
__attribute__((unused))
static int count_json_array_objects(const char *json, const char *array_key) { static int count_json_array_objects(const char *json, const char *array_key) {
char search[256]; char search[256];
snprintf(search, sizeof(search), "\"%s\":[", array_key); snprintf(search, sizeof(search), "\"%s\":[", array_key);
@ -816,6 +819,7 @@ static int count_json_array_objects(const char *json, const char *array_key) {
// Skip past current JSON object, return pointer to position after closing } // Skip past current JSON object, return pointer to position after closing }
// If pos doesn't point to '{', returns pos unchanged // If pos doesn't point to '{', returns pos unchanged
__attribute__((unused))
static const char* skip_json_object(const char *pos) { static const char* skip_json_object(const char *pos) {
if (!pos || *pos != '{') return pos; if (!pos || *pos != '{') return pos;
int depth = 1; int depth = 1;
@ -841,6 +845,7 @@ static const char* skip_json_object(const char *pos) {
static __thread char unsandbox_error_buffer[512] = {0}; static __thread char unsandbox_error_buffer[512] = {0};
__attribute__((unused))
static void set_last_error(const char *fmt, ...) { static void set_last_error(const char *fmt, ...) {
va_list args; va_list args;
va_start(args, fmt); va_start(args, fmt);
@ -1243,7 +1248,7 @@ static int shell_ws_callback(struct lws *wsi, enum lws_callback_reasons reason,
// Check if it's a binary frame (raw stdout) or text frame (JSON control) // Check if it's a binary frame (raw stdout) or text frame (JSON control)
if (lws_frame_is_binary(wsi)) { if (lws_frame_is_binary(wsi)) {
// Binary frame = raw shell output, write directly // Binary frame = raw shell output, write directly
write(STDOUT_FILENO, in, len); if (write(STDOUT_FILENO, in, len) < 0) { /* ignore */ }
} else { } else {
// Text frame = JSON control message (exit, error, detached, etc.) // Text frame = JSON control message (exit, error, detached, etc.)
char *json = (char *)in; char *json = (char *)in;
@ -4093,7 +4098,7 @@ static char* execute_service_capture(const UnsandboxCredentials *creds, const ch
response.data = malloc(1); response.data = malloc(1);
response.size = 0; response.size = 0;
char path[512]; char path[256];
char url[512]; char url[512];
snprintf(path, sizeof(path), "/services/%s/execute", service_id); snprintf(path, sizeof(path), "/services/%s/execute", service_id);
snprintf(url, sizeof(url), "%s%s", API_BASE, path); snprintf(url, sizeof(url), "%s%s", API_BASE, path);
@ -4140,7 +4145,7 @@ static char* execute_service_capture(const UnsandboxCredentials *creds, const ch
if (!job_id) return NULL; if (!job_id) return NULL;
char job_path[512]; char job_path[256];
char job_url[512]; char job_url[512];
snprintf(job_path, sizeof(job_path), "/jobs/%s", job_id); snprintf(job_path, sizeof(job_path), "/jobs/%s", job_id);
snprintf(job_url, sizeof(job_url), "%s%s", API_BASE, job_path); snprintf(job_url, sizeof(job_url), "%s%s", API_BASE, job_path);
@ -5256,6 +5261,7 @@ static int set_image_visibility(const UnsandboxCredentials *creds, const char *i
} }
// Grant image access to another API key // Grant image access to another API key
__attribute__((unused))
static int grant_image_access(const UnsandboxCredentials *creds, const char *image_id, const char *trusted_api_key) { static int grant_image_access(const UnsandboxCredentials *creds, const char *image_id, const char *trusted_api_key) {
if (!creds || !creds->public_key || !creds->secret_key || !image_id || !trusted_api_key) { if (!creds || !creds->public_key || !creds->secret_key || !image_id || !trusted_api_key) {
return 1; return 1;
@ -5295,6 +5301,7 @@ static int grant_image_access(const UnsandboxCredentials *creds, const char *ima
} }
// Revoke image access from another API key // Revoke image access from another API key
__attribute__((unused))
static int revoke_image_access(const UnsandboxCredentials *creds, const char *image_id, const char *trusted_api_key) { static int revoke_image_access(const UnsandboxCredentials *creds, const char *image_id, const char *trusted_api_key) {
if (!creds || !creds->public_key || !creds->secret_key || !image_id || !trusted_api_key) { if (!creds || !creds->public_key || !creds->secret_key || !image_id || !trusted_api_key) {
return 1; return 1;
@ -5334,6 +5341,7 @@ static int revoke_image_access(const UnsandboxCredentials *creds, const char *im
} }
// List API keys with access to an image // List API keys with access to an image
__attribute__((unused))
static char* list_image_trusted(const UnsandboxCredentials *creds, const char *image_id) { static char* list_image_trusted(const UnsandboxCredentials *creds, const char *image_id) {
if (!creds || !creds->public_key || !creds->secret_key || !image_id) { if (!creds || !creds->public_key || !creds->secret_key || !image_id) {
return NULL; return NULL;
@ -5372,6 +5380,7 @@ static char* list_image_trusted(const UnsandboxCredentials *creds, const char *i
} }
// Transfer image ownership to another API key // Transfer image ownership to another API key
__attribute__((unused))
static int transfer_image(const UnsandboxCredentials *creds, const char *image_id, const char *to_api_key) { static int transfer_image(const UnsandboxCredentials *creds, const char *image_id, const char *to_api_key) {
if (!creds || !creds->public_key || !creds->secret_key || !image_id || !to_api_key) { if (!creds || !creds->public_key || !creds->secret_key || !image_id || !to_api_key) {
return 1; return 1;
@ -8502,15 +8511,15 @@ int main(int argc, char *argv[]) {
#ifdef __APPLE__ #ifdef __APPLE__
char cmd[1024]; char cmd[1024];
snprintf(cmd, sizeof(cmd), "open '%s'", extend_url); snprintf(cmd, sizeof(cmd), "open '%s'", extend_url);
system(cmd); if (system(cmd) != 0) { /* ignore */ }
#elif defined(__linux__) #elif defined(__linux__)
char cmd[1024]; char cmd[2048];
snprintf(cmd, sizeof(cmd), "xdg-open '%s' 2>/dev/null || sensible-browser '%s' 2>/dev/null", extend_url, extend_url); snprintf(cmd, sizeof(cmd), "xdg-open '%s' 2>/dev/null || sensible-browser '%s' 2>/dev/null", extend_url, extend_url);
system(cmd); if (system(cmd) != 0) { /* ignore */ }
#elif defined(_WIN32) #elif defined(_WIN32)
char cmd[1024]; char cmd[1024];
snprintf(cmd, sizeof(cmd), "start %s", extend_url); snprintf(cmd, sizeof(cmd), "start %s", extend_url);
system(cmd); if (system(cmd) != 0) { /* ignore */ }
#endif #endif
free_credentials(creds); free_credentials(creds);

View file

@ -1,6 +1,6 @@
# The Inception Test Matrix # The Inception Test Matrix
## 650 Tests. 42 Languages. 100% Pass Rate. ## 638 Tests. 42 Languages. 100% Pass Rate.
``` ```
████████╗██╗ ██╗███████╗ ██╗███╗ ██╗ ██████╗███████╗██████╗ ████████╗██╗ ██████╗ ███╗ ██╗ ████████╗██╗ ██╗███████╗ ██╗███╗ ██╗ ██████╗███████╗██████╗ ████████╗██╗ ██████╗ ███╗ ██╗
@ -73,7 +73,7 @@ The sandbox contains compilers and interpreters for all 42 supported languages.
| **Key** | 1 | Validate API credentials | | **Key** | 1 | Validate API credentials |
| **SDK** | 2 | File exists, runs in sandbox | | **SDK** | 2 | File exists, runs in sandbox |
**Total: ~15 tests per language × 42 languages = 650 tests** **Total: ~15 tests per language × 42 languages = 638 tests**
### Execute Endpoint Tests ### Execute Endpoint Tests
@ -226,8 +226,8 @@ test:
│ │ │ │
├────────────────────────────────────────────────────────┤ ├────────────────────────────────────────────────────────┤
│ │ │ │
│ Total Tests: 650 │ │ Total Tests: 638 │
│ Passed: 650 │ │ Passed: 638 │
│ Failed: 0 │ │ Failed: 0 │
│ Skipped: 0 │ │ Skipped: 0 │
│ Pass Rate: 100% │ │ Pass Rate: 100% │
@ -282,6 +282,6 @@ The inception pattern proves that:
--- ---
**42 languages. 650 tests. 100% pass rate.** **42 languages. 638 tests. 100% pass rate.**
*The inception is complete.* *The inception is complete.*