diff --git a/cmd/argoexec/commands/emissary_test.go b/cmd/argoexec/commands/emissary_test.go index 2c2d56306579..48261cb45e9c 100644 --- a/cmd/argoexec/commands/emissary_test.go +++ b/cmd/argoexec/commands/emissary_test.go @@ -1,3 +1,5 @@ +//go:build !windows + package commands import ( @@ -45,7 +47,7 @@ func TestEmissary(t *testing.T) { assert.NoError(t, err) assert.Contains(t, string(data), "hello") }) - t.Run("Comined", func(t *testing.T) { + t.Run("Combined", func(t *testing.T) { err := run("echo hello > /dev/stderr") assert.NoError(t, err) data, err := ioutil.ReadFile(varRunArgo + "/ctr/main/combined") diff --git a/cmd/argoexec/commands/emissary_windows_test.go b/cmd/argoexec/commands/emissary_windows_test.go new file mode 100644 index 000000000000..7fabd31febba --- /dev/null +++ b/cmd/argoexec/commands/emissary_windows_test.go @@ -0,0 +1,48 @@ +//go:build windows + +package commands + +import ( + "os" + "testing" + + "github.com/argoproj/argo-workflows/v3/util/errors" + "github.com/stretchr/testify/assert" +) + +func TestEmissary(t *testing.T) { + tmp := t.TempDir() + + varRunArgo = tmp + includeScriptOutput = true + + err := os.WriteFile(varRunArgo+"/template", []byte(`{}`), 0o600) + assert.NoError(t, err) + + t.Run("Exit0", func(t *testing.T) { + err := run("exit") + assert.NoError(t, err) + data, err := os.ReadFile(varRunArgo + "/ctr/main/exitcode") + assert.NoError(t, err) + assert.Equal(t, "0", string(data)) + }) + + t.Run("Exit1", func(t *testing.T) { + err := run("exit 1") + assert.Equal(t, 1, err.(errors.Exited).ExitCode()) + data, err := os.ReadFile(varRunArgo + "/ctr/main/exitcode") + assert.NoError(t, err) + assert.Equal(t, "1", string(data)) + }) + t.Run("Exit13", func(t *testing.T) { + err := run("exit 13") + assert.Equal(t, 13, err.(errors.Exited).ExitCode()) + assert.EqualError(t, err, "exit status 13") + }) +} + +func run(script string) error { + cmd := NewEmissaryCommand() + containerName = "main" + return cmd.RunE(cmd, append([]string{"powershell", "-c"}, script)) +} diff --git a/workflow/executor/os-specific/signal_windows.go b/workflow/executor/os-specific/signal_windows.go index 76f05fce4888..4c3bed84e7e9 100644 --- a/workflow/executor/os-specific/signal_windows.go +++ b/workflow/executor/os-specific/signal_windows.go @@ -1,9 +1,10 @@ package os_specific import ( - "fmt" "os" "syscall" + + "github.com/argoproj/argo-workflows/v3/util/errors" ) func CanIgnoreSignal(s os.Signal) bool { @@ -28,14 +29,7 @@ func Setpgid(a *syscall.SysProcAttr) { func Wait(process *os.Process) error { stat, err := process.Wait() if stat.ExitCode() != 0 { - var errStr string - if err != nil { - errStr = err.Error() - } else { - errStr = "" - } - - return fmt.Errorf("exit with non-zero code. exit-code: %d, error:%s", stat.ExitCode(), errStr) + return errors.NewExitErr(stat.ExitCode()) } return err }