Skip to content

Commit 3b7e4de

Browse files
Capture stderr when handler closes unexpectedly (#8)
Returning stderr helps the user debug why the closure may have happened. Co-authored-by: stringintech <stringintech@gmail.com>
1 parent 397fa2d commit 3b7e4de

File tree

1 file changed

+10
-0
lines changed

1 file changed

+10
-0
lines changed

runner/runner.go

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -84,6 +84,16 @@ func (tr *TestRunner) SendRequest(req Request) (*Response, error) {
8484
if err := tr.stdout.Err(); err != nil {
8585
return nil, fmt.Errorf("failed to read response: %w", err)
8686
}
87+
// Handler closed stdout prematurely.
88+
// Kill the process immediately to force stderr to close.
89+
// Without this, there's a rare scenario where stdout closes but stderr remains open,
90+
// causing io.ReadAll(tr.stderr) below to block indefinitely waiting for stderr EOF.
91+
if tr.cmd.Process != nil {
92+
tr.cmd.Process.Kill()
93+
}
94+
if stderrOut, err := io.ReadAll(tr.stderr); err == nil && len(stderrOut) > 0 {
95+
return nil, fmt.Errorf("handler closed unexpectedly: %s", bytes.TrimSpace(stderrOut))
96+
}
8797
return nil, fmt.Errorf("handler closed unexpectedly")
8898
}
8999
respLine := tr.stdout.Text()

0 commit comments

Comments
 (0)