@@ -817,15 +817,16 @@ func TestWebSocketClient_BadHandshake(t *testing.T) {
817817// TestWebSocketClient_HeartbeatTimeout tests the heartbeat by forcing a
818818// timeout by setting the ping period greater than the deadline.
819819func TestWebSocketClient_HeartbeatTimeout (t * testing.T ) {
820+ blockRequestCtx , unblockRequest := context .WithCancel (context .Background ())
821+ defer unblockRequest ()
820822 // Create fake WebSocket server which blocks.
821823 websocketServer := httptest .NewServer (http .HandlerFunc (func (w http.ResponseWriter , req * http.Request ) {
822824 conns , err := webSocketServerStreams (req , w , streamOptionsFromRequest (req ))
823825 if err != nil {
824826 t .Fatalf ("error on webSocketServerStreams: %v" , err )
825827 }
826828 defer conns .conn .Close ()
827- // Block server; heartbeat timeout (or test timeout) will fire before this returns.
828- time .Sleep (1 * time .Second )
829+ <- blockRequestCtx .Done ()
829830 }))
830831 defer websocketServer .Close ()
831832 // Create websocket client connecting to fake server.
@@ -840,8 +841,8 @@ func TestWebSocketClient_HeartbeatTimeout(t *testing.T) {
840841 }
841842 streamExec := exec .(* wsStreamExecutor )
842843 // Ping period is greater than the ping deadline, forcing the timeout to fire.
843- pingPeriod := 20 * time . Millisecond
844- pingDeadline := 5 * time .Millisecond
844+ pingPeriod := wait . ForeverTestTimeout // this lets the heartbeat deadline expire without renewing it
845+ pingDeadline := time .Second // this gives setup 1 second to establish streams
845846 streamExec .heartbeatPeriod = pingPeriod
846847 streamExec .heartbeatDeadline = pingDeadline
847848 // Send some random data to the websocket server through STDIN.
@@ -859,8 +860,7 @@ func TestWebSocketClient_HeartbeatTimeout(t *testing.T) {
859860 }()
860861
861862 select {
862- case <- time .After (pingPeriod * 5 ):
863- // Give up after about five ping attempts
863+ case <- time .After (wait .ForeverTestTimeout ):
864864 t .Fatalf ("expected heartbeat timeout, got none." )
865865 case err := <- errorChan :
866866 // Expecting heartbeat timeout error.
0 commit comments