From 8fea26de969f3c061fa88a13bfdf259148815d1a Mon Sep 17 00:00:00 2001 From: Yongzhi Wei <276409147+wyongzhi@users.noreply.github.com> Date: Fri, 11 Sep 2026 01:13:19 -0700 Subject: [PATCH] test: pin job-name length limits after parameter substitution Existing boundary fixtures use literal job names, so an implementation that checks the literal at decode but mishandles the resolved value at job creation still passes the suite. These fixtures set the job name via a bare {{Param.N}} substitution so the limit is enforced after the format string has been resolved: 129 chars with no extension is rejected, 512 chars with FEATURE_BUNDLE_1 is accepted, and 513 chars is rejected. The valid 512-char fixture asserts the task's output (the resolved name length), because the runner only checks expected output for valid job tests; without it a job-creation failure would still be reported as a pass. Signed-off-by: Yongzhi Wei <276409147+wyongzhi@users.noreply.github.com> --- ...-job-name-512-chars-substitution.test.yaml | 25 +++++++++++++++++++ ...e-513-chars-substitution.invalid.test.yaml | 21 ++++++++++++++++ ...me-too-long-substitution.invalid.test.yaml | 20 +++++++++++++++ 3 files changed, 66 insertions(+) create mode 100644 conformance-tests/2023-09/FEATURE_BUNDLE_1/jobs/1.1.1--job-name-512-chars-substitution.test.yaml create mode 100644 conformance-tests/2023-09/FEATURE_BUNDLE_1/jobs/1.1.1--job-name-513-chars-substitution.invalid.test.yaml create mode 100644 conformance-tests/2023-09/base/jobs/1.1.1--job-name-too-long-substitution.invalid.test.yaml diff --git a/conformance-tests/2023-09/FEATURE_BUNDLE_1/jobs/1.1.1--job-name-512-chars-substitution.test.yaml b/conformance-tests/2023-09/FEATURE_BUNDLE_1/jobs/1.1.1--job-name-512-chars-substitution.test.yaml new file mode 100644 index 00000000..0d3ff6b5 --- /dev/null +++ b/conformance-tests/2023-09/FEATURE_BUNDLE_1/jobs/1.1.1--job-name-512-chars-substitution.test.yaml @@ -0,0 +1,25 @@ +# Spec 1.1.1 with FEATURE_BUNDLE_1: max length 512 characters, +# checked after the format string is resolved. The name resolves to 512 +# characters via {{Param.N}} and must be accepted. The task prints the +# resolved length so a job-creation failure cannot be reported as a pass. +template: + specificationVersion: jobtemplate-2023-09 + extensions: + - FEATURE_BUNDLE_1 + name: "{{Param.N}}" + parameterDefinitions: + - name: N + type: STRING + default: "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA" + steps: + - name: Step1 + script: + actions: + onRun: + command: python + args: + - "-c" + - "print('OUTPUT:' + str(len(r'{{Param.N}}')))" +expected: + output: + - OUTPUT:512 diff --git a/conformance-tests/2023-09/FEATURE_BUNDLE_1/jobs/1.1.1--job-name-513-chars-substitution.invalid.test.yaml b/conformance-tests/2023-09/FEATURE_BUNDLE_1/jobs/1.1.1--job-name-513-chars-substitution.invalid.test.yaml new file mode 100644 index 00000000..6d8ff2a3 --- /dev/null +++ b/conformance-tests/2023-09/FEATURE_BUNDLE_1/jobs/1.1.1--job-name-513-chars-substitution.invalid.test.yaml @@ -0,0 +1,21 @@ +# Spec 1.1.1 with FEATURE_BUNDLE_1: max length 512 characters, +# checked after the format string is resolved. The name resolves to 513 +# characters via {{Param.N}}, so job creation must fail. +template: + specificationVersion: jobtemplate-2023-09 + extensions: + - FEATURE_BUNDLE_1 + name: "{{Param.N}}" + parameterDefinitions: + - name: N + type: STRING + default: "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA" + steps: + - name: Step1 + script: + actions: + onRun: + command: python + args: + - "-c" + - "print()" diff --git a/conformance-tests/2023-09/base/jobs/1.1.1--job-name-too-long-substitution.invalid.test.yaml b/conformance-tests/2023-09/base/jobs/1.1.1--job-name-too-long-substitution.invalid.test.yaml new file mode 100644 index 00000000..7816fe88 --- /dev/null +++ b/conformance-tests/2023-09/base/jobs/1.1.1--job-name-too-long-substitution.invalid.test.yaml @@ -0,0 +1,20 @@ +# Spec 1.1.1 : max length 128 characters, checked after the format +# string is resolved. The name is a bare {{Param.N}} whose value is 129 +# characters, so job creation must fail even though the template text is +# short and passes decode. +template: + specificationVersion: jobtemplate-2023-09 + name: "{{Param.N}}" + parameterDefinitions: + - name: N + type: STRING + default: "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA" + steps: + - name: Step1 + script: + actions: + onRun: + command: python + args: + - "-c" + - "print()"