@@ -423,4 +423,77 @@ mod tests {
423423
424424 p ! ( j. join( ) ) ;
425425 }
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+ }
426499}
0 commit comments