From d6734b43ac76d8f03891ed0ee6e3e16c65363494 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mikula=CC=81s=CC=8C=20Di=CC=81te=CC=8C?= Date: Mon, 28 Sep 2020 10:15:44 +0100 Subject: [PATCH] error when spec.json does not match generated name --- pkg/spec/spec.go | 5 +++++ pkg/tanka/parse_test.go | 21 +++++++++++++------ .../testdata/cases/env-mismatch/main.jsonnet | 5 +++++ .../testdata/cases/env-mismatch/spec.json | 7 +++++++ pkg/tanka/testdata/cases/env/spec.json | 2 +- 5 files changed, 33 insertions(+), 7 deletions(-) create mode 100644 pkg/tanka/testdata/cases/env-mismatch/main.jsonnet create mode 100644 pkg/tanka/testdata/cases/env-mismatch/spec.json diff --git a/pkg/spec/spec.go b/pkg/spec/spec.go index 989c48950..b431427d8 100644 --- a/pkg/spec/spec.go +++ b/pkg/spec/spec.go @@ -2,6 +2,7 @@ package spec import ( "encoding/json" + "fmt" "io/ioutil" "os" "path/filepath" @@ -50,6 +51,10 @@ func Parse(data []byte, name string) (*v1alpha1.Config, error) { return nil, errors.Wrap(err, "parsing spec.json") } + // only allow explicit metadata.name when matching generated value + if config.Metadata.Name != "" && config.Metadata.Name != name { + return nil, fmt.Errorf("invalid metadata.name, must match generated %q", name) + } // set the name field config.Metadata.Name = name diff --git a/pkg/tanka/parse_test.go b/pkg/tanka/parse_test.go index 3b8a56e3a..5e3d13219 100644 --- a/pkg/tanka/parse_test.go +++ b/pkg/tanka/parse_test.go @@ -43,20 +43,29 @@ func TestEvalJsonnet(t *testing.T) { func TestEval(t *testing.T) { cases := []struct { - baseDir string - expected interface{} + baseDir string + expectedError string + expected interface{} }{ { - baseDir: "./testdata/cases/env/", + baseDir: "./testdata/cases/env-mismatch", + expectedError: `reading spec.json: invalid metadata.name, must match generated "cases/env-mismatch"`, + }, + { + baseDir: "./testdata/cases/env", expected: map[string]interface{}{ - "tkName": "custom-name", + "tkName": "cases/env", }, }, } for _, test := range cases { raw, _, e := eval(test.baseDir, jsonnet.Opts{}) - assert.NoError(t, e) - assert.Equal(t, test.expected, raw) + if test.expectedError != "" { + assert.Equal(t, test.expectedError, e.Error()) + } else { + assert.NoError(t, e) + assert.Equal(t, test.expected, raw) + } } } diff --git a/pkg/tanka/testdata/cases/env-mismatch/main.jsonnet b/pkg/tanka/testdata/cases/env-mismatch/main.jsonnet new file mode 100644 index 000000000..5fbc3f8e5 --- /dev/null +++ b/pkg/tanka/testdata/cases/env-mismatch/main.jsonnet @@ -0,0 +1,5 @@ +local tk = (import "tk"); + +{ + tkName: tk.env.metadata.name, +} diff --git a/pkg/tanka/testdata/cases/env-mismatch/spec.json b/pkg/tanka/testdata/cases/env-mismatch/spec.json new file mode 100644 index 000000000..6ed997c21 --- /dev/null +++ b/pkg/tanka/testdata/cases/env-mismatch/spec.json @@ -0,0 +1,7 @@ +{ + "apiVersion": "v1alpha1", + "kind": "Environment", + "metadata": { + "name": "mismatched-name" + } +} diff --git a/pkg/tanka/testdata/cases/env/spec.json b/pkg/tanka/testdata/cases/env/spec.json index c529564aa..04e638ba1 100644 --- a/pkg/tanka/testdata/cases/env/spec.json +++ b/pkg/tanka/testdata/cases/env/spec.json @@ -2,6 +2,6 @@ "apiVersion": "v1alpha1", "kind": "Environment", "metadata": { - "name": "custom-name" + "name": "cases/env" } }