fix: 归一 PaC admission 等价差异
This commit is contained in:
@@ -331,6 +331,31 @@ describe("Tekton admission canonicalization", () => {
|
||||
expect(canonicalizePacPipelineSpec(negative)).toEqual(negative);
|
||||
expect(nativeCanonicalize(negative)).toEqual(negative);
|
||||
});
|
||||
|
||||
test("normalizes equivalent PipelineRun timeout spellings without hiding different values", () => {
|
||||
const seconds = { spec: { timeouts: { pipeline: "600s" } } };
|
||||
const admitted = { spec: { timeouts: { pipeline: "10m0s" } } };
|
||||
const different = { spec: { timeouts: { pipeline: "601s" } } };
|
||||
const unrelated = { timeouts: { pipeline: "600s" } };
|
||||
expect(canonicalizePacPipelineSpec(seconds)).toEqual(canonicalizePacPipelineSpec(admitted));
|
||||
expect(nativeCanonicalize(seconds)).toEqual(nativeCanonicalize(admitted));
|
||||
expect(canonicalSha256(seconds)).toBe(canonicalSha256(admitted));
|
||||
expect(nativeCanonicalSha256(admitted)).toBe(canonicalSha256(seconds));
|
||||
expect(firstPacSourceArtifactDrift(seconds, admitted)).toBeNull();
|
||||
expect(firstPacSourceArtifactDrift(seconds, different)?.path).toBe("$.spec.timeouts.pipeline");
|
||||
expect(canonicalizePacPipelineSpec(unrelated)).toEqual(unrelated);
|
||||
expect(nativeCanonicalize(unrelated)).toEqual(unrelated);
|
||||
});
|
||||
|
||||
test("removes only empty workspace claim metadata and status added by admission", () => {
|
||||
const desired = { spec: { workspaces: [{ name: "source", volumeClaimTemplate: { spec: { accessModes: ["ReadWriteOnce"] } } }] } };
|
||||
const admitted = { spec: { workspaces: [{ name: "source", volumeClaimTemplate: { metadata: {}, spec: { accessModes: ["ReadWriteOnce"] }, status: {} } }] } };
|
||||
const labeled = { spec: { workspaces: [{ name: "source", volumeClaimTemplate: { metadata: { labels: { owner: "test" } }, spec: { accessModes: ["ReadWriteOnce"] } } }] } };
|
||||
expect(canonicalizePacPipelineSpec(admitted)).toEqual(canonicalizePacPipelineSpec(desired));
|
||||
expect(nativeCanonicalize(admitted)).toEqual(nativeCanonicalize(desired));
|
||||
expect(firstPacSourceArtifactDrift(desired, admitted)).toBeNull();
|
||||
expect(firstPacSourceArtifactDrift(desired, labeled)?.path).toBe("$.spec.workspaces[0].volumeClaimTemplate.metadata");
|
||||
});
|
||||
});
|
||||
|
||||
describe("source artifact serialization", () => {
|
||||
@@ -636,6 +661,9 @@ describe("runtime source-commit selection", () => {
|
||||
expect(sourceArtifactRuntimeAlignment(aligned, exact, sourceCommit)).toBe("aligned");
|
||||
expect(sourceArtifactRuntimeAlignment(drifted, exact, sourceCommit)).toBe("drifted");
|
||||
expect(sourceArtifactRuntimeAlignment(aligned, { ...exact, clean: false }, sourceCommit)).toBe("unavailable");
|
||||
const embeddedOnly = { ...structuredClone(aligned), live: { ...aligned.live, status: "missing" as const, provenanceAligned: false } };
|
||||
expect(sourceArtifactRuntimeAlignment(embeddedOnly, exact, sourceCommit, "embedded-pipeline-spec")).toBe("aligned");
|
||||
expect(sourceArtifactRuntimeAlignment(embeddedOnly, exact, sourceCommit, "remote-pipeline-annotation")).toBe("missing");
|
||||
expect(JSON.stringify([aligned, drifted])).not.toContain("pending");
|
||||
});
|
||||
|
||||
|
||||
Reference in New Issue
Block a user