@@ -336,15 +336,23 @@ def test__clean_ip_port_mappings_two_hm_pools_not_sharing_members(self):
336
336
def test__update_ip_port_mappings_del_backend_member (self ):
337
337
src_ip = '10.22.33.4'
338
338
self .helper ._update_ip_port_mappings (
339
- self .ovn_lb , self .member_address , 'a-logical-port' , src_ip ,
339
+ self .ovn_lb ,
340
+ self .member_address ,
341
+ 'a-logical-port' ,
342
+ src_ip ,
343
+ 'test_pool_key' ,
340
344
delete = True )
341
345
self .helper .ovn_nbdb_api .lb_del_ip_port_mapping .\
342
346
assert_called_once_with (self .ovn_lb .uuid , self .member_address )
343
347
344
348
def test__update_ip_port_mappings_add_backend_member (self ):
345
349
src_ip = '10.22.33.4'
346
350
self .helper ._update_ip_port_mappings (
347
- self .ovn_lb , self .member_address , 'a-logical-port' , src_ip )
351
+ self .ovn_lb ,
352
+ self .member_address ,
353
+ 'a-logical-port' ,
354
+ src_ip ,
355
+ 'test_pool_key' )
348
356
self .helper .ovn_nbdb_api .lb_add_ip_port_mapping .\
349
357
assert_called_once_with (self .ovn_lb .uuid , self .member_address ,
350
358
'a-logical-port' , src_ip )
@@ -353,7 +361,11 @@ def test__update_ip_port_mappings_del_backend_member_ipv6(self):
353
361
member_address = 'fda2:918e:5869:0:f816:3eff:feab:cdef'
354
362
src_ip = 'fda2:918e:5869:0:f816:3eff:fecd:398a'
355
363
self .helper ._update_ip_port_mappings (
356
- self .ovn_lb , member_address , 'a-logical-port' , src_ip ,
364
+ self .ovn_lb ,
365
+ member_address ,
366
+ 'a-logical-port' ,
367
+ src_ip ,
368
+ 'test_pool_key' ,
357
369
delete = True )
358
370
self .helper .ovn_nbdb_api .lb_del_ip_port_mapping .\
359
371
assert_called_once_with (self .ovn_lb .uuid , member_address )
@@ -362,10 +374,17 @@ def test__update_ip_port_mappings_add_backend_member_ipv6(self):
362
374
member_address = 'fda2:918e:5869:0:f816:3eff:feab:cdef'
363
375
src_ip = 'fda2:918e:5869:0:f816:3eff:fecd:398a'
364
376
self .helper ._update_ip_port_mappings (
365
- self .ovn_lb , member_address , 'a-logical-port' , src_ip )
377
+ self .ovn_lb ,
378
+ member_address ,
379
+ 'a-logical-port' ,
380
+ src_ip ,
381
+ 'test_pool_key' )
366
382
self .helper .ovn_nbdb_api .lb_add_ip_port_mapping .\
367
383
assert_called_once_with (
368
- self .ovn_lb .uuid , member_address , 'a-logical-port' , src_ip )
384
+ self .ovn_lb .uuid ,
385
+ member_address ,
386
+ 'a-logical-port' ,
387
+ src_ip )
369
388
370
389
def test__update_external_ids_member_status (self ):
371
390
self .helper ._update_external_ids_member_status (
@@ -374,7 +393,10 @@ def test__update_external_ids_member_status(self):
374
393
ovn_const .OVN_MEMBER_STATUS_KEY : '{"%s": "%s"}'
375
394
% (self .member_id , constants .NO_MONITOR )}
376
395
self .helper .ovn_nbdb_api .db_set .assert_called_once_with (
377
- 'Load_Balancer' , self .ovn_lb .uuid , ('external_ids' , member_status ))
396
+ 'Load_Balancer' ,
397
+ self .ovn_lb .uuid ,
398
+ ('external_ids' ,
399
+ member_status ))
378
400
379
401
def test__update_external_ids_member_status_delete (self ):
380
402
self .helper ._update_external_ids_member_status (
@@ -390,7 +412,10 @@ def test__update_external_ids_member_status_delete_not_found(self):
390
412
ovn_const .OVN_MEMBER_STATUS_KEY : '{"%s": "%s"}'
391
413
% (self .member_id , constants .NO_MONITOR )}
392
414
self .helper .ovn_nbdb_api .db_set .assert_called_once_with (
393
- 'Load_Balancer' , self .ovn_lb .uuid , ('external_ids' , member_status ))
415
+ 'Load_Balancer' ,
416
+ self .ovn_lb .uuid ,
417
+ ('external_ids' ,
418
+ member_status ))
394
419
395
420
def test__find_member_status (self ):
396
421
status = self .helper ._find_member_status (self .ovn_lb , self .member_id )
@@ -6746,3 +6771,73 @@ def test_refresh_lb_vips_returns_db_operations_when_is_sync_false(
6746
6771
self .ovn_lb .uuid ,
6747
6772
('vips' , {'vip1:port1' : 'ip1:port1,ip2:port1' })
6748
6773
)
6774
+
6775
+ def test_update_ip_port_mappings_add (self ):
6776
+ # Setup mock OVN load balancer
6777
+ ovn_lb = mock .Mock ()
6778
+ ovn_lb .uuid = 'test-lb-uuid'
6779
+ ovn_lb .external_ids = {}
6780
+
6781
+ # Call the method with delete=False
6782
+ self .helper ._update_ip_port_mappings (
6783
+ ovn_lb , '10.0.0.1' , 'port1' , '192.168.0.1' , 'pool1' , delete = False
6784
+ )
6785
+
6786
+ # Assert that lb_add_ip_port_mapping was called
6787
+ self .helper .ovn_nbdb_api .lb_add_ip_port_mapping \
6788
+ .assert_called_once_with (
6789
+ 'test-lb-uuid' ,
6790
+ '10.0.0.1' ,
6791
+ 'port1' ,
6792
+ '192.168.0.1' ,
6793
+ )
6794
+
6795
+ def test_update_ip_port_mappings_delete_minimal (self ):
6796
+ ovn_lb = mock .Mock ()
6797
+ ovn_lb .uuid = 'test-lb-uuid'
6798
+ ovn_lb .external_ids = {}
6799
+ # Patch _extract_member_info to return no other members
6800
+ self .helper ._extract_member_info = mock .Mock (return_value = [])
6801
+ # Also patch ovn_nbdb_api call
6802
+ self .helper .ovn_nbdb_api .lb_del_ip_port_mapping = mock .Mock ()
6803
+ self .helper .ovn_nbdb_api .lb_add_ip_port_mapping = mock .Mock ()
6804
+ self .helper ._update_ip_port_mappings (
6805
+ ovn_lb ,
6806
+ backend_ip = '10.0.0.1' ,
6807
+ port_name = 'dummy-port' ,
6808
+ src_ip = '192.168.0.1' ,
6809
+ pool_key = 'pool-test' ,
6810
+ delete = True
6811
+ )
6812
+ self .helper .ovn_nbdb_api .\
6813
+ lb_del_ip_port_mapping .\
6814
+ assert_called_once_with (
6815
+ 'test-lb-uuid' ,
6816
+ '10.0.0.1'
6817
+ )
6818
+
6819
+ def test_update_ip_port_mappings_delete_with_other_members_present (self ):
6820
+ ovn_lb = mock .Mock ()
6821
+ ovn_lb .uuid = 'test-lb-uuid'
6822
+ ovn_lb .external_ids = {
6823
+ "pool_A" : "member_memberA_10.0.0.1:80_subnetA" ,
6824
+ "pool_B" : "member_memberB_10.0.0.1:80_subnetA" ,
6825
+ "neutron:member_statuses" : '{"memberB": "ONLINE"}'
6826
+ }
6827
+
6828
+ self .helper .ovn_nbdb_api .lb_del_ip_port_mapping = mock .Mock ()
6829
+ self .helper .ovn_nbdb_api .lb_add_ip_port_mapping = mock .Mock ()
6830
+
6831
+ # Call the method under test
6832
+ self .helper ._update_ip_port_mappings (
6833
+ ovn_lb ,
6834
+ backend_ip = '10.0.0.1' ,
6835
+ port_name = 'dummy-port' ,
6836
+ src_ip = '192.168.0.1' ,
6837
+ pool_key = 'pool_A' ,
6838
+ delete = True
6839
+ )
6840
+
6841
+ # Should not call delete because memberB is ONLINE and shares the IP
6842
+ self .helper .ovn_nbdb_api .lb_del_ip_port_mapping .assert_not_called ()
6843
+ self .helper .ovn_nbdb_api .lb_add_ip_port_mapping .assert_not_called ()
0 commit comments