From 56cfb4fcefd5c12ede5e6d5d0877aa29774a79ec Mon Sep 17 00:00:00 2001 From: Frederic BIDON Date: Tue, 7 Feb 2023 19:10:39 +0100 Subject: [PATCH] test(getters): added unit tests for utilities Signed-off-by: Frederic BIDON --- core/cautils/getter/getpoliciesutils.go | 3 +- core/cautils/getter/getpoliciesutils_test.go | 68 ++++++++++++++++++++ 2 files changed, 69 insertions(+), 2 deletions(-) create mode 100644 core/cautils/getter/getpoliciesutils_test.go diff --git a/core/cautils/getter/getpoliciesutils.go b/core/cautils/getter/getpoliciesutils.go index 8a105711..333516a0 100644 --- a/core/cautils/getter/getpoliciesutils.go +++ b/core/cautils/getter/getpoliciesutils.go @@ -6,7 +6,6 @@ import ( "io" "net/http" "os" - "path" "path/filepath" "strings" ) @@ -23,7 +22,7 @@ func SaveInFile(policy interface{}, pathStr string) error { err = os.WriteFile(pathStr, encodedData, 0644) //nolint:gosec if err != nil { if os.IsNotExist(err) { - pathDir := path.Dir(pathStr) + pathDir := filepath.Dir(pathStr) // pathDir could contain subdirectories if erm := os.MkdirAll(pathDir, 0755); erm != nil { return erm diff --git a/core/cautils/getter/getpoliciesutils_test.go b/core/cautils/getter/getpoliciesutils_test.go new file mode 100644 index 00000000..80b4c4ca --- /dev/null +++ b/core/cautils/getter/getpoliciesutils_test.go @@ -0,0 +1,68 @@ +package getter + +import ( + "os" + "path/filepath" + "testing" + + "github.com/stretchr/testify/require" +) + +func TestGetDefaultPath(t *testing.T) { + t.Parallel() + + const name = "mine" + + pth := GetDefaultPath(name) + require.Equal(t, name, filepath.Base(pth)) + require.Equal(t, ".kubescape", filepath.Base(filepath.Dir(pth))) +} + +func TestSaveInFile(t *testing.T) { + t.Parallel() + + dir, err := os.MkdirTemp(".", "test") + require.NoError(t, err) + defer func() { + _ = os.RemoveAll(dir) + }() + + policy := map[string]interface{}{ + "key": "value", + "number": 1.00, + } + + t.Run("should save data as JSON (target folder exists)", func(t *testing.T) { + target := filepath.Join(dir, "target.json") + require.NoError(t, SaveInFile(policy, target)) + + buf, err := os.ReadFile(target) + require.NoError(t, err) + var retrieved interface{} + require.NoError(t, json.Unmarshal(buf, &retrieved)) + + require.EqualValues(t, policy, retrieved) + }) + + t.Run("should save data as JSON (new target folder)", func(t *testing.T) { + target := filepath.Join(dir, "subdir", "target.json") + require.NoError(t, SaveInFile(policy, target)) + + buf, err := os.ReadFile(target) + require.NoError(t, err) + var retrieved interface{} + require.NoError(t, json.Unmarshal(buf, &retrieved)) + + require.EqualValues(t, policy, retrieved) + }) + + t.Run("should error", func(t *testing.T) { + badPolicy := map[string]interface{}{ + "key": "value", + "number": 1.00, + "err": func() {}, + } + target := filepath.Join(dir, "error.json") + require.Error(t, SaveInFile(badPolicy, target)) + }) +}