@@ -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