Skip to content

Commit 1db07d8

Browse files
committed
Make TestSignals a bit more bulletproof
1 parent be3a169 commit 1db07d8

File tree

1 file changed

+33
-9
lines changed

1 file changed

+33
-9
lines changed

session_test.go

+33-9
Original file line numberDiff line numberDiff line change
@@ -289,22 +289,40 @@ func TestPtyResize(t *testing.T) {
289289
func TestSignals(t *testing.T) {
290290
t.Parallel()
291291

292+
// errChan lets us get errors back from the session
293+
errChan := make(chan error, 5)
294+
295+
// doneChan lets us specify that we should exit.
296+
doneChan := make(chan interface{})
297+
292298
session, _, cleanup := newTestSession(t, &Server{
293299
Handler: func(s Session) {
294300
// We need to use a buffered channel here, otherwise it's possible for the
295301
// second call to Signal to get discarded.
296302
signals := make(chan Signal, 2)
297303
s.Signals(signals)
298-
if sig := <-signals; sig != SIGINT {
299-
t.Fatalf("expected signal %v but got %v", SIGINT, sig)
304+
305+
select {
306+
case sig := <-signals:
307+
if sig != SIGINT {
308+
errChan <- fmt.Errorf("expected signal %v but got %v", SIGINT, sig)
309+
return
310+
}
311+
case <-doneChan:
312+
errChan <- fmt.Errorf("Unexpected done")
313+
return
300314
}
301-
exiter := make(chan bool)
302-
go func() {
303-
if sig := <-signals; sig == SIGKILL {
304-
close(exiter)
315+
316+
select {
317+
case sig := <-signals:
318+
if sig != SIGKILL {
319+
errChan <- fmt.Errorf("expected signal %v but got %v", SIGKILL, sig)
320+
return
305321
}
306-
}()
307-
<-exiter
322+
case <-doneChan:
323+
errChan <- fmt.Errorf("Unexpected done")
324+
return
325+
}
308326
},
309327
}, nil)
310328
defer cleanup()
@@ -314,7 +332,13 @@ func TestSignals(t *testing.T) {
314332
session.Signal(gossh.SIGKILL)
315333
}()
316334

317-
err := session.Run("")
335+
go func() {
336+
errChan <- session.Run("")
337+
}()
338+
339+
err := <-errChan
340+
close(doneChan)
341+
318342
if err != nil {
319343
t.Fatalf("expected nil but got %v", err)
320344
}

0 commit comments

Comments
 (0)