Files
tyx_AI_xhs/tests/worker/wp0-08-log-availability.test.ts

53 lines
2.3 KiB
TypeScript

import { randomUUID } from "node:crypto";
import { mkdirSync, writeFileSync } from "node:fs";
import { join } from "node:path";
import { tmpdir } from "node:os";
import { expect, it, vi } from "vitest";
import { ManagedStorage } from "../../apps/api/src/managed-storage.js";
import { WorkerAiCallGate } from "../../apps/worker/src/ai-call-gate.js";
import { WorkerStorageStatus } from "../../apps/worker/src/storage-status.js";
import { StructuredJsonlLogger } from "../../apps/worker/src/structured-log.js";
it("TDD-WP0-LOG-001 blocks AI before an upstream call when logging becomes unavailable", async () => {
const root = join(tmpdir(), `dada-wp0-08-worker-${randomUUID()}`);
mkdirSync(root, { recursive: true });
const blockedDirectory = join(root, "blocked-log-directory");
writeFileSync(blockedDirectory, "not-a-directory");
const databasePath = join(root, "db", "dada.sqlite3");
const managedStorage = new ManagedStorage({ dataRoot: root, databasePath });
const workerStorage = new WorkerStorageStatus(databasePath);
let storageStatus: "active" | "unavailable" = "active";
const logger = new StructuredJsonlLogger({
component: "worker",
directory: blockedDirectory,
onWriteFailure: () => {
storageStatus = "unavailable";
workerStorage.markLogUnavailable();
},
});
const externalCall = vi.fn(async () => ({ provider_request_id: "must-not-exist" }));
const gate = new WorkerAiCallGate({ getStorageStatus: () => storageStatus, logger });
await expect(gate.execute("corr_worker_log_failure", "job_internal", externalCall)).resolves.toEqual({
reason: "storage_unavailable",
status: "blocked",
});
expect(storageStatus).toBe("unavailable");
expect(workerStorage.getStatus()).toBe("unavailable");
expect(managedStorage.getState().storage_status).toBe("unavailable");
expect(externalCall).not.toHaveBeenCalled();
const directory = process.env.DADA_EVIDENCE_DIR_LOG;
if (directory) {
mkdirSync(directory, { recursive: true });
writeFileSync(join(directory, "external-calls.json"), `${JSON.stringify({ calls: 0, reason: "storage_unavailable", status: "passed" }, null, 2)}\n`);
}
const { rm } = await import("node:fs/promises");
workerStorage.close();
managedStorage.close();
await rm(root, { force: true, recursive: true });
});