123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118 |
- package cmd
- import (
- "runtime"
- "strings"
- "testing"
- "time"
- "github.com/stretchr/testify/assert"
- )
- func TestRunCommand(t *testing.T) {
- // TODO Windows: Port this test
- if runtime.GOOS == "windows" {
- t.Skip("Needs porting to Windows")
- }
- var cmd string
- if runtime.GOOS == "solaris" {
- cmd = "gls"
- } else {
- cmd = "ls"
- }
- result := RunCommand(cmd)
- result.Assert(t, Expected{})
- result = RunCommand("doesnotexists")
- expectedError := `exec: "doesnotexists": executable file not found`
- result.Assert(t, Expected{ExitCode: 127, Error: expectedError})
- result = RunCommand(cmd, "-z")
- result.Assert(t, Expected{
- ExitCode: 2,
- Error: "exit status 2",
- Err: "invalid option",
- })
- assert.Contains(t, result.Combined(), "invalid option")
- }
- func TestRunCommandWithCombined(t *testing.T) {
- // TODO Windows: Port this test
- if runtime.GOOS == "windows" {
- t.Skip("Needs porting to Windows")
- }
- result := RunCommand("ls", "-a")
- result.Assert(t, Expected{})
- assert.Contains(t, result.Combined(), "..")
- assert.Contains(t, result.Stdout(), "..")
- }
- func TestRunCommandWithTimeoutFinished(t *testing.T) {
- // TODO Windows: Port this test
- if runtime.GOOS == "windows" {
- t.Skip("Needs porting to Windows")
- }
- result := RunCmd(Cmd{
- Command: []string{"ls", "-a"},
- Timeout: 50 * time.Millisecond,
- })
- result.Assert(t, Expected{Out: ".."})
- }
- func TestRunCommandWithTimeoutKilled(t *testing.T) {
- // TODO Windows: Port this test
- if runtime.GOOS == "windows" {
- t.Skip("Needs porting to Windows")
- }
- command := []string{"sh", "-c", "while true ; do echo 1 ; sleep .5 ; done"}
- result := RunCmd(Cmd{Command: command, Timeout: 1250 * time.Millisecond})
- result.Assert(t, Expected{Timeout: true})
- ones := strings.Split(result.Stdout(), "\n")
- assert.Len(t, ones, 4)
- }
- func TestRunCommandWithErrors(t *testing.T) {
- result := RunCommand("/foobar")
- result.Assert(t, Expected{Error: "foobar", ExitCode: 127})
- }
- func TestRunCommandWithStdoutStderr(t *testing.T) {
- result := RunCommand("echo", "hello", "world")
- result.Assert(t, Expected{Out: "hello world\n", Err: None})
- }
- func TestRunCommandWithStdoutStderrError(t *testing.T) {
- result := RunCommand("doesnotexists")
- expected := `exec: "doesnotexists": executable file not found`
- result.Assert(t, Expected{Out: None, Err: None, ExitCode: 127, Error: expected})
- switch runtime.GOOS {
- case "windows":
- expected = "ls: unknown option"
- case "solaris":
- expected = "gls: invalid option"
- default:
- expected = "ls: invalid option"
- }
- var cmd string
- if runtime.GOOS == "solaris" {
- cmd = "gls"
- } else {
- cmd = "ls"
- }
- result = RunCommand(cmd, "-z")
- result.Assert(t, Expected{
- Out: None,
- Err: expected,
- ExitCode: 2,
- Error: "exit status 2",
- })
- }
|