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