github.com/reconquest/executil-go@v0.0.0-20181110204642-1f5c2d67813f/run_test.go (about) 1 package executil 2 3 import ( 4 "os/exec" 5 "testing" 6 7 "github.com/stretchr/testify/assert" 8 ) 9 10 func TestRun_ReturnsStdoutIfStderrIsEmpty(t *testing.T) { 11 test := assert.New(t) 12 13 stdout, stderr, err := Run(getCommandWithStdout()) 14 test.NoError(err) 15 test.Equal("stdout\n", string(stdout)) 16 test.Equal("", string(stderr)) 17 } 18 19 func TestRun_ReturnsStderrIfStdoutIsEmpty(t *testing.T) { 20 test := assert.New(t) 21 22 stdout, stderr, err := Run(getCommandWithStderr()) 23 test.NoError(err) 24 test.Equal("", string(stdout)) 25 test.Equal("stderr\n", string(stderr)) 26 } 27 28 func TestRun_ReturnsStdoutAndStderrIfBothNotEmpty(t *testing.T) { 29 test := assert.New(t) 30 31 stdout, stderr, err := Run(getCommandWithStdoutAndStderr()) 32 test.NoError(err) 33 test.Equal("stdout\n", string(stdout)) 34 test.Equal("stderr\n", string(stderr)) 35 } 36 37 func TestRun_ReturnsErrorIfCommandFailed(t *testing.T) { 38 test := assert.New(t) 39 40 _, _, err := Run(getCommandWithUnknownBinary()) 41 test.Error(err) 42 } 43 44 func TestRun_ReturnsErrorTypeOfExecutilError(t *testing.T) { 45 test := assert.New(t) 46 47 _, _, err := Run(getCommandWithUnknownBinary()) 48 test.IsType(&Error{}, err) 49 } 50 51 func TestRun_ReturnsErrorWithExitStatus1(t *testing.T) { 52 test := assert.New(t) 53 54 stdout, stderr, err := Run(getCommandWithStdoutAndStderrAndExitStatus1()) 55 test.Error(err) 56 test.Equal("stdout\n", string(stdout)) 57 test.Equal("stderr\n", string(stderr)) 58 test.IsType(&exec.ExitError{}, err.(*Error).RunErr) 59 test.True(IsExitError(err), "error should be type of ExitError") 60 test.Equal(GetExitStatus(err), 1) 61 } 62 63 func TestRun_ReturnsErrorWithExitStatus2(t *testing.T) { 64 test := assert.New(t) 65 66 stdout, stderr, err := Run(getCommandWithStdoutAndStderrAndExitStatus2()) 67 test.Error(err) 68 test.Equal("stdout\n", string(stdout)) 69 test.Equal("stderr\n", string(stderr)) 70 test.IsType(&Error{}, err) 71 test.IsType(&exec.ExitError{}, err.(*Error).RunErr) 72 test.True(IsExitError(err), "error should be type of ExitError") 73 test.Equal(GetExitStatus(err), 2) 74 } 75 76 func TestRun_IgnoresStdoutIfOptionSpecified(t *testing.T) { 77 test := assert.New(t) 78 79 stdout, stderr, err := Run(getCommandWithStdoutAndStderr(), IgnoreStdout) 80 test.NoError(err) 81 test.Equal("", string(stdout)) 82 test.Equal("stderr\n", string(stderr)) 83 } 84 85 func TestRun_IgnoresStderrIfOptionSpecified(t *testing.T) { 86 test := assert.New(t) 87 88 stdout, stderr, err := Run(getCommandWithStdoutAndStderr(), IgnoreStderr) 89 test.NoError(err) 90 test.Equal("stdout\n", string(stdout)) 91 test.Equal("", string(stderr)) 92 } 93 94 func TestRun_IgnoresStdoutAndStderrIfOptionsSpecified(t *testing.T) { 95 test := assert.New(t) 96 97 stdout, stderr, err := Run( 98 getCommandWithStdoutAndStderr(), IgnoreStdout, IgnoreStderr, 99 ) 100 test.NoError(err) 101 test.Equal("", string(stdout)) 102 test.Equal("", string(stderr)) 103 }