feat: complete TASK-WP0-08 logging
This commit is contained in:
@@ -0,0 +1,52 @@
|
||||
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 });
|
||||
});
|
||||
Reference in New Issue
Block a user