From c0dc68d6e792a53180e6cec018f4bebc15d13118 Mon Sep 17 00:00:00 2001 From: Anna Song Date: Tue, 3 May 2022 13:53:03 -0700 Subject: [PATCH 1/3] Add url tests Write comprehensive suite of integration tests for remote resources, as specified by Issue #4588 --- .../builtins/AnnotationsTransformer.go | 5 +- api/krusty/remoteload_test.go | 387 ++++++++++++------ 2 files changed, 256 insertions(+), 136 deletions(-) diff --git a/api/internal/builtins/AnnotationsTransformer.go b/api/internal/builtins/AnnotationsTransformer.go index c84c0d186..7064fa80c 100644 --- a/api/internal/builtins/AnnotationsTransformer.go +++ b/api/internal/builtins/AnnotationsTransformer.go @@ -1,8 +1,6 @@ // Code generated by pluginator on AnnotationsTransformer; DO NOT EDIT. // pluginator {unknown 1970-01-01T00:00:00Z } - - package builtins import ( @@ -18,7 +16,6 @@ type AnnotationsTransformerPlugin struct { FieldSpecs []types.FieldSpec `json:"fieldSpecs,omitempty" yaml:"fieldSpecs,omitempty"` } - func (p *AnnotationsTransformerPlugin) Config( _ *resmap.PluginHelpers, c []byte) (err error) { p.Annotations = nil @@ -37,5 +34,5 @@ func (p *AnnotationsTransformerPlugin) Transform(m resmap.ResMap) error { } func NewAnnotationsTransformerPlugin() resmap.TransformerPlugin { - return &AnnotationsTransformerPlugin{} + return &AnnotationsTransformerPlugin{} } diff --git a/api/krusty/remoteload_test.go b/api/krusty/remoteload_test.go index 91998758d..7e5efc2cb 100644 --- a/api/krusty/remoteload_test.go +++ b/api/krusty/remoteload_test.go @@ -9,6 +9,8 @@ import ( "path/filepath" "testing" + "sigs.k8s.io/kustomize/api/resmap" + "github.com/stretchr/testify/assert" "sigs.k8s.io/kustomize/api/internal/utils" "sigs.k8s.io/kustomize/api/krusty" @@ -16,69 +18,7 @@ import ( "sigs.k8s.io/kustomize/kyaml/filesys" ) -func TestRemoteLoad(t *testing.T) { - fSys := filesys.MakeFsOnDisk() - b := krusty.MakeKustomizer(krusty.MakeDefaultOptions()) - m, err := b.Run( - fSys, - "github.com/kubernetes-sigs/kustomize/examples/multibases/dev/?ref=v1.0.6") - if utils.IsErrTimeout(err) { - // Don't fail on timeouts. - t.SkipNow() - } - if !assert.NoError(t, err) { - t.FailNow() - } - yml, err := m.AsYaml() - assert.NoError(t, err) - assert.Equal(t, `apiVersion: v1 -kind: Pod -metadata: - labels: - app: myapp - name: dev-myapp-pod -spec: - containers: - - image: nginx:1.7.9 - name: nginx -`, string(yml)) -} - -func TestRemoteResource(t *testing.T) { - fSys := filesys.MakeFsOnDisk() - b := krusty.MakeKustomizer(krusty.MakeDefaultOptions()) - tmpDir, err := filesys.NewTmpConfirmedDir() - assert.NoError(t, err) - assert.NoError(t, fSys.WriteFile(filepath.Join(tmpDir.String(), "kustomization.yaml"), []byte(` -resources: -- github.com/kubernetes-sigs/kustomize/examples/multibases/dev/?ref=v1.0.6 -`))) - m, err := b.Run( - fSys, - tmpDir.String()) - if utils.IsErrTimeout(err) { - // Don't fail on timeouts. - t.SkipNow() - } - assert.NoError(t, err) - yml, err := m.AsYaml() - assert.NoError(t, err) - assert.Equal(t, `apiVersion: v1 -kind: Pod -metadata: - labels: - app: myapp - name: dev-myapp-pod -spec: - containers: - - image: nginx:1.7.9 - name: nginx -`, string(yml)) - assert.NoError(t, fSys.RemoveAll(tmpDir.String())) -} - -func TestRemoteResourceGitHTTP(t *testing.T) { - output := `apiVersion: v1 +const multibaseDevExampleBuild = `apiVersion: v1 kind: Pod metadata: labels: @@ -89,55 +29,253 @@ spec: - image: nginx:1.7.9 name: nginx ` - tests := []struct { - input []byte - }{ - { - input: []byte(` + +type remoteResourceCase struct { + skip bool + kustomization string +} + +func createKusDir(content string, assert *assert.Assertions) (filesys.FileSystem, filesys.ConfirmedDir) { + fSys := filesys.MakeFsOnDisk() + tmpDir, err := filesys.NewTmpConfirmedDir() + assert.NoError(err) + assert.NoError(fSys.WriteFile(filepath.Join(tmpDir.String(), "kustomization.yaml"), []byte(content))) + return fSys, tmpDir +} + +func checkYaml(actual resmap.ResMap, expected string, assert *assert.Assertions) { + yml, err := actual.AsYaml() + assert.NoError(err) + assert.Equal(expected, string(yml)) +} + +func testRemoteResource(assert *assert.Assertions, kustomization string, expected string) { + fSys, tmpDir := createKusDir(kustomization, assert) + + b := krusty.MakeKustomizer(krusty.MakeDefaultOptions()) + m, err := b.Run( + fSys, + tmpDir.String()) + + assert.NoError(err) + checkYaml(m, expected, assert) + + assert.NoError(fSys.RemoveAll(tmpDir.String())) +} + +func TestRemoteLoad(t *testing.T) { + assert := assert.New(t) + + fSys := filesys.MakeFsOnDisk() + b := krusty.MakeKustomizer(krusty.MakeDefaultOptions()) + + m, err := b.Run( + fSys, + "github.com/kubernetes-sigs/kustomize/examples/multibases/dev/?ref=v1.0.6") + assert.NoError(err) + checkYaml(m, multibaseDevExampleBuild, assert) +} + +func TestRemoteResourceHttps(t *testing.T) { + tests := map[string]remoteResourceCase{ + "basic": { + kustomization: ` resources: -- https://github.com/kubernetes-sigs/kustomize/examples/multibases/dev/?ref=v1.0.6 -`), +- https://github.com/kubernetes-sigs/kustomize//examples/multibases/dev/?ref=v1.0.6`, }, - { - input: []byte(` + ".git repo suffix, no slash suffix": { + kustomization: ` resources: -- https://github.com/kubernetes-sigs/kustomize//examples/multibases/dev/?ref=v1.0.6 -`), +- https://github.com/kubernetes-sigs/kustomize.git//examples/multibases/dev?ref=v1.0.6`, }, - { - input: []byte(` + "repo": { + kustomization: ` resources: -- git::https://github.com/kubernetes-sigs/kustomize/examples/multibases/dev/?ref=v1.0.6 -`), +- https://github.com/annasong20/kustomize-test.git?ref=main`, }, - { - input: []byte(` + "raw remote file": { + kustomization: ` resources: -- git::https://github.com/kubernetes-sigs/kustomize//examples/multibases/dev/?ref=v1.0.6 -`), +- https://raw.githubusercontent.com/kubernetes-sigs/kustomize/v3.1.0/examples/multibases/base/pod.yaml +namePrefix: dev-`, }, } - for _, test := range tests { - fSys := filesys.MakeFsOnDisk() - b := krusty.MakeKustomizer(krusty.MakeDefaultOptions()) - tmpDir, err := filesys.NewTmpConfirmedDir() - assert.NoError(t, err) - assert.NoError(t, fSys.WriteFile(filepath.Join(tmpDir.String(), "kustomization.yaml"), test.input)) - m, err := b.Run(fSys, tmpDir.String()) - if utils.IsErrTimeout(err) { - // Don't fail on timeouts. - t.SkipNow() + for name, test := range tests { + test := test + if !test.skip { + t.Run(name, func(t *testing.T) { + testRemoteResource(assert.New(t), test.kustomization, multibaseDevExampleBuild) + }) } - assert.NoError(t, err) - yml, err := m.AsYaml() - assert.NoError(t, err) - assert.Equal(t, output, string(yml)) - assert.NoError(t, fSys.RemoveAll(tmpDir.String())) } } -func TestRemoteResourceWithHTTPError(t *testing.T) { +func TestRemoteResourceSsh(t *testing.T) { + tests := map[string]remoteResourceCase{ + "scp shorthand": { + kustomization: ` +resources: +- git@github.com:kubernetes-sigs/kustomize//examples/multibases/dev/?ref=v1.0.6`, + }, + "full ssh, no ending slash": { + kustomization: ` +resources: +- ssh://git@github.com/kubernetes-sigs/kustomize//examples/multibases/dev?ref=v1.0.6`, + }, + "repo": { + kustomization: ` +resources: +- ssh://git@github.com/annasong20/kustomize-test.git?ref=main`, + }, + } + + for name, test := range tests { + test := test + if !test.skip { + t.Run(name, func(t *testing.T) { + testRemoteResource(assert.New(t), test.kustomization, multibaseDevExampleBuild) + }) + } + } +} + +func TestRemoteResourcePort(t *testing.T) { + tests := map[string]remoteResourceCase{ + "https": { + skip: true, // timeout + kustomization: ` +resources: +- https://github.com:443/kubernetes-sigs/kustomize//examples/multibases/dev/?ref=v1.0.6`, + }, + "ssh": { + skip: true, // error + kustomization: ` +resources: +- ssh://git@github.com:22/kubernetes-sigs/kustomize//examples/multibases/dev/?ref=v1.0.6`, + }, + } + for name, test := range tests { + test := test + if !test.skip { + t.Run(name, func(t *testing.T) { + testRemoteResource(assert.New(t), test.kustomization, multibaseDevExampleBuild) + }) + } + } +} + +func TestRemoteResourceRepo(t *testing.T) { + tests := map[string]remoteResourceCase{ + "https, no ref": { + kustomization: ` +resources: +- https://github.com/annasong20/kustomize-test.git`, + }, + "ssh, no ref": { + kustomization: ` +resources: +- git@github.com:annasong20/kustomize-test.git`, + }, + } + + for name, test := range tests { + test := test + if !test.skip { + t.Run(name, func(t *testing.T) { + testRemoteResource(assert.New(t), test.kustomization, multibaseDevExampleBuild) + }) + } + } +} + +func TestRemoteResourceParameters(t *testing.T) { + tests := map[string]remoteResourceCase{ + "https no params": { + skip: true, // timeout + kustomization: ` +resources: +- https://github.com/kubernetes-sigs/kustomize//examples/multibases/dev/`, + }, + "https master": { + skip: true, // timeout + kustomization: ` +resources: +- https://github.com/kubernetes-sigs/kustomize//examples/multibases/dev?ref=master`, + }, + "https master and no submodules": { + kustomization: ` +resources: +- https://github.com/kubernetes-sigs/kustomize//examples/multibases/dev?ref=master&submodules=false`, + }, + "https all params": { + kustomization: ` +resources: +- https://github.com/kubernetes-sigs/kustomize//examples/multibases/dev?ref=v1.0.6&timeout=10&submodules=true`, + }, + "ssh no params": { + skip: true, // timeout + kustomization: ` +resources: +- git@github.com:kubernetes-sigs/kustomize//examples/multibases/dev`, + }, + "ssh all params": { + kustomization: ` +resources: +- ssh://git@github.com/annasong20/kustomize-test.git?ref=main&timeout=10&submodules=true`, + }, + } + + for name, test := range tests { + test := test + if !test.skip { + t.Run(name, func(t *testing.T) { + testRemoteResource(assert.New(t), test.kustomization, multibaseDevExampleBuild) + }) + } + } +} + +func TestRemoteResourceGoGetter(t *testing.T) { + tests := map[string]remoteResourceCase{ + "git detector with / subdirectory separator": { + kustomization: ` +resources: +- github.com/kubernetes-sigs/kustomize/examples/multibases/dev/?ref=v1.0.6`, + }, + "git detector for repo": { + kustomization: ` +resources: +- github.com/annasong20/kustomize-test`, + }, + "https with / subdirectory separator": { + kustomization: ` +resources: +- https://github.com/kubernetes-sigs/kustomize/examples/multibases/dev/?ref=v1.0.6`, + }, + "git forced protocol": { + kustomization: ` +resources: +- git::https://github.com/kubernetes-sigs/kustomize//examples/multibases/dev/?ref=v1.0.6`, + }, + "git forced protocol with / subdirectory separator": { + kustomization: ` +resources: +- git::https://github.com/kubernetes-sigs/kustomize/examples/multibases/dev/?ref=v1.0.6`, + }, + } + + for name, test := range tests { + test := test + if !test.skip { + t.Run(name, func(t *testing.T) { + testRemoteResource(assert.New(t), test.kustomization, multibaseDevExampleBuild) + }) + } + } +} + +func TestRemoteResourceWithHttpError(t *testing.T) { fSys := filesys.MakeFsOnDisk() b := krusty.MakeKustomizer(krusty.MakeDefaultOptions()) tmpDir, err := filesys.NewTmpConfirmedDir() @@ -163,26 +301,12 @@ resources: } func TestRemoteResourceAnnoOrigin(t *testing.T) { - fSys := filesys.MakeFsOnDisk() - b := krusty.MakeKustomizer(krusty.MakeDefaultOptions()) - tmpDir, err := filesys.NewTmpConfirmedDir() - assert.NoError(t, err) - assert.NoError(t, fSys.WriteFile(filepath.Join(tmpDir.String(), "kustomization.yaml"), []byte(` + kustomization := ` resources: - github.com/kubernetes-sigs/kustomize/examples/multibases/dev/?ref=v1.0.6 buildMetadata: [originAnnotations] -`))) - m, err := b.Run( - fSys, - tmpDir.String()) - if utils.IsErrTimeout(err) { - // Don't fail on timeouts. - t.SkipNow() - } - assert.NoError(t, err) - yml, err := m.AsYaml() - assert.NoError(t, err) - assert.Equal(t, `apiVersion: v1 +` + expected := `apiVersion: v1 kind: Pod metadata: annotations: @@ -197,24 +321,26 @@ spec: containers: - image: nginx:1.7.9 name: nginx -`, string(yml)) - assert.NoError(t, fSys.RemoveAll(tmpDir.String())) +` + testRemoteResource(assert.New(t), kustomization, expected) } func TestRemoteResourceAsBaseWithAnnoOrigin(t *testing.T) { + assert := assert.New(t) + fSys := filesys.MakeFsOnDisk() b := krusty.MakeKustomizer(krusty.MakeDefaultOptions()) tmpDir, err := filesys.NewTmpConfirmedDir() - assert.NoError(t, err) + assert.NoError(err) base := filepath.Join(tmpDir.String(), "base") prod := filepath.Join(tmpDir.String(), "prod") - assert.NoError(t, fSys.Mkdir(base)) - assert.NoError(t, fSys.Mkdir(prod)) - assert.NoError(t, fSys.WriteFile(filepath.Join(base, "kustomization.yaml"), []byte(` + assert.NoError(fSys.Mkdir(base)) + assert.NoError(fSys.Mkdir(prod)) + assert.NoError(fSys.WriteFile(filepath.Join(base, "kustomization.yaml"), []byte(` resources: - github.com/kubernetes-sigs/kustomize/examples/multibases/dev/?ref=v1.0.6 `))) - assert.NoError(t, fSys.WriteFile(filepath.Join(prod, "kustomization.yaml"), []byte(` + assert.NoError(fSys.WriteFile(filepath.Join(prod, "kustomization.yaml"), []byte(` resources: - ../base namePrefix: prefix- @@ -224,14 +350,9 @@ buildMetadata: [originAnnotations] m, err := b.Run( fSys, prod) - if utils.IsErrTimeout(err) { - // Don't fail on timeouts. - t.SkipNow() - } - assert.NoError(t, err) - yml, err := m.AsYaml() - assert.NoError(t, err) - assert.Equal(t, `apiVersion: v1 + assert.NoError(err) + + expected := `apiVersion: v1 kind: Pod metadata: annotations: @@ -246,6 +367,8 @@ spec: containers: - image: nginx:1.7.9 name: nginx -`, string(yml)) - assert.NoError(t, fSys.RemoveAll(tmpDir.String())) +` + checkYaml(m, expected, assert) + + assert.NoError(fSys.RemoveAll(tmpDir.String())) } From 271f39321865696b43f03405b1380b14126706c3 Mon Sep 17 00:00:00 2001 From: Anna Song Date: Wed, 4 May 2022 18:54:12 -0700 Subject: [PATCH 2/3] Address feedback Change asserts to, on fail, fail tests. Address feedback on previous commit. Enable ssh to check if server has ssh keys. --- api/krusty/remoteload_test.go | 232 +++++++++++++++++++--------------- 1 file changed, 133 insertions(+), 99 deletions(-) diff --git a/api/krusty/remoteload_test.go b/api/krusty/remoteload_test.go index 7e5efc2cb..213bb2f80 100644 --- a/api/krusty/remoteload_test.go +++ b/api/krusty/remoteload_test.go @@ -9,15 +9,19 @@ import ( "path/filepath" "testing" - "sigs.k8s.io/kustomize/api/resmap" - - "github.com/stretchr/testify/assert" - "sigs.k8s.io/kustomize/api/internal/utils" + "github.com/stretchr/testify/require" "sigs.k8s.io/kustomize/api/krusty" "sigs.k8s.io/kustomize/api/loader" + "sigs.k8s.io/kustomize/api/resmap" "sigs.k8s.io/kustomize/kyaml/filesys" ) +const resourcesField = `resources: +- %s` +const resourceErrorFormat = "accumulating resources: accumulation err='accumulating resources from '%s': " +const fileError = "evalsymlink failure" +const repoFindError = "URL is a git repository': hit 27s timeout running" + const multibaseDevExampleBuild = `apiVersion: v1 kind: Pod metadata: @@ -33,38 +37,45 @@ spec: type remoteResourceCase struct { skip bool kustomization string + error bool + expected string // if error, expected is error string } -func createKusDir(content string, assert *assert.Assertions) (filesys.FileSystem, filesys.ConfirmedDir) { +func createKustDir(content string, require *require.Assertions) (filesys.FileSystem, filesys.ConfirmedDir) { fSys := filesys.MakeFsOnDisk() tmpDir, err := filesys.NewTmpConfirmedDir() - assert.NoError(err) - assert.NoError(fSys.WriteFile(filepath.Join(tmpDir.String(), "kustomization.yaml"), []byte(content))) + require.NoError(err) + require.NoError(fSys.WriteFile(filepath.Join(tmpDir.String(), "kustomization.yaml"), []byte(content))) return fSys, tmpDir } -func checkYaml(actual resmap.ResMap, expected string, assert *assert.Assertions) { +func checkYaml(actual resmap.ResMap, expected string, require *require.Assertions) { yml, err := actual.AsYaml() - assert.NoError(err) - assert.Equal(expected, string(yml)) + require.NoError(err) + require.Equal(expected, string(yml)) } -func testRemoteResource(assert *assert.Assertions, kustomization string, expected string) { - fSys, tmpDir := createKusDir(kustomization, assert) +func testRemoteResource(require *require.Assertions, test *remoteResourceCase) { + fSys, tmpDir := createKustDir(test.kustomization, require) b := krusty.MakeKustomizer(krusty.MakeDefaultOptions()) m, err := b.Run( fSys, tmpDir.String()) - assert.NoError(err) - checkYaml(m, expected, assert) + if test.error { + require.Error(err) + require.Contains(err.Error(), test.expected) + } else { + require.NoError(err) + checkYaml(m, test.expected, require) + } - assert.NoError(fSys.RemoveAll(tmpDir.String())) + require.NoError(fSys.RemoveAll(tmpDir.String())) } func TestRemoteLoad(t *testing.T) { - assert := assert.New(t) + require := require.New(t) fSys := filesys.MakeFsOnDisk() b := krusty.MakeKustomizer(krusty.MakeDefaultOptions()) @@ -72,8 +83,8 @@ func TestRemoteLoad(t *testing.T) { m, err := b.Run( fSys, "github.com/kubernetes-sigs/kustomize/examples/multibases/dev/?ref=v1.0.6") - assert.NoError(err) - checkYaml(m, multibaseDevExampleBuild, assert) + require.NoError(err) + checkYaml(m, multibaseDevExampleBuild, require) } func TestRemoteResourceHttps(t *testing.T) { @@ -82,86 +93,99 @@ func TestRemoteResourceHttps(t *testing.T) { kustomization: ` resources: - https://github.com/kubernetes-sigs/kustomize//examples/multibases/dev/?ref=v1.0.6`, + expected: multibaseDevExampleBuild, }, ".git repo suffix, no slash suffix": { kustomization: ` resources: - https://github.com/kubernetes-sigs/kustomize.git//examples/multibases/dev?ref=v1.0.6`, + expected: multibaseDevExampleBuild, }, "repo": { kustomization: ` resources: - https://github.com/annasong20/kustomize-test.git?ref=main`, + expected: multibaseDevExampleBuild, }, "raw remote file": { kustomization: ` resources: - https://raw.githubusercontent.com/kubernetes-sigs/kustomize/v3.1.0/examples/multibases/base/pod.yaml namePrefix: dev-`, + expected: multibaseDevExampleBuild, }, } for name, test := range tests { test := test - if !test.skip { - t.Run(name, func(t *testing.T) { - testRemoteResource(assert.New(t), test.kustomization, multibaseDevExampleBuild) - }) - } + t.Run(name, func(t *testing.T) { + if test.skip { + t.SkipNow() + } + testRemoteResource(require.New(t), &test) + }) } } func TestRemoteResourceSsh(t *testing.T) { + // skip all tests until server has ssh keys tests := map[string]remoteResourceCase{ "scp shorthand": { kustomization: ` resources: - git@github.com:kubernetes-sigs/kustomize//examples/multibases/dev/?ref=v1.0.6`, + expected: multibaseDevExampleBuild, }, "full ssh, no ending slash": { kustomization: ` resources: - ssh://git@github.com/kubernetes-sigs/kustomize//examples/multibases/dev?ref=v1.0.6`, + expected: multibaseDevExampleBuild, }, "repo": { kustomization: ` resources: - ssh://git@github.com/annasong20/kustomize-test.git?ref=main`, + expected: multibaseDevExampleBuild, }, } for name, test := range tests { test := test - if !test.skip { - t.Run(name, func(t *testing.T) { - testRemoteResource(assert.New(t), test.kustomization, multibaseDevExampleBuild) - }) - } + t.Run(name, func(t *testing.T) { + if test.skip { + t.SkipNow() + } + testRemoteResource(require.New(t), &test) + }) } } func TestRemoteResourcePort(t *testing.T) { + sshURL := "ssh://git@github.com:22/kubernetes-sigs/kustomize//examples/multibases/dev/?ref=v1.0.6" + httpsURL := "https://github.com:443/kubernetes-sigs/kustomize//examples/multibases/dev/?ref=v1.0.6" + + // ports not currently supported; should implement in future tests := map[string]remoteResourceCase{ - "https": { - skip: true, // timeout - kustomization: ` -resources: -- https://github.com:443/kubernetes-sigs/kustomize//examples/multibases/dev/?ref=v1.0.6`, - }, "ssh": { - skip: true, // error - kustomization: ` -resources: -- ssh://git@github.com:22/kubernetes-sigs/kustomize//examples/multibases/dev/?ref=v1.0.6`, + kustomization: fmt.Sprintf(resourcesField, sshURL), + error: true, + expected: fmt.Sprintf(resourceErrorFormat+fileError, sshURL), + }, + "https": { + kustomization: fmt.Sprintf(resourcesField, httpsURL), + error: true, + expected: fmt.Sprintf(resourceErrorFormat+repoFindError, httpsURL), }, } for name, test := range tests { test := test - if !test.skip { - t.Run(name, func(t *testing.T) { - testRemoteResource(assert.New(t), test.kustomization, multibaseDevExampleBuild) - }) - } + t.Run(name, func(t *testing.T) { + if test.skip { + t.SkipNow() + } + testRemoteResource(require.New(t), &test) + }) } } @@ -171,68 +195,77 @@ func TestRemoteResourceRepo(t *testing.T) { kustomization: ` resources: - https://github.com/annasong20/kustomize-test.git`, + expected: multibaseDevExampleBuild, }, "ssh, no ref": { kustomization: ` resources: - git@github.com:annasong20/kustomize-test.git`, + expected: multibaseDevExampleBuild, }, } for name, test := range tests { test := test - if !test.skip { - t.Run(name, func(t *testing.T) { - testRemoteResource(assert.New(t), test.kustomization, multibaseDevExampleBuild) - }) - } + t.Run(name, func(t *testing.T) { + if test.skip { + t.SkipNow() + } + testRemoteResource(require.New(t), &test) + }) } } func TestRemoteResourceParameters(t *testing.T) { + httpsNoParam := "https://github.com/kubernetes-sigs/kustomize//examples/multibases/dev/" + httpsMasterBranch := "https://github.com/kubernetes-sigs/kustomize//examples/multibases/dev?ref=master" + sshNoParams := "git@github.com:kubernetes-sigs/kustomize//examples/multibases/dev" + + // some query parameter combinations not currently supported; should implement in future tests := map[string]remoteResourceCase{ "https no params": { - skip: true, // timeout - kustomization: ` -resources: -- https://github.com/kubernetes-sigs/kustomize//examples/multibases/dev/`, + kustomization: fmt.Sprintf(resourcesField, httpsNoParam), + error: true, + expected: fmt.Sprintf(resourceErrorFormat+repoFindError, httpsNoParam), }, "https master": { - skip: true, // timeout - kustomization: ` -resources: -- https://github.com/kubernetes-sigs/kustomize//examples/multibases/dev?ref=master`, + kustomization: fmt.Sprintf(resourcesField, httpsMasterBranch), + error: true, + expected: fmt.Sprintf(resourceErrorFormat+repoFindError, httpsMasterBranch), }, "https master and no submodules": { kustomization: ` resources: - https://github.com/kubernetes-sigs/kustomize//examples/multibases/dev?ref=master&submodules=false`, + expected: multibaseDevExampleBuild, }, "https all params": { kustomization: ` resources: - https://github.com/kubernetes-sigs/kustomize//examples/multibases/dev?ref=v1.0.6&timeout=10&submodules=true`, + expected: multibaseDevExampleBuild, }, "ssh no params": { - skip: true, // timeout - kustomization: ` -resources: -- git@github.com:kubernetes-sigs/kustomize//examples/multibases/dev`, + kustomization: fmt.Sprintf(resourcesField, sshNoParams), + error: true, + expected: fmt.Sprintf(resourceErrorFormat+fileError, sshNoParams), }, "ssh all params": { kustomization: ` resources: - ssh://git@github.com/annasong20/kustomize-test.git?ref=main&timeout=10&submodules=true`, + expected: multibaseDevExampleBuild, }, } for name, test := range tests { test := test - if !test.skip { - t.Run(name, func(t *testing.T) { - testRemoteResource(assert.New(t), test.kustomization, multibaseDevExampleBuild) - }) - } + t.Run(name, func(t *testing.T) { + if test.skip { + t.SkipNow() + } + testRemoteResource(require.New(t), &test) + }) } } @@ -242,71 +275,70 @@ func TestRemoteResourceGoGetter(t *testing.T) { kustomization: ` resources: - github.com/kubernetes-sigs/kustomize/examples/multibases/dev/?ref=v1.0.6`, + expected: multibaseDevExampleBuild, }, "git detector for repo": { kustomization: ` resources: - github.com/annasong20/kustomize-test`, + expected: multibaseDevExampleBuild, }, "https with / subdirectory separator": { kustomization: ` resources: - https://github.com/kubernetes-sigs/kustomize/examples/multibases/dev/?ref=v1.0.6`, + expected: multibaseDevExampleBuild, }, "git forced protocol": { kustomization: ` resources: - git::https://github.com/kubernetes-sigs/kustomize//examples/multibases/dev/?ref=v1.0.6`, + expected: multibaseDevExampleBuild, }, "git forced protocol with / subdirectory separator": { kustomization: ` resources: - git::https://github.com/kubernetes-sigs/kustomize/examples/multibases/dev/?ref=v1.0.6`, + expected: multibaseDevExampleBuild, }, } for name, test := range tests { test := test - if !test.skip { - t.Run(name, func(t *testing.T) { - testRemoteResource(assert.New(t), test.kustomization, multibaseDevExampleBuild) - }) - } + t.Run(name, func(t *testing.T) { + if test.skip { + t.SkipNow() + } + testRemoteResource(require.New(t), &test) + }) } } func TestRemoteResourceWithHttpError(t *testing.T) { - fSys := filesys.MakeFsOnDisk() - b := krusty.MakeKustomizer(krusty.MakeDefaultOptions()) - tmpDir, err := filesys.NewTmpConfirmedDir() - assert.NoError(t, err) + require := require.New(t) url404 := "https://github.com/thisisa404.yaml" - kusto := filepath.Join(tmpDir.String(), "kustomization.yaml") - assert.NoError(t, fSys.WriteFile(kusto, []byte(fmt.Sprintf(` -resources: -- %s -`, url404)))) + fSys, tmpDir := createKustDir(fmt.Sprintf(resourcesField, url404), require) + b := krusty.MakeKustomizer(krusty.MakeDefaultOptions()) - _, err = b.Run(fSys, tmpDir.String()) - if utils.IsErrTimeout(err) { - // Don't fail on timeouts. - t.SkipNow() - } + _, err := b.Run(fSys, tmpDir.String()) httpErr := fmt.Errorf("%w: status code %d (%s)", loader.ErrorHTTP, 404, http.StatusText(404)) accuFromErr := fmt.Errorf("accumulating resources from '%s': %w", url404, httpErr) expectedErr := fmt.Errorf("accumulating resources: %w", accuFromErr) - assert.EqualErrorf(t, err, expectedErr.Error(), url404) + require.EqualErrorf(err, expectedErr.Error(), url404) + + require.NoError(fSys.RemoveAll(tmpDir.String())) } func TestRemoteResourceAnnoOrigin(t *testing.T) { - kustomization := ` + test := remoteResourceCase{ + kustomization: ` resources: - github.com/kubernetes-sigs/kustomize/examples/multibases/dev/?ref=v1.0.6 buildMetadata: [originAnnotations] -` - expected := `apiVersion: v1 +`, + expected: `apiVersion: v1 kind: Pod metadata: annotations: @@ -321,26 +353,28 @@ spec: containers: - image: nginx:1.7.9 name: nginx -` - testRemoteResource(assert.New(t), kustomization, expected) +`, + } + + testRemoteResource(require.New(t), &test) } func TestRemoteResourceAsBaseWithAnnoOrigin(t *testing.T) { - assert := assert.New(t) + require := require.New(t) fSys := filesys.MakeFsOnDisk() b := krusty.MakeKustomizer(krusty.MakeDefaultOptions()) tmpDir, err := filesys.NewTmpConfirmedDir() - assert.NoError(err) + require.NoError(err) base := filepath.Join(tmpDir.String(), "base") prod := filepath.Join(tmpDir.String(), "prod") - assert.NoError(fSys.Mkdir(base)) - assert.NoError(fSys.Mkdir(prod)) - assert.NoError(fSys.WriteFile(filepath.Join(base, "kustomization.yaml"), []byte(` + require.NoError(fSys.Mkdir(base)) + require.NoError(fSys.Mkdir(prod)) + require.NoError(fSys.WriteFile(filepath.Join(base, "kustomization.yaml"), []byte(` resources: - github.com/kubernetes-sigs/kustomize/examples/multibases/dev/?ref=v1.0.6 `))) - assert.NoError(fSys.WriteFile(filepath.Join(prod, "kustomization.yaml"), []byte(` + require.NoError(fSys.WriteFile(filepath.Join(prod, "kustomization.yaml"), []byte(` resources: - ../base namePrefix: prefix- @@ -350,7 +384,7 @@ buildMetadata: [originAnnotations] m, err := b.Run( fSys, prod) - assert.NoError(err) + require.NoError(err) expected := `apiVersion: v1 kind: Pod @@ -368,7 +402,7 @@ spec: - image: nginx:1.7.9 name: nginx ` - checkYaml(m, expected, assert) + checkYaml(m, expected, require) - assert.NoError(fSys.RemoveAll(tmpDir.String())) + require.NoError(fSys.RemoveAll(tmpDir.String())) } From 17b42a99f5c5981c9d773f80a6833734e7ce36ac Mon Sep 17 00:00:00 2001 From: Anna Song Date: Thu, 5 May 2022 09:26:44 -0700 Subject: [PATCH 3/3] Skip ssh tests Skip ssh tests and correct error msg that's different on server. --- api/krusty/remoteload_test.go | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/api/krusty/remoteload_test.go b/api/krusty/remoteload_test.go index 213bb2f80..c14527934 100644 --- a/api/krusty/remoteload_test.go +++ b/api/krusty/remoteload_test.go @@ -20,7 +20,7 @@ const resourcesField = `resources: - %s` const resourceErrorFormat = "accumulating resources: accumulation err='accumulating resources from '%s': " const fileError = "evalsymlink failure" -const repoFindError = "URL is a git repository': hit 27s timeout running" +const repoFindError = "URL is a git repository" const multibaseDevExampleBuild = `apiVersion: v1 kind: Pod @@ -131,18 +131,21 @@ func TestRemoteResourceSsh(t *testing.T) { // skip all tests until server has ssh keys tests := map[string]remoteResourceCase{ "scp shorthand": { + skip: true, kustomization: ` resources: - git@github.com:kubernetes-sigs/kustomize//examples/multibases/dev/?ref=v1.0.6`, expected: multibaseDevExampleBuild, }, "full ssh, no ending slash": { + skip: true, kustomization: ` resources: - ssh://git@github.com/kubernetes-sigs/kustomize//examples/multibases/dev?ref=v1.0.6`, expected: multibaseDevExampleBuild, }, "repo": { + skip: true, kustomization: ` resources: - ssh://git@github.com/annasong20/kustomize-test.git?ref=main`, @@ -168,6 +171,7 @@ func TestRemoteResourcePort(t *testing.T) { // ports not currently supported; should implement in future tests := map[string]remoteResourceCase{ "ssh": { + skip: true, kustomization: fmt.Sprintf(resourcesField, sshURL), error: true, expected: fmt.Sprintf(resourceErrorFormat+fileError, sshURL), @@ -198,6 +202,7 @@ resources: expected: multibaseDevExampleBuild, }, "ssh, no ref": { + skip: true, kustomization: ` resources: - git@github.com:annasong20/kustomize-test.git`, @@ -246,11 +251,13 @@ resources: expected: multibaseDevExampleBuild, }, "ssh no params": { + skip: true, kustomization: fmt.Sprintf(resourcesField, sshNoParams), error: true, expected: fmt.Sprintf(resourceErrorFormat+fileError, sshNoParams), }, "ssh all params": { + skip: true, kustomization: ` resources: - ssh://git@github.com/annasong20/kustomize-test.git?ref=main&timeout=10&submodules=true`,