Some checks failed
Docs Deploy / build_and_deploy (push) Has been cancelled
Generate Docs / cli (push) Has been cancelled
Generate Config Doc / cli (push) Has been cancelled
Go formatting / go-formatting (push) Has been cancelled
Check links / markdown-link-check (push) Has been cancelled
Integration / pre-test (push) Has been cancelled
Integration / test on (push) Has been cancelled
Integration / status (push) Has been cancelled
Lint / Lint Go code (push) Has been cancelled
Test / test (ubuntu-latest) (push) Has been cancelled
123 lines
2.9 KiB
Go
123 lines
2.9 KiB
Go
package cmdrunner
|
|
|
|
import (
|
|
"bytes"
|
|
"context"
|
|
stdErrors "errors"
|
|
"os"
|
|
"strings"
|
|
"testing"
|
|
|
|
"github.com/stretchr/testify/require"
|
|
|
|
"git.cw.tr/mukan-network/mukan-ignite/ignite/pkg/cmdrunner/step"
|
|
"git.cw.tr/mukan-network/mukan-ignite/ignite/pkg/goenv"
|
|
)
|
|
|
|
func TestNewAppliesOptions(t *testing.T) {
|
|
stdout := &bytes.Buffer{}
|
|
stderr := &bytes.Buffer{}
|
|
stdin := strings.NewReader("stdin")
|
|
|
|
r := New(
|
|
DefaultStdout(stdout),
|
|
DefaultStderr(stderr),
|
|
DefaultStdin(stdin),
|
|
DefaultWorkdir("/tmp/work"),
|
|
RunParallel(),
|
|
EndSignal(os.Kill),
|
|
EnableDebug(),
|
|
)
|
|
|
|
require.Equal(t, stdout, r.stdout)
|
|
require.Equal(t, stderr, r.stderr)
|
|
require.Equal(t, stdin, r.stdin)
|
|
require.Equal(t, "/tmp/work", r.workdir)
|
|
require.True(t, r.runParallel)
|
|
require.Equal(t, os.Kill, r.endSignal)
|
|
require.True(t, r.debug)
|
|
}
|
|
|
|
func TestEnv(t *testing.T) {
|
|
require.Equal(t, "KEY=value", Env("KEY", "value"))
|
|
}
|
|
|
|
func TestNewCommandReturnsDummyExecutorForEmptyCommand(t *testing.T) {
|
|
executor := New().newCommand(step.New())
|
|
_, ok := executor.(*dummyExecutor)
|
|
require.True(t, ok)
|
|
}
|
|
|
|
func TestNewCommandUsesDefaultsWhenStepDoesNotProvideIO(t *testing.T) {
|
|
stdout := &bytes.Buffer{}
|
|
stderr := &bytes.Buffer{}
|
|
r := New(
|
|
DefaultStdout(stdout),
|
|
DefaultStderr(stderr),
|
|
DefaultWorkdir("/tmp/work"),
|
|
)
|
|
|
|
executor := r.newCommand(step.New(
|
|
step.Exec("echo", "hello"),
|
|
step.Env("A=B"),
|
|
))
|
|
|
|
cmdExecutor, ok := executor.(*cmdSignalWithWriter)
|
|
require.True(t, ok)
|
|
require.Equal(t, stdout, cmdExecutor.Stdout)
|
|
require.Equal(t, stderr, cmdExecutor.Stderr)
|
|
require.Equal(t, "/tmp/work", cmdExecutor.Dir)
|
|
require.Contains(t, cmdExecutor.Env, "A=B")
|
|
require.Contains(t, cmdExecutor.Env, Env("PATH", goenv.Path()))
|
|
}
|
|
|
|
func TestNewCommandWithCustomStdinReturnsCmdSignal(t *testing.T) {
|
|
stdin := strings.NewReader("input")
|
|
|
|
executor := New().newCommand(step.New(
|
|
step.Exec("echo"),
|
|
step.Stdin(stdin),
|
|
))
|
|
|
|
cmdExecutor, ok := executor.(*cmdSignal)
|
|
require.True(t, ok)
|
|
require.Equal(t, stdin, cmdExecutor.Stdin)
|
|
}
|
|
|
|
func TestRunWithoutStepsReturnsNil(t *testing.T) {
|
|
err := New().Run(context.Background())
|
|
require.NoError(t, err)
|
|
}
|
|
|
|
func TestRunReturnsPreExecError(t *testing.T) {
|
|
expectedErr := stdErrors.New("pre exec error")
|
|
|
|
err := New().Run(context.Background(), step.New(
|
|
step.PreExec(func() error { return expectedErr }),
|
|
))
|
|
|
|
require.ErrorIs(t, err, expectedErr)
|
|
}
|
|
|
|
func TestRunReturnsStartErrorWithoutPostExec(t *testing.T) {
|
|
err := New().Run(context.Background(), step.New(
|
|
step.Exec("this-command-does-not-exist-cmdrunner-test"),
|
|
))
|
|
|
|
require.Error(t, err)
|
|
}
|
|
|
|
func TestRunCanHandleStartErrorInPostExec(t *testing.T) {
|
|
var receivedErr error
|
|
|
|
err := New().Run(context.Background(), step.New(
|
|
step.Exec("this-command-does-not-exist-cmdrunner-test"),
|
|
step.PostExec(func(err error) error {
|
|
receivedErr = err
|
|
return nil
|
|
}),
|
|
))
|
|
|
|
require.NoError(t, err)
|
|
require.Error(t, receivedErr)
|
|
}
|