From 274b5c3b4e50ccd15a1052d4e813a1c6007daa18 Mon Sep 17 00:00:00 2001 From: Jeffrey Regan Date: Wed, 18 Sep 2019 11:14:41 -0700 Subject: [PATCH] Tweak file path handling and logging in test. --- .../configmapandsecret/configmapfactory.go | 5 ++-- .../configmapfactory_test.go | 22 ++++++++++---- pkg/fs/fakefs.go | 30 ++++++++++++------- 3 files changed, 40 insertions(+), 17 deletions(-) diff --git a/k8sdeps/configmapandsecret/configmapfactory.go b/k8sdeps/configmapandsecret/configmapfactory.go index d866958a8..41c4b09f0 100644 --- a/k8sdeps/configmapandsecret/configmapfactory.go +++ b/k8sdeps/configmapandsecret/configmapfactory.go @@ -8,6 +8,7 @@ import ( "fmt" "unicode/utf8" + "github.com/pkg/errors" "k8s.io/api/core/v1" "sigs.k8s.io/kustomize/v3/pkg/types" ) @@ -28,13 +29,13 @@ func (f *Factory) MakeConfigMap( args *types.ConfigMapArgs) (*v1.ConfigMap, error) { all, err := f.ldr.LoadKvPairs(args.GeneratorArgs) if err != nil { - return nil, err + return nil, errors.Wrap(err, "loading KV pairs") } cm := makeFreshConfigMap(args) for _, p := range all { err = f.addKvToConfigMap(cm, p) if err != nil { - return nil, err + return nil, errors.Wrap(err, "trouble mapping") } } if f.options != nil { diff --git a/k8sdeps/configmapandsecret/configmapfactory_test.go b/k8sdeps/configmapandsecret/configmapfactory_test.go index e98a5b489..b8d705190 100644 --- a/k8sdeps/configmapandsecret/configmapfactory_test.go +++ b/k8sdeps/configmapandsecret/configmapfactory_test.go @@ -4,6 +4,7 @@ package configmapandsecret import ( + "path/filepath" "reflect" "testing" @@ -86,7 +87,9 @@ func TestConstructConfigMap(t *testing.T) { GeneratorArgs: types.GeneratorArgs{ Name: "envConfigMap", DataSources: types.DataSources{ - EnvSources: []string{"configmap/app.env"}, + EnvSources: []string{ + filepath.Join("configmap", "app.env"), + }, }, }, }, @@ -99,7 +102,10 @@ func TestConstructConfigMap(t *testing.T) { GeneratorArgs: types.GeneratorArgs{ Name: "fileConfigMap", DataSources: types.DataSources{ - FileSources: []string{"configmap/app-init.ini", "configmap/app.bin"}, + FileSources: []string{ + filepath.Join("configmap", "app-init.ini"), + filepath.Join("configmap", "app.bin"), + }, }, }, }, @@ -126,9 +132,15 @@ func TestConstructConfigMap(t *testing.T) { } fSys := fs.MakeFakeFS() - fSys.WriteFile("/configmap/app.env", []byte("DB_USERNAME=admin\nDB_PASSWORD=somepw\n")) - fSys.WriteFile("/configmap/app-init.ini", []byte("FOO=bar\nBAR=baz\n")) - fSys.WriteFile("/configmap/app.bin", []byte{0xff, 0xfd}) + fSys.WriteFile( + fSys.RPath("configmap", "app.env"), + []byte("DB_USERNAME=admin\nDB_PASSWORD=somepw\n")) + fSys.WriteFile( + fSys.RPath("configmap", "app-init.ini"), + []byte("FOO=bar\nBAR=baz\n")) + fSys.WriteFile( + fSys.RPath("configmap", "app.bin"), + []byte{0xff, 0xfd}) ldr := loader.NewFileLoaderAtRoot(validators.MakeFakeValidator(), fSys) for _, tc := range testCases { f := NewFactory(ldr, tc.options) diff --git a/pkg/fs/fakefs.go b/pkg/fs/fakefs.go index 516fa3098..1c607ee3b 100644 --- a/pkg/fs/fakefs.go +++ b/pkg/fs/fakefs.go @@ -36,12 +36,15 @@ type fakeFs struct { // MakeFakeFS returns an instance of fakeFs with no files in it. func MakeFakeFS() *fakeFs { result := &fakeFs{m: map[string]*FakeFile{}} - result.Mkdir("/") + result.Mkdir(separator) return result } -// kustomizationContent is used in tests. -const kustomizationContent = `apiVersion: kustomize.config.k8s.io/v1beta1 +const ( + separator = string(filepath.Separator) + doubleSep = separator + separator + // kustomizationContent is used in tests. + kustomizationContent = `apiVersion: kustomize.config.k8s.io/v1beta1 kind: Kustomization namePrefix: some-prefix nameSuffix: some-suffix @@ -60,6 +63,7 @@ configMapGenerator: [] # There could be secrets in Base, if just using a fork/rebase workflow secretGenerator: [] ` +) // Create assures a fake file appears in the in-memory file system. func (fs *fakeFs) Create(name string) (File, error) { @@ -69,6 +73,11 @@ func (fs *fakeFs) Create(name string) (File, error) { return fs.m[name], nil } +// RPath returns a rooted path, e.g. "/hey/foo" as opposed to "hey/foo". +func (fs *fakeFs) RPath(elem ...string) string { + return separator + filepath.Join(elem...) +} + // Mkdir assures a fake directory appears in the in-memory file system. func (fs *fakeFs) Mkdir(name string) error { fs.m[name] = makeDir(name) @@ -139,8 +148,8 @@ func (fs *fakeFs) IsDir(name string) bool { if found && f.dir { return true } - if !strings.HasSuffix(name, "/") { - name = name + "/" + if !strings.HasSuffix(name, separator) { + name = name + separator } for k := range fs.m { if strings.HasPrefix(k, name) { @@ -210,7 +219,8 @@ func (fs *fakeFs) lstat(path string) (*Fakefileinfo, error) { func (fs *fakeFs) join(elem ...string) string { for i, e := range elem { if e != "" { - return strings.Replace(strings.Join(elem[i:], "/"), "//", "/", -1) + return strings.Replace( + strings.Join(elem[i:], separator), doubleSep, separator, -1) } } return "" @@ -218,15 +228,15 @@ func (fs *fakeFs) join(elem ...string) string { func (fs *fakeFs) readDirNames(path string) []string { var names []string - if !strings.HasSuffix(path, "/") { - path += "/" + if !strings.HasSuffix(path, separator) { + path += separator } - pathSegments := strings.Count(path, "/") + pathSegments := strings.Count(path, separator) for name := range fs.m { if name == path { continue } - if strings.Count(name, "/") > pathSegments { + if strings.Count(name, separator) > pathSegments { continue } if strings.HasPrefix(name, path) {