@@ -76,6 +76,37 @@ describe('ParseWebSocketServer', function () {
7676 expect ( wssError ) . toBe ( 'Invalid Packet' ) ;
7777 } ) ;
7878
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+
79110 it ( 'closes interrupted connection' , async ( ) => {
80111 const onConnectCallback = jasmine . createSpy ( 'onConnectCallback' ) ;
81112 const http = require ( 'http' ) ;
@@ -93,8 +124,10 @@ describe('ParseWebSocketServer', function () {
93124
94125 // Make sure callback is called
95126 expect ( onConnectCallback ) . toHaveBeenCalled ( ) ;
127+ expect ( ws . waitingForPong ) . toBe ( false ) ;
96128 await new Promise ( resolve => setTimeout ( resolve , 10 ) ) ;
97129 expect ( ws . ping ) . toHaveBeenCalled ( ) ;
130+ expect ( ws . waitingForPong ) . toBe ( true ) ;
98131 await new Promise ( resolve => setTimeout ( resolve , 10 ) ) ;
99132 expect ( ws . terminate ) . toHaveBeenCalled ( ) ;
100133 server . close ( ) ;
0 commit comments