39 lines
2.6 KiB
JavaScript
39 lines
2.6 KiB
JavaScript
import assert from "node:assert/strict";
|
|
import fs from "node:fs";
|
|
import { evidencePath, expectedEvidenceIdentity, sha256 } from "./v1-acceptance-lib.mjs";
|
|
|
|
const { ledgerSha256, packageSha256, plan, toolSourceSha256 } = expectedEvidenceIdentity();
|
|
assert.ok(fs.existsSync(evidencePath), "V1 acceptance evidence is missing; run release:v1-acceptance");
|
|
const manifest = JSON.parse(fs.readFileSync(evidencePath, "utf8"));
|
|
|
|
assert.equal(manifest.schemaVersion, 1);
|
|
assert.equal(manifest.sourceSha256, ledgerSha256, "V1 acceptance evidence is stale relative to parity ledger");
|
|
assert.equal(manifest.packageSha256, packageSha256, "V1 acceptance evidence is stale relative to web package scripts");
|
|
assert.deepEqual(manifest.toolSourceSha256, toolSourceSha256, "V1 acceptance evidence is stale relative to acceptance tools");
|
|
assert.ok(Number.isFinite(Date.parse(manifest.generatedAt)), "V1 acceptance generatedAt is invalid");
|
|
assert.equal(manifest.summary.families, plan.familyCount);
|
|
assert.equal(manifest.summary.declarations, plan.declarationCount);
|
|
assert.equal(manifest.summary.unique, plan.uniqueCount);
|
|
assert.equal(manifest.summary.passed, plan.uniqueCount);
|
|
assert.equal(manifest.summary.failed, 0);
|
|
assert.equal(manifest.environment.blender.includes("USD=True"), true, "acceptance Blender must provide USD");
|
|
assert.match(manifest.environment.blenderExecutableSha256, /^[a-f0-9]{64}$/, "acceptance Blender executable hash is missing");
|
|
assert.match(manifest.environment.blenderArchiveSha256, /^[a-f0-9]{64}$/, "acceptance Blender archive hash is missing");
|
|
assert.equal(manifest.results.length, plan.uniqueCount);
|
|
assert.deepEqual(manifest.results.map((result) => result.token), plan.entries.map((entry) => entry.token));
|
|
|
|
for (const [index, result] of manifest.results.entries()) {
|
|
const expected = plan.entries[index];
|
|
assert.deepEqual(result.familyIds, expected.familyIds, `${result.token}: family mapping drifted`);
|
|
assert.equal(result.command, expected.command, `${result.token}: command drifted`);
|
|
assert.equal(result.exitCode, 0, `${result.token}: command failed`);
|
|
assert.ok(result.durationMs >= 0, `${result.token}: duration is invalid`);
|
|
assert.match(result.outputSha256, /^[a-f0-9]{64}$/, `${result.token}: output hash is missing`);
|
|
assert.equal(result.outputSha256, sha256(result.output), `${result.token}: stored output does not match its hash`);
|
|
assert.ok(result.output.trim().length > 0, `${result.token}: output is empty`);
|
|
}
|
|
|
|
process.stdout.write(
|
|
`v1-acceptance-evidence-ok families=${plan.familyCount} declarations=${plan.declarationCount} unique=${plan.uniqueCount} sha256=${sha256(fs.readFileSync(evidencePath))}\n`,
|
|
);
|