@@ -423,4 +423,77 @@ mod tests {
423
423
424
424
p ! ( j. join( ) ) ;
425
425
}
426
+ #[ test]
427
+ fn two_servers ( ) {
428
+ let key = include_bytes ! ( "../test/key.pem" ) ;
429
+ let cert = include_bytes ! ( "../test/cert.pem" ) ;
430
+ let identity = p ! ( Identity :: from_pkcs8( cert, key) ) ;
431
+ let builder = TlsAcceptor :: builder ( identity) ;
432
+ let builder = p ! ( builder. build( ) ) ;
433
+
434
+ let listener = p ! ( TcpListener :: bind( "0.0.0.0:0" ) ) ;
435
+ let port = p ! ( listener. local_addr( ) ) . port ( ) ;
436
+
437
+ let j = thread:: spawn ( move || {
438
+ let socket = p ! ( listener. accept( ) ) . 0 ;
439
+ let mut socket = p ! ( builder. accept( socket) ) ;
440
+
441
+ let mut buf = [ 0 ; 5 ] ;
442
+ p ! ( socket. read_exact( & mut buf) ) ;
443
+ assert_eq ! ( & buf, b"hello" ) ;
444
+
445
+ p ! ( socket. write_all( b"world" ) ) ;
446
+ } ) ;
447
+
448
+ let key = include_bytes ! ( "../test/key2.pem" ) ;
449
+ let cert = include_bytes ! ( "../test/cert2.pem" ) ;
450
+ let identity = p ! ( Identity :: from_pkcs8( cert, key) ) ;
451
+ let builder = TlsAcceptor :: builder ( identity) ;
452
+ let builder = p ! ( builder. build( ) ) ;
453
+
454
+ let listener = p ! ( TcpListener :: bind( "0.0.0.0:0" ) ) ;
455
+ let port2 = p ! ( listener. local_addr( ) ) . port ( ) ;
456
+
457
+ let j2 = thread:: spawn ( move || {
458
+ let socket = p ! ( listener. accept( ) ) . 0 ;
459
+ let mut socket = p ! ( builder. accept( socket) ) ;
460
+
461
+ let mut buf = [ 0 ; 5 ] ;
462
+ p ! ( socket. read_exact( & mut buf) ) ;
463
+ assert_eq ! ( & buf, b"hello" ) ;
464
+
465
+ p ! ( socket. write_all( b"world" ) ) ;
466
+ } ) ;
467
+
468
+ let root_ca = include_bytes ! ( "../test/root-ca.pem" ) ;
469
+ let root_ca = p ! ( Certificate :: from_pem( root_ca) ) ;
470
+
471
+ let socket = p ! ( TcpStream :: connect( ( "localhost" , port) ) ) ;
472
+ let mut builder = TlsConnector :: builder ( ) ;
473
+ builder. add_root_certificate ( root_ca) ;
474
+ let builder = p ! ( builder. build( ) ) ;
475
+ let mut socket = p ! ( builder. connect( "foobar.com" , socket) ) ;
476
+
477
+ p ! ( socket. write_all( b"hello" ) ) ;
478
+ let mut buf = vec ! [ ] ;
479
+ p ! ( socket. read_to_end( & mut buf) ) ;
480
+ assert_eq ! ( buf, b"world" ) ;
481
+
482
+ let root_ca = include_bytes ! ( "../test/cert2.pem" ) ;
483
+ let root_ca = p ! ( Certificate :: from_pem( root_ca) ) ;
484
+
485
+ let socket = p ! ( TcpStream :: connect( ( "localhost" , port2) ) ) ;
486
+ let mut builder = TlsConnector :: builder ( ) ;
487
+ builder. add_root_certificate ( root_ca) ;
488
+ let builder = p ! ( builder. build( ) ) ;
489
+ let mut socket = p ! ( builder. connect( "foobar.com" , socket) ) ;
490
+
491
+ p ! ( socket. write_all( b"hello" ) ) ;
492
+ let mut buf = vec ! [ ] ;
493
+ p ! ( socket. read_to_end( & mut buf) ) ;
494
+ assert_eq ! ( buf, b"world" ) ;
495
+
496
+ p ! ( j. join( ) ) ;
497
+ p ! ( j2. join( ) ) ;
498
+ }
426
499
}
0 commit comments