mirror of
https://github.com/kubernetes-sigs/kustomize.git
synced 2026-06-11 17:12:51 +00:00
269 lines
6.5 KiB
Go
269 lines
6.5 KiB
Go
// Copyright 2019 The Kubernetes Authors.
|
|
// SPDX-License-Identifier: Apache-2.0
|
|
|
|
package kio
|
|
|
|
import (
|
|
"io/ioutil"
|
|
"path/filepath"
|
|
"strings"
|
|
"testing"
|
|
|
|
"github.com/stretchr/testify/assert"
|
|
"github.com/stretchr/testify/require"
|
|
"sigs.k8s.io/kustomize/kyaml/filesys"
|
|
)
|
|
|
|
func TestIgnoreFilesMatcher_readIgnoreFile(t *testing.T) {
|
|
testCases := []struct {
|
|
name string
|
|
writeIgnoreFile bool
|
|
isMatch bool
|
|
}{
|
|
{
|
|
name: "has .krmignore file",
|
|
writeIgnoreFile: true,
|
|
isMatch: true,
|
|
},
|
|
{
|
|
name: "no .krmignore file",
|
|
writeIgnoreFile: false,
|
|
isMatch: false,
|
|
},
|
|
}
|
|
|
|
const (
|
|
ignoreFileName = ".krmignore"
|
|
testFileName = "testfile.yaml"
|
|
ignoreFileBody = "\n" + testFileName + "\n"
|
|
)
|
|
|
|
fsMakers := map[string]func(bool) (string, filesys.FileSystem){
|
|
// onDisk creates a temp directory and returns a nil FileSystem, testing
|
|
// the normal conditions under which ignoreFileMatcher is used.
|
|
"onDisk": func(writeIgnoreFile bool) (string, filesys.FileSystem) {
|
|
dir, err := ioutil.TempDir("", "kyaml-test")
|
|
require.NoError(t, err)
|
|
|
|
if writeIgnoreFile {
|
|
ignoreFilePath := filepath.Join(dir, ignoreFileName)
|
|
require.NoError(t, ioutil.WriteFile(ignoreFilePath, []byte(ignoreFileBody), 0600))
|
|
}
|
|
testFilePath := filepath.Join(dir, testFileName)
|
|
require.NoError(t, ioutil.WriteFile(testFilePath, []byte{}, 0600))
|
|
return dir, nil
|
|
},
|
|
|
|
// inMem creates an in-memory FileSystem and returns it.
|
|
"inMem": func(writeIgnoreFile bool) (string, filesys.FileSystem) {
|
|
fs := filesys.MakeEmptyDirInMemory()
|
|
if writeIgnoreFile {
|
|
require.NoError(t, fs.WriteFile(ignoreFileName, []byte(ignoreFileBody)))
|
|
}
|
|
require.NoError(t, fs.WriteFile(testFileName, nil))
|
|
return ".", fs
|
|
},
|
|
}
|
|
|
|
for name, fsMaker := range fsMakers {
|
|
t.Run(name, func(t *testing.T) {
|
|
fsMaker := fsMaker
|
|
for i := range testCases {
|
|
test := testCases[i]
|
|
dir, fs := fsMaker(test.writeIgnoreFile)
|
|
t.Run(test.name, func(t *testing.T) {
|
|
m := ignoreFilesMatcher{}
|
|
m.fs.Set(fs)
|
|
require.NoError(t, m.readIgnoreFile(dir))
|
|
require.Equal(t, test.isMatch, m.matchFile(filepath.Join(dir, testFileName)))
|
|
})
|
|
}
|
|
})
|
|
}
|
|
}
|
|
|
|
var (
|
|
readFileA = []byte(`
|
|
a: a
|
|
---
|
|
c: c
|
|
`)
|
|
readFileB = []byte(`
|
|
b: b
|
|
`)
|
|
)
|
|
|
|
func TestLocalPackageReader_Read_ignoreFile(t *testing.T) {
|
|
testCases := []struct {
|
|
name string
|
|
directories []string
|
|
files map[string][]byte
|
|
expected []string
|
|
}{
|
|
{
|
|
name: "ignore file",
|
|
directories: []string{
|
|
filepath.Join("a", "b"),
|
|
filepath.Join("a", "c"),
|
|
},
|
|
files: map[string][]byte{
|
|
filepath.Join("pkgFile"): {},
|
|
filepath.Join("a", "b", "a_test.yaml"): readFileA,
|
|
filepath.Join("a", "c", "c_test.yaml"): readFileB,
|
|
filepath.Join(".krmignore"): []byte(`
|
|
a/c/c_test.yaml
|
|
`,
|
|
),
|
|
},
|
|
expected: []string{
|
|
`a: a`,
|
|
`c: c`,
|
|
},
|
|
},
|
|
{
|
|
name: "ignore folder",
|
|
directories: []string{
|
|
filepath.Join("a", "b"),
|
|
filepath.Join("a", "c"),
|
|
},
|
|
files: map[string][]byte{
|
|
filepath.Join("pkgFile"): {},
|
|
filepath.Join("a", "b", "a_test.yaml"): readFileA,
|
|
filepath.Join("a", "c", "c_test.yaml"): readFileB,
|
|
filepath.Join(".krmignore"): []byte(`
|
|
a/c
|
|
`,
|
|
),
|
|
},
|
|
expected: []string{
|
|
`a: a`,
|
|
`c: c`,
|
|
},
|
|
},
|
|
{
|
|
name: "krmignore file in subpackage",
|
|
directories: []string{
|
|
filepath.Join("a", "c"),
|
|
},
|
|
files: map[string][]byte{
|
|
filepath.Join("pkgFile"): {},
|
|
filepath.Join("a", "c", "a_test.yaml"): readFileA,
|
|
filepath.Join("a", "c", "c_test.yaml"): readFileB,
|
|
filepath.Join(".krmignore"): []byte(`
|
|
d/e/f.yaml
|
|
`,
|
|
),
|
|
filepath.Join("a", "c", "pkgFile"): {},
|
|
filepath.Join("a", "c", ".krmignore"): []byte(`
|
|
a_test.yaml
|
|
`),
|
|
},
|
|
expected: []string{
|
|
`b: b`,
|
|
},
|
|
},
|
|
{
|
|
name: "krmignore files does not affect subpackages",
|
|
directories: []string{
|
|
filepath.Join("a", "c"),
|
|
},
|
|
files: map[string][]byte{
|
|
filepath.Join("pkgFile"): {},
|
|
filepath.Join("a", "c", "a_test.yaml"): readFileA,
|
|
filepath.Join("a", "c", "c_test.yaml"): readFileB,
|
|
filepath.Join(".krmignore"): []byte(`
|
|
a/c/c_test.yaml
|
|
`,
|
|
),
|
|
filepath.Join("a", "c", "pkgFile"): {},
|
|
filepath.Join("a", "c", ".krmignore"): []byte(`
|
|
a_test.yaml
|
|
`),
|
|
},
|
|
expected: []string{
|
|
`b: b`,
|
|
},
|
|
},
|
|
{
|
|
name: "handles a combination of packages and directories",
|
|
directories: []string{
|
|
filepath.Join("a"),
|
|
filepath.Join("d", "e"),
|
|
filepath.Join("f"),
|
|
},
|
|
files: map[string][]byte{
|
|
filepath.Join("pkgFile"): {},
|
|
filepath.Join("d", "pkgFile"): {},
|
|
filepath.Join("d", "e", "pkgFile"): {},
|
|
filepath.Join("f", "pkgFile"): {},
|
|
filepath.Join("manifest.yaml"): []byte(`root: root`),
|
|
filepath.Join("a", "manifest.yaml"): []byte(`a: a`),
|
|
filepath.Join("d", "manifest.yaml"): []byte(`d: d`),
|
|
filepath.Join("d", "e", "manifest.yaml"): []byte(`e: e`),
|
|
filepath.Join("f", "manifest.yaml"): []byte(`f: f`),
|
|
filepath.Join("d", ".krmignore"): []byte(`
|
|
manifest.yaml
|
|
`),
|
|
},
|
|
expected: []string{
|
|
`a: a`,
|
|
`e: e`,
|
|
`f: f`,
|
|
`root: root`,
|
|
},
|
|
},
|
|
{
|
|
name: "ignore file can exclude subpackages",
|
|
directories: []string{
|
|
filepath.Join("a"),
|
|
},
|
|
files: map[string][]byte{
|
|
filepath.Join("pkgFile"): {},
|
|
filepath.Join("a", "pkgFile"): {},
|
|
filepath.Join("manifest.yaml"): []byte(`root: root`),
|
|
filepath.Join("a", "manifest.yaml"): []byte(`a: a`),
|
|
filepath.Join(".krmignore"): []byte(`
|
|
a
|
|
`),
|
|
},
|
|
expected: []string{
|
|
`root: root`,
|
|
},
|
|
},
|
|
}
|
|
|
|
for i := range testCases {
|
|
test := testCases[i]
|
|
t.Run(test.name, func(t *testing.T) {
|
|
s := SetupDirectories(t, test.directories...)
|
|
defer s.Clean()
|
|
for path, content := range test.files {
|
|
s.WriteFile(t, path, content)
|
|
}
|
|
|
|
// empty path
|
|
rfr := LocalPackageReader{
|
|
PackagePath: s.Root,
|
|
IncludeSubpackages: true,
|
|
PackageFileName: "pkgFile",
|
|
OmitReaderAnnotations: true,
|
|
}
|
|
nodes, err := rfr.Read()
|
|
if !assert.NoError(t, err) {
|
|
assert.FailNow(t, err.Error())
|
|
}
|
|
|
|
if !assert.Len(t, nodes, len(test.expected)) {
|
|
assert.FailNow(t, "wrong number items")
|
|
}
|
|
|
|
for i, node := range nodes {
|
|
val, err := node.String()
|
|
assert.NoError(t, err)
|
|
want := strings.ReplaceAll(test.expected[i], "${SEP}", string(filepath.Separator))
|
|
assert.Equal(t, strings.TrimSpace(want), strings.TrimSpace(val))
|
|
}
|
|
})
|
|
}
|
|
}
|