Skip to content

Commit

Permalink
test/e2e: improve command timeout handling
Browse files Browse the repository at this point in the history
Basically commit ada4e1a for e2e tests. The timeout does not kill the
process so if it is stucked it hangs forever. So make sure we kill it
via SIGABRT.

Signed-off-by: Paul Holzinger <[email protected]>
  • Loading branch information
Luap99 committed Aug 8, 2024
1 parent 18e0272 commit be22128
Showing 1 changed file with 10 additions and 3 deletions.
13 changes: 10 additions & 3 deletions test/utils/utils.go
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@ import (
"os/exec"
"runtime"
"strings"
"syscall"
"time"

crypto_rand "crypto/rand"
Expand Down Expand Up @@ -368,9 +369,15 @@ func (s *PodmanSession) WaitWithDefaultTimeout() {
// WaitWithTimeout waits for process finished with DefaultWaitTimeout
func (s *PodmanSession) WaitWithTimeout(timeout int) {
Eventually(s, timeout).Should(Exit(), func() string {
// in case of timeouts show output
return fmt.Sprintf("command timed out after %ds: %v\nSTDOUT: %s\nSTDERR: %s",
timeout, s.Command.Args, string(s.Out.Contents()), string(s.Err.Contents()))
// Note eventually does not kill the command as such the command is leaked forever without killing it
// Also let's use SIGABRT to create a go stack trace so in case there is a deadlock we see it.
s.Signal(syscall.SIGABRT)
// Give some time to let the command print the output so it is not printed much later
// in the log at the wrong place.
time.Sleep(1 * time.Second)
// As the output is logged by default there no need to dump it here.
return fmt.Sprintf("command timed out after %ds: %v",
timeout, s.Command.Args)
})
os.Stdout.Sync()
os.Stderr.Sync()
Expand Down

0 comments on commit be22128

Please sign in to comment.