github.com/ActiveState/cli@v0.0.0-20240508170324-6801f60cd051/pkg/platform/runtime/envdef/file_transform_test.go (about) 1 package envdef 2 3 import ( 4 "encoding/json" 5 "os" 6 "strings" 7 "testing" 8 9 "github.com/ActiveState/cli/internal/fileutils" 10 "github.com/stretchr/testify/assert" 11 "github.com/stretchr/testify/require" 12 ) 13 14 func TestRelocateFile(t *testing.T) { 15 nullCharacter := "\u0000" 16 invalidPad := "too long" 17 cases := []struct { 18 Name string 19 Replacement string 20 PadWith *string 21 HasError bool 22 Expected string 23 }{ 24 { 25 "null-padded", "/ghi", &nullCharacter, false, 26 "/ghi/something/else\u0000\u0000\u0000\u0000text\u0000", 27 }, 28 { 29 "text-only", "/ghi", nil, false, 30 "/ghi/something/else\u0000text\u0000", 31 }, 32 { 33 "invalid-padding", "/ghi", &invalidPad, true, "", 34 }, 35 { 36 "replacement-too-long", "/too-long", &nullCharacter, true, "", 37 }, 38 } 39 40 for _, c := range cases { 41 t.Run(c.Name, func(tt *testing.T) { 42 ft := &FileTransform{ 43 Pattern: "/abcdef", 44 With: c.Replacement, 45 PadWith: c.PadWith, 46 } 47 48 res, err := ft.relocateFile([]byte("/abcdef/something/else\u0000text\u0000"), c.Replacement) 49 if c.HasError != (err != nil) { 50 tt.Fatalf("relocateFile returned with err: %v", err) 51 } 52 if err == nil { 53 assert.Equal(tt, []byte(c.Expected), res) 54 } 55 }) 56 } 57 } 58 59 func TestApplyConstTransforms(t *testing.T) { 60 dir, err := os.MkdirTemp("", "installdir") 61 assert.NoError(t, err) 62 63 dir, err = fileutils.GetLongPathName(dir) 64 assert.NoError(t, err) 65 66 cs, err := NewConstants(dir) 67 assert.NoError(t, err) 68 assert.NoError(t, err) 69 70 cases := []struct { 71 Name string 72 TransformJSON string 73 HasError bool 74 Expected string 75 }{ 76 { 77 "double-slashes", `[{"pattern": 78 "\\", 79 "with": "\\\\", "in": ["INSTALLDIR"]}]`, 80 false, strings.Replace(dir, `\`, `\\`, -1), 81 }, 82 { 83 "unchanged", `[]`, false, dir, 84 }, 85 { 86 "invalid-constant", `[{"pattern": "\\", "with": "\\\\", "in": ["INVALID"]}]`, 87 true, "", 88 }, 89 } 90 91 // 92 for _, c := range cases { 93 t.Run(c.Name, func(tt *testing.T) { 94 var ct []ConstTransform 95 err := json.Unmarshal([]byte(c.TransformJSON), &ct) 96 require.NoError(tt, err) 97 ft := &FileTransform{ 98 ConstTransforms: ct, 99 } 100 res, err := ft.applyConstTransforms(cs) 101 if c.HasError != (err != nil) { 102 tt.Fatalf("applyConstTransforms returned with err: %v", err) 103 } 104 if err == nil { 105 assert.Equal(tt, c.Expected, res["INSTALLDIR"]) 106 } 107 }) 108 } 109 110 }