func waitOrFail(t *testing.T, child *gexpect.ExpectSubprocess, expectedStatus int) { err := child.Wait() status := getExitStatus(err) if status != expectedStatus { t.Fatalf("rkt terminated with unexpected status %d, expected %d\nOutput:\n%s", status, expectedStatus, child.Collect()) } }
func checkExitStatus(child *gexpect.ExpectSubprocess) error { err := child.Wait() status, _ := common.GetExitStatus(err) if status != 0 { return fmt.Errorf("rkt terminated with unexpected status %d, expected %d\nOutput:\n%s", status, 0, child.Collect()) } return nil }
// waitOrFail waits for the child to exit, draining all its output. // If a non-negative return value is provided, child exit status must match. func waitOrFail(t *testing.T, child *gexpect.ExpectSubprocess, expectedStatus int) { bufOut := []string{} // TODO(lucab): gexpect should accept those channels from the caller ttyIn, ttyOut := child.AsyncInteractChannels() close(ttyIn) // drain output till gexpect closes the channel (on EOF or error) for line := range ttyOut { bufOut = append(bufOut, line) } err := child.Wait() status, _ := common.GetExitStatus(err) if expectedStatus >= 0 && status != expectedStatus { t.Fatalf("rkt terminated with unexpected status %d, expected %d\nOutput:\n%s", status, expectedStatus, bufOut) } }
func waitOrFail(t *testing.T, child *gexpect.ExpectSubprocess, shouldSucceed bool) { err := child.Wait() switch { case !shouldSucceed && err == nil: t.Fatalf("Expected test to fail but it didn't\nOutput:\n%s", child.Collect()) case shouldSucceed && err != nil: t.Fatalf("rkt didn't terminate correctly: %v\nOutput:\n%s", err, child.Collect()) case err != nil && err.Error() != "exit status 1": t.Fatalf("rkt terminated with unexpected error: %v\nOutput:\n%s", err, child.Collect()) } }
func expectCommon(p *gexpect.ExpectSubprocess, searchString string, timeout time.Duration) error { var err error p.Capture() if timeout == 0 { err = p.Expect(searchString) } else { err = p.ExpectTimeout(searchString, timeout) } if err != nil { return fmt.Errorf(string(p.Collect())) } return nil }
func expectRegexTimeoutWithOutput(p *gexpect.ExpectSubprocess, searchPattern string, timeout time.Duration) ([]string, string, error) { return p.ExpectTimeoutRegexFindWithOutput(searchPattern, timeout) }
func expectRegexWithOutput(p *gexpect.ExpectSubprocess, searchPattern string) ([]string, string, error) { return p.ExpectRegexFindWithOutput(searchPattern) }
func (a *GoroutineAssistant) WaitOrFail(child *gexpect.ExpectSubprocess) { err := child.Wait() if err != nil { a.Fatalf("rkt didn't terminate correctly: %v", err) } }