From 137421ad578e7d080d714f1aeca6aa1331341e8e Mon Sep 17 00:00:00 2001 From: h1065153539-create Date: Sat, 20 Jun 2026 21:30:34 +0000 Subject: [PATCH 1/2] Add frailbox self-test JSON summary --- docs/OPERATIONS.md | 6 + frailbox/Makefile | 19 +- .../tests/fixtures/selftest_failure.fixture | 3 + .../tests/fixtures/selftest_success.fixture | 2 + frailbox/tests/selftest_summary.c | 242 ++++++++++++++++++ 5 files changed, 271 insertions(+), 1 deletion(-) create mode 100644 frailbox/tests/fixtures/selftest_failure.fixture create mode 100644 frailbox/tests/fixtures/selftest_success.fixture create mode 100644 frailbox/tests/selftest_summary.c diff --git a/docs/OPERATIONS.md b/docs/OPERATIONS.md index 58642e7b9..3e869df53 100644 --- a/docs/OPERATIONS.md +++ b/docs/OPERATIONS.md @@ -286,6 +286,12 @@ Audit logs are retained for 365 days and include: 3. Check database connectivity: `kubectl exec -n tent-production deploy/backend-api -- nc -zv postgresql 5432` 4. Check resource limits: `kubectl describe pod -n tent-production -l app=backend-api` +**Frailbox self-test JSON summary** +1. Run the human-readable self-test fixture: `make -C frailbox selftest`. +2. Emit a machine-readable summary for CI or operators: `make -s -C frailbox selftest-json`. +3. Validate success and failure fixture coverage: `make -s -C frailbox selftest-json-fixtures`. +4. JSON output includes each test name, `pass`/`fail` status, duration in milliseconds, and a failure reason when available. The self-test is deterministic and does not perform network access. + **High latency** 1. Check database query performance: `SELECT * FROM pg_stat_activity WHERE state = 'active'` 2. Check connection pool utilization diff --git a/frailbox/Makefile b/frailbox/Makefile index d4383d853..da5f97ec1 100644 --- a/frailbox/Makefile +++ b/frailbox/Makefile @@ -14,6 +14,7 @@ OBJS = $(patsubst %.c, $(BUILDDIR)/%.o, $(SRCS)) DEPS = $(OBJS:.o=.d) TARGET = frailbox +SELFTEST_TARGET = $(BUILDDIR)/frailbox_selftest .PHONY: all clean @@ -26,6 +27,10 @@ $(BUILDDIR)/%.o: %.c @mkdir -p $(dir $@) $(CC) $(CFLAGS) -I$(INCDIR) -MMD -MP -c $< -o $@ +$(SELFTEST_TARGET): tests/selftest_summary.c + @mkdir -p $(dir $@) + $(CC) $(CFLAGS) -I$(INCDIR) $< -o $@ $(LDFLAGS) + -include $(DEPS) clean: @@ -37,7 +42,19 @@ distclean: clean test: $(TARGET) ./$(TARGET) --sandbox-type seccomp --memory-limit 64 --verbose +selftest: $(SELFTEST_TARGET) + @./$(SELFTEST_TARGET) --fixture tests/fixtures/selftest_success.fixture + +selftest-json: $(SELFTEST_TARGET) + @./$(SELFTEST_TARGET) --json --fixture tests/fixtures/selftest_success.fixture + +selftest-json-fixtures: $(SELFTEST_TARGET) + @./$(SELFTEST_TARGET) --json --fixture tests/fixtures/selftest_success.fixture >/tmp/frailbox-selftest-success.json + @set +e; ./$(SELFTEST_TARGET) --json --fixture tests/fixtures/selftest_failure.fixture >/tmp/frailbox-selftest-failure.json; status=$$?; if [ "$$status" -ne 1 ]; then exit 1; fi + @grep -q '"status": "pass"' /tmp/frailbox-selftest-success.json + @grep -q '"status": "fail"' /tmp/frailbox-selftest-failure.json + valgrind: $(TARGET) valgrind --leak-check=full --show-leak-kinds=all ./$(TARGET) -.PHONY: all clean distclean test valgrind +.PHONY: all clean distclean test selftest selftest-json selftest-json-fixtures valgrind diff --git a/frailbox/tests/fixtures/selftest_failure.fixture b/frailbox/tests/fixtures/selftest_failure.fixture new file mode 100644 index 000000000..971d0c1a6 --- /dev/null +++ b/frailbox/tests/fixtures/selftest_failure.fixture @@ -0,0 +1,3 @@ +name=fixture_failure +expect=fail +reason=intentional failure fixture diff --git a/frailbox/tests/fixtures/selftest_success.fixture b/frailbox/tests/fixtures/selftest_success.fixture new file mode 100644 index 000000000..a6fe6bf12 --- /dev/null +++ b/frailbox/tests/fixtures/selftest_success.fixture @@ -0,0 +1,2 @@ +name=fixture_success +expect=pass diff --git a/frailbox/tests/selftest_summary.c b/frailbox/tests/selftest_summary.c new file mode 100644 index 000000000..fae79479d --- /dev/null +++ b/frailbox/tests/selftest_summary.c @@ -0,0 +1,242 @@ +#define _POSIX_C_SOURCE 200809L + +#include +#include +#include +#include +#include +#include + +#define MAX_TESTS 16 +#define NAME_SIZE 96 +#define REASON_SIZE 256 +#define LINE_SIZE 512 + +typedef struct selftest_result { + char name[NAME_SIZE]; + int passed; + double duration_ms; + char failure_reason[REASON_SIZE]; +} selftest_result_t; + +static double now_ms(void) { + struct timespec ts; + clock_gettime(CLOCK_MONOTONIC, &ts); + return (double)ts.tv_sec * 1000.0 + (double)ts.tv_nsec / 1000000.0; +} + +static void copy_string(char *dst, size_t dst_size, const char *src) { + if (dst_size == 0) { + return; + } + snprintf(dst, dst_size, "%s", src ? src : ""); +} + +static char *trim(char *value) { + while (*value && isspace((unsigned char)*value)) { + value++; + } + + char *end = value + strlen(value); + while (end > value && isspace((unsigned char)*(end - 1))) { + end--; + } + *end = '\0'; + return value; +} + +static void json_string(FILE *out, const char *value) { + fputc('"', out); + for (const unsigned char *p = (const unsigned char *)(value ? value : ""); *p; p++) { + switch (*p) { + case '\\': + fputs("\\\\", out); + break; + case '"': + fputs("\\\"", out); + break; + case '\n': + fputs("\\n", out); + break; + case '\r': + fputs("\\r", out); + break; + case '\t': + fputs("\\t", out); + break; + default: + if (*p < 0x20) { + fprintf(out, "\\u%04x", *p); + } else { + fputc(*p, out); + } + break; + } + } + fputc('"', out); +} + +static selftest_result_t run_memory_smoke(void) { + selftest_result_t result = {0}; + double start = now_ms(); + copy_string(result.name, sizeof(result.name), "memory_smoke"); + result.passed = 1; + + unsigned char *buffer = calloc(32, 1); + if (!buffer) { + result.passed = 0; + copy_string(result.failure_reason, sizeof(result.failure_reason), "calloc returned NULL"); + } else { + for (size_t i = 0; i < 32; i++) { + buffer[i] = (unsigned char)i; + } + for (size_t i = 0; i < 32; i++) { + if (buffer[i] != (unsigned char)i) { + result.passed = 0; + copy_string(result.failure_reason, sizeof(result.failure_reason), "memory roundtrip mismatch"); + break; + } + } + free(buffer); + } + + result.duration_ms = now_ms() - start; + return result; +} + +static selftest_result_t run_fixture(const char *path) { + selftest_result_t result = {0}; + double start = now_ms(); + copy_string(result.name, sizeof(result.name), "fixture"); + result.passed = 0; + + FILE *file = fopen(path, "r"); + if (!file) { + snprintf(result.failure_reason, sizeof(result.failure_reason), + "could not open fixture: %s", strerror(errno)); + result.duration_ms = now_ms() - start; + return result; + } + + char expected[32] = ""; + char line[LINE_SIZE]; + while (fgets(line, sizeof(line), file)) { + char *clean = trim(line); + if (*clean == '\0' || *clean == '#') { + continue; + } + char *equals = strchr(clean, '='); + if (!equals) { + continue; + } + *equals = '\0'; + char *key = trim(clean); + char *value = trim(equals + 1); + if (strcmp(key, "name") == 0) { + copy_string(result.name, sizeof(result.name), value); + } else if (strcmp(key, "expect") == 0) { + copy_string(expected, sizeof(expected), value); + } else if (strcmp(key, "reason") == 0) { + copy_string(result.failure_reason, sizeof(result.failure_reason), value); + } + } + fclose(file); + + if (strcmp(expected, "pass") == 0) { + result.passed = 1; + result.failure_reason[0] = '\0'; + } else if (strcmp(expected, "fail") == 0) { + result.passed = 0; + if (result.failure_reason[0] == '\0') { + copy_string(result.failure_reason, sizeof(result.failure_reason), "fixture requested failure"); + } + } else { + result.passed = 0; + copy_string(result.failure_reason, sizeof(result.failure_reason), "fixture missing expect=pass or expect=fail"); + } + + result.duration_ms = now_ms() - start; + return result; +} + +static void print_text_summary(const selftest_result_t *results, size_t count) { + size_t passed = 0; + for (size_t i = 0; i < count; i++) { + passed += results[i].passed ? 1U : 0U; + printf("%s: %s (%.3fms)", results[i].name, + results[i].passed ? "PASS" : "FAIL", + results[i].duration_ms); + if (!results[i].passed && results[i].failure_reason[0] != '\0') { + printf(" - %s", results[i].failure_reason); + } + putchar('\n'); + } + printf("RESULTS: %zu passed, %zu failed out of %zu\n", passed, count - passed, count); +} + +static void print_json_summary(const selftest_result_t *results, size_t count) { + size_t passed = 0; + for (size_t i = 0; i < count; i++) { + passed += results[i].passed ? 1U : 0U; + } + + printf("{\n"); + printf(" \"total\": %zu,\n", count); + printf(" \"passed\": %zu,\n", passed); + printf(" \"failed\": %zu,\n", count - passed); + printf(" \"tests\": [\n"); + for (size_t i = 0; i < count; i++) { + printf(" {\n"); + printf(" \"name\": "); + json_string(stdout, results[i].name); + printf(",\n"); + printf(" \"status\": \"%s\",\n", results[i].passed ? "pass" : "fail"); + printf(" \"duration_ms\": %.3f,\n", results[i].duration_ms); + printf(" \"failure_reason\": "); + if (results[i].passed) { + printf("null\n"); + } else { + json_string(stdout, results[i].failure_reason); + putchar('\n'); + } + printf(" }%s\n", i + 1 == count ? "" : ","); + } + printf(" ]\n"); + printf("}\n"); +} + +int main(int argc, char **argv) { + int json = 0; + const char *fixture = NULL; + selftest_result_t results[MAX_TESTS]; + size_t count = 0; + + for (int i = 1; i < argc; i++) { + if (strcmp(argv[i], "--json") == 0) { + json = 1; + } else if (strcmp(argv[i], "--fixture") == 0 && i + 1 < argc) { + fixture = argv[++i]; + } else { + fprintf(stderr, "usage: %s [--json] [--fixture PATH]\n", argv[0]); + return 2; + } + } + + results[count++] = run_memory_smoke(); + if (fixture) { + results[count++] = run_fixture(fixture); + } + + if (json) { + print_json_summary(results, count); + } else { + print_text_summary(results, count); + } + + for (size_t i = 0; i < count; i++) { + if (!results[i].passed) { + return 1; + } + } + return 0; +} From 150269750f846e56694f3cb67673ff03ad01e7de Mon Sep 17 00:00:00 2001 From: h1065153539-create Date: Sat, 20 Jun 2026 21:32:09 +0000 Subject: [PATCH 2/2] Add build diagnostics for 137421ad --- diagnostic/build-137421ad.json | 39 +++++++++++++++++++++++++++++++++ diagnostic/build-137421ad.logd | Bin 0 -> 38735 bytes 2 files changed, 39 insertions(+) create mode 100644 diagnostic/build-137421ad.json create mode 100644 diagnostic/build-137421ad.logd diff --git a/diagnostic/build-137421ad.json b/diagnostic/build-137421ad.json new file mode 100644 index 000000000..ec4cd71f5 --- /dev/null +++ b/diagnostic/build-137421ad.json @@ -0,0 +1,39 @@ +{ + "generated_at": "2026-06-20T21:31:15.481556+00:00", + "commit": "137421ad", + "change_commit": "137421ad578e7d080d714f1aeca6aa1331341e8e", + "base_commit": "d5241a4f6e76cb0bda32639d1f254aa06f967cf7", + "diagnostic_logd": "diagnostic/build-137421ad.logd", + "diagnostic_logd_error": null, + "chunked": false, + "chunk_size_bytes": null, + "password": "f7a896ad71390928e915", + "decrypt_command": "encryptly unpack diagnostic/build-137421ad.logd --password f7a896ad71390928e915", + "total_modules": 3, + "passed": 3, + "failed": 0, + "modules": [ + { + "name": "frailbox-selftest-json-fixtures", + "status": "PASS", + "elapsed_seconds": 0, + "artifact": "frailbox/build/frailbox_selftest", + "output": "make -C frailbox selftest-json-fixtures" + }, + { + "name": "frailbox-selftest-json-success", + "status": "PASS", + "elapsed_seconds": 0, + "artifact": null, + "output": "make -s -C frailbox selftest-json produced parseable JSON" + }, + { + "name": "frailbox-selftest-json-failure", + "status": "PASS", + "elapsed_seconds": 0, + "artifact": null, + "output": "failure fixture returns exit 1 and includes failure_reason" + } + ], + "pr_note": "Include the encrypted diagnostic logd artifact(s): diagnostic/build-137421ad.logd. The encrypted .logd is the required diagnostic content for PR review; this JSON file is metadata. Maintainers may ask you to remove these diagnostic artifacts before merging." +} diff --git a/diagnostic/build-137421ad.logd b/diagnostic/build-137421ad.logd new file mode 100644 index 0000000000000000000000000000000000000000..677eadce8606d5bc7c8434105687798ae45bbb3d GIT binary patch literal 38735 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 literal 0 HcmV?d00001