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  }