oss.indeed.com/go/go-opine@v1.3.0/internal/run/run_test.go (about) 1 package run 2 3 import ( 4 "bytes" 5 "testing" 6 "time" 7 8 "github.com/stretchr/testify/require" 9 ) 10 11 func Test_Cmd(t *testing.T) { 12 stdout, stderr, err := Cmd("echo", Args("hello", "world")) 13 require.NoError(t, err) 14 require.Equal(t, "hello world\n", stdout) 15 require.Empty(t, stderr) 16 } 17 18 func Test_Cmd_error(t *testing.T) { 19 stdout, stderr, err := Cmd("sh", Args("-c", "echo hello; >&2 echo 'world'; exit 1")) 20 require.Error(t, err) 21 require.Equal(t, "hello\n", stdout) 22 require.Equal(t, "world\n", stderr) 23 } 24 25 func Test_Cmd_optionEnv(t *testing.T) { 26 val := time.Now().Format(time.RFC3339Nano) 27 stdout, stderr, err := Cmd("sh", Args("-c", "echo ${GO_OPINE_TEST_ENV}"), Env("GO_OPINE_TEST_ENV="+val)) 28 require.NoError(t, err) 29 require.Equal(t, val+"\n", stdout) 30 require.Empty(t, stderr) 31 } 32 33 func Test_Cmd_optionEnv_multipleTimes(t *testing.T) { 34 val1 := time.Now().Format(time.RFC3339Nano) 35 val2 := val1 + " (OVERRIDDEN)" 36 val3 := val1 + " (ADDITIONAL)" 37 stdout, stderr, err := Cmd( 38 "sh", 39 Args("-c", "echo ${GO_OPINE_ORIGINAL} ${GO_OPINE_OVERRIDDEN} ${GO_OPINE_TEST_ENV}"), 40 Env("GO_OPINE_ORIGINAL="+val1, "GO_OPINE_OVERRIDDEN="+val1), 41 Env("GO_OPINE_OVERRIDDEN="+val2, "GO_OPINE_TEST_ENV="+val3), 42 ) 43 require.NoError(t, err) 44 require.Equal(t, val1+" "+val2+" "+val3+"\n", stdout) 45 require.Empty(t, stderr) 46 } 47 48 func Test_Cmd_optionStdin(t *testing.T) { 49 val := time.Now().Format(time.RFC3339Nano) 50 stdout, stderr, err := Cmd("cat", Args(), Stdin(val)) 51 require.NoError(t, err) 52 require.Equal(t, val, stdout) 53 require.Empty(t, stderr) 54 } 55 56 func Test_Cmd_optionLog(t *testing.T) { 57 var log bytes.Buffer 58 stdout, stderr, err := Cmd("sh", Args("-c", "echo hello; >&2 echo 'world'"), Log(&log)) 59 require.NoError(t, err) 60 require.Equal(t, "hello\n", stdout) 61 require.Equal(t, "world\n", stderr) 62 require.Contains(t, log.String(), " > hello\n") 63 require.Contains(t, log.String(), " ! world\n") 64 } 65 66 func Test_Cmd_optionSuppressStdout(t *testing.T) { 67 var log bytes.Buffer 68 stdout, stderr, err := Cmd("sh", Args("-c", "echo hello; >&2 echo 'world'"), Log(&log), SuppressStdout()) 69 require.NoError(t, err) 70 require.Equal(t, "hello\n", stdout) 71 require.Equal(t, "world\n", stderr) 72 require.NotContains(t, log.String(), " > hello\n") 73 require.Contains(t, log.String(), " ! world\n") 74 } 75 76 func Test_Cmd_optionSuppressStderr(t *testing.T) { 77 var log bytes.Buffer 78 stdout, stderr, err := Cmd("sh", Args("-c", "echo hello; >&2 echo 'world'"), Log(&log), SuppressStderr()) 79 require.NoError(t, err) 80 require.Equal(t, "hello\n", stdout) 81 require.Equal(t, "world\n", stderr) 82 require.Contains(t, log.String(), " > hello\n") 83 require.NotContains(t, log.String(), " ! world\n") 84 }