mukan-ignite/ignite/pkg/cmdrunner/cmdrunner_test.go
Mukan Erkin Törük c32551b6f7
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
refactor: replace all github.com upstream refs with git.cw.tr/mukan-network
2026-05-11 03:36:24 +03:00

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)
}