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  }