From f59c4566891e53a6f35c2b22968895259a851b45 Mon Sep 17 00:00:00 2001 From: Parthvi Vala Date: Mon, 3 Apr 2023 23:09:51 +0530 Subject: [PATCH] Exit a test early if a session has exited Signed-off-by: Parthvi Vala --- tests/helper/helper_dev.go | 9 ++++++++- tests/helper/helper_run.go | 14 ++++++++++++-- 2 files changed, 20 insertions(+), 3 deletions(-) diff --git a/tests/helper/helper_dev.go b/tests/helper/helper_dev.go index 51d99f9ba28..3c11b402d00 100644 --- a/tests/helper/helper_dev.go +++ b/tests/helper/helper_dev.go @@ -176,6 +176,9 @@ func (o DevSession) Kill() { // Stop a Dev session cleanly (equivalent as hitting Ctrl-c) func (o *DevSession) Stop() { + if o.session == nil { + return + } if o.console != nil { err := o.console.Close() gomega.Expect(err).NotTo(gomega.HaveOccurred()) @@ -183,13 +186,14 @@ func (o *DevSession) Stop() { if o.stopped { return } + err := terminateProc(o.session) gomega.Expect(err).NotTo(gomega.HaveOccurred()) o.stopped = true } func (o *DevSession) PressKey(p byte) { - if o.console == nil { + if o.console == nil || o.session == nil { return } _, err := o.console.Write([]byte{p}) @@ -197,6 +201,9 @@ func (o *DevSession) PressKey(p byte) { } func (o DevSession) WaitEnd() { + if o.session == nil { + return + } o.session.Wait(3 * time.Minute) } diff --git a/tests/helper/helper_run.go b/tests/helper/helper_run.go index b5fb2dcc81b..e9b1533fd69 100644 --- a/tests/helper/helper_run.go +++ b/tests/helper/helper_run.go @@ -42,10 +42,13 @@ func CmdRunner(program string, args ...string) *gexec.Session { return session } -// WaitForOutputToContain waits for the session stdout output to contain a particular substring +// WaitForOutputToContain waits for the session stdout output to contain a particular substring; +// if the session exits, it checks for the substring and returns early func WaitForOutputToContain(substring string, timeoutInSeconds int, intervalInSeconds int, session *gexec.Session) { - Eventually(func() string { + if session.ExitCode() != -1 { + Expect(string(session.Out.Contents())).To(ContainSubstring(substring), "session exited, but substring not found") + } contents := string(session.Out.Contents()) return contents }, timeoutInSeconds, intervalInSeconds).Should(ContainSubstring(substring)) @@ -59,15 +62,22 @@ func WaitForOutputToContainOne(substrings []string, timeoutInSeconds int, interv matchers = append(matchers, ContainSubstring(substring)) } Eventually(func() string { + if session.ExitCode() != -1 { + Expect(string(session.Out.Contents())).To(SatisfyAny(matchers...), "session exited, but substring not found") + } contents := string(session.Out.Contents()) return contents }, timeoutInSeconds, intervalInSeconds).Should(SatisfyAny(matchers...)) } // WaitForErroutToContain waits for the session stdout output to contain a particular substring +// if the session exits, it checks for the substring and returns early func WaitForErroutToContain(substring string, timeoutInSeconds int, intervalInSeconds int, session *gexec.Session) { Eventually(func() string { + if session.ExitCode() != -1 { + Expect(string(session.Err.Contents())).To(ContainSubstring(substring), "session exited, but substring not found") + } contents := string(session.Err.Contents()) return contents }, timeoutInSeconds, intervalInSeconds).Should(ContainSubstring(substring))