From ed4863c3647a26f93f431636d9a3aa95c1e02fcf Mon Sep 17 00:00:00 2001 From: Adit Sarfaty Date: Tue, 30 Apr 2019 14:01:57 +0300 Subject: [PATCH] Fix Policy LB pool monitor actions The usage of _update was wrong, and add unittest to cover this Change-Id: I361240eb64a9b0c91bbe3598555fc234b9bfa60c --- .../tests/unit/v3/policy/test_lb_resources.py | 77 ++++++++++++++++++- vmware_nsxlib/v3/policy/lb_resources.py | 11 +-- 2 files changed, 82 insertions(+), 6 deletions(-) diff --git a/vmware_nsxlib/tests/unit/v3/policy/test_lb_resources.py b/vmware_nsxlib/tests/unit/v3/policy/test_lb_resources.py index ce91f120..14e27721 100644 --- a/vmware_nsxlib/tests/unit/v3/policy/test_lb_resources.py +++ b/vmware_nsxlib/tests/unit/v3/policy/test_lb_resources.py @@ -1064,7 +1064,7 @@ class TestPolicyLBPoolApi(test_resources.NsxPolicyLibTestCase): description = 'new desc' members = [{'ip_address': '10.0.0.1'}] algorithm = 'algo' - active_monitor_paths = 'path1' + active_monitor_paths = ['path1'] member_group = 'group1' snat_translation = False with mock.patch.object(self.policy_api, "get", @@ -1092,6 +1092,81 @@ class TestPolicyLBPoolApi(test_resources.NsxPolicyLibTestCase): tenant=TEST_TENANT) self.assert_called_with_def(update_call, expected_def) + def test_add_monitor_to_pool(self): + obj_id = '111' + active_monitor_paths = ['path1'] + with mock.patch.object(self.policy_api, "get", + return_value={'id': obj_id}), \ + mock.patch.object(self.policy_api, + "create_or_update") as update_call: + self.resourceApi.add_monitor_to_pool( + obj_id, + active_monitor_paths, + tenant=TEST_TENANT) + expected_def = lb_defs.LBPoolDef( + lb_pool_id=obj_id, + active_monitor_paths=active_monitor_paths, + tenant=TEST_TENANT) + self.assert_called_with_def(update_call, expected_def) + + def test_remove_monitor_from_pool(self): + obj_id = '111' + removed_monitor_path = 'path1' + stay_monitor_path = 'path2' + active_monitors = [removed_monitor_path, stay_monitor_path] + with mock.patch.object( + self.policy_api, "get", return_value={ + 'id': obj_id, 'active_monitor_paths': active_monitors}), \ + mock.patch.object(self.policy_api, + "create_or_update") as update_call: + self.resourceApi.remove_monitor_from_pool( + obj_id, + removed_monitor_path, + tenant=TEST_TENANT) + expected_def = lb_defs.LBPoolDef( + lb_pool_id=obj_id, + active_monitor_paths=[stay_monitor_path], + tenant=TEST_TENANT) + self.assert_called_with_def(update_call, expected_def) + + def test_create_pool_member_and_add_to_pool(self): + obj_id = '111' + ip_address = '1.1.1.1' + with mock.patch.object(self.policy_api, "get", + return_value={'id': obj_id}), \ + mock.patch.object(self.policy_api, + "create_or_update") as update_call: + self.resourceApi.create_pool_member_and_add_to_pool( + obj_id, ip_address, + tenant=TEST_TENANT) + mem_def = lb_defs.LBPoolMemberDef(ip_address) + expected_def = lb_defs.LBPoolDef( + lb_pool_id=obj_id, + members=[mem_def], + tenant=TEST_TENANT) + self.assert_called_with_def(update_call, expected_def) + + def test_update_pool_member(self): + obj_id = '111' + ip_address = '1.1.1.1' + port = '80' + new_name = 'mem1' + member = {'ip_address': ip_address, 'port': port} + with mock.patch.object(self.policy_api, "get", + return_value={'id': obj_id, + 'members': [member]}), \ + mock.patch.object(self.policy_api, + "create_or_update") as update_call: + self.resourceApi.update_pool_member( + obj_id, ip_address, port=port, display_name=new_name, + tenant=TEST_TENANT) + member['display_name'] = new_name + expected_def = lb_defs.LBPoolDef( + lb_pool_id=obj_id, + members=[member], + tenant=TEST_TENANT) + self.assert_called_with_def(update_call, expected_def) + class TestPolicyLBMonitorProfileHttpApi(test_resources.NsxPolicyLibTestCase): diff --git a/vmware_nsxlib/v3/policy/lb_resources.py b/vmware_nsxlib/v3/policy/lb_resources.py index 0a69095d..b355b6f2 100644 --- a/vmware_nsxlib/v3/policy/lb_resources.py +++ b/vmware_nsxlib/v3/policy/lb_resources.py @@ -451,8 +451,8 @@ class NsxPolicyLoadBalancerPoolApi(NsxPolicyResourceBase): monitor_paths = lb_pool.get('active_monitor_paths', []) monitor_paths.extend(active_monitor_paths) self._update( - lb_pool_id, active_monitor_paths=monitor_paths, pool_data=lb_pool, - tenant=tenant) + lb_pool_id=lb_pool_id, active_monitor_paths=monitor_paths, + pool_data=lb_pool, tenant=tenant) def remove_monitor_from_pool(self, lb_pool_id, monitor_path, tenant=constants.POLICY_INFRA_TENANT): @@ -462,7 +462,8 @@ class NsxPolicyLoadBalancerPoolApi(NsxPolicyResourceBase): monitor_paths = lb_pool.get('active_monitor_paths', []) if monitor_path in monitor_paths: monitor_paths.remove(monitor_path) - self._update(lb_pool_id, active_monitor_paths=monitor_paths, + self._update(lb_pool_id=lb_pool_id, + active_monitor_paths=monitor_paths, pool_data=lb_pool, tenant=tenant) def create_pool_member_and_add_to_pool( @@ -480,7 +481,7 @@ class NsxPolicyLoadBalancerPoolApi(NsxPolicyResourceBase): lb_pool = self.policy_api.get(lb_pool_def) lb_pool_members = lb_pool.get('members', []) lb_pool_members.append(lb_pool_member) - self._update(lb_pool_id, members=lb_pool_members, + self._update(lb_pool_id=lb_pool_id, members=lb_pool_members, pool_data=lb_pool, tenant=tenant) return lb_pool_member @@ -504,7 +505,7 @@ class NsxPolicyLoadBalancerPoolApi(NsxPolicyResourceBase): member_to_update[0]['admin_state'] = admin_state if backup_member: member_to_update[0]['backup_member'] = backup_member - self._update(lb_pool_id, members=lb_pool_members, + self._update(lb_pool_id=lb_pool_id, members=lb_pool_members, pool_data=lb_pool, tenant=tenant) else: ops = ('Updating member %(address)s:%(port)d failed, not found in '