@@ -95,39 +95,28 @@ describe('WebSocket', function () {
9595 wss . on ( 'connection' , ( ws ) => ws . send ( 'foobar' ) ) ;
9696 } ) ;
9797
98- it ( '#url exposes the server url' , function ( done ) {
99- server . createServer ( ++ port , ( srv ) => {
100- const url = `ws://localhost:${ port } ` ;
101- const ws = new WebSocket ( url ) ;
102-
103- assert . strictEqual ( ws . url , url ) ;
98+ it ( '#url exposes the server url' , function ( ) {
99+ const url = `ws://localhost:${ port } ` ;
100+ const ws = new WebSocket ( url , { agent : new CustomAgent ( ) } ) ;
104101
105- ws . on ( 'close' , ( ) => srv . close ( done ) ) ;
106- ws . close ( ) ;
107- } ) ;
102+ assert . strictEqual ( ws . url , url ) ;
108103 } ) ;
109104
110- it ( '#protocolVersion exposes the protocol version' , function ( done ) {
111- server . createServer ( ++ port , ( srv ) => {
112- const ws = new WebSocket ( `ws://localhost:${ port } ` ) ;
113-
114- assert . strictEqual ( ws . protocolVersion , 13 ) ;
115-
116- ws . on ( 'close' , ( ) => srv . close ( done ) ) ;
117- ws . close ( ) ;
105+ it ( '#protocolVersion exposes the protocol version' , function ( ) {
106+ const ws = new WebSocket ( `ws://localhost:${ port } ` , {
107+ agent : new CustomAgent ( )
118108 } ) ;
109+
110+ assert . strictEqual ( ws . protocolVersion , 13 ) ;
119111 } ) ;
120112
121113 describe ( '#bufferedAmount' , function ( ) {
122- it ( 'defaults to zero' , function ( done ) {
123- server . createServer ( ++ port , ( srv ) => {
124- const ws = new WebSocket ( `ws://localhost:${ port } ` ) ;
125-
126- assert . strictEqual ( ws . bufferedAmount , 0 ) ;
127-
128- ws . on ( 'close' , ( ) => srv . close ( done ) ) ;
129- ws . close ( ) ;
114+ it ( 'defaults to zero' , function ( ) {
115+ const ws = new WebSocket ( `ws://localhost:${ port } ` , {
116+ agent : new CustomAgent ( )
130117 } ) ;
118+
119+ assert . strictEqual ( ws . bufferedAmount , 0 ) ;
131120 } ) ;
132121
133122 it ( 'defaults to zero upon "open"' , function ( done ) {
@@ -203,15 +192,12 @@ describe('WebSocket', function () {
203192 } ) ;
204193
205194 describe ( '#readyState' , function ( ) {
206- it ( 'defaults to connecting' , function ( done ) {
207- server . createServer ( ++ port , ( srv ) => {
208- const ws = new WebSocket ( `ws://localhost:${ port } ` ) ;
209-
210- assert . strictEqual ( ws . readyState , WebSocket . CONNECTING ) ;
211-
212- ws . on ( 'close' , ( ) => srv . close ( done ) ) ;
213- ws . close ( ) ;
195+ it ( 'defaults to connecting' , function ( ) {
196+ const ws = new WebSocket ( `ws://localhost:${ port } ` , {
197+ agent : new CustomAgent ( )
214198 } ) ;
199+
200+ assert . strictEqual ( ws . readyState , WebSocket . CONNECTING ) ;
215201 } ) ;
216202
217203 it ( 'set to open once connection is established' , function ( done ) {
@@ -236,7 +222,7 @@ describe('WebSocket', function () {
236222 srv . close ( done ) ;
237223 } ) ;
238224
239- ws . close ( 1001 ) ;
225+ ws . on ( 'open' , ( ) => ws . close ( 1001 ) ) ;
240226 } ) ;
241227 } ) ;
242228
@@ -249,7 +235,7 @@ describe('WebSocket', function () {
249235 srv . close ( done ) ;
250236 } ) ;
251237
252- ws . terminate ( ) ;
238+ ws . on ( 'open' , ( ) => ws . terminate ( ) ) ;
253239 } ) ;
254240 } ) ;
255241 } ) ;
@@ -308,26 +294,68 @@ describe('WebSocket', function () {
308294 } ) ;
309295
310296 describe ( 'connection establishing' , function ( ) {
311- it ( 'can disconnect before connection is established' , function ( done ) {
312- server . createServer ( ++ port , ( srv ) => {
297+ it ( 'can terminate before connection is established (1/2) ' , function ( done ) {
298+ const wss = new WebSocketServer ( { port : ++ port } , ( ) => {
313299 const ws = new WebSocket ( `ws://localhost:${ port } ` ) ;
314300
315301 ws . on ( 'open' , ( ) => assert . fail ( null , null , 'connect shouldnt be raised here' ) ) ;
316- ws . on ( 'close' , ( ) => srv . close ( done ) ) ;
302+ ws . on ( 'error' , ( err ) => {
303+ assert . ok ( err instanceof Error ) ;
304+ assert . strictEqual ( err . message , 'closed while connecting' ) ;
305+ ws . on ( 'close' , ( ) => wss . close ( done ) ) ;
306+ } ) ;
317307 ws . terminate ( ) ;
318308 } ) ;
319309 } ) ;
320310
321- it ( 'can close before connection is established' , function ( done ) {
322- server . createServer ( ++ port , ( srv ) => {
311+ it ( 'can terminate before connection is established (2/2)' , function ( done ) {
312+ const wss = new WebSocketServer ( {
313+ verifyClient : ( info , cb ) => setTimeout ( cb , 300 , true ) ,
314+ port : ++ port
315+ } , ( ) => {
323316 const ws = new WebSocket ( `ws://localhost:${ port } ` ) ;
324317
325318 ws . on ( 'open' , ( ) => assert . fail ( null , null , 'connect shouldnt be raised here' ) ) ;
326- ws . on ( 'close' , ( ) => srv . close ( done ) ) ;
319+ ws . on ( 'error' , ( err ) => {
320+ assert . ok ( err instanceof Error ) ;
321+ assert . strictEqual ( err . message , 'closed while connecting' ) ;
322+ ws . on ( 'close' , ( ) => wss . close ( done ) ) ;
323+ } ) ;
324+ setTimeout ( ( ) => ws . terminate ( ) , 150 ) ;
325+ } ) ;
326+ } ) ;
327+
328+ it ( 'can close before connection is established (1/2)' , function ( done ) {
329+ const wss = new WebSocketServer ( { port : ++ port } , ( ) => {
330+ const ws = new WebSocket ( `ws://localhost:${ port } ` ) ;
331+
332+ ws . on ( 'open' , ( ) => assert . fail ( null , null , 'connect shouldnt be raised here' ) ) ;
333+ ws . on ( 'error' , ( err ) => {
334+ assert . ok ( err instanceof Error ) ;
335+ assert . strictEqual ( err . message , 'closed while connecting' ) ;
336+ ws . on ( 'close' , ( ) => wss . close ( done ) ) ;
337+ } ) ;
327338 ws . close ( 1001 ) ;
328339 } ) ;
329340 } ) ;
330341
342+ it ( 'can close before connection is established (2/2)' , function ( done ) {
343+ const wss = new WebSocketServer ( {
344+ verifyClient : ( info , cb ) => setTimeout ( cb , 300 , true ) ,
345+ port : ++ port
346+ } , ( ) => {
347+ const ws = new WebSocket ( `ws://localhost:${ port } ` ) ;
348+
349+ ws . on ( 'open' , ( ) => assert . fail ( null , null , 'connect shouldnt be raised here' ) ) ;
350+ ws . on ( 'error' , ( err ) => {
351+ assert . ok ( err instanceof Error ) ;
352+ assert . strictEqual ( err . message , 'closed while connecting' ) ;
353+ ws . on ( 'close' , ( ) => wss . close ( done ) ) ;
354+ } ) ;
355+ setTimeout ( ( ) => ws . close ( 1001 ) , 150 ) ;
356+ } ) ;
357+ } ) ;
358+
331359 it ( 'can handle error before request is upgraded' , function ( done ) {
332360 // Here, we don't create a server, to guarantee that the connection will
333361 // fail before the request is upgraded
@@ -791,15 +819,17 @@ describe('WebSocket', function () {
791819 } ) ;
792820
793821 it ( 'before connect should pass error through callback, if present' , function ( done ) {
794- server . createServer ( ++ port , ( srv ) => {
822+ const wss = new WebSocketServer ( { port : ++ port } , ( ) => {
795823 const ws = new WebSocket ( `ws://localhost:${ port } ` ) ;
796824
797- ws . send ( 'hi' , ( error ) => {
798- assert . ok ( error instanceof Error ) ;
799- srv . close ( done ) ;
800- ws . terminate ( ) ;
825+ ws . send ( 'hi' , ( err ) => {
826+ assert . ok ( err instanceof Error ) ;
827+ assert . strictEqual ( err . message , 'not opened' ) ;
828+ ws . on ( 'close' , ( ) => wss . close ( done ) ) ;
801829 } ) ;
802830 } ) ;
831+
832+ wss . on ( 'connection' , ( ws ) => ws . close ( ) ) ;
803833 } ) ;
804834
805835 it ( 'without data should be successful' , function ( done ) {
0 commit comments