good morning!!!!

Skip to content
Snippets Groups Projects
Commit 7bf7bd2f authored by Javier Peletier's avatar Javier Peletier Committed by Viktor Trón
Browse files

internal/cmdtest: Expose process exit status and errors (#18046)

parent d31f1f4f
No related branches found
No related tags found
No related merge requests found
...@@ -27,6 +27,7 @@ import ( ...@@ -27,6 +27,7 @@ import (
"regexp" "regexp"
"strings" "strings"
"sync" "sync"
"syscall"
"testing" "testing"
"text/template" "text/template"
"time" "time"
...@@ -50,6 +51,8 @@ type TestCmd struct { ...@@ -50,6 +51,8 @@ type TestCmd struct {
stdout *bufio.Reader stdout *bufio.Reader
stdin io.WriteCloser stdin io.WriteCloser
stderr *testlogger stderr *testlogger
// Err will contain the process exit error or interrupt signal error
Err error
} }
// Run exec's the current binary using name as argv[0] which will trigger the // Run exec's the current binary using name as argv[0] which will trigger the
...@@ -182,11 +185,25 @@ func (tt *TestCmd) ExpectExit() { ...@@ -182,11 +185,25 @@ func (tt *TestCmd) ExpectExit() {
} }
func (tt *TestCmd) WaitExit() { func (tt *TestCmd) WaitExit() {
tt.cmd.Wait() tt.Err = tt.cmd.Wait()
} }
func (tt *TestCmd) Interrupt() { func (tt *TestCmd) Interrupt() {
tt.cmd.Process.Signal(os.Interrupt) tt.Err = tt.cmd.Process.Signal(os.Interrupt)
}
// ExitStatus exposes the process' OS exit code
// It will only return a valid value after the process has finished.
func (tt *TestCmd) ExitStatus() int {
if tt.Err != nil {
exitErr := tt.Err.(*exec.ExitError)
if exitErr != nil {
if status, ok := exitErr.Sys().(syscall.WaitStatus); ok {
return status.ExitStatus()
}
}
}
return 0
} }
// StderrText returns any stderr output written so far. // StderrText returns any stderr output written so far.
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment