From 29589a24b13fb223b113e94eca2c4fff0e56a4d9 Mon Sep 17 00:00:00 2001 From: Slack Coder Date: Fri, 11 Mar 2022 13:08:24 -0500 Subject: Initial commit --- installpkg_test.go | 108 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 108 insertions(+) create mode 100644 installpkg_test.go (limited to 'installpkg_test.go') diff --git a/installpkg_test.go b/installpkg_test.go new file mode 100644 index 0000000..dd1baaf --- /dev/null +++ b/installpkg_test.go @@ -0,0 +1,108 @@ +package pkgtools + +import ( + "crypto/md5" + "fmt" + "io" + "os" + "path" + "testing" + + "github.com/stretchr/testify/require" +) + +func lstree(p string) ([]string, error) { + entries, err := os.ReadDir(p) + if err != nil { + return nil, err + } + + var files []string + for _, e := range entries { + fPath := path.Join(p, e.Name()) + if e.Type().IsDir() { + tree, err := lstree(fPath) + if err != nil { + return nil, err + } + for _, f := range tree { + files = append(files, path.Join(e.Name(), f)) + } + continue + } + if e.Type().IsRegular() { + files = append(files, e.Name()) + } + } + return files, nil +} + +func shasum(path string) (string, error) { + f, err := os.Open(path) + if err != nil { + return "", err + } + defer f.Close() + + hash := md5.New() + _, err = io.Copy(hash, f) + if err != nil { + return "", err + } + return fmt.Sprintf("%x", hash.Sum(nil)), nil +} + +func mapKeys(arg map[string]string) []string { + var ret []string + for k := range arg { + ret = append(ret, k) + } + return ret +} + +func requireDirContents( + t *testing.T, + expected string, + actual string, + msgAndArgs ...interface{}, +) { + + expTree := map[string]string{} + files, err := lstree(expected) + require.NoError(t, err) + for _, file := range files { + hash, err := shasum(path.Join(expected, file)) + require.NoError(t, err, "calculating hash for %s", file) + expTree[file] = hash + } + + actualTree := map[string]string{} + files, err = lstree(actual) + require.NoError(t, err) + for _, file := range files { + hash, err := shasum(path.Join(actual, file)) + require.NoError(t, err, "calculating hash for %s", file) + actualTree[file] = hash + } + + for k, v := range expTree { + v2, ok := actualTree[k] + if !ok { + continue + } + + require.Equal(t, + string(v), string(v2), + "file '%s' and '%s' differ", + path.Join(expected, k), path.Join(actual, k), + ) + + delete(actualTree, k) + delete(expTree, k) + } + + files = mapKeys(actualTree) + require.Empty(t, files, "unexpected files left behind") + files = mapKeys(expTree) + require.Empty(t, files, "expected to be written") +} -- cgit v1.2.3