github.com/ActiveState/cli@v0.0.0-20240508170324-6801f60cd051/internal/subshell/subshell_lin_mac_test.go (about) 1 //go:build !windows 2 // +build !windows 3 4 package subshell 5 6 import ( 7 "errors" 8 "fmt" 9 "os" 10 "strings" 11 "testing" 12 13 "github.com/stretchr/testify/assert" 14 "github.com/stretchr/testify/require" 15 16 "github.com/ActiveState/cli/internal/config" 17 "github.com/ActiveState/cli/internal/constants" 18 "github.com/ActiveState/cli/internal/fileutils" 19 "github.com/ActiveState/cli/internal/testhelpers/osutil" 20 "github.com/ActiveState/cli/pkg/projectfile" 21 ) 22 23 func TestRunCommandNoProjectEnv(t *testing.T) { 24 projectURL := fmt.Sprintf("https://%s/string/string", constants.PlatformURL) 25 pjfile := projectfile.Project{ 26 Project: projectURL, 27 } 28 require.NoError(t, pjfile.Persist()) 29 30 os.Setenv("SHELL", "bash") 31 os.Setenv("ACTIVESTATE_PROJECT", "SHOULD NOT BE SET") 32 33 cfg, err := config.New() 34 require.NoError(t, err) 35 subs := New(cfg) 36 37 data := []byte("#!/usr/bin/env bash\necho $ACTIVESTATE_PROJECT") 38 filename, err := fileutils.WriteTempFileToDir("", "testRunCommand", data, 0700) 39 require.NoError(t, err) 40 defer os.Remove(filename) 41 42 out, err := osutil.CaptureStdout(func() { 43 rerr := subs.Run(filename) 44 require.NoError(t, rerr) 45 }) 46 require.NoError(t, err) 47 assert.Empty(t, strings.TrimSpace(out), "Should not echo anything cause the ACTIVESTATE_PROJECT should be undefined by the run command") 48 49 projectfile.Reset() 50 } 51 52 func TestRunCommandError(t *testing.T) { 53 projectURL := fmt.Sprintf("https://%s/string/string", constants.PlatformURL) 54 pjfile := projectfile.Project{ 55 Project: projectURL, 56 } 57 require.NoError(t, pjfile.Persist()) 58 59 os.Setenv("SHELL", "bash") 60 61 cfg, err := config.New() 62 require.NoError(t, err) 63 subs := New(cfg) 64 65 err = subs.Run("some-file-that-doesnt-exist") 66 assert.Error(t, err, "Returns an error") 67 68 data := []byte("#!/usr/bin/env bash\nexit 2") 69 filename, err := fileutils.WriteTempFileToDir("", "testRunCommand", data, 0700) 70 require.NoError(t, err) 71 defer os.Remove(filename) 72 73 err = subs.Run(filename) 74 require.Error(t, err, "Returns an error") 75 var eerr interface{ ExitCode() int } 76 require.True(t, errors.As(err, &eerr), "Error is exec exit error") 77 assert.Equal(t, eerr.ExitCode(), 2, "Returns exit code 2") 78 79 projectfile.Reset() 80 }