From 52c38699e681c0543f6468f215e39e67e9c6e93f Mon Sep 17 00:00:00 2001 From: David Leong <116610336+leongdl@users.noreply.github.com> Date: Sat, 1 Aug 2026 19:35:21 -0700 Subject: [PATCH] test: Add base 2023-09 conformance fixtures for coverage gaps 34 new fixtures plus 6 strengthened: INT/FLOAT numeric boundary accepts, inclusive-boundary accepts, onExit-runs, cancelation defaults, SimpleAction argv desugaring, reference-grammar negatives, cross-type field misuse, EXPR/FEATURE_BUNDLE_1 gating from the base side, post-resolution name length, and off-diagonal forbidden lines added to six associative combination fixtures. Suite: 655 -> 687 passing. Spec-correct fixtures that FAIL against current implementations (the int64 acceptance family, type-name case gate, merge widening) are split to conformance-base-expected-failures. Signed-off-by: David Leong <116610336+leongdl@users.noreply.github.com> --- .../jobs/8--simple-action-bash-argv.test.yaml | 26 +++++++++++++++ .../8--simple-action-python-argv.test.yaml | 22 +++++++++++++ .../2--unknown-key-in-param.invalid.yaml | 16 ++++++++++ .../2.1--minvalue-on-string.invalid.yaml | 16 ++++++++++ .../2.1--string-length-at-maxlength.yaml | 17 ++++++++++ .../2.1--string-length-at-minlength.yaml | 17 ++++++++++ .../2.3--int-allowedvalues-int64-max.yaml | 17 ++++++++++ .../2.3--int-default-int64-max.yaml | 16 ++++++++++ .../2.3--int-default-int64-min.yaml | 16 ++++++++++ .../2.3--int-maxvalue-int64-max.yaml | 16 ++++++++++ .../2.3--int-minvalue-int64-max.yaml | 16 ++++++++++ .../2.3--minlength-on-int.invalid.yaml | 16 ++++++++++ .../2.4--float-default-1e308.yaml | 16 ++++++++++ .../2.4--float-default-1e309.invalid.yaml | 16 ++++++++++ .../2.4--float-default-inf.invalid.yaml | 16 ++++++++++ .../2.4--float-default-nan.invalid.yaml | 16 ++++++++++ ...-in-step-script-requires-expr.invalid.yaml | 14 ++++++++ ...n-step-template-requires-expr.invalid.yaml | 14 ++++++++ ...5.3--cancelation-missing-mode.invalid.yaml | 14 ++++++++ ...-mode-requires-feature-bundle.invalid.yaml | 18 +++++++++++ ...-terminate-with-notify-period.invalid.yaml | 15 +++++++++ .../7.3--bare-reference.invalid.yaml | 11 +++++++ ....3--reference-dash-in-segment.invalid.yaml | 11 +++++++ ...reference-digit-start-segment.invalid.yaml | 11 +++++++ .../7.3--reference-empty-segment.invalid.yaml | 11 +++++++ .../7.3--reference-trailing-dot.invalid.yaml | 11 +++++++ ...ction-requires-feature-bundle.invalid.yaml | 8 +++++ .../1.1.1--resolved-name-128-chars.test.yaml | 21 ++++++++++++ ...-resolved-name-129-chars.invalid.test.yaml | 19 +++++++++++ ...nt-value-above-int64-max.invalid.test.yaml | 18 +++++++++++ ...-int-value-at-min-max-boundaries.test.yaml | 28 ++++++++++++++++ .../jobs/2.3--int-value-int64-max.test.yaml | 21 ++++++++++++ ...loat-value-at-min-max-boundaries.test.yaml | 28 ++++++++++++++++ ....3--associative-three-parameters.test.yaml | 3 ++ ....4.3--associative-two-parameters.test.yaml | 3 ++ ...3.4.3--mixed-associative-product.test.yaml | 4 +++ .../jobs/3.4.3--nested-associative.test.yaml | 3 ++ ...ested-product-within-associative.test.yaml | 3 ++ .../3.4.3--product-with-associative.test.yaml | 2 ++ .../base/jobs/4.3--onexit-runs.test.yaml | 32 +++++++++++++++++++ 40 files changed, 598 insertions(+) create mode 100644 conformance-tests/2023-09/FEATURE_BUNDLE_1/jobs/8--simple-action-bash-argv.test.yaml create mode 100644 conformance-tests/2023-09/FEATURE_BUNDLE_1/jobs/8--simple-action-python-argv.test.yaml create mode 100644 conformance-tests/2023-09/base/job_templates/2--unknown-key-in-param.invalid.yaml create mode 100644 conformance-tests/2023-09/base/job_templates/2.1--minvalue-on-string.invalid.yaml create mode 100644 conformance-tests/2023-09/base/job_templates/2.1--string-length-at-maxlength.yaml create mode 100644 conformance-tests/2023-09/base/job_templates/2.1--string-length-at-minlength.yaml create mode 100644 conformance-tests/2023-09/base/job_templates/2.3--int-allowedvalues-int64-max.yaml create mode 100644 conformance-tests/2023-09/base/job_templates/2.3--int-default-int64-max.yaml create mode 100644 conformance-tests/2023-09/base/job_templates/2.3--int-default-int64-min.yaml create mode 100644 conformance-tests/2023-09/base/job_templates/2.3--int-maxvalue-int64-max.yaml create mode 100644 conformance-tests/2023-09/base/job_templates/2.3--int-minvalue-int64-max.yaml create mode 100644 conformance-tests/2023-09/base/job_templates/2.3--minlength-on-int.invalid.yaml create mode 100644 conformance-tests/2023-09/base/job_templates/2.4--float-default-1e308.yaml create mode 100644 conformance-tests/2023-09/base/job_templates/2.4--float-default-1e309.invalid.yaml create mode 100644 conformance-tests/2023-09/base/job_templates/2.4--float-default-inf.invalid.yaml create mode 100644 conformance-tests/2023-09/base/job_templates/2.4--float-default-nan.invalid.yaml create mode 100644 conformance-tests/2023-09/base/job_templates/3.6--let-in-step-script-requires-expr.invalid.yaml create mode 100644 conformance-tests/2023-09/base/job_templates/3.6--let-in-step-template-requires-expr.invalid.yaml create mode 100644 conformance-tests/2023-09/base/job_templates/5.3--cancelation-missing-mode.invalid.yaml create mode 100644 conformance-tests/2023-09/base/job_templates/5.3--fmtstring-mode-requires-feature-bundle.invalid.yaml create mode 100644 conformance-tests/2023-09/base/job_templates/5.3.1--terminate-with-notify-period.invalid.yaml create mode 100644 conformance-tests/2023-09/base/job_templates/7.3--bare-reference.invalid.yaml create mode 100644 conformance-tests/2023-09/base/job_templates/7.3--reference-dash-in-segment.invalid.yaml create mode 100644 conformance-tests/2023-09/base/job_templates/7.3--reference-digit-start-segment.invalid.yaml create mode 100644 conformance-tests/2023-09/base/job_templates/7.3--reference-empty-segment.invalid.yaml create mode 100644 conformance-tests/2023-09/base/job_templates/7.3--reference-trailing-dot.invalid.yaml create mode 100644 conformance-tests/2023-09/base/job_templates/8--simple-action-requires-feature-bundle.invalid.yaml create mode 100644 conformance-tests/2023-09/base/jobs/1.1.1--resolved-name-128-chars.test.yaml create mode 100644 conformance-tests/2023-09/base/jobs/1.1.1--resolved-name-129-chars.invalid.test.yaml create mode 100644 conformance-tests/2023-09/base/jobs/2.3--int-value-above-int64-max.invalid.test.yaml create mode 100644 conformance-tests/2023-09/base/jobs/2.3--int-value-at-min-max-boundaries.test.yaml create mode 100644 conformance-tests/2023-09/base/jobs/2.3--int-value-int64-max.test.yaml create mode 100644 conformance-tests/2023-09/base/jobs/2.4--float-value-at-min-max-boundaries.test.yaml create mode 100644 conformance-tests/2023-09/base/jobs/4.3--onexit-runs.test.yaml diff --git a/conformance-tests/2023-09/FEATURE_BUNDLE_1/jobs/8--simple-action-bash-argv.test.yaml b/conformance-tests/2023-09/FEATURE_BUNDLE_1/jobs/8--simple-action-bash-argv.test.yaml new file mode 100644 index 0000000..561da9c --- /dev/null +++ b/conformance-tests/2023-09/FEATURE_BUNDLE_1/jobs/8--simple-action-bash-argv.test.yaml @@ -0,0 +1,26 @@ +# Pins the bash SimpleAction desugaring contract: $0 is the implicitly generated +# embedded file with a .sh extension, and user args follow it. +runOn: +- posix +template: + specificationVersion: jobtemplate-2023-09 + extensions: + - FEATURE_BUNDLE_1 + name: TestJob + steps: + - name: Step1 + bash: + args: + - --marker-arg + script: | + case "$0" in + *.sh) echo "EXT_IS_SH:True";; + *) echo "EXT_IS_SH:False";; + esac + echo "FIRST_ARG:$1" +expected: + output: + - EXT_IS_SH:True + - FIRST_ARG:--marker-arg + forbidden: + - EXT_IS_SH:False diff --git a/conformance-tests/2023-09/FEATURE_BUNDLE_1/jobs/8--simple-action-python-argv.test.yaml b/conformance-tests/2023-09/FEATURE_BUNDLE_1/jobs/8--simple-action-python-argv.test.yaml new file mode 100644 index 0000000..99f6956 --- /dev/null +++ b/conformance-tests/2023-09/FEATURE_BUNDLE_1/jobs/8--simple-action-python-argv.test.yaml @@ -0,0 +1,22 @@ +# Pins the python SimpleAction desugaring contract: argv[0] is the implicitly generated +# embedded file with a .py extension, and user args follow it. +template: + specificationVersion: jobtemplate-2023-09 + extensions: + - FEATURE_BUNDLE_1 + name: TestJob + steps: + - name: Step1 + python: + args: + - --marker-arg + script: | + import sys + print('EXT_IS_PY:' + str(sys.argv[0].endswith('.py'))) + print('FIRST_ARG:' + sys.argv[1]) +expected: + output: + - EXT_IS_PY:True + - FIRST_ARG:--marker-arg + forbidden: + - EXT_IS_PY:False diff --git a/conformance-tests/2023-09/base/job_templates/2--unknown-key-in-param.invalid.yaml b/conformance-tests/2023-09/base/job_templates/2--unknown-key-in-param.invalid.yaml new file mode 100644 index 0000000..c6a8d73 --- /dev/null +++ b/conformance-tests/2023-09/base/job_templates/2--unknown-key-in-param.invalid.yaml @@ -0,0 +1,16 @@ +# Parameter definition objects are closed; an unknown key inside one must be rejected. +specificationVersion: jobtemplate-2023-09 +name: TestJob +parameterDefinitions: +- name: MyParam + type: STRING + unknownExtraField: value +steps: +- name: Step1 + script: + actions: + onRun: + command: python + args: + - "-c" + - "print()" diff --git a/conformance-tests/2023-09/base/job_templates/2.1--minvalue-on-string.invalid.yaml b/conformance-tests/2023-09/base/job_templates/2.1--minvalue-on-string.invalid.yaml new file mode 100644 index 0000000..10618bf --- /dev/null +++ b/conformance-tests/2023-09/base/job_templates/2.1--minvalue-on-string.invalid.yaml @@ -0,0 +1,16 @@ +# minValue is not a JobStringParameterDefinition field; a STRING parameter with minValue must be rejected. +specificationVersion: jobtemplate-2023-09 +name: TestJob +parameterDefinitions: +- name: MyParam + type: STRING + minValue: 1 +steps: +- name: Step1 + script: + actions: + onRun: + command: python + args: + - "-c" + - "print()" diff --git a/conformance-tests/2023-09/base/job_templates/2.1--string-length-at-maxlength.yaml b/conformance-tests/2023-09/base/job_templates/2.1--string-length-at-maxlength.yaml new file mode 100644 index 0000000..186a010 --- /dev/null +++ b/conformance-tests/2023-09/base/job_templates/2.1--string-length-at-maxlength.yaml @@ -0,0 +1,17 @@ +# A STRING parameter default whose length exactly equals maxLength is accepted (bound is inclusive). +specificationVersion: jobtemplate-2023-09 +name: TestJob +parameterDefinitions: +- name: MyParam + type: STRING + maxLength: 5 + default: abcde +steps: +- name: Step1 + script: + actions: + onRun: + command: python + args: + - "-c" + - "print('{{Param.MyParam}}')" diff --git a/conformance-tests/2023-09/base/job_templates/2.1--string-length-at-minlength.yaml b/conformance-tests/2023-09/base/job_templates/2.1--string-length-at-minlength.yaml new file mode 100644 index 0000000..4e52a23 --- /dev/null +++ b/conformance-tests/2023-09/base/job_templates/2.1--string-length-at-minlength.yaml @@ -0,0 +1,17 @@ +# A STRING parameter default whose length exactly equals minLength is accepted (bound is inclusive). +specificationVersion: jobtemplate-2023-09 +name: TestJob +parameterDefinitions: +- name: MyParam + type: STRING + minLength: 3 + default: abc +steps: +- name: Step1 + script: + actions: + onRun: + command: python + args: + - "-c" + - "print('{{Param.MyParam}}')" diff --git a/conformance-tests/2023-09/base/job_templates/2.3--int-allowedvalues-int64-max.yaml b/conformance-tests/2023-09/base/job_templates/2.3--int-allowedvalues-int64-max.yaml new file mode 100644 index 0000000..5631752 --- /dev/null +++ b/conformance-tests/2023-09/base/job_templates/2.3--int-allowedvalues-int64-max.yaml @@ -0,0 +1,17 @@ +# An INT parameter allowedValues entry of 2^63-1 (largest signed 64-bit integer) is a valid integer value. +specificationVersion: jobtemplate-2023-09 +name: TestJob +parameterDefinitions: +- name: MyParam + type: INT + allowedValues: + - 9223372036854775807 +steps: +- name: Step1 + script: + actions: + onRun: + command: python + args: + - "-c" + - "print('{{Param.MyParam}}')" diff --git a/conformance-tests/2023-09/base/job_templates/2.3--int-default-int64-max.yaml b/conformance-tests/2023-09/base/job_templates/2.3--int-default-int64-max.yaml new file mode 100644 index 0000000..5a1053c --- /dev/null +++ b/conformance-tests/2023-09/base/job_templates/2.3--int-default-int64-max.yaml @@ -0,0 +1,16 @@ +# An INT parameter default of 2^63-1 (largest signed 64-bit integer) is a valid integer value. +specificationVersion: jobtemplate-2023-09 +name: TestJob +parameterDefinitions: +- name: MyParam + type: INT + default: 9223372036854775807 +steps: +- name: Step1 + script: + actions: + onRun: + command: python + args: + - "-c" + - "print('{{Param.MyParam}}')" diff --git a/conformance-tests/2023-09/base/job_templates/2.3--int-default-int64-min.yaml b/conformance-tests/2023-09/base/job_templates/2.3--int-default-int64-min.yaml new file mode 100644 index 0000000..c43d45a --- /dev/null +++ b/conformance-tests/2023-09/base/job_templates/2.3--int-default-int64-min.yaml @@ -0,0 +1,16 @@ +# An INT parameter default of -2^63 (smallest signed 64-bit integer) is a valid integer value. +specificationVersion: jobtemplate-2023-09 +name: TestJob +parameterDefinitions: +- name: MyParam + type: INT + default: -9223372036854775808 +steps: +- name: Step1 + script: + actions: + onRun: + command: python + args: + - "-c" + - "print('{{Param.MyParam}}')" diff --git a/conformance-tests/2023-09/base/job_templates/2.3--int-maxvalue-int64-max.yaml b/conformance-tests/2023-09/base/job_templates/2.3--int-maxvalue-int64-max.yaml new file mode 100644 index 0000000..1e4f2ee --- /dev/null +++ b/conformance-tests/2023-09/base/job_templates/2.3--int-maxvalue-int64-max.yaml @@ -0,0 +1,16 @@ +# An INT parameter maxValue of 2^63-1 (largest signed 64-bit integer) is a valid integer value. +specificationVersion: jobtemplate-2023-09 +name: TestJob +parameterDefinitions: +- name: MyParam + type: INT + maxValue: 9223372036854775807 +steps: +- name: Step1 + script: + actions: + onRun: + command: python + args: + - "-c" + - "print('{{Param.MyParam}}')" diff --git a/conformance-tests/2023-09/base/job_templates/2.3--int-minvalue-int64-max.yaml b/conformance-tests/2023-09/base/job_templates/2.3--int-minvalue-int64-max.yaml new file mode 100644 index 0000000..22aa927 --- /dev/null +++ b/conformance-tests/2023-09/base/job_templates/2.3--int-minvalue-int64-max.yaml @@ -0,0 +1,16 @@ +# An INT parameter minValue of 2^63-1 (largest signed 64-bit integer) is a valid integer value. +specificationVersion: jobtemplate-2023-09 +name: TestJob +parameterDefinitions: +- name: MyParam + type: INT + minValue: 9223372036854775807 +steps: +- name: Step1 + script: + actions: + onRun: + command: python + args: + - "-c" + - "print('{{Param.MyParam}}')" diff --git a/conformance-tests/2023-09/base/job_templates/2.3--minlength-on-int.invalid.yaml b/conformance-tests/2023-09/base/job_templates/2.3--minlength-on-int.invalid.yaml new file mode 100644 index 0000000..e98c541 --- /dev/null +++ b/conformance-tests/2023-09/base/job_templates/2.3--minlength-on-int.invalid.yaml @@ -0,0 +1,16 @@ +# minLength is not a JobIntParameterDefinition field; an INT parameter with minLength must be rejected. +specificationVersion: jobtemplate-2023-09 +name: TestJob +parameterDefinitions: +- name: MyParam + type: INT + minLength: 1 +steps: +- name: Step1 + script: + actions: + onRun: + command: python + args: + - "-c" + - "print()" diff --git a/conformance-tests/2023-09/base/job_templates/2.4--float-default-1e308.yaml b/conformance-tests/2023-09/base/job_templates/2.4--float-default-1e308.yaml new file mode 100644 index 0000000..751c1e1 --- /dev/null +++ b/conformance-tests/2023-09/base/job_templates/2.4--float-default-1e308.yaml @@ -0,0 +1,16 @@ +# A FLOAT parameter default of 1e308 is within the double-precision range and is valid. +specificationVersion: jobtemplate-2023-09 +name: TestJob +parameterDefinitions: +- name: MyParam + type: FLOAT + default: 1.0e+308 +steps: +- name: Step1 + script: + actions: + onRun: + command: python + args: + - "-c" + - "print('{{Param.MyParam}}')" diff --git a/conformance-tests/2023-09/base/job_templates/2.4--float-default-1e309.invalid.yaml b/conformance-tests/2023-09/base/job_templates/2.4--float-default-1e309.invalid.yaml new file mode 100644 index 0000000..01333a8 --- /dev/null +++ b/conformance-tests/2023-09/base/job_templates/2.4--float-default-1e309.invalid.yaml @@ -0,0 +1,16 @@ +# A FLOAT parameter default of 1e309 overflows double precision (infinity) and must be rejected. +specificationVersion: jobtemplate-2023-09 +name: TestJob +parameterDefinitions: +- name: MyParam + type: FLOAT + default: 1.0e+309 +steps: +- name: Step1 + script: + actions: + onRun: + command: python + args: + - "-c" + - "print('{{Param.MyParam}}')" diff --git a/conformance-tests/2023-09/base/job_templates/2.4--float-default-inf.invalid.yaml b/conformance-tests/2023-09/base/job_templates/2.4--float-default-inf.invalid.yaml new file mode 100644 index 0000000..abeecea --- /dev/null +++ b/conformance-tests/2023-09/base/job_templates/2.4--float-default-inf.invalid.yaml @@ -0,0 +1,16 @@ +# A FLOAT parameter default of infinity is not a base-10 floating point value and must be rejected. +specificationVersion: jobtemplate-2023-09 +name: TestJob +parameterDefinitions: +- name: MyParam + type: FLOAT + default: .inf +steps: +- name: Step1 + script: + actions: + onRun: + command: python + args: + - "-c" + - "print('{{Param.MyParam}}')" diff --git a/conformance-tests/2023-09/base/job_templates/2.4--float-default-nan.invalid.yaml b/conformance-tests/2023-09/base/job_templates/2.4--float-default-nan.invalid.yaml new file mode 100644 index 0000000..e5c087b --- /dev/null +++ b/conformance-tests/2023-09/base/job_templates/2.4--float-default-nan.invalid.yaml @@ -0,0 +1,16 @@ +# A FLOAT parameter default of NaN is not a base-10 floating point value and must be rejected. +specificationVersion: jobtemplate-2023-09 +name: TestJob +parameterDefinitions: +- name: MyParam + type: FLOAT + default: .nan +steps: +- name: Step1 + script: + actions: + onRun: + command: python + args: + - "-c" + - "print('{{Param.MyParam}}')" diff --git a/conformance-tests/2023-09/base/job_templates/3.6--let-in-step-script-requires-expr.invalid.yaml b/conformance-tests/2023-09/base/job_templates/3.6--let-in-step-script-requires-expr.invalid.yaml new file mode 100644 index 0000000..f51ac92 --- /dev/null +++ b/conformance-tests/2023-09/base/job_templates/3.6--let-in-step-script-requires-expr.invalid.yaml @@ -0,0 +1,14 @@ +# StepScript 'let' requires the EXPR extension (spec 3.6); in base it must be rejected. +specificationVersion: jobtemplate-2023-09 +name: TestJob +steps: +- name: Step1 + script: + let: + - x = 1 + actions: + onRun: + command: python + args: + - "-c" + - "print()" diff --git a/conformance-tests/2023-09/base/job_templates/3.6--let-in-step-template-requires-expr.invalid.yaml b/conformance-tests/2023-09/base/job_templates/3.6--let-in-step-template-requires-expr.invalid.yaml new file mode 100644 index 0000000..120dc21 --- /dev/null +++ b/conformance-tests/2023-09/base/job_templates/3.6--let-in-step-template-requires-expr.invalid.yaml @@ -0,0 +1,14 @@ +# StepTemplate 'let' requires the EXPR extension (spec 3.6); in base it must be rejected. +specificationVersion: jobtemplate-2023-09 +name: TestJob +steps: +- name: Step1 + let: + - x = 1 + script: + actions: + onRun: + command: python + args: + - "-c" + - "print()" diff --git a/conformance-tests/2023-09/base/job_templates/5.3--cancelation-missing-mode.invalid.yaml b/conformance-tests/2023-09/base/job_templates/5.3--cancelation-missing-mode.invalid.yaml new file mode 100644 index 0000000..77ebe67 --- /dev/null +++ b/conformance-tests/2023-09/base/job_templates/5.3--cancelation-missing-mode.invalid.yaml @@ -0,0 +1,14 @@ +# A cancelation object without the 'mode' key matches neither CancelationMethod form and must be rejected. +specificationVersion: jobtemplate-2023-09 +name: TestJob +steps: +- name: Step1 + script: + actions: + onRun: + command: python + args: + - "-c" + - "print()" + cancelation: + notifyPeriodInSeconds: 30 diff --git a/conformance-tests/2023-09/base/job_templates/5.3--fmtstring-mode-requires-feature-bundle.invalid.yaml b/conformance-tests/2023-09/base/job_templates/5.3--fmtstring-mode-requires-feature-bundle.invalid.yaml new file mode 100644 index 0000000..810d1fd --- /dev/null +++ b/conformance-tests/2023-09/base/job_templates/5.3--fmtstring-mode-requires-feature-bundle.invalid.yaml @@ -0,0 +1,18 @@ +# A format-string cancelation mode requires the FEATURE_BUNDLE_1 extension; in base it must be rejected. +specificationVersion: jobtemplate-2023-09 +name: TestJob +parameterDefinitions: +- name: Mode + type: STRING + default: TERMINATE +steps: +- name: Step1 + script: + actions: + onRun: + command: python + args: + - "-c" + - "print()" + cancelation: + mode: "{{Param.Mode}}" diff --git a/conformance-tests/2023-09/base/job_templates/5.3.1--terminate-with-notify-period.invalid.yaml b/conformance-tests/2023-09/base/job_templates/5.3.1--terminate-with-notify-period.invalid.yaml new file mode 100644 index 0000000..7ba13c9 --- /dev/null +++ b/conformance-tests/2023-09/base/job_templates/5.3.1--terminate-with-notify-period.invalid.yaml @@ -0,0 +1,15 @@ +# CancelationMethodTerminate (5.3.1) has only the 'mode' key; notifyPeriodInSeconds with TERMINATE must be rejected. +specificationVersion: jobtemplate-2023-09 +name: TestJob +steps: +- name: Step1 + script: + actions: + onRun: + command: python + args: + - "-c" + - "print()" + cancelation: + mode: TERMINATE + notifyPeriodInSeconds: 30 diff --git a/conformance-tests/2023-09/base/job_templates/7.3--bare-reference.invalid.yaml b/conformance-tests/2023-09/base/job_templates/7.3--bare-reference.invalid.yaml new file mode 100644 index 0000000..47356e2 --- /dev/null +++ b/conformance-tests/2023-09/base/job_templates/7.3--bare-reference.invalid.yaml @@ -0,0 +1,11 @@ +# A bare dot-free reference {{MyParam}} names no value defined in base scope and must be rejected. +specificationVersion: jobtemplate-2023-09 +name: TestJob +steps: +- name: Step1 + script: + actions: + onRun: + command: echo + args: + - "{{MyParam}}" diff --git a/conformance-tests/2023-09/base/job_templates/7.3--reference-dash-in-segment.invalid.yaml b/conformance-tests/2023-09/base/job_templates/7.3--reference-dash-in-segment.invalid.yaml new file mode 100644 index 0000000..4b926c7 --- /dev/null +++ b/conformance-tests/2023-09/base/job_templates/7.3--reference-dash-in-segment.invalid.yaml @@ -0,0 +1,11 @@ +# A reference segment containing a dash ({{Param.a-b}}) is not a valid Identifier and must be rejected. +specificationVersion: jobtemplate-2023-09 +name: TestJob +steps: +- name: Step1 + script: + actions: + onRun: + command: echo + args: + - "{{Param.a-b}}" diff --git a/conformance-tests/2023-09/base/job_templates/7.3--reference-digit-start-segment.invalid.yaml b/conformance-tests/2023-09/base/job_templates/7.3--reference-digit-start-segment.invalid.yaml new file mode 100644 index 0000000..7ea5b7c --- /dev/null +++ b/conformance-tests/2023-09/base/job_templates/7.3--reference-digit-start-segment.invalid.yaml @@ -0,0 +1,11 @@ +# A reference segment starting with a digit ({{Param.1X}}) is not a valid Identifier and must be rejected. +specificationVersion: jobtemplate-2023-09 +name: TestJob +steps: +- name: Step1 + script: + actions: + onRun: + command: echo + args: + - "{{Param.1X}}" diff --git a/conformance-tests/2023-09/base/job_templates/7.3--reference-empty-segment.invalid.yaml b/conformance-tests/2023-09/base/job_templates/7.3--reference-empty-segment.invalid.yaml new file mode 100644 index 0000000..995040b --- /dev/null +++ b/conformance-tests/2023-09/base/job_templates/7.3--reference-empty-segment.invalid.yaml @@ -0,0 +1,11 @@ +# A reference with an empty inner segment ({{Param..X}}) is not a valid Name production and must be rejected. +specificationVersion: jobtemplate-2023-09 +name: TestJob +steps: +- name: Step1 + script: + actions: + onRun: + command: echo + args: + - "{{Param..X}}" diff --git a/conformance-tests/2023-09/base/job_templates/7.3--reference-trailing-dot.invalid.yaml b/conformance-tests/2023-09/base/job_templates/7.3--reference-trailing-dot.invalid.yaml new file mode 100644 index 0000000..377cd18 --- /dev/null +++ b/conformance-tests/2023-09/base/job_templates/7.3--reference-trailing-dot.invalid.yaml @@ -0,0 +1,11 @@ +# A reference with a trailing dot ({{Param.}}) has an empty final segment and must be rejected. +specificationVersion: jobtemplate-2023-09 +name: TestJob +steps: +- name: Step1 + script: + actions: + onRun: + command: echo + args: + - "{{Param.}}" diff --git a/conformance-tests/2023-09/base/job_templates/8--simple-action-requires-feature-bundle.invalid.yaml b/conformance-tests/2023-09/base/job_templates/8--simple-action-requires-feature-bundle.invalid.yaml new file mode 100644 index 0000000..2cbf0d2 --- /dev/null +++ b/conformance-tests/2023-09/base/job_templates/8--simple-action-requires-feature-bundle.invalid.yaml @@ -0,0 +1,8 @@ +# SimpleAction sugar keys (bash/cmd/node/powershell/python) require FEATURE_BUNDLE_1; in base they must be rejected. +specificationVersion: jobtemplate-2023-09 +name: TestJob +steps: +- name: Step1 + bash: + script: | + echo hello diff --git a/conformance-tests/2023-09/base/jobs/1.1.1--resolved-name-128-chars.test.yaml b/conformance-tests/2023-09/base/jobs/1.1.1--resolved-name-128-chars.test.yaml new file mode 100644 index 0000000..f5764fc --- /dev/null +++ b/conformance-tests/2023-09/base/jobs/1.1.1--resolved-name-128-chars.test.yaml @@ -0,0 +1,21 @@ +# A job name format string resolving to exactly 128 characters is accepted (limit is inclusive, +# measured after resolution per spec 1.1.1). +template: + specificationVersion: jobtemplate-2023-09 + name: X{{Param.Suffix}} + parameterDefinitions: + - name: Suffix + type: STRING + default: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + steps: + - name: Step1 + script: + actions: + onRun: + command: python + args: + - -c + - print(r'NAME_LENGTH_OK') +expected: + output: + - NAME_LENGTH_OK diff --git a/conformance-tests/2023-09/base/jobs/1.1.1--resolved-name-129-chars.invalid.test.yaml b/conformance-tests/2023-09/base/jobs/1.1.1--resolved-name-129-chars.invalid.test.yaml new file mode 100644 index 0000000..974ea5e --- /dev/null +++ b/conformance-tests/2023-09/base/jobs/1.1.1--resolved-name-129-chars.invalid.test.yaml @@ -0,0 +1,19 @@ +# A job name format string resolving to 129 characters exceeds the 128-character post-resolution +# limit (spec 1.1.1) and must be rejected at job creation. The literal is short, so only a +# post-resolution check catches this. +template: + specificationVersion: jobtemplate-2023-09 + name: XY{{Param.Suffix}} + parameterDefinitions: + - name: Suffix + type: STRING + default: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + steps: + - name: Step1 + script: + actions: + onRun: + command: python + args: + - -c + - print(r'SHOULD_NOT_RUN') diff --git a/conformance-tests/2023-09/base/jobs/2.3--int-value-above-int64-max.invalid.test.yaml b/conformance-tests/2023-09/base/jobs/2.3--int-value-above-int64-max.invalid.test.yaml new file mode 100644 index 0000000..ca10423 --- /dev/null +++ b/conformance-tests/2023-09/base/jobs/2.3--int-value-above-int64-max.invalid.test.yaml @@ -0,0 +1,18 @@ +# A supplied INT parameter value of 2^63 exceeds the signed 64-bit integer range and must be rejected at job creation. +template: + specificationVersion: jobtemplate-2023-09 + name: TestJob + parameterDefinitions: + - name: MyParam + type: INT + steps: + - name: Step1 + script: + actions: + onRun: + command: python + args: + - -c + - print(r'OUTPUT:{{Param.MyParam}}') +parameters: + MyParam: 9223372036854775808 diff --git a/conformance-tests/2023-09/base/jobs/2.3--int-value-at-min-max-boundaries.test.yaml b/conformance-tests/2023-09/base/jobs/2.3--int-value-at-min-max-boundaries.test.yaml new file mode 100644 index 0000000..3e23fb3 --- /dev/null +++ b/conformance-tests/2023-09/base/jobs/2.3--int-value-at-min-max-boundaries.test.yaml @@ -0,0 +1,28 @@ +# Supplied INT values exactly equal to minValue and maxValue are accepted (bounds are inclusive). +template: + specificationVersion: jobtemplate-2023-09 + name: TestJob + parameterDefinitions: + - name: AtMin + type: INT + minValue: 10 + maxValue: 100 + - name: AtMax + type: INT + minValue: 10 + maxValue: 100 + steps: + - name: Step1 + script: + actions: + onRun: + command: python + args: + - -c + - print(r'BOUNDS:min={{Param.AtMin}},max={{Param.AtMax}}') +parameters: + AtMin: 10 + AtMax: 100 +expected: + output: + - BOUNDS:min=10,max=100 diff --git a/conformance-tests/2023-09/base/jobs/2.3--int-value-int64-max.test.yaml b/conformance-tests/2023-09/base/jobs/2.3--int-value-int64-max.test.yaml new file mode 100644 index 0000000..de1447a --- /dev/null +++ b/conformance-tests/2023-09/base/jobs/2.3--int-value-int64-max.test.yaml @@ -0,0 +1,21 @@ +# A supplied INT parameter value of 2^63-1 (largest signed 64-bit integer) is accepted and resolves exactly. +template: + specificationVersion: jobtemplate-2023-09 + name: TestJob + parameterDefinitions: + - name: MyParam + type: INT + steps: + - name: Step1 + script: + actions: + onRun: + command: python + args: + - -c + - print(r'OUTPUT:{{Param.MyParam}}') +parameters: + MyParam: 9223372036854775807 +expected: + output: + - OUTPUT:9223372036854775807 diff --git a/conformance-tests/2023-09/base/jobs/2.4--float-value-at-min-max-boundaries.test.yaml b/conformance-tests/2023-09/base/jobs/2.4--float-value-at-min-max-boundaries.test.yaml new file mode 100644 index 0000000..00efaa6 --- /dev/null +++ b/conformance-tests/2023-09/base/jobs/2.4--float-value-at-min-max-boundaries.test.yaml @@ -0,0 +1,28 @@ +# Supplied FLOAT values exactly equal to minValue and maxValue are accepted (bounds are inclusive). +template: + specificationVersion: jobtemplate-2023-09 + name: TestJob + parameterDefinitions: + - name: AtMin + type: FLOAT + minValue: 0.5 + maxValue: 99.5 + - name: AtMax + type: FLOAT + minValue: 0.5 + maxValue: 99.5 + steps: + - name: Step1 + script: + actions: + onRun: + command: python + args: + - -c + - print(r'BOUNDS:min={{Param.AtMin}},max={{Param.AtMax}}') +parameters: + AtMin: 0.5 + AtMax: 99.5 +expected: + output: + - BOUNDS:min=0.5,max=99.5 diff --git a/conformance-tests/2023-09/base/jobs/3.4.3--associative-three-parameters.test.yaml b/conformance-tests/2023-09/base/jobs/3.4.3--associative-three-parameters.test.yaml index ae4fbbb..93ab364 100644 --- a/conformance-tests/2023-09/base/jobs/3.4.3--associative-three-parameters.test.yaml +++ b/conformance-tests/2023-09/base/jobs/3.4.3--associative-three-parameters.test.yaml @@ -35,3 +35,6 @@ expected: forbidden: - TASK:A=0,B=y,C=True - TASK:A=2,B=0,C=True + - TASK:A=1,B=x,C=False + - TASK:A=1,B=y,C=False + - TASK:A=2,B=x,C=True diff --git a/conformance-tests/2023-09/base/jobs/3.4.3--associative-two-parameters.test.yaml b/conformance-tests/2023-09/base/jobs/3.4.3--associative-two-parameters.test.yaml index e9c17b7..b7780b4 100644 --- a/conformance-tests/2023-09/base/jobs/3.4.3--associative-two-parameters.test.yaml +++ b/conformance-tests/2023-09/base/jobs/3.4.3--associative-two-parameters.test.yaml @@ -33,3 +33,6 @@ expected: forbidden: - TASK:A=0,B=z - TASK:A=2,B=0 + - TASK:A=1,B=y + - TASK:A=2,B=x + - TASK:A=3,B=x diff --git a/conformance-tests/2023-09/base/jobs/3.4.3--mixed-associative-product.test.yaml b/conformance-tests/2023-09/base/jobs/3.4.3--mixed-associative-product.test.yaml index d3b193b..2d42430 100644 --- a/conformance-tests/2023-09/base/jobs/3.4.3--mixed-associative-product.test.yaml +++ b/conformance-tests/2023-09/base/jobs/3.4.3--mixed-associative-product.test.yaml @@ -37,3 +37,7 @@ expected: forbidden: - TASK:A=0,B=y,C=True - TASK:A=2,B=0,C=True + - TASK:A=1,B=y,C=True + - TASK:A=1,B=y,C=False + - TASK:A=2,B=x,C=True + - TASK:A=2,B=x,C=False diff --git a/conformance-tests/2023-09/base/jobs/3.4.3--nested-associative.test.yaml b/conformance-tests/2023-09/base/jobs/3.4.3--nested-associative.test.yaml index 5daa0cc..a7fb7b4 100644 --- a/conformance-tests/2023-09/base/jobs/3.4.3--nested-associative.test.yaml +++ b/conformance-tests/2023-09/base/jobs/3.4.3--nested-associative.test.yaml @@ -35,3 +35,6 @@ expected: forbidden: - TASK:A=0,B=y,C=True - TASK:A=2,B=0,C=True + - TASK:A=1,B=x,C=False + - TASK:A=1,B=y,C=True + - TASK:A=2,B=x,C=False diff --git a/conformance-tests/2023-09/base/jobs/3.4.3--nested-product-within-associative.test.yaml b/conformance-tests/2023-09/base/jobs/3.4.3--nested-product-within-associative.test.yaml index 22453f1..9d095be 100644 --- a/conformance-tests/2023-09/base/jobs/3.4.3--nested-product-within-associative.test.yaml +++ b/conformance-tests/2023-09/base/jobs/3.4.3--nested-product-within-associative.test.yaml @@ -42,3 +42,6 @@ expected: forbidden: - TASK:A=0,B=y,C=10,D=b - TASK:A=2,B=0,C=10,D=b + - TASK:A=1,B=x,C=10,D=b + - TASK:A=1,B=x,C=20,D=a + - TASK:A=2,B=y,C=10,D=a diff --git a/conformance-tests/2023-09/base/jobs/3.4.3--product-with-associative.test.yaml b/conformance-tests/2023-09/base/jobs/3.4.3--product-with-associative.test.yaml index f7db10c..044e5cd 100644 --- a/conformance-tests/2023-09/base/jobs/3.4.3--product-with-associative.test.yaml +++ b/conformance-tests/2023-09/base/jobs/3.4.3--product-with-associative.test.yaml @@ -37,3 +37,5 @@ expected: forbidden: - TASK:A=0,B=y,C=True - TASK:A=2,B=0,C=True + - TASK:A=1,B=x,C=False + - TASK:A=2,B=y,C=True diff --git a/conformance-tests/2023-09/base/jobs/4.3--onexit-runs.test.yaml b/conformance-tests/2023-09/base/jobs/4.3--onexit-runs.test.yaml new file mode 100644 index 0000000..b9679db --- /dev/null +++ b/conformance-tests/2023-09/base/jobs/4.3--onexit-runs.test.yaml @@ -0,0 +1,32 @@ +# An environment's onExit action runs when the session ends: its marker must appear in the output. +template: + specificationVersion: jobtemplate-2023-09 + name: TestJob + jobEnvironments: + - name: MarkerEnv + script: + actions: + onEnter: + command: python + args: + - -c + - print(r'ONENTER_MARKER') + onExit: + command: python + args: + - -c + - print(r'ONEXIT_MARKER') + steps: + - name: Step1 + script: + actions: + onRun: + command: python + args: + - -c + - print(r'ONRUN_MARKER') +expected: + output: + - ONENTER_MARKER + - ONRUN_MARKER + - ONEXIT_MARKER