Add url tests

Write comprehensive suite of integration tests for remote resources, as specified by Issue #4588
This commit is contained in:
Anna Song
2022-05-03 13:53:03 -07:00
parent 188e35fbfd
commit c0dc68d6e7
2 changed files with 256 additions and 136 deletions

View File

@@ -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{}
}

View File

@@ -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()))
}