internal/cmdtest: Expose process exit status and errors (#18046)
This commit is contained in:
		
				
					committed by
					
						
						Viktor Trón
					
				
			
			
				
	
			
			
			
						parent
						
							d31f1f4fdb
						
					
				
				
					commit
					7bf7bd2f50
				
			@@ -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 {
 | 
				
			|||||||
	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() {
 | 
				
			|||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
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.
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user