mirror of
https://github.com/kubernetes-sigs/kustomize.git
synced 2026-05-17 18:25:26 +00:00
141 lines
3.7 KiB
Go
141 lines
3.7 KiB
Go
// Copyright 2021 The Kubernetes Authors.
|
|
// SPDX-License-Identifier: Apache-2.0
|
|
|
|
package filesys
|
|
|
|
import (
|
|
"os"
|
|
"path/filepath"
|
|
"testing"
|
|
|
|
"github.com/stretchr/testify/assert"
|
|
"github.com/stretchr/testify/require"
|
|
"sigs.k8s.io/kustomize/kyaml/errors"
|
|
)
|
|
|
|
const (
|
|
disk = "MakeFsOnDisk"
|
|
memoryAbs = "MakeFsInMemory"
|
|
memoryEmpty = "MakeEmptyDirInMemory"
|
|
|
|
existMsg = "expected '%s' to exist"
|
|
)
|
|
|
|
var filesysBuilders = map[string]func() FileSystem{
|
|
memoryAbs: MakeFsInMemory,
|
|
disk: MakeFsOnDisk,
|
|
memoryEmpty: func() FileSystem { return MakeEmptyDirInMemory() },
|
|
}
|
|
|
|
func TestNotExistErr(t *testing.T) {
|
|
for name, builder := range filesysBuilders {
|
|
t.Run(name, func(t *testing.T) {
|
|
testNotExistErr(t, builder())
|
|
})
|
|
}
|
|
}
|
|
|
|
func testNotExistErr(t *testing.T, fs FileSystem) {
|
|
t.Helper()
|
|
const path = "bad-dir/file.txt"
|
|
|
|
err := fs.RemoveAll(path)
|
|
assert.Falsef(t, errors.Is(err, os.ErrNotExist), "RemoveAll should not return ErrNotExist, got %v", err)
|
|
_, err = fs.Open(path)
|
|
assert.Truef(t, errors.Is(err, os.ErrNotExist), "Open should return ErrNotExist, got %v", err)
|
|
_, err = fs.ReadDir(path)
|
|
assert.Truef(t, errors.Is(err, os.ErrNotExist), "ReadDir should return ErrNotExist, got %v", err)
|
|
_, _, err = fs.CleanedAbs(path)
|
|
assert.Truef(t, errors.Is(err, os.ErrNotExist), "CleanedAbs should return ErrNotExist, got %v", err)
|
|
_, err = fs.ReadFile(path)
|
|
assert.Truef(t, errors.Is(err, os.ErrNotExist), "ReadFile should return ErrNotExist, got %v", err)
|
|
err = fs.Walk(path, func(_ string, _ os.FileInfo, err error) error { return err })
|
|
assert.Truef(t, errors.Is(err, os.ErrNotExist), "Walk should return ErrNotExist, got %v", err)
|
|
}
|
|
|
|
// setupFileSys returns file system, default directory to test in, and working directory
|
|
func setupFileSys(t *testing.T, name string) (FileSystem, string, string) {
|
|
t.Helper()
|
|
|
|
switch name {
|
|
case disk:
|
|
fSys, testDir := makeTestDir(t)
|
|
return fSys, testDir, cleanWd(t)
|
|
case memoryAbs:
|
|
return filesysBuilders[name](), Separator, Separator
|
|
case memoryEmpty:
|
|
return filesysBuilders[name](), "", ""
|
|
default:
|
|
t.Fatalf("unexpected FileSystem implementation '%s'", name)
|
|
panic("unreachable point of execution")
|
|
}
|
|
}
|
|
|
|
func TestConfirmDir(t *testing.T) {
|
|
for name := range filesysBuilders {
|
|
name := name
|
|
t.Run(name, func(t *testing.T) {
|
|
fSys, prefixPath, wd := setupFileSys(t, name)
|
|
|
|
d1Path := filepath.Join(prefixPath, "d1")
|
|
d2Path := filepath.Join(d1Path, ".d2")
|
|
err := fSys.MkdirAll(d2Path)
|
|
require.NoError(t, err)
|
|
require.Truef(t, fSys.Exists(d2Path), existMsg, d2Path)
|
|
|
|
tests := map[string]*struct {
|
|
dir string
|
|
expected string
|
|
}{
|
|
"Simple": {
|
|
d1Path,
|
|
d1Path,
|
|
},
|
|
"Hidden": {
|
|
d2Path,
|
|
d2Path,
|
|
},
|
|
"Relative": {
|
|
SelfDir,
|
|
wd,
|
|
},
|
|
}
|
|
for subName, test := range tests {
|
|
test := test
|
|
t.Run(subName, func(t *testing.T) {
|
|
cleanDir, err := ConfirmDir(fSys, test.dir)
|
|
require.NoError(t, err)
|
|
require.Equal(t, test.expected, cleanDir.String())
|
|
})
|
|
}
|
|
})
|
|
}
|
|
}
|
|
|
|
func TestConfirmDirErr(t *testing.T) {
|
|
for name := range filesysBuilders {
|
|
thisName := name
|
|
t.Run(thisName, func(t *testing.T) {
|
|
fSys, prefixPath, _ := setupFileSys(t, thisName)
|
|
|
|
fPath := filepath.Join(prefixPath, "foo")
|
|
err := fSys.WriteFile(fPath, []byte(`foo`))
|
|
require.NoError(t, err)
|
|
require.Truef(t, fSys.Exists(fPath), existMsg, fPath)
|
|
|
|
tests := map[string]string{
|
|
"Empty": "",
|
|
"File": fPath,
|
|
"Non-existent": filepath.Join(prefixPath, "bar"),
|
|
}
|
|
for subName, invalidPath := range tests {
|
|
invalidPath := invalidPath
|
|
t.Run(subName, func(t *testing.T) {
|
|
_, err := ConfirmDir(fSys, invalidPath)
|
|
require.Error(t, err)
|
|
})
|
|
}
|
|
})
|
|
}
|
|
}
|