@@ -145,21 +145,20 @@ impl ListenersManager {
145145
146146        let  listener_info = ListenerInfo :: new ( join_handle,  listener_conf,  version) ; 
147147
148-         self . listener_handles . entry ( listener_name. clone ( ) ) . or_insert_with ( Vec :: new ) . push ( listener_info ) ; 
149- 
150-         info ! ( "Listener {} now has {} active version(s)" ,  listener_name,  self . listener_handles . get ( & listener_name ) . unwrap ( ) . len( ) ) ; 
148+         let  versions =  self . listener_handles . entry ( listener_name. clone ( ) ) . or_default ( ) ; 
149+         versions . push ( listener_info ) ; 
150+         info ! ( "Listener {} now has {} active version(s)" ,  listener_name,  versions . len( ) ) ; 
151151
152152        Ok ( ( ) ) 
153153    } 
154154
155155    pub  fn  stop_listener ( & mut  self ,  listener_name :  & str )  -> Result < ( ) >  { 
156-         if  let  Some ( listeners)  = self . listener_handles . get_mut ( listener_name)  { 
156+         if  let  Some ( listeners)  = self . listener_handles . remove ( listener_name)  { 
157157            info ! ( "Stopping all {} version(s) of listener {}" ,  listeners. len( ) ,  listener_name) ; 
158-             for  listener_info in  listeners. drain ( .. )  { 
158+             for  listener_info in  listeners { 
159159                info ! ( "Stopping listener {} version {}" ,  listener_name,  listener_info. version) ; 
160160                listener_info. handle . abort ( ) ; 
161161            } 
162-             self . listener_handles . remove ( listener_name) ; 
163162        }  else  { 
164163            info ! ( "No listeners found with name {}" ,  listener_name) ; 
165164        } 
@@ -179,6 +178,19 @@ mod tests {
179178    use  orion_configuration:: config:: Listener  as  ListenerConfig ; 
180179    use  tracing_test:: traced_test; 
181180
181+     fn  create_test_listener_config ( name :  & str ,  port :  u16 )  -> ListenerConfig  { 
182+         ListenerConfig  { 
183+             name :  name. into ( ) , 
184+             address :  SocketAddr :: new ( IpAddr :: V4 ( Ipv4Addr :: LOCALHOST ) ,  port) , 
185+             filter_chains :  HashMap :: default ( ) , 
186+             bind_device :  None , 
187+             with_tls_inspector :  false , 
188+             proxy_protocol_config :  None , 
189+             with_tlv_listener_filter :  false , 
190+             tlv_listener_filter_config :  None , 
191+         } 
192+     } 
193+ 
182194    #[ traced_test]  
183195    #[ tokio:: test]  
184196    async  fn  start_listener_dup ( )  { 
@@ -277,50 +289,23 @@ mod tests {
277289        let  ( routeb_tx1,  routeb_rx)  = broadcast:: channel ( chan) ; 
278290        let  ( _secb_tx1,  secb_rx)  = broadcast:: channel ( chan) ; 
279291        let  l1 = Listener :: test_listener ( name,  routeb_rx,  secb_rx) ; 
280-         let  l1_info = ListenerConfig  { 
281-             name :  name. into ( ) , 
282-             address :  SocketAddr :: new ( IpAddr :: V4 ( Ipv4Addr :: LOCALHOST ) ,  1234 ) , 
283-             filter_chains :  HashMap :: default ( ) , 
284-             bind_device :  None , 
285-             with_tls_inspector :  false , 
286-             proxy_protocol_config :  None , 
287-             with_tlv_listener_filter :  false , 
288-             tlv_listener_filter_config :  None , 
289-         } ; 
292+         let  l1_info = create_test_listener_config ( name,  1234 ) ; 
290293        man. start_listener ( l1,  l1_info) . unwrap ( ) ; 
291294        assert ! ( routeb_tx1. send( RouteConfigurationChange :: Removed ( "n/a" . into( ) ) ) . is_ok( ) ) ; 
292295        tokio:: task:: yield_now ( ) . await ; 
293296
294297        let  ( routeb_tx2,  routeb_rx)  = broadcast:: channel ( chan) ; 
295298        let  ( _secb_tx2,  secb_rx)  = broadcast:: channel ( chan) ; 
296299        let  l2 = Listener :: test_listener ( name,  routeb_rx,  secb_rx) ; 
297-         let  l2_info = ListenerConfig  { 
298-             name :  name. into ( ) , 
299-             address :  SocketAddr :: new ( IpAddr :: V4 ( Ipv4Addr :: LOCALHOST ) ,  1235 ) ,  // Different port 
300-             filter_chains :  HashMap :: default ( ) , 
301-             bind_device :  None , 
302-             with_tls_inspector :  false , 
303-             proxy_protocol_config :  None , 
304-             with_tlv_listener_filter :  false , 
305-             tlv_listener_filter_config :  None , 
306-         } ; 
300+         let  l2_info = create_test_listener_config ( name,  1235 ) ; 
307301        man. start_listener ( l2,  l2_info) . unwrap ( ) ; 
308302        assert ! ( routeb_tx2. send( RouteConfigurationChange :: Removed ( "n/a" . into( ) ) ) . is_ok( ) ) ; 
309303        tokio:: task:: yield_now ( ) . await ; 
310304
311305        let  ( routeb_tx3,  routeb_rx)  = broadcast:: channel ( chan) ; 
312306        let  ( _secb_tx3,  secb_rx)  = broadcast:: channel ( chan) ; 
313307        let  l3 = Listener :: test_listener ( name,  routeb_rx,  secb_rx) ; 
314-         let  l3_info = ListenerConfig  { 
315-             name :  name. into ( ) , 
316-             address :  SocketAddr :: new ( IpAddr :: V4 ( Ipv4Addr :: LOCALHOST ) ,  1236 ) ,  // Different port 
317-             filter_chains :  HashMap :: default ( ) , 
318-             bind_device :  None , 
319-             with_tls_inspector :  false , 
320-             proxy_protocol_config :  None , 
321-             with_tlv_listener_filter :  false , 
322-             tlv_listener_filter_config :  None , 
323-         } ; 
308+         let  l3_info = create_test_listener_config ( name,  1236 ) ; 
324309        man. start_listener ( l3,  l3_info) . unwrap ( ) ; 
325310        assert ! ( routeb_tx3. send( RouteConfigurationChange :: Removed ( "n/a" . into( ) ) ) . is_ok( ) ) ; 
326311        tokio:: task:: yield_now ( ) . await ; 
0 commit comments