airshipctl/testutil/testdatafs.go

69 lines
2.3 KiB
Go

package testutil
import (
"io/ioutil"
"os"
"path/filepath"
"testing"
fixtures "github.com/go-git/go-git-fixtures/v4"
"github.com/stretchr/testify/require"
fs "sigs.k8s.io/kustomize/api/filesys"
"opendev.org/airship/airshipctl/pkg/document"
)
// SetupTestFs help manufacture a fake file system for testing purposes. It
// will iterate over the files in fixtureDir, which is a directory relative
// to the tests themselves, and will write each of those files (preserving
// names) to an in-memory file system and return that fs
func SetupTestFs(t *testing.T, fixtureDir string) document.FileSystem {
t.Helper()
x := &document.Fs{FileSystem: fs.MakeFsInMemory()}
files, err := ioutil.ReadDir(fixtureDir)
require.NoErrorf(t, err, "Failed to read fixture directory %s", fixtureDir)
for _, file := range files {
fileName := file.Name()
filePath := filepath.Join(fixtureDir, fileName)
fileBytes, err := ioutil.ReadFile(filePath)
require.NoErrorf(t, err, "Failed to read file %s, setting up testfs failed", filePath)
err = x.WriteFile(filepath.Join("/", file.Name()), fileBytes)
require.NoErrorf(t, err, "Failed to write file %s, setting up testfs failed", filePath)
}
return x
}
// NewTestBundle helps to create a new bundle with FakeFs containing documents from fixtureDir
func NewTestBundle(t *testing.T, fixtureDir string) document.Bundle {
t.Helper()
b, err := document.NewBundle(SetupTestFs(t, fixtureDir), "/")
require.NoError(t, err, "Failed to build a bundle, setting up TestBundle failed")
return b
}
// CleanUpGitFixtures removes any temp directories created by the go-git test fixtures
func CleanUpGitFixtures(t *testing.T) {
if err := fixtures.Clean(); err != nil {
t.Logf("Could not clean up git fixtures: %v", err)
}
}
// TempDir creates a new temporary directory in the system's temporary file
// storage with a name beginning with prefix.
// It returns the path of the new directory and a function that can be used to
// easily clean up that directory
func TempDir(t *testing.T, prefix string) (path string, cleanup func(*testing.T)) {
path, err := ioutil.TempDir("", prefix)
require.NoError(t, err, "Failed to create a temporary directory")
return path, func(tt *testing.T) {
err := os.RemoveAll(path)
if err != nil {
t.Logf("Could not clean up temp directory %q: %v", path, err)
}
}
}