From aad8932f20413177f98f23bae6d11017c7ff67bb Mon Sep 17 00:00:00 2001 From: Leonardo Gama Date: Mon, 31 Jul 2023 10:06:21 -0700 Subject: [PATCH 1/6] Add validation tests for JSON schema --- tests/unit/schema/test_schema_validation.py | 60 +++++++++++++++++++ .../failing_tests/buildcmd_noparams.toml | 4 ++ .../failing_tests/deletecmd_noparams.toml | 4 ++ .../failing_tests/deploycmd_noparams.toml | 4 ++ .../failing_tests/initcmd_noparams.toml | 4 ++ .../list_endpointscmd_noparams.toml | 4 ++ .../list_resourcescmd_noparams.toml | 4 ++ .../list_stack_outputscmd_noparams.toml | 4 ++ .../local_invokecmd_noparams.toml | 4 ++ .../local_start_apicmd_noparams.toml | 4 ++ .../local_start_lambdacmd_noparams.toml | 4 ++ .../failing_tests/logscmd_noparams.toml | 4 ++ .../testdata/failing_tests/noversion.toml | 26 ++++++++ .../testdata/failing_tests/noversion.yaml | 4 ++ .../failing_tests/packagecmd_noparams.toml | 4 ++ .../pipeline_bootstrapcmd_noparams.toml | 4 ++ .../pipeline_initcmd_noparams.toml | 4 ++ .../failing_tests/publishcmd_noparams.toml | 4 ++ .../remote_invokecmd_noparams.toml | 4 ++ .../failing_tests/synccmd_noparams.toml | 4 ++ .../failing_tests/tracescmd_noparams.toml | 4 ++ .../failing_tests/validatecmd_noparams.toml | 4 ++ .../testdata/passing_tests/buildcmd.toml | 36 +++++++++++ .../testdata/passing_tests/deletecmd.toml | 16 +++++ .../testdata/passing_tests/deploycmd.toml | 48 +++++++++++++++ .../testdata/passing_tests/initcmd.toml | 37 ++++++++++++ .../passing_tests/list_endpointscmd.toml | 17 ++++++ .../passing_tests/list_resources.toml | 17 ++++++ .../passing_tests/list_stack_outputs.toml | 14 +++++ .../passing_tests/local_invokecmd.toml | 39 ++++++++++++ .../passing_tests/local_start_apicmd.toml | 43 +++++++++++++ .../passing_tests/local_start_lambdacmd.toml | 42 +++++++++++++ .../testdata/passing_tests/logscmd.toml | 23 +++++++ .../testdata/passing_tests/packagecmd.toml | 28 +++++++++ .../passing_tests/pipeline_bootstrapcmd.toml | 37 ++++++++++++ .../passing_tests/pipeline_initcmd.toml | 11 ++++ .../testdata/passing_tests/publishcmd.toml | 13 ++++ .../passing_tests/remote_invokecmd.toml | 17 ++++++ .../schema/testdata/passing_tests/sample.toml | 26 ++++++++ .../schema/testdata/passing_tests/sample.yaml | 26 ++++++++ .../testdata/passing_tests/simplesample.toml | 22 +++++++ .../testdata/passing_tests/synccmd.toml | 40 +++++++++++++ .../testdata/passing_tests/tracescmd.toml | 18 ++++++ .../testdata/passing_tests/validatecmd.toml | 14 +++++ 44 files changed, 750 insertions(+) create mode 100644 tests/unit/schema/test_schema_validation.py create mode 100644 tests/unit/schema/testdata/failing_tests/buildcmd_noparams.toml create mode 100644 tests/unit/schema/testdata/failing_tests/deletecmd_noparams.toml create mode 100644 tests/unit/schema/testdata/failing_tests/deploycmd_noparams.toml create mode 100644 tests/unit/schema/testdata/failing_tests/initcmd_noparams.toml create mode 100644 tests/unit/schema/testdata/failing_tests/list_endpointscmd_noparams.toml create mode 100644 tests/unit/schema/testdata/failing_tests/list_resourcescmd_noparams.toml create mode 100644 tests/unit/schema/testdata/failing_tests/list_stack_outputscmd_noparams.toml create mode 100644 tests/unit/schema/testdata/failing_tests/local_invokecmd_noparams.toml create mode 100644 tests/unit/schema/testdata/failing_tests/local_start_apicmd_noparams.toml create mode 100644 tests/unit/schema/testdata/failing_tests/local_start_lambdacmd_noparams.toml create mode 100644 tests/unit/schema/testdata/failing_tests/logscmd_noparams.toml create mode 100644 tests/unit/schema/testdata/failing_tests/noversion.toml create mode 100644 tests/unit/schema/testdata/failing_tests/noversion.yaml create mode 100644 tests/unit/schema/testdata/failing_tests/packagecmd_noparams.toml create mode 100644 tests/unit/schema/testdata/failing_tests/pipeline_bootstrapcmd_noparams.toml create mode 100644 tests/unit/schema/testdata/failing_tests/pipeline_initcmd_noparams.toml create mode 100644 tests/unit/schema/testdata/failing_tests/publishcmd_noparams.toml create mode 100644 tests/unit/schema/testdata/failing_tests/remote_invokecmd_noparams.toml create mode 100644 tests/unit/schema/testdata/failing_tests/synccmd_noparams.toml create mode 100644 tests/unit/schema/testdata/failing_tests/tracescmd_noparams.toml create mode 100644 tests/unit/schema/testdata/failing_tests/validatecmd_noparams.toml create mode 100644 tests/unit/schema/testdata/passing_tests/buildcmd.toml create mode 100644 tests/unit/schema/testdata/passing_tests/deletecmd.toml create mode 100644 tests/unit/schema/testdata/passing_tests/deploycmd.toml create mode 100644 tests/unit/schema/testdata/passing_tests/initcmd.toml create mode 100644 tests/unit/schema/testdata/passing_tests/list_endpointscmd.toml create mode 100644 tests/unit/schema/testdata/passing_tests/list_resources.toml create mode 100644 tests/unit/schema/testdata/passing_tests/list_stack_outputs.toml create mode 100644 tests/unit/schema/testdata/passing_tests/local_invokecmd.toml create mode 100644 tests/unit/schema/testdata/passing_tests/local_start_apicmd.toml create mode 100644 tests/unit/schema/testdata/passing_tests/local_start_lambdacmd.toml create mode 100644 tests/unit/schema/testdata/passing_tests/logscmd.toml create mode 100644 tests/unit/schema/testdata/passing_tests/packagecmd.toml create mode 100644 tests/unit/schema/testdata/passing_tests/pipeline_bootstrapcmd.toml create mode 100644 tests/unit/schema/testdata/passing_tests/pipeline_initcmd.toml create mode 100644 tests/unit/schema/testdata/passing_tests/publishcmd.toml create mode 100644 tests/unit/schema/testdata/passing_tests/remote_invokecmd.toml create mode 100644 tests/unit/schema/testdata/passing_tests/sample.toml create mode 100644 tests/unit/schema/testdata/passing_tests/sample.yaml create mode 100644 tests/unit/schema/testdata/passing_tests/simplesample.toml create mode 100644 tests/unit/schema/testdata/passing_tests/synccmd.toml create mode 100644 tests/unit/schema/testdata/passing_tests/tracescmd.toml create mode 100644 tests/unit/schema/testdata/passing_tests/validatecmd.toml diff --git a/tests/unit/schema/test_schema_validation.py b/tests/unit/schema/test_schema_validation.py new file mode 100644 index 0000000000..8a15ff5829 --- /dev/null +++ b/tests/unit/schema/test_schema_validation.py @@ -0,0 +1,60 @@ +from pathlib import Path +import jsonschema +from parameterized import parameterized +from unittest import TestCase + +from samcli.lib.config.file_manager import FILE_MANAGER_MAPPER +from schema.make_schema import generate_schema + + +class TestSchemaValidation(TestCase): + schema = None + testdata_dir = None + + @classmethod + def setUpClass(cls): + cls.schema = generate_schema() + testing_dir = Path(__name__).resolve().parents[0] + cls.testdata_dir = Path(testing_dir, "tests", "unit", "schema", "testdata") + + def test_samconfig_validates_against_schema(self): + self.assertIsNotNone(self.schema, "Schema was not set") + + passing_tests_dir = Path(self.testdata_dir, "passing_tests") + tests_not_passing = [] + + # Read in and assert all files in passing_tests pass + for config_file_path in passing_tests_dir.iterdir(): + config_file = FILE_MANAGER_MAPPER[config_file_path.suffix].read(Path(passing_tests_dir, config_file_path)) + self.assertNotEqual(config_file, {}, f"Config file {config_file_path} should be read correctly") + + try: + jsonschema.validate(config_file, self.schema) + except jsonschema.ValidationError as e: + tests_not_passing.append(f"<{config_file_path}: {e.message}>") + + if tests_not_passing: + self.assertTrue(False, f"Some config files are not validating against schema: {tests_not_passing}") + + def test_samconfig_doesnt_validate_against_schema(self): + self.assertIsNotNone(self.schema, "Schema was not set") + + failing_tests_dir = Path(self.testdata_dir, "failing_tests") + tests_not_failing = [] + + # Read in and assert all files in failing_tests fail + for config_file_path in failing_tests_dir.iterdir(): + config_file = FILE_MANAGER_MAPPER[config_file_path.suffix].read(Path(failing_tests_dir, config_file_path)) + self.assertNotEqual(config_file, {}, f"Config file {config_file_path} should be read correctly") + + with self.assertRaises( + jsonschema.ValidationError, msg=f"Config file {config_file_path} should not validate against schema" + ): + jsonschema.validate(config_file, self.schema) + tests_not_failing.append(config_file_path) + raise jsonschema.ValidationError("Test should have failed but didn't") + + if tests_not_failing: + self.assertTrue( + False, f"Some config files are validating against schema when they shouldn't: {tests_not_failing}" + ) diff --git a/tests/unit/schema/testdata/failing_tests/buildcmd_noparams.toml b/tests/unit/schema/testdata/failing_tests/buildcmd_noparams.toml new file mode 100644 index 0000000000..932be00152 --- /dev/null +++ b/tests/unit/schema/testdata/failing_tests/buildcmd_noparams.toml @@ -0,0 +1,4 @@ +version = 0.1 + +[default.build] +debug = false diff --git a/tests/unit/schema/testdata/failing_tests/deletecmd_noparams.toml b/tests/unit/schema/testdata/failing_tests/deletecmd_noparams.toml new file mode 100644 index 0000000000..f9b2e5bbd6 --- /dev/null +++ b/tests/unit/schema/testdata/failing_tests/deletecmd_noparams.toml @@ -0,0 +1,4 @@ +version = 0.1 + +[default.delete] +debug = false diff --git a/tests/unit/schema/testdata/failing_tests/deploycmd_noparams.toml b/tests/unit/schema/testdata/failing_tests/deploycmd_noparams.toml new file mode 100644 index 0000000000..d506ec73fd --- /dev/null +++ b/tests/unit/schema/testdata/failing_tests/deploycmd_noparams.toml @@ -0,0 +1,4 @@ +version = 0.1 + +[default.deploy] +debug = false diff --git a/tests/unit/schema/testdata/failing_tests/initcmd_noparams.toml b/tests/unit/schema/testdata/failing_tests/initcmd_noparams.toml new file mode 100644 index 0000000000..e49f8da8fc --- /dev/null +++ b/tests/unit/schema/testdata/failing_tests/initcmd_noparams.toml @@ -0,0 +1,4 @@ +version = 0.1 + +[default.init] +debug = false diff --git a/tests/unit/schema/testdata/failing_tests/list_endpointscmd_noparams.toml b/tests/unit/schema/testdata/failing_tests/list_endpointscmd_noparams.toml new file mode 100644 index 0000000000..7f0070e5c7 --- /dev/null +++ b/tests/unit/schema/testdata/failing_tests/list_endpointscmd_noparams.toml @@ -0,0 +1,4 @@ +version = 0.1 + +[default.list_endpoints] +debug = false diff --git a/tests/unit/schema/testdata/failing_tests/list_resourcescmd_noparams.toml b/tests/unit/schema/testdata/failing_tests/list_resourcescmd_noparams.toml new file mode 100644 index 0000000000..6f470bec1b --- /dev/null +++ b/tests/unit/schema/testdata/failing_tests/list_resourcescmd_noparams.toml @@ -0,0 +1,4 @@ +version = 0.1 + +[default.list_resources] +debug = false diff --git a/tests/unit/schema/testdata/failing_tests/list_stack_outputscmd_noparams.toml b/tests/unit/schema/testdata/failing_tests/list_stack_outputscmd_noparams.toml new file mode 100644 index 0000000000..ec2648eafc --- /dev/null +++ b/tests/unit/schema/testdata/failing_tests/list_stack_outputscmd_noparams.toml @@ -0,0 +1,4 @@ +version = 0.1 + +[default.list_stack_outputs] +debug = false diff --git a/tests/unit/schema/testdata/failing_tests/local_invokecmd_noparams.toml b/tests/unit/schema/testdata/failing_tests/local_invokecmd_noparams.toml new file mode 100644 index 0000000000..65c4d76e23 --- /dev/null +++ b/tests/unit/schema/testdata/failing_tests/local_invokecmd_noparams.toml @@ -0,0 +1,4 @@ +version = 0.1 + +[default.local_invoke] +debug = false diff --git a/tests/unit/schema/testdata/failing_tests/local_start_apicmd_noparams.toml b/tests/unit/schema/testdata/failing_tests/local_start_apicmd_noparams.toml new file mode 100644 index 0000000000..397fc3dbc0 --- /dev/null +++ b/tests/unit/schema/testdata/failing_tests/local_start_apicmd_noparams.toml @@ -0,0 +1,4 @@ +version = 0.1 + +[default.local_start_api] +debug = false diff --git a/tests/unit/schema/testdata/failing_tests/local_start_lambdacmd_noparams.toml b/tests/unit/schema/testdata/failing_tests/local_start_lambdacmd_noparams.toml new file mode 100644 index 0000000000..04572a74fa --- /dev/null +++ b/tests/unit/schema/testdata/failing_tests/local_start_lambdacmd_noparams.toml @@ -0,0 +1,4 @@ +version = 0.1 + +[default.local_start_lambda] +debug = false diff --git a/tests/unit/schema/testdata/failing_tests/logscmd_noparams.toml b/tests/unit/schema/testdata/failing_tests/logscmd_noparams.toml new file mode 100644 index 0000000000..73e819840c --- /dev/null +++ b/tests/unit/schema/testdata/failing_tests/logscmd_noparams.toml @@ -0,0 +1,4 @@ +version = 0.1 + +[default.logs] +debug = false diff --git a/tests/unit/schema/testdata/failing_tests/noversion.toml b/tests/unit/schema/testdata/failing_tests/noversion.toml new file mode 100644 index 0000000000..48e6e70e15 --- /dev/null +++ b/tests/unit/schema/testdata/failing_tests/noversion.toml @@ -0,0 +1,26 @@ +# version = 0.1 + +[default] +[default.global] +[default.global.parameters] +stack_name = "sam-app" + +[default.build.parameters] +cached = true +parallel = true + +[default.deploy.parameters] +capabilities = "CAPABILITY_IAM" +confirm_changeset = true +resolve_s3 = true + +[default.sync.parameters] +watch = true + +[default.local_start_api.parameters] +warm_containers = "EAGER" + +[prod] +[prod.sync] +[prod.sync.parameters] +watch = false \ No newline at end of file diff --git a/tests/unit/schema/testdata/failing_tests/noversion.yaml b/tests/unit/schema/testdata/failing_tests/noversion.yaml new file mode 100644 index 0000000000..95e4ebc8ac --- /dev/null +++ b/tests/unit/schema/testdata/failing_tests/noversion.yaml @@ -0,0 +1,4 @@ +default: + build: + parameters: + debug: false \ No newline at end of file diff --git a/tests/unit/schema/testdata/failing_tests/packagecmd_noparams.toml b/tests/unit/schema/testdata/failing_tests/packagecmd_noparams.toml new file mode 100644 index 0000000000..45d2528271 --- /dev/null +++ b/tests/unit/schema/testdata/failing_tests/packagecmd_noparams.toml @@ -0,0 +1,4 @@ +version = 0.1 + +[default.package] +debug = false diff --git a/tests/unit/schema/testdata/failing_tests/pipeline_bootstrapcmd_noparams.toml b/tests/unit/schema/testdata/failing_tests/pipeline_bootstrapcmd_noparams.toml new file mode 100644 index 0000000000..456e9b8b4b --- /dev/null +++ b/tests/unit/schema/testdata/failing_tests/pipeline_bootstrapcmd_noparams.toml @@ -0,0 +1,4 @@ +version = 0.1 + +[default.pipeline_bootstrap] +debug = false diff --git a/tests/unit/schema/testdata/failing_tests/pipeline_initcmd_noparams.toml b/tests/unit/schema/testdata/failing_tests/pipeline_initcmd_noparams.toml new file mode 100644 index 0000000000..f398ad234d --- /dev/null +++ b/tests/unit/schema/testdata/failing_tests/pipeline_initcmd_noparams.toml @@ -0,0 +1,4 @@ +version = 0.1 + +[default.pipeline_init] +debug = false diff --git a/tests/unit/schema/testdata/failing_tests/publishcmd_noparams.toml b/tests/unit/schema/testdata/failing_tests/publishcmd_noparams.toml new file mode 100644 index 0000000000..d56a7f82c5 --- /dev/null +++ b/tests/unit/schema/testdata/failing_tests/publishcmd_noparams.toml @@ -0,0 +1,4 @@ +version = 0.1 + +[default.publish] +debug = false diff --git a/tests/unit/schema/testdata/failing_tests/remote_invokecmd_noparams.toml b/tests/unit/schema/testdata/failing_tests/remote_invokecmd_noparams.toml new file mode 100644 index 0000000000..6186e6d091 --- /dev/null +++ b/tests/unit/schema/testdata/failing_tests/remote_invokecmd_noparams.toml @@ -0,0 +1,4 @@ +version = 0.1 + +[default.remote_invoke] +debug = false diff --git a/tests/unit/schema/testdata/failing_tests/synccmd_noparams.toml b/tests/unit/schema/testdata/failing_tests/synccmd_noparams.toml new file mode 100644 index 0000000000..b4458242ca --- /dev/null +++ b/tests/unit/schema/testdata/failing_tests/synccmd_noparams.toml @@ -0,0 +1,4 @@ +version = 0.1 + +[default.sync] +debug = false diff --git a/tests/unit/schema/testdata/failing_tests/tracescmd_noparams.toml b/tests/unit/schema/testdata/failing_tests/tracescmd_noparams.toml new file mode 100644 index 0000000000..d2d5e647d6 --- /dev/null +++ b/tests/unit/schema/testdata/failing_tests/tracescmd_noparams.toml @@ -0,0 +1,4 @@ +version = 0.1 + +[default.traces] +debug = false diff --git a/tests/unit/schema/testdata/failing_tests/validatecmd_noparams.toml b/tests/unit/schema/testdata/failing_tests/validatecmd_noparams.toml new file mode 100644 index 0000000000..3277e99465 --- /dev/null +++ b/tests/unit/schema/testdata/failing_tests/validatecmd_noparams.toml @@ -0,0 +1,4 @@ +version = 0.1 + +[default.validate] +debug = false diff --git a/tests/unit/schema/testdata/passing_tests/buildcmd.toml b/tests/unit/schema/testdata/passing_tests/buildcmd.toml new file mode 100644 index 0000000000..d958e59157 --- /dev/null +++ b/tests/unit/schema/testdata/passing_tests/buildcmd.toml @@ -0,0 +1,36 @@ +version = 0.1 + +[default.build.parameters] +hook_name = "Hook name" +skip_prepare_infra = false +use_container = false +container_env_var = "Container env var" +container_env_var_file = "Container env var file" +build_image = "Build image" +exclude = "Exclude" +parallel = false +mount_with = "READ" +build_dir = "Build dir" +cache_dir = "Cache dir" +base_dir = "Base dir" +manifest = "Manifest" +cached = false +template_file = "Template file" +parameter_overrides = "Parameter overrides" +skip_pull_image = false +docker_network = "Docker network" +beta_features = false +debug = false +profile = "Profile" +region = "Region" + +[other.build.parameters] +skip_prepare_infra = true +use_container = true +parallel = true +mount_with = "WRITE" +cached = true +parameter_overrides = ["Parameter", "Overrides"] +skip_pull_image = true +beta_features = true +debug = true \ No newline at end of file diff --git a/tests/unit/schema/testdata/passing_tests/deletecmd.toml b/tests/unit/schema/testdata/passing_tests/deletecmd.toml new file mode 100644 index 0000000000..4b5f09c6fb --- /dev/null +++ b/tests/unit/schema/testdata/passing_tests/deletecmd.toml @@ -0,0 +1,16 @@ +version = 0.1 + +[default.delete.parameters] +stack_name = "Stack name" +no_prompts = false +s3_bucket = "S3 Bucket" +s3_prefix = "S3 Prefix" +profile = "Profile" +region = "Region" +beta_features = false +debug = false + +[other.delete.parameters] +no_prompts = true +beta_features = true +debug = true \ No newline at end of file diff --git a/tests/unit/schema/testdata/passing_tests/deploycmd.toml b/tests/unit/schema/testdata/passing_tests/deploycmd.toml new file mode 100644 index 0000000000..fcc3d38aeb --- /dev/null +++ b/tests/unit/schema/testdata/passing_tests/deploycmd.toml @@ -0,0 +1,48 @@ +version = 0.1 + +[default.deploy.parameters] +guided = false +template_file = "Template file" +no_execute_changeset = false +fail_on_empty_changeset = false +confirm_changeset = false +disable_rollback = false +on_failure = "DELETE" +stack_name = "Stack name" +s3_bucket = "S3 Bucket" +image_repository = "Image repository" +image_repositories = ["Image", "Repositories"] +force_upload = false +s3_prefix = "S3 Prefix" +kms_key_id = "KMS Key ID" +role_arn = "Role ARN" +use_json = false +resolve_s3 = false +resolve_image_repos = false +metadata = "Metadata" +notification_arns = ["Notification", "ARNS"] +tags = ["Tags", "More tags", "Even more tags"] +parameter_overrides = "Parameter overrides" +signing_profiles = "Signing profiles" +no_progressbar = false +capabilities = ["Capabilities", "More capabilities"] +profile = "Profile" +region = "Region" +beta_features = false +debug = false + +[other.deploy.parameters] +guided = true +no_execute_changeset = true +fail_on_empty_changeset = true +confirm_changeset = true +disable_rollback = true +on_failure = "ROLLBACK" +force_upload = true +use_json = true +resolve_s3 = true +resolve_image_repos = true +parameter_overrides = ["Parameter", "Overrides"] +no_progressbar = true +beta_features = true +debug = true \ No newline at end of file diff --git a/tests/unit/schema/testdata/passing_tests/initcmd.toml b/tests/unit/schema/testdata/passing_tests/initcmd.toml new file mode 100644 index 0000000000..a514c6c476 --- /dev/null +++ b/tests/unit/schema/testdata/passing_tests/initcmd.toml @@ -0,0 +1,37 @@ +version = 0.1 + +[default.init.parameters] +no_interactive = false +architecture = "arm64" +location = "Location" +runtime = "python3.11" +package_type = "Image" +base_image = "amazon/python3.11-base" +dependency_manager = "pip" +output_dir = "Output dir" +name = "Name" +app_template = "App template" +no_input = false +extra_context = "Extra context" +tracing = false +application_insights = false +beta_features = false +debug = false + +[other.init.parameters] +no_interactive = true +architecture = "x86_64" +runtime = "java11" +package_type = "Zip" +base_image = "amazon/java11-base" +dependency_manager = "gradle" +no_input = true +tracing = true +application_insights = true +beta_features = true +debug = true + +[onemore.init.parameters] +runtime = "ruby3.2" +base_image = "amazon/ruby3.2-base" +dependency_manager = "bundler" \ No newline at end of file diff --git a/tests/unit/schema/testdata/passing_tests/list_endpointscmd.toml b/tests/unit/schema/testdata/passing_tests/list_endpointscmd.toml new file mode 100644 index 0000000000..ef03141b4a --- /dev/null +++ b/tests/unit/schema/testdata/passing_tests/list_endpointscmd.toml @@ -0,0 +1,17 @@ +version = 0.1 + +[default.list_endpoints.parameters] +parameter_overrides = "Parameter overrides" +stack_name = "Stack name" +output = "json" +template_file = "Template file" +profile = "Profile" +region = "Region" +beta_features = false +debug = false + +[other.list_endpoints.parameters] +parameter_overrides = ["Parameter", "Overrides"] +output = "table" +beta_features = true +debug = true \ No newline at end of file diff --git a/tests/unit/schema/testdata/passing_tests/list_resources.toml b/tests/unit/schema/testdata/passing_tests/list_resources.toml new file mode 100644 index 0000000000..558a9de810 --- /dev/null +++ b/tests/unit/schema/testdata/passing_tests/list_resources.toml @@ -0,0 +1,17 @@ +version = 0.1 + +[default.list_resources.parameters] +parameter_overrides = "Parameter overrides" +stack_name = "Stack name" +output = "json" +template_file = "Template file" +profile = "Profile" +region = "Region" +beta_features = false +debug = false + +[other.list_resources.parameters] +parameter_overrides = ["Parameter", "Overrides"] +output = "table" +beta_features = true +debug = true \ No newline at end of file diff --git a/tests/unit/schema/testdata/passing_tests/list_stack_outputs.toml b/tests/unit/schema/testdata/passing_tests/list_stack_outputs.toml new file mode 100644 index 0000000000..e931937d9e --- /dev/null +++ b/tests/unit/schema/testdata/passing_tests/list_stack_outputs.toml @@ -0,0 +1,14 @@ +version = 0.1 + +[default.list_stack_outputs.parameters] +stack_name = "Stack name" +output = "json" +profile = "Profile" +region = "Region" +beta_features = false +debug = false + +[other.list_stack_outputs.parameters] +output = "table" +beta_features = true +debug = true \ No newline at end of file diff --git a/tests/unit/schema/testdata/passing_tests/local_invokecmd.toml b/tests/unit/schema/testdata/passing_tests/local_invokecmd.toml new file mode 100644 index 0000000000..d5cd5f24a3 --- /dev/null +++ b/tests/unit/schema/testdata/passing_tests/local_invokecmd.toml @@ -0,0 +1,39 @@ +version = 0.1 + +[default.local_invoke.parameters] +hook_name = "Hook name" +skip_prepare_infra = false +event = "Event" +no_event = false +template_file = "Template file" +env_vars = "Env vars" +parameter_overrides = "Parameter overrides" +debug_port = 10 +debugger_path = "Debugger path" +debug_args = "Debug args" +container_env_vars = "Container env vars" +docker_volume_basedir = "Docker volume basedir" +log_file = "Log file" +layer_cache_basedir = "Layer cache basedir" +skip_pull_image = false +docker_network = "Docker network" +force_image_build = false +shutdown = false +container_host = "Container host" +container_host_interface = "Container host interface" +invoke_image = "Invoke image" +beta_features = false +debug = false +profile = "Profile" +region = "Region" + +[other.local_invoke.parameters] +skip_prepare_infra = true +no_event = true +parameter_overrides = ["Parameter", "Overrides"] +debug_port = 20 +skip_pull_image = true +force_image_build = true +shutdown = true +beta_features = true +debug = true \ No newline at end of file diff --git a/tests/unit/schema/testdata/passing_tests/local_start_apicmd.toml b/tests/unit/schema/testdata/passing_tests/local_start_apicmd.toml new file mode 100644 index 0000000000..bb833a2419 --- /dev/null +++ b/tests/unit/schema/testdata/passing_tests/local_start_apicmd.toml @@ -0,0 +1,43 @@ +version = 0.1 + +[default.local_start_api.parameters] +hook_name = "Hook name" +skip_prepare_infra = false +host = "Host" +port = 10 +static_dir = "Static dir" +template_file = "Template file" +env_vars = "Env vars" +parameter_overrides = "Parameter overrides" +debug_port = 10 +debugger_path = "Debugger path" +debug_args = "Debug args" +container_env_vars = "Container env vars" +docker_volume_basedir = "Docker volume basedir" +log_file = "Log file" +layer_cache_basedir = "Layer cache basedir" +skip_pull_image = false +docker_network = "Docker network" +force_image_build = false +warm_containers = "EAGER" +debug_function = "Debug function" +shutdown = false +container_host = "Container host" +container_host_interface = "Container host interface" +invoke_image = "Invoke image" +beta_features = false +debug = false +profile = "Profile" +region = "Region" + +[other.local_start_api.parameters] +skip_prepare_infra = true +port = 200 +parameter_overrides = ["Parameter", "Overrides"] +debug_port = 1 +skip_pull_image = true +force_image_build = true +warm_containers = "LAZY" +shutdown = true +beta_features = true +debug = true \ No newline at end of file diff --git a/tests/unit/schema/testdata/passing_tests/local_start_lambdacmd.toml b/tests/unit/schema/testdata/passing_tests/local_start_lambdacmd.toml new file mode 100644 index 0000000000..b738f8639b --- /dev/null +++ b/tests/unit/schema/testdata/passing_tests/local_start_lambdacmd.toml @@ -0,0 +1,42 @@ +version = 0.1 + +[default.local_start_lambda.parameters] +hook_name = "Hook name" +skip_prepare_infra = false +host = "Host" +port = 10 +template_file = "Template file" +env_vars = "Env vars" +parameter_overrides = "Parameter overrides" +debug_port = 10 +debugger_path = "Debugger path" +debug_args = "Debug args" +container_env_vars = "Container env vars" +docker_volume_basedir = "Docker volume basedir" +log_file = "Log file" +layer_cache_basedir = "Layer cache basedir" +skip_pull_image = false +docker_network = "Docker network" +force_image_build = false +warm_containers = "EAGER" +debug_function = "Debug function" +shutdown = false +container_host = "Container host" +container_host_interface = "Container host interface" +invoke_image = "Invoke image" +beta_features = false +debug = false +profile = "Profile" +region = "Region" + +[other.local_start_lambda.parameters] +skip_prepare_infra = true +port = 200 +parameter_overrides = ["Parameter", "Overrides"] +debug_port = 1 +skip_pull_image = true +force_image_build = true +warm_containers = "LAZY" +shutdown = true +beta_features = true +debug = true \ No newline at end of file diff --git a/tests/unit/schema/testdata/passing_tests/logscmd.toml b/tests/unit/schema/testdata/passing_tests/logscmd.toml new file mode 100644 index 0000000000..ec7d8d71d9 --- /dev/null +++ b/tests/unit/schema/testdata/passing_tests/logscmd.toml @@ -0,0 +1,23 @@ +version = 0.1 + +[default.logs.parameters] +name = "Name" +stack_name = "Stack name" +filter = "Filter" +tail = false +include_traces = false +cw_log_group = "CW Log Group" +output = "json" +end_time = "End time" +start_time = "Start time" +beta_features = false +debug = false +profile = "Profile" +region = "Region" + +[other.logs.parameters] +tail = true +include_traces = true +output = "text" +beta_features = true +debug = true \ No newline at end of file diff --git a/tests/unit/schema/testdata/passing_tests/packagecmd.toml b/tests/unit/schema/testdata/passing_tests/packagecmd.toml new file mode 100644 index 0000000000..ed9c7ca9b3 --- /dev/null +++ b/tests/unit/schema/testdata/passing_tests/packagecmd.toml @@ -0,0 +1,28 @@ +version = 0.1 + +[default.package.parameters] +template_file = "Template file" +output_template_file = "Output template file" +s3_bucket = "S3 Bucket" +image_repository = "Image repository" +image_repositories = ["Image", "Repositories"] +s3_prefix = "S3 Prefix" +kms_key_id = "KMS Key ID" +use_json = false +force_upload = false +resolve_s3 = false +metadata = "Metadata" +signing_profiles = "Signing profiles" +no_progressbar = false +beta_features = false +debug = false +profile = "Profile" +region = "Region" + +[other.package.parameters] +use_json = true +force_upload = true +resolve_s3 = true +no_profressbar = true +beta_features = true +debug = true \ No newline at end of file diff --git a/tests/unit/schema/testdata/passing_tests/pipeline_bootstrapcmd.toml b/tests/unit/schema/testdata/passing_tests/pipeline_bootstrapcmd.toml new file mode 100644 index 0000000000..adf31387c3 --- /dev/null +++ b/tests/unit/schema/testdata/passing_tests/pipeline_bootstrapcmd.toml @@ -0,0 +1,37 @@ +version = 0.1 + +[default.pipeline_bootstrap.parameters] +interactive = false +stage = "Stage" +pipeline_user = "Pipeline user" +pipeline_execution_role = "Pipeline execution role" +cloudformation_execution_role = "Cloudformation execution role" +bucket = "Bucket" +create_image_repository = false +image_repository = "Image repository" +image_repositories = ["Image", "Repositories"] +confirm_changeset = false +permissions_provider = "iam" +oidc_provider_url = "OIDC Provider URL" +oidc_client_id = "OIDC Client ID" +github_org = "Github ORG" +github_repo = "GitHub Repo" +deployment_branch = "Deployment branch" +oidc_provider = "bitbucket-pipelines" +gitlab_group = "GitLab group" +gitlab_project = "GitLab project" +bitbucket_repo_uuid = "BitBucket Repo UUID" +cicd_provider = "CICD Provider" +beta_features = false +debug = false +profile = "Profile" +region = "Region" + +[other.pipeline_bootstrap.parameters] +interactive = true +create_image_repository = true +confirm_changeset = true +permissions_provider = "oidc" +oidc_provider = "gitlab" +beta_features = true +debug = true \ No newline at end of file diff --git a/tests/unit/schema/testdata/passing_tests/pipeline_initcmd.toml b/tests/unit/schema/testdata/passing_tests/pipeline_initcmd.toml new file mode 100644 index 0000000000..bc155d01b8 --- /dev/null +++ b/tests/unit/schema/testdata/passing_tests/pipeline_initcmd.toml @@ -0,0 +1,11 @@ +version = 0.1 + +[default.pipeline_init.parameters] +bootstrap = false +beta_features = false +debug = false + +[other.pipeline_init.parameters] +bootstrap = true +beta_features = true +debug = true \ No newline at end of file diff --git a/tests/unit/schema/testdata/passing_tests/publishcmd.toml b/tests/unit/schema/testdata/passing_tests/publishcmd.toml new file mode 100644 index 0000000000..937bf3054e --- /dev/null +++ b/tests/unit/schema/testdata/passing_tests/publishcmd.toml @@ -0,0 +1,13 @@ +version = 0.1 + +[default.publish.parameters] +template_file = "Template file" +semantic_version = "Semantic version" +profile = "Profile" +region = "Region" +beta_features = false +debug = false + +[other.publish.parameters] +beta_features = true +debug = true \ No newline at end of file diff --git a/tests/unit/schema/testdata/passing_tests/remote_invokecmd.toml b/tests/unit/schema/testdata/passing_tests/remote_invokecmd.toml new file mode 100644 index 0000000000..3056e54246 --- /dev/null +++ b/tests/unit/schema/testdata/passing_tests/remote_invokecmd.toml @@ -0,0 +1,17 @@ +version = 0.1 + +[default.remote_invoke.parameters] +stack_name = "Stack name" +event = "Event" +event_file = "Event file" +output = "json" +parameter = ["Parameter", "Parameter2"] +beta_features = false +debug = false +profile = "Profile" +region = "Region" + +[other.remote_invoke.parameters] +output = "text" +beta_features = false +debug = false \ No newline at end of file diff --git a/tests/unit/schema/testdata/passing_tests/sample.toml b/tests/unit/schema/testdata/passing_tests/sample.toml new file mode 100644 index 0000000000..4b95a2c644 --- /dev/null +++ b/tests/unit/schema/testdata/passing_tests/sample.toml @@ -0,0 +1,26 @@ +version = 0.1 + +[default] +[default.global] +[default.global.parameters] +stack_name = "sam-app" + +[default.build.parameters] +cached = true +parallel = true + +[default.deploy.parameters] +capabilities = "CAPABILITY_IAM" +confirm_changeset = true +resolve_s3 = true + +[default.sync.parameters] +watch = true + +[default.local_start_api.parameters] +warm_containers = "EAGER" + +[prod] +[prod.sync] +[prod.sync.parameters] +watch = false \ No newline at end of file diff --git a/tests/unit/schema/testdata/passing_tests/sample.yaml b/tests/unit/schema/testdata/passing_tests/sample.yaml new file mode 100644 index 0000000000..53527d0dcc --- /dev/null +++ b/tests/unit/schema/testdata/passing_tests/sample.yaml @@ -0,0 +1,26 @@ +version: 0.1 + +default: + global: + parameters: + stack_name: sam-app + build: + parameters: + cached: true + parallel: true + deploy: + parameters: + capabilities: CAPABILITY_IAM + confirm_changeset: true + resolve_s3: true + sync: + parameters: + watch: true + local_start_api: + parameters: + warm_containers: EAGER + +prod: + sync: + parameters: + watch: false \ No newline at end of file diff --git a/tests/unit/schema/testdata/passing_tests/simplesample.toml b/tests/unit/schema/testdata/passing_tests/simplesample.toml new file mode 100644 index 0000000000..ead5e1d1bc --- /dev/null +++ b/tests/unit/schema/testdata/passing_tests/simplesample.toml @@ -0,0 +1,22 @@ +version = 0.1 + +[default.global.parameters] +stack_name = "sam-app" + +[default.build.parameters] +cached = true +parallel = true + +[default.deploy.parameters] +capabilities = "CAPABILITY_IAM" +confirm_changeset = true +resolve_s3 = true + +[default.sync.parameters] +watch = true + +[default.local_start_api.parameters] +warm_containers = "EAGER" + +[prod.sync.parameters] +watch = false \ No newline at end of file diff --git a/tests/unit/schema/testdata/passing_tests/synccmd.toml b/tests/unit/schema/testdata/passing_tests/synccmd.toml new file mode 100644 index 0000000000..1696d2a864 --- /dev/null +++ b/tests/unit/schema/testdata/passing_tests/synccmd.toml @@ -0,0 +1,40 @@ +version = 0.1 + +[default.sync.parameters] +template_file = "Template file" +code = false +watch = false +resource_id = "Resource ID" +resource = "AWS::Serverless::Function" +dependency_layer = false +skip_deploy_sync = false +stack_name = "Stack name" +base_dir = "Base dir" +use_container = false +build_image = "Build image" +image_repository = "Image repository" +image_repositories = ["Image", "Repositories"] +s3_bucket = "S3 Bucket" +s3_prefix = "S3 Prefix" +kms_key_id = "KMS Key ID" +role_arn = "Role ARN" +parameter_overrides = "Parameter overrides" +beta_features = false +debug = false +profile = "Profile" +region = "Region" +metadata = "Metadata" +notification_arns = ["Notification", "ARNS"] +tags = ["Tags", "More tags"] +capabilities = ["Some", "Capabilities"] + +[other.sync.parameters] +code = true +watch = true +resource = "AWS::Lambda::Function" +dependency_layer = true +skip_deploy_sync = true +use_container = true +parameter_overrides = ["Parameter", "Overrides"] +beta_features = true +debug = true \ No newline at end of file diff --git a/tests/unit/schema/testdata/passing_tests/tracescmd.toml b/tests/unit/schema/testdata/passing_tests/tracescmd.toml new file mode 100644 index 0000000000..760eea2aba --- /dev/null +++ b/tests/unit/schema/testdata/passing_tests/tracescmd.toml @@ -0,0 +1,18 @@ +version = 0.1 + +[default.traces.parameters] +trace_id = "Trace ID" +tail = false +output = "json" +end_time = "End time" +start_time = "Start time" +beta_features = false +debug = false +profile = "Profile" +region = "Region" + +[other.traces.parameters] +tail = true +output = "text" +beta_features = true +debug = true \ No newline at end of file diff --git a/tests/unit/schema/testdata/passing_tests/validatecmd.toml b/tests/unit/schema/testdata/passing_tests/validatecmd.toml new file mode 100644 index 0000000000..295d46250a --- /dev/null +++ b/tests/unit/schema/testdata/passing_tests/validatecmd.toml @@ -0,0 +1,14 @@ +version = 0.1 + +[default.validate.parameters] +template_file = "Template file" +profile = "Profile" +region = "Region" +beta_features = false +debug = false +lint = false + +[other.validate.parameters] +beta_features = true +debug = true +lint = true \ No newline at end of file From eac64fe604e2b040b0d6d4f6039ea5dfb7eb429f Mon Sep 17 00:00:00 2001 From: Leonardo Gama Date: Mon, 31 Jul 2023 10:21:46 -0700 Subject: [PATCH 2/6] Update schema logic for space separated list type --- samcli/commands/_utils/options.py | 2 +- schema/samcli.json | 20 +++++++++++++++---- .../testdata/passing_tests/deploycmd.toml | 6 ++++-- .../testdata/passing_tests/synccmd.toml | 4 +++- 4 files changed, 24 insertions(+), 8 deletions(-) diff --git a/samcli/commands/_utils/options.py b/samcli/commands/_utils/options.py index e2d2971928..aa57f65f2c 100644 --- a/samcli/commands/_utils/options.py +++ b/samcli/commands/_utils/options.py @@ -820,7 +820,7 @@ def _space_separated_list_func_type(value): raise ValueError() -_space_separated_list_func_type.__name__ = "LIST" +_space_separated_list_func_type.__name__ = "list,string" def generate_next_command_recommendation(command_tuples: List[Tuple[str, str]]) -> str: diff --git a/schema/samcli.json b/schema/samcli.json index 921e0dad19..cbe8ee4fce 100644 --- a/schema/samcli.json +++ b/schema/samcli.json @@ -1085,7 +1085,10 @@ }, "notification_arns": { "title": "notification_arns", - "type": "array", + "type": [ + "array", + "string" + ], "description": "ARNs of SNS topics that AWS Cloudformation associates with the stack.", "items": { "type": "string" @@ -1122,7 +1125,10 @@ }, "capabilities": { "title": "capabilities", - "type": "array", + "type": [ + "array", + "string" + ], "description": "List of capabilities that one must specify before AWS Cloudformation can create certain stacks.\n\nAccepted Values: CAPABILITY_IAM, CAPABILITY_NAMED_IAM, CAPABILITY_RESOURCE_POLICY, CAPABILITY_AUTO_EXPAND.\n\nLearn more at: https://docs.aws.amazon.com/serverlessrepo/latest/devguide/acknowledging-application-capabilities.html", "items": { "type": "string" @@ -1560,7 +1566,10 @@ }, "notification_arns": { "title": "notification_arns", - "type": "array", + "type": [ + "array", + "string" + ], "description": "ARNs of SNS topics that AWS Cloudformation associates with the stack.", "items": { "type": "string" @@ -1576,7 +1585,10 @@ }, "capabilities": { "title": "capabilities", - "type": "array", + "type": [ + "array", + "string" + ], "description": "List of capabilities that one must specify before AWS Cloudformation can create certain stacks.\n\nAccepted Values: CAPABILITY_IAM, CAPABILITY_NAMED_IAM, CAPABILITY_RESOURCE_POLICY, CAPABILITY_AUTO_EXPAND.\n\nLearn more at: https://docs.aws.amazon.com/serverlessrepo/latest/devguide/acknowledging-application-capabilities.html", "default": [ "CAPABILITY_NAMED_IAM", diff --git a/tests/unit/schema/testdata/passing_tests/deploycmd.toml b/tests/unit/schema/testdata/passing_tests/deploycmd.toml index fcc3d38aeb..1596b421bb 100644 --- a/tests/unit/schema/testdata/passing_tests/deploycmd.toml +++ b/tests/unit/schema/testdata/passing_tests/deploycmd.toml @@ -20,12 +20,12 @@ use_json = false resolve_s3 = false resolve_image_repos = false metadata = "Metadata" -notification_arns = ["Notification", "ARNS"] +notification_arns = "Notification ARNS" tags = ["Tags", "More tags", "Even more tags"] parameter_overrides = "Parameter overrides" signing_profiles = "Signing profiles" no_progressbar = false -capabilities = ["Capabilities", "More capabilities"] +capabilities = "Capabilities" profile = "Profile" region = "Region" beta_features = false @@ -42,7 +42,9 @@ force_upload = true use_json = true resolve_s3 = true resolve_image_repos = true +notification_arns = ["Notification", "ARNS"] parameter_overrides = ["Parameter", "Overrides"] no_progressbar = true +capabilities = ["Capabilities", "More capabilities"] beta_features = true debug = true \ No newline at end of file diff --git a/tests/unit/schema/testdata/passing_tests/synccmd.toml b/tests/unit/schema/testdata/passing_tests/synccmd.toml index 1696d2a864..0c8f17e161 100644 --- a/tests/unit/schema/testdata/passing_tests/synccmd.toml +++ b/tests/unit/schema/testdata/passing_tests/synccmd.toml @@ -37,4 +37,6 @@ skip_deploy_sync = true use_container = true parameter_overrides = ["Parameter", "Overrides"] beta_features = true -debug = true \ No newline at end of file +debug = true +notification_arns = "Notification ARNS" +capabilities = "Capabilities" \ No newline at end of file From 7ae3242b223e087146054adc0605e72cc5367d19 Mon Sep 17 00:00:00 2001 From: Leonardo Gama Date: Mon, 31 Jul 2023 16:47:21 -0700 Subject: [PATCH 3/6] Fix failing Windows tests --- tests/unit/schema/test_schema_validation.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/tests/unit/schema/test_schema_validation.py b/tests/unit/schema/test_schema_validation.py index 8a15ff5829..a1c7b37233 100644 --- a/tests/unit/schema/test_schema_validation.py +++ b/tests/unit/schema/test_schema_validation.py @@ -15,7 +15,7 @@ class TestSchemaValidation(TestCase): def setUpClass(cls): cls.schema = generate_schema() testing_dir = Path(__name__).resolve().parents[0] - cls.testdata_dir = Path(testing_dir, "tests", "unit", "schema", "testdata") + cls.testdata_dir = str(Path(testing_dir, "tests", "unit", "schema", "testdata")) def test_samconfig_validates_against_schema(self): self.assertIsNotNone(self.schema, "Schema was not set") @@ -25,7 +25,7 @@ def test_samconfig_validates_against_schema(self): # Read in and assert all files in passing_tests pass for config_file_path in passing_tests_dir.iterdir(): - config_file = FILE_MANAGER_MAPPER[config_file_path.suffix].read(Path(passing_tests_dir, config_file_path)) + config_file = FILE_MANAGER_MAPPER[config_file_path.suffix].read(Path(str(passing_tests_dir), config_file_path)) self.assertNotEqual(config_file, {}, f"Config file {config_file_path} should be read correctly") try: @@ -44,7 +44,7 @@ def test_samconfig_doesnt_validate_against_schema(self): # Read in and assert all files in failing_tests fail for config_file_path in failing_tests_dir.iterdir(): - config_file = FILE_MANAGER_MAPPER[config_file_path.suffix].read(Path(failing_tests_dir, config_file_path)) + config_file = FILE_MANAGER_MAPPER[config_file_path.suffix].read(Path(str(failing_tests_dir), config_file_path)) self.assertNotEqual(config_file, {}, f"Config file {config_file_path} should be read correctly") with self.assertRaises( From 02320dcfc7b1efb8a6b2c6b9bdf009299c89ba41 Mon Sep 17 00:00:00 2001 From: Leonardo Gama Date: Tue, 1 Aug 2023 09:32:26 -0700 Subject: [PATCH 4/6] Actually fix failing tests --- tests/unit/schema/test_schema_validation.py | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/tests/unit/schema/test_schema_validation.py b/tests/unit/schema/test_schema_validation.py index a1c7b37233..edc2c170bf 100644 --- a/tests/unit/schema/test_schema_validation.py +++ b/tests/unit/schema/test_schema_validation.py @@ -1,3 +1,4 @@ +import os from pathlib import Path import jsonschema from parameterized import parameterized @@ -24,8 +25,10 @@ def test_samconfig_validates_against_schema(self): tests_not_passing = [] # Read in and assert all files in passing_tests pass - for config_file_path in passing_tests_dir.iterdir(): - config_file = FILE_MANAGER_MAPPER[config_file_path.suffix].read(Path(str(passing_tests_dir), config_file_path)) + for config_file_path in os.listdir(passing_tests_dir): + config_file = FILE_MANAGER_MAPPER[Path(config_file_path).suffix].read( + Path(str(passing_tests_dir), config_file_path) + ) self.assertNotEqual(config_file, {}, f"Config file {config_file_path} should be read correctly") try: @@ -43,8 +46,10 @@ def test_samconfig_doesnt_validate_against_schema(self): tests_not_failing = [] # Read in and assert all files in failing_tests fail - for config_file_path in failing_tests_dir.iterdir(): - config_file = FILE_MANAGER_MAPPER[config_file_path.suffix].read(Path(str(failing_tests_dir), config_file_path)) + for config_file_path in os.listdir(failing_tests_dir): + config_file = FILE_MANAGER_MAPPER[Path(config_file_path).suffix].read( + Path(str(failing_tests_dir), config_file_path) + ) self.assertNotEqual(config_file, {}, f"Config file {config_file_path} should be read correctly") with self.assertRaises( From 0c017832740557017db36d838ee16af22036cbf2 Mon Sep 17 00:00:00 2001 From: Leonardo Gama Date: Tue, 1 Aug 2023 10:11:59 -0700 Subject: [PATCH 5/6] Implement requested changes --- tests/unit/schema/test_schema_validation.py | 14 +------------- .../testdata/failing_tests/buildcmd_noparams.yaml | 4 ++++ .../buildcmd_wrongtype_build_dir.toml | 4 ++++ .../buildcmd_wrongtype_build_dir.yaml | 6 ++++++ .../failing_tests/buildcmd_wrongtype_debug.toml | 4 ++++ .../failing_tests/buildcmd_wrongtype_debug.yaml | 6 ++++++ .../buildcmd_wrongtype_parameter_overrides.toml | 4 ++++ .../buildcmd_wrongtype_parameter_overrides.yaml | 6 ++++++ .../local_invokecmd_wrongtype_debug_port.toml | 4 ++++ .../local_invokecmd_wrongtype_debug_port.yaml | 6 ++++++ .../packagecmd_wrongtype_image_repositories.toml | 4 ++++ .../packagecmd_wrongtype_image_repositories.yaml | 6 ++++++ 12 files changed, 55 insertions(+), 13 deletions(-) create mode 100644 tests/unit/schema/testdata/failing_tests/buildcmd_noparams.yaml create mode 100644 tests/unit/schema/testdata/failing_tests/buildcmd_wrongtype_build_dir.toml create mode 100644 tests/unit/schema/testdata/failing_tests/buildcmd_wrongtype_build_dir.yaml create mode 100644 tests/unit/schema/testdata/failing_tests/buildcmd_wrongtype_debug.toml create mode 100644 tests/unit/schema/testdata/failing_tests/buildcmd_wrongtype_debug.yaml create mode 100644 tests/unit/schema/testdata/failing_tests/buildcmd_wrongtype_parameter_overrides.toml create mode 100644 tests/unit/schema/testdata/failing_tests/buildcmd_wrongtype_parameter_overrides.yaml create mode 100644 tests/unit/schema/testdata/failing_tests/local_invokecmd_wrongtype_debug_port.toml create mode 100644 tests/unit/schema/testdata/failing_tests/local_invokecmd_wrongtype_debug_port.yaml create mode 100644 tests/unit/schema/testdata/failing_tests/packagecmd_wrongtype_image_repositories.toml create mode 100644 tests/unit/schema/testdata/failing_tests/packagecmd_wrongtype_image_repositories.yaml diff --git a/tests/unit/schema/test_schema_validation.py b/tests/unit/schema/test_schema_validation.py index edc2c170bf..ebe07a8445 100644 --- a/tests/unit/schema/test_schema_validation.py +++ b/tests/unit/schema/test_schema_validation.py @@ -22,7 +22,6 @@ def test_samconfig_validates_against_schema(self): self.assertIsNotNone(self.schema, "Schema was not set") passing_tests_dir = Path(self.testdata_dir, "passing_tests") - tests_not_passing = [] # Read in and assert all files in passing_tests pass for config_file_path in os.listdir(passing_tests_dir): @@ -34,16 +33,12 @@ def test_samconfig_validates_against_schema(self): try: jsonschema.validate(config_file, self.schema) except jsonschema.ValidationError as e: - tests_not_passing.append(f"<{config_file_path}: {e.message}>") - - if tests_not_passing: - self.assertTrue(False, f"Some config files are not validating against schema: {tests_not_passing}") + self.assertTrue(False, f"File {config_file_path} not validating: {e.message}") def test_samconfig_doesnt_validate_against_schema(self): self.assertIsNotNone(self.schema, "Schema was not set") failing_tests_dir = Path(self.testdata_dir, "failing_tests") - tests_not_failing = [] # Read in and assert all files in failing_tests fail for config_file_path in os.listdir(failing_tests_dir): @@ -56,10 +51,3 @@ def test_samconfig_doesnt_validate_against_schema(self): jsonschema.ValidationError, msg=f"Config file {config_file_path} should not validate against schema" ): jsonschema.validate(config_file, self.schema) - tests_not_failing.append(config_file_path) - raise jsonschema.ValidationError("Test should have failed but didn't") - - if tests_not_failing: - self.assertTrue( - False, f"Some config files are validating against schema when they shouldn't: {tests_not_failing}" - ) diff --git a/tests/unit/schema/testdata/failing_tests/buildcmd_noparams.yaml b/tests/unit/schema/testdata/failing_tests/buildcmd_noparams.yaml new file mode 100644 index 0000000000..2cd38690fe --- /dev/null +++ b/tests/unit/schema/testdata/failing_tests/buildcmd_noparams.yaml @@ -0,0 +1,4 @@ +version: 0.1 +default: + build: + debug: false \ No newline at end of file diff --git a/tests/unit/schema/testdata/failing_tests/buildcmd_wrongtype_build_dir.toml b/tests/unit/schema/testdata/failing_tests/buildcmd_wrongtype_build_dir.toml new file mode 100644 index 0000000000..eddb917e60 --- /dev/null +++ b/tests/unit/schema/testdata/failing_tests/buildcmd_wrongtype_build_dir.toml @@ -0,0 +1,4 @@ +version = 0.1 + +[default.build.parameters] +build_dir = false \ No newline at end of file diff --git a/tests/unit/schema/testdata/failing_tests/buildcmd_wrongtype_build_dir.yaml b/tests/unit/schema/testdata/failing_tests/buildcmd_wrongtype_build_dir.yaml new file mode 100644 index 0000000000..512cbffcc6 --- /dev/null +++ b/tests/unit/schema/testdata/failing_tests/buildcmd_wrongtype_build_dir.yaml @@ -0,0 +1,6 @@ +version: 0.1 + +default: + build: + parameters: + build_dir: false \ No newline at end of file diff --git a/tests/unit/schema/testdata/failing_tests/buildcmd_wrongtype_debug.toml b/tests/unit/schema/testdata/failing_tests/buildcmd_wrongtype_debug.toml new file mode 100644 index 0000000000..f7513f9453 --- /dev/null +++ b/tests/unit/schema/testdata/failing_tests/buildcmd_wrongtype_debug.toml @@ -0,0 +1,4 @@ +version = 0.1 + +[default.build.parameters] +debug = "false" \ No newline at end of file diff --git a/tests/unit/schema/testdata/failing_tests/buildcmd_wrongtype_debug.yaml b/tests/unit/schema/testdata/failing_tests/buildcmd_wrongtype_debug.yaml new file mode 100644 index 0000000000..21a434567e --- /dev/null +++ b/tests/unit/schema/testdata/failing_tests/buildcmd_wrongtype_debug.yaml @@ -0,0 +1,6 @@ +version: 0.1 + +default: + build: + parameters: + debug: "False" \ No newline at end of file diff --git a/tests/unit/schema/testdata/failing_tests/buildcmd_wrongtype_parameter_overrides.toml b/tests/unit/schema/testdata/failing_tests/buildcmd_wrongtype_parameter_overrides.toml new file mode 100644 index 0000000000..4ff06e6b2f --- /dev/null +++ b/tests/unit/schema/testdata/failing_tests/buildcmd_wrongtype_parameter_overrides.toml @@ -0,0 +1,4 @@ +version = 0.1 + +[default.build.parameters] +parameter_overrides = 10 \ No newline at end of file diff --git a/tests/unit/schema/testdata/failing_tests/buildcmd_wrongtype_parameter_overrides.yaml b/tests/unit/schema/testdata/failing_tests/buildcmd_wrongtype_parameter_overrides.yaml new file mode 100644 index 0000000000..8fd607ad4d --- /dev/null +++ b/tests/unit/schema/testdata/failing_tests/buildcmd_wrongtype_parameter_overrides.yaml @@ -0,0 +1,6 @@ +version: 0.1 + +default: + build: + parameters: + parameter_overrides: 10 \ No newline at end of file diff --git a/tests/unit/schema/testdata/failing_tests/local_invokecmd_wrongtype_debug_port.toml b/tests/unit/schema/testdata/failing_tests/local_invokecmd_wrongtype_debug_port.toml new file mode 100644 index 0000000000..06533cba69 --- /dev/null +++ b/tests/unit/schema/testdata/failing_tests/local_invokecmd_wrongtype_debug_port.toml @@ -0,0 +1,4 @@ +version = 0.1 + +[default.local_invoke.parameters] +debug_port = "10" \ No newline at end of file diff --git a/tests/unit/schema/testdata/failing_tests/local_invokecmd_wrongtype_debug_port.yaml b/tests/unit/schema/testdata/failing_tests/local_invokecmd_wrongtype_debug_port.yaml new file mode 100644 index 0000000000..925042a578 --- /dev/null +++ b/tests/unit/schema/testdata/failing_tests/local_invokecmd_wrongtype_debug_port.yaml @@ -0,0 +1,6 @@ +version: 0.1 + +default: + local_invoke: + parameters: + debug_port: "10" \ No newline at end of file diff --git a/tests/unit/schema/testdata/failing_tests/packagecmd_wrongtype_image_repositories.toml b/tests/unit/schema/testdata/failing_tests/packagecmd_wrongtype_image_repositories.toml new file mode 100644 index 0000000000..a33abbe0d3 --- /dev/null +++ b/tests/unit/schema/testdata/failing_tests/packagecmd_wrongtype_image_repositories.toml @@ -0,0 +1,4 @@ +version = 0.1 + +[default.package.parameters] +image_repositories = "Image repositories" \ No newline at end of file diff --git a/tests/unit/schema/testdata/failing_tests/packagecmd_wrongtype_image_repositories.yaml b/tests/unit/schema/testdata/failing_tests/packagecmd_wrongtype_image_repositories.yaml new file mode 100644 index 0000000000..372838afbe --- /dev/null +++ b/tests/unit/schema/testdata/failing_tests/packagecmd_wrongtype_image_repositories.yaml @@ -0,0 +1,6 @@ +version: 0.1 + +default: + package: + parameters: + image_repositories: Image repositories \ No newline at end of file From 2a8162b42aca0bca99c7de56ad77892400060483 Mon Sep 17 00:00:00 2001 From: Leonardo Gama Date: Wed, 2 Aug 2023 09:29:09 -0700 Subject: [PATCH 6/6] Self dot fail --- tests/unit/schema/test_schema_validation.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/unit/schema/test_schema_validation.py b/tests/unit/schema/test_schema_validation.py index ebe07a8445..ec8ff088ca 100644 --- a/tests/unit/schema/test_schema_validation.py +++ b/tests/unit/schema/test_schema_validation.py @@ -33,7 +33,7 @@ def test_samconfig_validates_against_schema(self): try: jsonschema.validate(config_file, self.schema) except jsonschema.ValidationError as e: - self.assertTrue(False, f"File {config_file_path} not validating: {e.message}") + self.fail(f"File {config_file_path} not validating: {e.message}") def test_samconfig_doesnt_validate_against_schema(self): self.assertIsNotNone(self.schema, "Schema was not set")