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 00000000..561da9cf --- /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 00000000..99f69564 --- /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 00000000..c6a8d734 --- /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 00000000..10618bfe --- /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 00000000..186a0106 --- /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 00000000..4e52a231 --- /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 00000000..56317524 --- /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 00000000..5a1053cd --- /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 00000000..c43d45af --- /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 00000000..1e4f2eed --- /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 00000000..22aa927b --- /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 00000000..e98c5413 --- /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 00000000..751c1e11 --- /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 00000000..01333a82 --- /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 00000000..abeecea6 --- /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 00000000..e5c087bc --- /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 00000000..f51ac926 --- /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 00000000..4e8505cf --- /dev/null +++ b/conformance-tests/2023-09/base/job_templates/3.6--let-in-step-template-requires-expr.invalid.yaml @@ -0,0 +1,16 @@ +# StepTemplate 'let' requires the EXPR extension (spec 3.6); in base it must be rejected. +# (Template body deliberately mirrors EXPR/job_templates/3.6--let-requires-expr +# .invalid.yaml: base-only conformance runs need their own copy of the gate.) +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 00000000..77ebe678 --- /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 00000000..810d1fd1 --- /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 00000000..7ba13c96 --- /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 00000000..47356e22 --- /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 00000000..4b926c7e --- /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 00000000..7ea5b7c5 --- /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 00000000..995040b0 --- /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 00000000..377cd181 --- /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 00000000..2cbf0d20 --- /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 00000000..f5764fcc --- /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 00000000..974ea5eb --- /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-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 00000000..3e23fb39 --- /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 00000000..de1447a5 --- /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 00000000..9ca2705b --- /dev/null +++ b/conformance-tests/2023-09/base/jobs/2.4--float-value-at-min-max-boundaries.test.yaml @@ -0,0 +1,34 @@ +# 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 +# anyOf: the spec fixes no canonical float rendering; 0.5/99.5 are exactly +# representable so shortest-round-trip implementations print them as +# written, but a fixed-precision printer ("0.50") still honors the +# inclusive bounds under test. +expected: + output: + - anyOf: + - BOUNDS:min=0.5,max=99.5 + - BOUNDS:min=0.50,max=99.50 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 ae4fbbb6..7e0f20d3 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,11 @@ 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 + # The next two close the last partial-association escape: an + # implementation zipping (A,C) while producting B emits exactly + # (1,y,True) and (2,x,False) beyond the expected pair. + - 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--associative-two-parameters.test.yaml b/conformance-tests/2023-09/base/jobs/3.4.3--associative-two-parameters.test.yaml index e9c17b71..b7780b4b 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 d3b193bb..2d424300 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 5daa0cc0..a7fb7b47 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 22453f1f..9d095be6 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 f7db10c6..9409dfb5 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,10 @@ 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 + # All four combos unique to the full A*B*C product are forbidden + # (matching the mixed-associative-product twin), so a product- + # instead-of-zip implementation cannot slip through on any pairing. + - TASK:A=1,B=y,C=True + - TASK:A=2,B=x,C=False 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 00000000..f7d602bb --- /dev/null +++ b/conformance-tests/2023-09/base/jobs/4.3--onexit-runs.test.yaml @@ -0,0 +1,35 @@ +# An environment's onExit action RUNS: its marker must appear in the output. +# (Presence only — the runner's unordered matching cannot pin WHEN it ran; +# enter-before-task-before-exit ordering needs the harness branch's +# outputSequence and is not asserted here.) +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