github.com/ActiveState/cli@v0.0.0-20240508170324-6801f60cd051/pkg/platform/runtime/executors/executors_test.go (about) 1 package executors 2 3 import ( 4 "os" 5 "path/filepath" 6 "runtime" 7 "testing" 8 9 "github.com/stretchr/testify/require" 10 11 "github.com/ActiveState/cli/internal/errs" 12 "github.com/ActiveState/cli/internal/fileutils" 13 "github.com/ActiveState/cli/pkg/platform/runtime/target" 14 ) 15 16 func TestExecutor(t *testing.T) { 17 tmpDir, err := os.MkdirTemp("", "as-executor-test") 18 require.NoError(t, err, errs.JoinMessage(err)) 19 defer func() { _ = os.RemoveAll(tmpDir) }() 20 21 dummyExecData := []byte("junk state-exec junk") 22 dummyExecSrc := filepath.Join(tmpDir, "_SRC") 23 24 err = fileutils.WriteFile(dummyExecSrc, dummyExecData) 25 require.NoError(t, err, errs.JoinMessage(err)) 26 27 target := target.NewCustomTarget("owner", "project", "1234abcd-1234-abcd-1234-abcd1234abcd", "dummy/path", target.NewExecTrigger("test")) 28 execDir := filepath.Join(tmpDir, "exec") 29 execInit := New(execDir) 30 execInit.altExecSrcPath = dummyExecSrc 31 32 exec := func(in string) string { return filepath.Join(tmpDir, in) } 33 exes := make(map[string]string) // map[string]string{ "executable": "executor" } 34 switch runtime.GOOS { 35 case "windows": 36 exes["a.exe"] = "exec/a.exe" 37 exes["b.bat"] = "exec/b.exe" 38 exes["c.cmd"] = "exec/c.exe" 39 40 default: 41 exes["bin/a"] = "exec/a" 42 exes["bin/b.sh"] = "exec/b.sh" 43 } 44 env := map[string]string{"PATH": execDir} 45 var inputExes []string 46 for exe := range exes { 47 inputExes = append(inputExes, exe) 48 } 49 50 t.Run("Create executors", func(t *testing.T) { 51 err = execInit.Apply("/sock-path", target, env, inputExes) 52 require.NoError(t, err, errs.JoinMessage(err)) 53 }) 54 55 // Verify executors 56 for _, utor := range exes { 57 executor := exec(utor) 58 59 t.Run("Executor Exists", func(t *testing.T) { 60 if !fileutils.FileExists(executor) { 61 t.Errorf("Could not locate executor: %s", executor) 62 } 63 }) 64 65 t.Run("Executor contains expected executable", func(t *testing.T) { 66 contains, err := fileutils.FileContains(executor, dummyExecData) 67 require.NoError(t, err, errs.JoinMessage(err)) 68 if !contains { 69 t.Errorf("File %s does not contain %q, contents: %q", executor, dummyExecData, fileutils.ReadFileUnsafe(executor)) 70 } 71 }) 72 } 73 74 // add legacy files - deprecated 75 require.NoError(t, fileutils.WriteFile(exec("exec/old_exec"), []byte(legacyExecutorDenoter))) 76 require.NoError(t, fileutils.WriteFile(exec("exec/old_shim"), []byte(legacyShimDenoter))) 77 78 t.Run("Cleanup old executors", func(t *testing.T) { 79 err = execInit.Clean() 80 require.NoError(t, err, errs.JoinMessage(err)) 81 82 files, err := fileutils.ListDirSimple(exec("exec"), false) 83 require.NoError(t, err, errs.JoinMessage(err)) 84 require.Len(t, files, 0, "Cleanup should remove all exes") 85 }) 86 }