@@ -145,25 +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 ! (
151- "Listener {} now has {} active version(s)" ,
152- listener_name,
153- self . listener_handles. get( & listener_name) . unwrap( ) . len( )
154- ) ;
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( ) ) ;
155151
156152 Ok ( ( ) )
157153 }
158154
159155 pub fn stop_listener ( & mut self , listener_name : & str ) -> Result < ( ) > {
160- if let Some ( listeners) = self . listener_handles . get_mut ( listener_name) {
156+ if let Some ( listeners) = self . listener_handles . remove ( listener_name) {
161157 info ! ( "Stopping all {} version(s) of listener {}" , listeners. len( ) , listener_name) ;
162- for listener_info in listeners. drain ( .. ) {
158+ for listener_info in listeners {
163159 info ! ( "Stopping listener {} version {}" , listener_name, listener_info. version) ;
164160 listener_info. handle . abort ( ) ;
165161 }
166- self . listener_handles . remove ( listener_name) ;
167162 } else {
168163 info ! ( "No listeners found with name {}" , listener_name) ;
169164 }
@@ -183,6 +178,19 @@ mod tests {
183178 use orion_configuration:: config:: Listener as ListenerConfig ;
184179 use tracing_test:: traced_test;
185180
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+
186194 #[ traced_test]
187195 #[ tokio:: test]
188196 async fn start_listener_dup ( ) {
@@ -281,50 +289,23 @@ mod tests {
281289 let ( routeb_tx1, routeb_rx) = broadcast:: channel ( chan) ;
282290 let ( _secb_tx1, secb_rx) = broadcast:: channel ( chan) ;
283291 let l1 = Listener :: test_listener ( name, routeb_rx, secb_rx) ;
284- let l1_info = ListenerConfig {
285- name : name. into ( ) ,
286- address : SocketAddr :: new ( IpAddr :: V4 ( Ipv4Addr :: LOCALHOST ) , 1234 ) ,
287- filter_chains : HashMap :: default ( ) ,
288- bind_device : None ,
289- with_tls_inspector : false ,
290- proxy_protocol_config : None ,
291- with_tlv_listener_filter : false ,
292- tlv_listener_filter_config : None ,
293- } ;
292+ let l1_info = create_test_listener_config ( name, 1234 ) ;
294293 man. start_listener ( l1, l1_info) . unwrap ( ) ;
295294 assert ! ( routeb_tx1. send( RouteConfigurationChange :: Removed ( "n/a" . into( ) ) ) . is_ok( ) ) ;
296295 tokio:: task:: yield_now ( ) . await ;
297296
298297 let ( routeb_tx2, routeb_rx) = broadcast:: channel ( chan) ;
299298 let ( _secb_tx2, secb_rx) = broadcast:: channel ( chan) ;
300299 let l2 = Listener :: test_listener ( name, routeb_rx, secb_rx) ;
301- let l2_info = ListenerConfig {
302- name : name. into ( ) ,
303- address : SocketAddr :: new ( IpAddr :: V4 ( Ipv4Addr :: LOCALHOST ) , 1235 ) , // Different port
304- filter_chains : HashMap :: default ( ) ,
305- bind_device : None ,
306- with_tls_inspector : false ,
307- proxy_protocol_config : None ,
308- with_tlv_listener_filter : false ,
309- tlv_listener_filter_config : None ,
310- } ;
300+ let l2_info = create_test_listener_config ( name, 1235 ) ;
311301 man. start_listener ( l2, l2_info) . unwrap ( ) ;
312302 assert ! ( routeb_tx2. send( RouteConfigurationChange :: Removed ( "n/a" . into( ) ) ) . is_ok( ) ) ;
313303 tokio:: task:: yield_now ( ) . await ;
314304
315305 let ( routeb_tx3, routeb_rx) = broadcast:: channel ( chan) ;
316306 let ( _secb_tx3, secb_rx) = broadcast:: channel ( chan) ;
317307 let l3 = Listener :: test_listener ( name, routeb_rx, secb_rx) ;
318- let l3_info = ListenerConfig {
319- name : name. into ( ) ,
320- address : SocketAddr :: new ( IpAddr :: V4 ( Ipv4Addr :: LOCALHOST ) , 1236 ) , // Different port
321- filter_chains : HashMap :: default ( ) ,
322- bind_device : None ,
323- with_tls_inspector : false ,
324- proxy_protocol_config : None ,
325- with_tlv_listener_filter : false ,
326- tlv_listener_filter_config : None ,
327- } ;
308+ let l3_info = create_test_listener_config ( name, 1236 ) ;
328309 man. start_listener ( l3, l3_info) . unwrap ( ) ;
329310 assert ! ( routeb_tx3. send( RouteConfigurationChange :: Removed ( "n/a" . into( ) ) ) . is_ok( ) ) ;
330311 tokio:: task:: yield_now ( ) . await ;
0 commit comments