@@ -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 )
@@ -1506,29 +1531,27 @@ def test_lb_update_disabled(self, refresh_vips):
1506
1531
@mock .patch .object (ovn_helper .OvnProviderHelper , '_refresh_lb_vips' )
1507
1532
def test_lb_update_enabled (self , refresh_vips ):
1508
1533
# Change the mock, its enabled by default.
1509
- self .ovn_lb .external_ids .update ({'enabled' : False })
1510
- self .lb ['admin_state_up' ] = True
1534
+ self .lb [constants .ADMIN_STATE_UP ] = False
1511
1535
status = self .helper .lb_update (self .lb )
1512
1536
self .assertEqual (status ['loadbalancers' ][0 ]['provisioning_status' ],
1513
1537
constants .ACTIVE )
1514
1538
self .assertEqual (status ['loadbalancers' ][0 ]['operating_status' ],
1515
- constants .ONLINE )
1539
+ constants .OFFLINE )
1516
1540
refresh_vips .assert_called_once_with (
1517
1541
self .ovn_lb , self .ovn_lb .external_ids )
1518
1542
self .helper .ovn_nbdb_api .db_set .assert_called_once_with (
1519
1543
'Load_Balancer' , self .ovn_lb .uuid ,
1520
- ('external_ids' , {'enabled' : 'True ' }))
1544
+ ('external_ids' , {'enabled' : 'False ' }))
1521
1545
# update to re-enable
1522
- self .ovn_lb .external_ids .update ({'enabled' : True })
1523
- self .lb ['admin_state_up' ] = True
1546
+ self .lb [constants .ADMIN_STATE_UP ] = True
1524
1547
status = self .helper .lb_update (self .lb )
1525
1548
self .assertEqual (status ['loadbalancers' ][0 ]['provisioning_status' ],
1526
1549
constants .ACTIVE )
1527
1550
self .assertEqual (status ['loadbalancers' ][0 ]['operating_status' ],
1528
1551
constants .ONLINE )
1529
- refresh_vips .assert_called_once_with (
1552
+ refresh_vips .assert_called_with (
1530
1553
self .ovn_lb , self .ovn_lb .external_ids )
1531
- self .helper .ovn_nbdb_api .db_set .assert_called_once_with (
1554
+ self .helper .ovn_nbdb_api .db_set .assert_called_with (
1532
1555
'Load_Balancer' , self .ovn_lb .uuid ,
1533
1556
('external_ids' , {'enabled' : 'True' }))
1534
1557
@@ -6746,3 +6769,73 @@ def test_refresh_lb_vips_returns_db_operations_when_is_sync_false(
6746
6769
self .ovn_lb .uuid ,
6747
6770
('vips' , {'vip1:port1' : 'ip1:port1,ip2:port1' })
6748
6771
)
6772
+
6773
+ def test_update_ip_port_mappings_add (self ):
6774
+ # Setup mock OVN load balancer
6775
+ ovn_lb = mock .Mock ()
6776
+ ovn_lb .uuid = 'test-lb-uuid'
6777
+ ovn_lb .external_ids = {}
6778
+
6779
+ # Call the method with delete=False
6780
+ self .helper ._update_ip_port_mappings (
6781
+ ovn_lb , '10.0.0.1' , 'port1' , '192.168.0.1' , 'pool1' , delete = False
6782
+ )
6783
+
6784
+ # Assert that lb_add_ip_port_mapping was called
6785
+ self .helper .ovn_nbdb_api .lb_add_ip_port_mapping \
6786
+ .assert_called_once_with (
6787
+ 'test-lb-uuid' ,
6788
+ '10.0.0.1' ,
6789
+ 'port1' ,
6790
+ '192.168.0.1' ,
6791
+ )
6792
+
6793
+ def test_update_ip_port_mappings_delete_minimal (self ):
6794
+ ovn_lb = mock .Mock ()
6795
+ ovn_lb .uuid = 'test-lb-uuid'
6796
+ ovn_lb .external_ids = {}
6797
+ # Patch _extract_member_info to return no other members
6798
+ self .helper ._extract_member_info = mock .Mock (return_value = [])
6799
+ # Also patch ovn_nbdb_api call
6800
+ self .helper .ovn_nbdb_api .lb_del_ip_port_mapping = mock .Mock ()
6801
+ self .helper .ovn_nbdb_api .lb_add_ip_port_mapping = mock .Mock ()
6802
+ self .helper ._update_ip_port_mappings (
6803
+ ovn_lb ,
6804
+ backend_ip = '10.0.0.1' ,
6805
+ port_name = 'dummy-port' ,
6806
+ src_ip = '192.168.0.1' ,
6807
+ pool_key = 'pool-test' ,
6808
+ delete = True
6809
+ )
6810
+ self .helper .ovn_nbdb_api .\
6811
+ lb_del_ip_port_mapping .\
6812
+ assert_called_once_with (
6813
+ 'test-lb-uuid' ,
6814
+ '10.0.0.1'
6815
+ )
6816
+
6817
+ def test_update_ip_port_mappings_delete_with_other_members_present (self ):
6818
+ ovn_lb = mock .Mock ()
6819
+ ovn_lb .uuid = 'test-lb-uuid'
6820
+ ovn_lb .external_ids = {
6821
+ "pool_A" : "member_memberA_10.0.0.1:80_subnetA" ,
6822
+ "pool_B" : "member_memberB_10.0.0.1:80_subnetA" ,
6823
+ "neutron:member_statuses" : '{"memberB": "ONLINE"}'
6824
+ }
6825
+
6826
+ self .helper .ovn_nbdb_api .lb_del_ip_port_mapping = mock .Mock ()
6827
+ self .helper .ovn_nbdb_api .lb_add_ip_port_mapping = mock .Mock ()
6828
+
6829
+ # Call the method under test
6830
+ self .helper ._update_ip_port_mappings (
6831
+ ovn_lb ,
6832
+ backend_ip = '10.0.0.1' ,
6833
+ port_name = 'dummy-port' ,
6834
+ src_ip = '192.168.0.1' ,
6835
+ pool_key = 'pool_A' ,
6836
+ delete = True
6837
+ )
6838
+
6839
+ # Should not call delete because memberB is ONLINE and shares the IP
6840
+ self .helper .ovn_nbdb_api .lb_del_ip_port_mapping .assert_not_called ()
6841
+ self .helper .ovn_nbdb_api .lb_add_ip_port_mapping .assert_not_called ()
0 commit comments