Files
pikasTech-unidesk/scripts/src/platform-infra-gitea-status-evaluator.test.ts
T

413 lines
15 KiB
TypeScript

import { describe, expect, test } from "bun:test";
import { spawnSync } from "node:child_process";
import { resolve } from "node:path";
const evaluator = resolve(import.meta.dir, "platform_infra_gitea_status_evaluator.py");
describe("Gitea source authority status evaluator", () => {
test("fails closed for GitHub hooks error objects and malformed lists", () => {
expect(evaluate({
action: "parse-github-hooks-response",
ok: false,
status: 403,
body: JSON.stringify({ message: "forbidden" }),
})).toEqual({ ok: false, status: 403, hooks: [], error: "github-hooks-http-403" });
expect(evaluate({
action: "parse-github-hooks-response",
ok: true,
status: 200,
body: JSON.stringify({ message: "not a list" }),
}).error).toBe("github-hooks-response-not-list");
expect(evaluate({
action: "parse-github-hooks-response",
ok: true,
status: 200,
body: JSON.stringify([{ id: 1 }, "malformed"]),
}).error).toBe("github-hooks-item-not-object");
});
test("reads GitHub hook URLs from object and string config shapes", () => {
expect(evaluate({ action: "github-hook-url", hook: { config: { url: "https://hooks.example/object" } } })).toBe("https://hooks.example/object");
expect(evaluate({ action: "github-hook-url", hook: { config: "https://hooks.example/string" } })).toBe("https://hooks.example/string");
expect(evaluate({ action: "github-hook-url", hook: "malformed" })).toBe("");
});
test("parses branch and exact snapshot from ls-remote output larger than the display tail budget", () => {
const head = "2".repeat(40);
const prefix = "refs/unidesk/snapshots/gitea-actions/unidesk-master-nc01";
const historical = Array.from({ length: 420 }, (_, index) => {
const sha = index.toString(16).padStart(40, "0");
return `${sha}\t${prefix}/${sha}`;
});
const output = [
`${head}\trefs/heads/master`,
`${head}\t${prefix}/${head}`,
...historical,
].join("\n");
expect(Buffer.byteLength(output)).toBeGreaterThan(20_000);
const refs = evaluate({ action: "parse-ls-remote", output });
expect(refs["refs/heads/master"]).toBe(head);
expect(refs[`${prefix}/${head}`]).toBe(head);
});
test("anchors the current committed head beyond more than fifty unrelated feature pushes", () => {
const head = "7".repeat(40);
const committed = committedInbox("master-durable-guid", head);
const headRecord = evaluate({
action: "select-committed-head-record",
repoKey: "fixture",
githubHead: head,
records: [committedInbox("old-guid", "6".repeat(40)), committed],
});
expect(headRecord.deliveryId).toBe("master-durable-guid");
expect(evaluate({
action: "select-committed-head-record",
repoKey: "fixture",
githubHead: "8".repeat(40),
records: [committed],
})).toBeNull();
const featureDeliveries = Array.from({ length: 75 }, (_, index) => ({
id: String(10_000 - index),
deliveryId: `feature-${index}`,
deliveredAt: `2026-07-11T23:${String(index % 60).padStart(2, "0")}:00Z`,
repository: "pikasTech/fixture",
ref: `refs/heads/feature-${index}`,
requestedCommit: index.toString(16).padStart(40, "0"),
}));
const masterDelivery = {
id: "42",
deliveryId: "master-durable-guid",
deliveredAt: "2026-07-11T22:00:00Z",
repository: "pikasTech/fixture",
ref: "refs/heads/main",
requestedCommit: head,
};
const failedRedelivery = {
id: "43",
deliveryId: "failed-redelivery-same-head",
deliveredAt: "2026-07-11T23:59:59Z",
statusCode: 502,
repository: "pikasTech/fixture",
ref: "refs/heads/main",
requestedCommit: head,
};
const selected = evaluate({
action: "select-target-delivery",
deliveries: [...featureDeliveries, failedRedelivery, masterDelivery],
repository: "pikasTech/fixture",
ref: "refs/heads/main",
requestedCommit: head,
deliveryId: headRecord.deliveryId,
});
expect(selected).toEqual(masterDelivery);
});
test("selects only the exact branch-derived immutable snapshot", () => {
const head = "b".repeat(40);
const result = evaluate({
action: "select-snapshot",
branchCommit: head,
snapshotPrefix: "refs/snapshots/source",
refs: {
"refs/snapshots/source/zzzz": "f".repeat(40),
[`refs/snapshots/source/${head}`]: head,
},
});
expect(result).toEqual({
expectedSnapshotRef: `refs/snapshots/source/${head}`,
snapshotRef: `refs/snapshots/source/${head}`,
snapshotCommit: head,
sourceBundleReady: true,
});
const missing = evaluate({
action: "select-snapshot",
branchCommit: head,
snapshotPrefix: "refs/snapshots/source",
refs: { "refs/snapshots/source/zzzz": "f".repeat(40) },
});
expect(missing.snapshotRef).toBeNull();
expect(missing.sourceBundleReady).toBe(false);
});
test("latest failed delivery cannot be hidden by an older successful bridge event", () => {
const head = "b".repeat(40);
const row = evaluateRow({
head,
branchCommit: head,
snapshotCommit: head,
deliveryId: "new-delivery",
statusCode: 502,
bridgeEvents: [terminalEvent("old-delivery", head)],
inboxRecords: [committedInbox("old-delivery", head)],
});
expect(row.authorityMatches).toBe(true);
expect(row.deliveryAccepted).toBe(false);
expect(row.correlatedBridgeEvent).toBeNull();
expect(row.bridgeEventStale).toBe(true);
expect(row.staleReason).toBe("target-branch-delivery-failed");
});
test("missing selected delivery never inherits latest push status", () => {
const head = "7".repeat(40);
const row = evaluate({
action: "evaluate-repository",
repo: { key: "fixture", upstream: { repository: "pikasTech/fixture", branch: "main" }, snapshot: { prefix: "refs/snapshots/source" } },
hook: {
hookId: 1,
hookReady: true,
latestPush: { deliveryId: "unrelated-latest", event: "push", statusCode: 202, repository: "pikasTech/fixture", ref: "refs/heads/main", requestedCommit: head },
selectedPush: null,
},
head: { ok: true, sha: head },
mirror: { branchCommit: head, snapshotCommit: head, snapshotRef: `refs/snapshots/source/${head}` },
bridgeEvents: [],
inboxRecords: [],
});
expect(row.latestPushDelivery.deliveryId).toBe("unrelated-latest");
expect(row.selectedPushDelivery).toBeNull();
expect(row.deliveryId).toBe("");
expect(row.deliveryAccepted).toBe(false);
});
test("selects the exact durable proof across duplicate exact-url hooks without hiding topology drift", () => {
const head = "8".repeat(40);
const row = evaluate({
action: "evaluate-repository",
repo: {
key: "fixture",
upstream: { repository: "pikasTech/fixture", branch: "main" },
snapshot: { prefix: "refs/snapshots/source" },
},
hook: {
hookId: 22,
hookReady: false,
active: true,
status: 200,
latest: { hookId: 11, deliveryId: "duplicate-unpersisted", event: "push", statusCode: 202 },
latestPush: { hookId: 11, deliveryId: "duplicate-unpersisted", event: "push", statusCode: 202 },
selectedPush: { hookId: 22, deliveryId: "durable-exact", event: "push", statusCode: 202, repository: "pikasTech/fixture", ref: "refs/heads/main", requestedCommit: head },
deliverySelectionReason: "committed-durable-proof-for-github-head",
matchingHookCount: 2,
matchingHookIds: [11, 22],
hookTopologyReason: "github-hook-duplicate-exact-url",
},
head: { ok: true, sha: head },
mirror: {
branchCommit: head,
snapshotCommit: head,
snapshotRef: `refs/snapshots/source/${head}`,
},
bridgeEvents: [terminalEvent("durable-exact", head)],
inboxRecords: [committedInbox("durable-exact", head)],
});
expect(row.latestPushDelivery.deliveryId).toBe("duplicate-unpersisted");
expect(row.selectedPushDelivery.deliveryId).toBe("durable-exact");
expect(row.deliveryId).toBe("durable-exact");
expect(row.deliverySelectionReason).toBe("committed-durable-proof-for-github-head");
expect(row.durableInboxCommitted).toBe(true);
expect(row.bridgeEventStale).toBe(false);
expect(row.hookReady).toBe(false);
expect(row.hookTopologyReason).toBe("github-hook-duplicate-exact-url");
});
test("MATCH=false is always STALE=true and exact delivery correlation is repo isolated", () => {
const head = "c".repeat(40);
const old = "b".repeat(40);
const row = evaluateRow({
head,
branchCommit: old,
snapshotCommit: old,
deliveryId: "3830578865896423400",
statusCode: 202,
bridgeEvents: [
{ ...terminalEvent("3830578865896423400", head), repo: "other" },
terminalEvent("3830578865896423400", head),
],
});
expect(row.deliveryId).toBe("3830578865896423400");
expect(row.correlatedBridgeEvent.repo).toBe("fixture");
expect(row.authorityMatches).toBe(false);
expect(row.bridgeEventStale).toBe(true);
expect(row.staleReason).toBe("gitea-branch-behind-github");
});
test("a correlated terminal event and exact refs prove current authority", () => {
const head = "d".repeat(40);
const row = evaluateRow({
head,
branchCommit: head,
snapshotCommit: head,
deliveryId: "delivery-ok",
statusCode: 202,
bridgeEvents: [terminalEvent("delivery-ok", head)],
});
expect(row.authorityMatches).toBe(true);
expect(row.bridgeEventStale).toBe(false);
expect(row.staleReason).toBeNull();
});
test("an out-of-order delivery may prove a newer authority without rolling it back", () => {
const head = "e".repeat(40);
const older = "d".repeat(40);
const event = terminalEvent("delivery-old", older);
event.authorityCommit = head;
event.disposition = "superseded-with-immutable-snapshot";
const row = evaluateRow({
head,
branchCommit: head,
snapshotCommit: head,
deliveryId: "delivery-old",
requestedCommit: older,
statusCode: 202,
bridgeEvents: [event],
inboxRecords: [committedInbox("delivery-old", older, head, "superseded-with-immutable-snapshot")],
});
expect(row.authorityMatches).toBe(true);
expect(row.bridgeEventStale).toBe(false);
});
test("accepted, processing and failed inbox states never masquerade as committed refs", () => {
const head = "f".repeat(40);
for (const state of ["accepted", "processing", "failed"]) {
const row = evaluateRow({
head,
branchCommit: head,
snapshotCommit: head,
deliveryId: `delivery-${state}`,
statusCode: 202,
bridgeEvents: [],
inboxRecords: [{ ...committedInbox(`delivery-${state}`, head), state, result: null }],
});
expect(row.authorityMatches).toBe(true);
expect(row.durableInboxState).toBe(state);
expect(row.bridgeEventStale).toBe(true);
expect(row.staleReason).toBe(`durable-inbox-${state}-not-committed`);
}
});
test("missing committed watermark or mismatched proof remains stale", () => {
const head = "a".repeat(40);
const missing = evaluateRow({
head,
branchCommit: head,
snapshotCommit: head,
deliveryId: "delivery-missing",
statusCode: 202,
bridgeEvents: [],
inboxRecords: [],
});
expect(missing.staleReason).toBe("no-correlated-durable-inbox-record");
const wrong = evaluateRow({
head,
branchCommit: head,
snapshotCommit: head,
deliveryId: "delivery-wrong",
statusCode: 202,
bridgeEvents: [],
inboxRecords: [committedInbox("delivery-wrong", "b".repeat(40))],
});
expect(wrong.staleReason).toBe("correlated-inbox-proof-head-mismatch");
});
test("a delivery older than the persistent journal is marked pre-durable-bootstrap without faking committed", () => {
const head = "9".repeat(40);
const row = evaluateRow({
head,
branchCommit: head,
snapshotCommit: head,
deliveryId: "bootstrap-delivery",
statusCode: 202,
deliveredAt: "2026-07-11T06:00:00.000Z",
journalCreatedAt: "2026-07-11T07:00:00.000Z",
bridgeEvents: [],
inboxRecords: [],
});
expect(row.authorityMatches).toBe(true);
expect(row.durableInboxState).toBe("pre-durable-bootstrap");
expect(row.preDurableBootstrap).toBe(true);
expect(row.durableInboxCommitted).toBe(false);
expect(row.bridgeEventStale).toBe(false);
expect(row.staleReason).toBeNull();
});
});
function evaluateRow(input: {
head: string;
branchCommit: string;
snapshotCommit: string;
deliveryId: string;
statusCode: number;
bridgeEvents: Array<Record<string, unknown>>;
inboxRecords?: Array<Record<string, unknown>>;
deliveredAt?: string;
journalCreatedAt?: string;
requestedCommit?: string;
}): Record<string, any> {
return evaluate({
action: "evaluate-repository",
repo: {
key: "fixture",
upstream: { repository: "pikasTech/fixture", branch: "main" },
snapshot: { prefix: "refs/snapshots/source" },
},
hook: {
hookId: 1,
hookReady: true,
active: true,
status: 200,
latest: { deliveryId: input.deliveryId, event: "push", statusCode: input.statusCode, deliveredAt: input.deliveredAt },
latestPush: { deliveryId: input.deliveryId, event: "push", statusCode: input.statusCode, deliveredAt: input.deliveredAt, repository: "pikasTech/fixture", ref: "refs/heads/main", requestedCommit: input.requestedCommit ?? input.head },
selectedPush: { deliveryId: input.deliveryId, event: "push", statusCode: input.statusCode, deliveredAt: input.deliveredAt, repository: "pikasTech/fixture", ref: "refs/heads/main", requestedCommit: input.requestedCommit ?? input.head },
},
head: { ok: true, sha: input.head },
mirror: {
branchCommit: input.branchCommit,
snapshotCommit: input.snapshotCommit,
snapshotRef: `refs/snapshots/source/${input.snapshotCommit}`,
},
bridgeEvents: input.bridgeEvents,
inboxRecords: input.inboxRecords ?? [committedInbox(input.deliveryId, input.head)],
journal: input.journalCreatedAt === undefined ? undefined : { version: 1, kind: "GiteaGithubSyncDurableInbox", createdAt: input.journalCreatedAt },
});
}
function committedInbox(deliveryId: string, sourceCommit: string, authorityCommit = sourceCommit, disposition = "atomic-source-authority-committed"): Record<string, unknown> {
return {
deliveryId,
repo: "fixture",
requestedCommit: sourceCommit,
state: "committed",
result: {
sourceCommit,
authorityCommit,
snapshotRef: `refs/snapshots/source/${sourceCommit}`,
disposition,
},
};
}
function terminalEvent(deliveryId: string, sourceCommit: string): Record<string, unknown> {
return {
event: "github-to-gitea-sync",
repo: "fixture",
deliveryId,
ok: true,
terminal: true,
sourceCommit,
authorityCommit: sourceCommit,
disposition: "atomic-source-authority-committed",
};
}
function evaluate(payload: Record<string, unknown>): Record<string, any> {
const result = spawnSync("python3", [evaluator], {
input: JSON.stringify(payload),
encoding: "utf8",
env: { ...process.env, PYTHONDONTWRITEBYTECODE: "1" },
});
expect(result.status).toBe(0);
return JSON.parse(result.stdout);
}