@@ -76,6 +76,35 @@ 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
+ expect ( onConnectCallback ) . toHaveBeenCalled ( ) ;
96
+ expect ( ws . waitingForPong ) . toBe ( false ) ;
97
+ await new Promise ( resolve => setTimeout ( resolve , 10 ) ) ;
98
+ expect ( ws . ping ) . toHaveBeenCalled ( ) ;
99
+ expect ( ws . waitingForPong ) . toBe ( true ) ;
100
+ ws . emit ( 'pong' ) ;
101
+ expect ( ws . waitingForPong ) . toBe ( false ) ;
102
+ await new Promise ( resolve => setTimeout ( resolve , 10 ) ) ;
103
+ expect ( ws . waitingForPong ) . toBe ( true ) ;
104
+ expect ( ws . terminate ) . not . toHaveBeenCalled ( ) ;
105
+ server . close ( ) ;
106
+ } ) ;
107
+
79
108
it ( 'closes interrupted connection' , async ( ) => {
80
109
const onConnectCallback = jasmine . createSpy ( 'onConnectCallback' ) ;
81
110
const http = require ( 'http' ) ;
@@ -93,8 +122,10 @@ describe('ParseWebSocketServer', function () {
93
122
94
123
// Make sure callback is called
95
124
expect ( onConnectCallback ) . toHaveBeenCalled ( ) ;
125
+ expect ( ws . waitingForPong ) . toBe ( false ) ;
96
126
await new Promise ( resolve => setTimeout ( resolve , 10 ) ) ;
97
127
expect ( ws . ping ) . toHaveBeenCalled ( ) ;
128
+ expect ( ws . waitingForPong ) . toBe ( true ) ;
98
129
await new Promise ( resolve => setTimeout ( resolve , 10 ) ) ;
99
130
expect ( ws . terminate ) . toHaveBeenCalled ( ) ;
100
131
server . close ( ) ;
0 commit comments