@@ -383,7 +383,7 @@ mod tests {
383383 }
384384
385385 #[ tokio:: test]
386- async fn multiple_parallel ( ) {
386+ async fn multiple_listeners_parallel ( ) {
387387 let System {
388388 mut connectors,
389389 listeners,
@@ -438,6 +438,66 @@ mod tests {
438438 }
439439 }
440440
441+ #[ tokio:: test]
442+ async fn multiple_connectors_parallel ( ) {
443+ let System {
444+ connectors,
445+ mut listeners,
446+ keys,
447+ } = System :: setup ( 5 ) . await ;
448+
449+ let connectors = connectors
450+ . into_iter ( )
451+ . map ( |connector| {
452+ PlexConnector :: new (
453+ connector,
454+ PlexConnectorSettings {
455+ connections_per_remote : 5 ,
456+ ..Default :: default ( )
457+ } ,
458+ )
459+ } )
460+ . take ( 4 )
461+ . collect :: < Vec < _ > > ( ) ;
462+
463+ let mut listener = PlexListener :: new ( listeners. remove ( 4 ) , Default :: default ( ) ) ;
464+
465+ tokio:: spawn ( async move {
466+ loop {
467+ let ( _, mut plex) = listener. accept ( ) . await ;
468+
469+ tokio:: spawn ( async move {
470+ let value = plex. receive :: < u32 > ( ) . await . unwrap ( ) ;
471+ plex. send ( & ( value + 1 ) ) . await . unwrap ( ) ;
472+ } ) ;
473+ }
474+ } ) ;
475+
476+ let mut handles = Vec :: new ( ) ;
477+
478+ for connector in connectors {
479+ let connector = Arc :: new ( connector) ;
480+
481+ let connector_handles = ( 0 ..200 ) . map ( |value| {
482+ let connector = connector. clone ( ) ;
483+ let remote = keys[ 4 ] ;
484+
485+ tokio:: spawn ( async move {
486+ let mut plex = connector. connect ( remote) . await . unwrap ( ) ;
487+ time:: sleep ( Duration :: from_millis ( 500 ) ) . await ;
488+ plex. send ( & value) . await . unwrap ( ) ;
489+ assert_eq ! ( plex. receive:: <u32 >( ) . await . unwrap( ) , value + 1 ) ;
490+ } )
491+ } ) ;
492+
493+ handles. extend ( connector_handles) ;
494+ }
495+
496+ for handle in handles {
497+ handle. await . unwrap ( ) ;
498+ }
499+ }
500+
441501 #[ tokio:: test]
442502 async fn receive_drop ( ) {
443503 let System {
0 commit comments