@@ -289,22 +289,40 @@ func TestPtyResize(t *testing.T) {
289289func 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