2026-07-26 15:39:42 +08:00
|
|
|
"use strict";
|
|
|
|
|
const test = require("node:test");
|
|
|
|
|
const assert = require("node:assert/strict");
|
|
|
|
|
const fs = require("node:fs");
|
|
|
|
|
const os = require("node:os");
|
|
|
|
|
const path = require("node:path");
|
|
|
|
|
const { processOne } = require("./deployment-event-worker");
|
|
|
|
|
test("resident deployment agent consumes only an explicit immutable event and writes a receipt", async () => {
|
|
|
|
|
const root = fs.mkdtempSync(path.join(os.tmpdir(), "lake-lamp-deploy-worker-")), queue = path.join(root, "queue"), receipts = path.join(root, "receipts"), sha = "a".repeat(40);
|
|
|
|
|
fs.mkdirSync(queue); fs.writeFileSync(path.join(queue, "event.json"), JSON.stringify({ schema: "guanghu.deployment-event/v1", event_id: "event-1", state: "queued_for_resident_agent", repo: "bingshuo/guanghu-ice-heart", branch: "main", commit_sha: sha, workorder_id: "order-1", resource: `GLS-0239-DEPLOY@${sha}`, manifest: "deployment/requests/GLS-0239.json" }));
|
|
|
|
|
try {
|
|
|
|
|
const result = await processOne({ queueDir: queue, receiptsDir: receipts, registry: { "bingshuo/guanghu-ice-heart": { repo_url: "https://example.invalid/code.git" } }, provisionFn: async request => { assert.equal(request.resource, `GLS-0239-DEPLOY@${sha}`); return { ok: true, unit: "example.service" }; } });
|
|
|
|
|
assert.equal(result.state, "DEPLOYED_AND_VERIFIED");
|
|
|
|
|
assert.equal(JSON.parse(fs.readFileSync(path.join(receipts, "event-1.json"))).diagnostic_code, "deployment_succeeded");
|
|
|
|
|
} finally { fs.rmSync(root, { recursive: true, force: true }); }
|
|
|
|
|
});
|
2026-07-26 17:56:47 +08:00
|
|
|
test("resident agent rechecks source ownership before deployment", async () => {
|
|
|
|
|
const root = fs.mkdtempSync(path.join(os.tmpdir(), "lake-lamp-source-policy-"));
|
|
|
|
|
const queue = path.join(root, "queue"), receipts = path.join(root, "receipts"), sha = "b".repeat(40);
|
|
|
|
|
fs.mkdirSync(queue);
|
|
|
|
|
fs.writeFileSync(path.join(queue, "event.json"), JSON.stringify({
|
|
|
|
|
schema: "guanghu.deployment-event/v1",
|
|
|
|
|
event_id: "event-personal-source",
|
|
|
|
|
state: "queued_for_resident_agent",
|
|
|
|
|
repo: "bingshuo/hololake-platform",
|
|
|
|
|
branch: "main",
|
|
|
|
|
commit_sha: sha,
|
|
|
|
|
workorder_id: "order-2",
|
|
|
|
|
resource: `HLP-PERSONAL-DEPLOY@${sha}`,
|
|
|
|
|
manifest: "deployment/requests/HLP-PERSONAL.json",
|
|
|
|
|
authorizer_id: "ICE-GL∞",
|
|
|
|
|
persona_id: "AGE-TEAM-001",
|
|
|
|
|
execution_runtime_id: "SYS-GLW-ZY-EXEC-0001",
|
|
|
|
|
target: "JD-FD-PRIMARY",
|
|
|
|
|
deployment_source: {
|
|
|
|
|
repository_id: "REPO-008",
|
|
|
|
|
channel_id: "HLP-CHANNEL-0001",
|
|
|
|
|
distribution: "personal",
|
|
|
|
|
owner_id: "ICE-GL∞",
|
|
|
|
|
},
|
|
|
|
|
}));
|
|
|
|
|
let provisioned = false;
|
|
|
|
|
try {
|
|
|
|
|
const result = await processOne({
|
|
|
|
|
queueDir: queue,
|
|
|
|
|
receiptsDir: receipts,
|
|
|
|
|
registry: {
|
|
|
|
|
"bingshuo/hololake-platform": {
|
|
|
|
|
repo_url: "https://example.invalid/hololake-platform.git",
|
|
|
|
|
deployment_policy: {
|
|
|
|
|
profiles: [{
|
|
|
|
|
repository_id: "REPO-008",
|
|
|
|
|
channel_id: "HLP-CHANNEL-0001",
|
|
|
|
|
distribution: "personal",
|
|
|
|
|
source_owner_id: "ICE-GL∞",
|
|
|
|
|
allowed_authorizers: ["ICE-GL∞"],
|
|
|
|
|
allowed_personas: ["ICE-GL-ZY001"],
|
|
|
|
|
allowed_execution_runtimes: ["SYS-GLW-ZY-EXEC-0001"],
|
|
|
|
|
allowed_targets: ["JD-FD-PRIMARY"],
|
|
|
|
|
}],
|
|
|
|
|
},
|
|
|
|
|
},
|
|
|
|
|
},
|
|
|
|
|
provisionFn: async () => {
|
|
|
|
|
provisioned = true;
|
|
|
|
|
return { ok: true };
|
|
|
|
|
},
|
|
|
|
|
});
|
|
|
|
|
assert.equal(result.state, "REJECTED");
|
|
|
|
|
assert.equal(result.receipt.diagnostic_code, "deployment_persona_not_allowed");
|
|
|
|
|
assert.equal(provisioned, false);
|
|
|
|
|
} finally { fs.rmSync(root, { recursive: true, force: true }); }
|
|
|
|
|
});
|