130 lines
4.3 KiB
JavaScript
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"]
|
|
);
|
|
});
|