@@ -7,10 +7,9 @@ import * as utils from '@/utils';
7
7
import * as testsUtils from './utils' ;
8
8
import * as errors from '@/errors' ;
9
9
import { fc } from '@fast-check/jest' ;
10
- import * as tlsUtils from './tlsUtils' ;
11
10
import * as certFixtures from './fixtures/certFixtures' ;
12
11
import { promise } from "@/utils" ;
13
- import { sleep } from './utils ' ;
12
+ import * as tlsUtils from './tlsUtils ' ;
14
13
15
14
const tlsArb = fc . oneof (
16
15
certFixtures . tlsConfigExampleArb ,
@@ -270,22 +269,81 @@ describe(QUICClient.name, () => {
270
269
} ) ;
271
270
} )
272
271
describe ( 'graceful tls handshake' , ( ) => {
273
- test ( 'handshake succeeds' , async ( ) => {
272
+ test ( 'server verification succeeds' , async ( ) => {
274
273
const server = new QUICServer ( {
275
274
crypto,
276
275
logger : logger . getChild ( QUICServer . name ) ,
277
276
config : {
278
- tlsConfig : certFixtures . tlsConfigFileRSA2 ,
277
+ tlsConfig : certFixtures . tlsConfigFileRSA1 ,
279
278
verifyPeer : false ,
279
+ }
280
+ } ) ;
281
+ const handleConnectionEventProm = promise < any > ( )
282
+ server . addEventListener ( 'connection' , handleConnectionEventProm . resolveP ) ;
283
+ await server . start ( {
284
+ host : '127.0.0.1' as Host ,
285
+ } ) ;
286
+ // Connection should succeed
287
+ const client = await QUICClient . createQUICClient ( {
288
+ host : '::ffff:127.0.0.1' as Host ,
289
+ port : server . port ,
290
+ localHost : '::' as Host ,
291
+ crypto,
292
+ logger : logger . getChild ( QUICClient . name ) ,
293
+ config : {
294
+ verifyPeer : true ,
295
+ verifyFromPemFile : certFixtures . tlsConfigFileRSA1 . certChainFromPemFile ,
296
+ }
297
+ } ) ;
298
+ await handleConnectionEventProm . p
299
+ await client . destroy ( ) ;
300
+ await server . stop ( ) ;
301
+ } )
302
+ test ( 'client verification succeeds' , async ( ) => {
303
+ const server = new QUICServer ( {
304
+ crypto,
305
+ logger : logger . getChild ( QUICServer . name ) ,
306
+ config : {
307
+ tlsConfig : certFixtures . tlsConfigFileRSA1 ,
308
+ verifyPeer : true ,
309
+ verifyFromPemFile : certFixtures . tlsConfigFileRSA2 . certChainFromPemFile ,
310
+ }
311
+ } ) ;
312
+ const handleConnectionEventProm = promise < any > ( )
313
+ server . addEventListener ( 'connection' , handleConnectionEventProm . resolveP ) ;
314
+ await server . start ( {
315
+ host : '127.0.0.1' as Host ,
316
+ } ) ;
317
+ // Connection should succeed
318
+ const client = await QUICClient . createQUICClient ( {
319
+ host : '::ffff:127.0.0.1' as Host ,
320
+ port : server . port ,
321
+ localHost : '::' as Host ,
322
+ crypto,
323
+ logger : logger . getChild ( QUICClient . name ) ,
324
+ config : {
325
+ verifyPeer : false ,
326
+ tlsConfig : certFixtures . tlsConfigFileRSA2 ,
327
+ }
328
+ } ) ;
329
+ await handleConnectionEventProm . p
330
+ await client . destroy ( ) ;
331
+ await server . stop ( ) ;
332
+ } )
333
+ test ( 'client and server verification succeeds' , async ( ) => {
334
+ const server = new QUICServer ( {
335
+ crypto,
336
+ logger : logger . getChild ( QUICServer . name ) ,
337
+ config : {
338
+ tlsConfig : certFixtures . tlsConfigFileRSA1 ,
339
+ verifyPeer : true ,
280
340
verifyFromPemFile : certFixtures . tlsConfigFileRSA2 . certChainFromPemFile ,
281
- logKeys : "tmp/key.log" ,
282
341
}
283
342
} ) ;
284
343
const handleConnectionEventProm = promise < any > ( )
285
344
server . addEventListener ( 'connection' , handleConnectionEventProm . resolveP ) ;
286
345
await server . start ( {
287
346
host : '127.0.0.1' as Host ,
288
- port : 55555 as Port ,
289
347
} ) ;
290
348
// Connection should succeed
291
349
const client = await QUICClient . createQUICClient ( {
@@ -297,17 +355,102 @@ describe(QUICClient.name, () => {
297
355
config : {
298
356
verifyPeer : true ,
299
357
tlsConfig : certFixtures . tlsConfigFileRSA2 ,
300
- verifyFromPemFile : certFixtures . tlsConfigFileRSA2 . certChainFromPemFile
358
+ verifyFromPemFile : certFixtures . tlsConfigFileRSA1 . certChainFromPemFile ,
359
+
301
360
}
302
361
} ) ;
303
- console . log ( 'wait for connection' ) ;
304
362
await handleConnectionEventProm . p
305
363
await client . destroy ( ) ;
306
364
await server . stop ( ) ;
307
365
} )
308
- test . todo ( 'handshake fails validation for server' )
309
- test . todo ( 'handshake fails validation for client' )
310
- test . todo ( 'handshake fails validation for both' )
366
+ test ( 'graceful failure verifying server' , async ( ) => {
367
+ const server = new QUICServer ( {
368
+ crypto,
369
+ logger : logger . getChild ( QUICServer . name ) ,
370
+ config : {
371
+ tlsConfig : certFixtures . tlsConfigFileRSA1 ,
372
+ verifyPeer : false ,
373
+ }
374
+ } ) ;
375
+ const handleConnectionEventProm = promise < any > ( )
376
+ server . addEventListener ( 'connection' , handleConnectionEventProm . resolveP ) ;
377
+ await server . start ( {
378
+ host : '127.0.0.1' as Host ,
379
+ } ) ;
380
+ // Connection should succeed
381
+ await expect ( QUICClient . createQUICClient ( {
382
+ host : '::ffff:127.0.0.1' as Host ,
383
+ port : server . port ,
384
+ localHost : '::' as Host ,
385
+ crypto,
386
+ logger : logger . getChild ( QUICClient . name ) ,
387
+ config : {
388
+ verifyPeer : true ,
389
+ }
390
+ } ) ) . toReject ( ) ;
391
+ await handleConnectionEventProm . p
392
+ await server . stop ( ) ;
393
+ } )
394
+ test ( 'graceful failure verifying client' , async ( ) => {
395
+ const server = new QUICServer ( {
396
+ crypto,
397
+ logger : logger . getChild ( QUICServer . name ) ,
398
+ config : {
399
+ tlsConfig : certFixtures . tlsConfigFileRSA1 ,
400
+ verifyPeer : true ,
401
+ }
402
+ } ) ;
403
+ const handleConnectionEventProm = promise < any > ( )
404
+ server . addEventListener ( 'connection' , handleConnectionEventProm . resolveP ) ;
405
+ await server . start ( {
406
+ host : '127.0.0.1' as Host ,
407
+ } ) ;
408
+ // Connection should succeed
409
+ await expect ( QUICClient . createQUICClient ( {
410
+ host : '::ffff:127.0.0.1' as Host ,
411
+ port : server . port ,
412
+ localHost : '::' as Host ,
413
+ crypto,
414
+ logger : logger . getChild ( QUICClient . name ) ,
415
+ config : {
416
+ verifyPeer : false ,
417
+ tlsConfig : certFixtures . tlsConfigFileRSA2 ,
418
+ }
419
+ } ) ) . toReject ( ) ;
420
+ await handleConnectionEventProm . p
421
+ await server . stop ( ) ;
422
+ } )
423
+ test ( 'graceful failure verifying client amd server' , async ( ) => {
424
+ const server = new QUICServer ( {
425
+ crypto,
426
+ logger : logger . getChild ( QUICServer . name ) ,
427
+ config : {
428
+ tlsConfig : certFixtures . tlsConfigFileRSA1 ,
429
+ verifyPeer : true ,
430
+ verifyFromPemFile : certFixtures . tlsConfigFileRSA2 . certChainFromPemFile ,
431
+ }
432
+ } ) ;
433
+ const handleConnectionEventProm = promise < any > ( )
434
+ server . addEventListener ( 'connection' , handleConnectionEventProm . resolveP ) ;
435
+ await server . start ( {
436
+ host : '127.0.0.1' as Host ,
437
+ } ) ;
438
+ // Connection should succeed
439
+ await expect ( QUICClient . createQUICClient ( {
440
+ host : '::ffff:127.0.0.1' as Host ,
441
+ port : server . port ,
442
+ localHost : '::' as Host ,
443
+ crypto,
444
+ logger : logger . getChild ( QUICClient . name ) ,
445
+ config : {
446
+ verifyPeer : true ,
447
+ tlsConfig : certFixtures . tlsConfigFileRSA2 ,
448
+ verifyFromPemFile : certFixtures . tlsConfigFileRSA1 . certChainFromPemFile ,
449
+ }
450
+ } ) ) . toReject ( ) ;
451
+ await handleConnectionEventProm . p
452
+ await server . stop ( ) ;
453
+ } )
311
454
} )
312
455
313
456
// test('dual stack to dual stack', async () => {
0 commit comments