@@ -76,6 +76,37 @@ describe('ParseWebSocketServer', function () {
76
76
expect ( wssError ) . toBe ( 'Invalid Packet' ) ;
77
77
} ) ;
78
78
79
+ it ( 'can handle ping/pong' , async ( ) => {
80
+ const onConnectCallback = jasmine . createSpy ( 'onConnectCallback' ) ;
81
+ const http = require ( 'http' ) ;
82
+ const server = http . createServer ( ) ;
83
+ const parseWebSocketServer = new ParseWebSocketServer ( server , onConnectCallback , {
84
+ websocketTimeout : 10 ,
85
+ } ) . server ;
86
+
87
+ const ws = new EventEmitter ( ) ;
88
+ ws . readyState = 0 ;
89
+ ws . OPEN = 0 ;
90
+ ws . ping = jasmine . createSpy ( 'ping' ) ;
91
+ ws . terminate = jasmine . createSpy ( 'terminate' ) ;
92
+
93
+ parseWebSocketServer . onConnection ( ws ) ;
94
+
95
+ // Make sure callback is called
96
+ expect ( onConnectCallback ) . toHaveBeenCalled ( ) ;
97
+ // Check that `waitingForPong` toggles
98
+ expect ( ws . waitingForPong ) . toBe ( false ) ;
99
+ await new Promise ( resolve => setTimeout ( resolve , 10 ) ) ;
100
+ expect ( ws . ping ) . toHaveBeenCalled ( ) ;
101
+ expect ( ws . waitingForPong ) . toBe ( true ) ;
102
+ ws . emit ( 'pong' ) ;
103
+ expect ( ws . waitingForPong ) . toBe ( false ) ;
104
+ await new Promise ( resolve => setTimeout ( resolve , 10 ) ) ;
105
+ expect ( ws . waitingForPong ) . toBe ( true ) ;
106
+ expect ( ws . terminate ) . not . toHaveBeenCalled ( ) ;
107
+ server . close ( ) ;
108
+ } ) ;
109
+
79
110
it ( 'closes interrupted connection' , async ( ) => {
80
111
const onConnectCallback = jasmine . createSpy ( 'onConnectCallback' ) ;
81
112
const http = require ( 'http' ) ;
@@ -93,8 +124,10 @@ describe('ParseWebSocketServer', function () {
93
124
94
125
// Make sure callback is called
95
126
expect ( onConnectCallback ) . toHaveBeenCalled ( ) ;
127
+ expect ( ws . waitingForPong ) . toBe ( false ) ;
96
128
await new Promise ( resolve => setTimeout ( resolve , 10 ) ) ;
97
129
expect ( ws . ping ) . toHaveBeenCalled ( ) ;
130
+ expect ( ws . waitingForPong ) . toBe ( true ) ;
98
131
await new Promise ( resolve => setTimeout ( resolve , 10 ) ) ;
99
132
expect ( ws . terminate ) . toHaveBeenCalled ( ) ;
100
133
server . close ( ) ;
0 commit comments