Files
pikasTech-HWLAB/scripts/src/dev-deploy-apply.test.mjs
T
2026-05-23 00:18:05 +00:00

130 lines
4.3 KiB
JavaScript

import assert from "node:assert/strict";
import test from "node:test";
import { compareRuntimeIdentityEnv, decideDevTemplateJobReplacement, resolveApplySourceCommit } from "./dev-deploy-apply.mjs";
test("allowlisted suspended template Job image change plans replacement", () => {
const decision = decideDevTemplateJobReplacement({
jobName: "hwlab-agent-worker-template",
jobNamespace: "hwlab-dev",
desiredSuspended: true,
liveExists: true,
liveSuspended: true,
oldImages: [
{
name: "hwlab-agent-worker",
serviceId: "hwlab-agent-worker",
image: "127.0.0.1:5000/hwlab/hwlab-agent-worker:old1234"
}
],
newImages: [
{
name: "hwlab-agent-worker",
serviceId: "hwlab-agent-worker",
image: "127.0.0.1:5000/hwlab/hwlab-agent-worker:new5678"
}
]
});
assert.equal(decision.replace, true);
assert.equal(decision.result, "planned");
assert.equal(decision.namespace, "hwlab-dev");
assert.equal(decision.jobName, "hwlab-agent-worker-template");
assert.equal(decision.oldImage, "127.0.0.1:5000/hwlab/hwlab-agent-worker:old1234");
assert.equal(decision.newImage, "127.0.0.1:5000/hwlab/hwlab-agent-worker:new5678");
});
test("matching allowlisted suspended template Job image does not replace", () => {
const image = "127.0.0.1:5000/hwlab/hwlab-cli:73b379f";
const decision = decideDevTemplateJobReplacement({
jobName: "hwlab-cli-template",
jobNamespace: "hwlab-dev",
desiredSuspended: true,
liveExists: true,
liveSuspended: true,
oldImages: [{ name: "hwlab-cli", serviceId: "hwlab-cli", image }],
newImages: [{ name: "hwlab-cli", serviceId: "hwlab-cli", image }]
});
assert.equal(decision.replace, false);
assert.equal(decision.result, "not_needed");
});
test("replacement policy refuses non-allowlisted or active Jobs", () => {
const ignored = decideDevTemplateJobReplacement({
jobName: "some-other-job",
jobNamespace: "hwlab-dev",
desiredSuspended: true,
liveExists: true,
liveSuspended: true,
oldImages: [{ name: "worker", serviceId: "worker", image: "image:old" }],
newImages: [{ name: "worker", serviceId: "worker", image: "image:new" }]
});
assert.equal(ignored.replace, false);
assert.equal(ignored.result, "ignored");
const active = decideDevTemplateJobReplacement({
jobName: "hwlab-cli-template",
jobNamespace: "hwlab-dev",
desiredSuspended: true,
liveExists: true,
liveSuspended: false,
oldImages: [{ name: "hwlab-cli", serviceId: "hwlab-cli", image: "image:old" }],
newImages: [{ name: "hwlab-cli", serviceId: "hwlab-cli", image: "image:new" }]
});
assert.equal(active.replace, false);
assert.equal(active.result, "blocked");
});
test("apply source commit follows deploy/catalog artifact identity", () => {
assert.equal(
resolveApplySourceCommit({ commitId: "73b379f" }, { commitId: "73b379f" }, "cb35ada68606"),
"73b379f"
);
assert.equal(
resolveApplySourceCommit({ commitId: "73b379f" }, { commitId: "deadbee" }, "cb35ada68606"),
"cb35ada68606"
);
});
test("runtime identity env comparator accepts matching commit image and tag", () => {
const comparison = compareRuntimeIdentityEnv(
{
HWLAB_COMMIT_ID: "7de6edd",
HWLAB_IMAGE: "127.0.0.1:5000/hwlab/hwlab-cloud-web:7de6edd",
HWLAB_IMAGE_TAG: "7de6edd"
},
{
HWLAB_COMMIT_ID: "7de6edd2c41fb50dcb007353780338be8832b27e",
HWLAB_IMAGE: "127.0.0.1:5000/hwlab/hwlab-cloud-web:7de6edd",
HWLAB_IMAGE_TAG: "7de6edd"
}
);
assert.equal(comparison.status, "match");
assert.equal(comparison.matchesDesired, true);
assert.deepEqual(comparison.drift, []);
});
test("runtime identity env comparator detects stale cloud-web env drift", () => {
const comparison = compareRuntimeIdentityEnv(
{
HWLAB_COMMIT_ID: "c7de474",
HWLAB_IMAGE: "127.0.0.1:5000/hwlab/hwlab-cloud-web:c7de474",
HWLAB_IMAGE_TAG: "c7de474"
},
{
HWLAB_COMMIT_ID: "7de6edd",
HWLAB_IMAGE: "127.0.0.1:5000/hwlab/hwlab-cloud-web:7de6edd",
HWLAB_IMAGE_TAG: "7de6edd"
}
);
assert.equal(comparison.status, "drift");
assert.equal(comparison.matchesDesired, false);
assert.deepEqual(
comparison.drift.map((field) => field.name),
["HWLAB_COMMIT_ID", "HWLAB_IMAGE", "HWLAB_IMAGE_TAG"]
);
});