diff --git a/tobiko/openstack/octavia/__init__.py b/tobiko/openstack/octavia/__init__.py index 93252933b..8f7b7409c 100644 --- a/tobiko/openstack/octavia/__init__.py +++ b/tobiko/openstack/octavia/__init__.py @@ -26,6 +26,7 @@ octavia_client = _client.octavia_client OctaviaClientFixture = _client.OctaviaClientFixture get_loadbalancer = _client.get_loadbalancer get_member = _client.get_member +list_members = _client.list_members list_amphorae = _client.list_amphorae get_amphora_vm = _client.get_amphora_vm list_amphoras_compute_nodes = _client.list_amphoras_compute_nodes diff --git a/tobiko/openstack/octavia/_client.py b/tobiko/openstack/octavia/_client.py index 9fe184223..c374db1e6 100644 --- a/tobiko/openstack/octavia/_client.py +++ b/tobiko/openstack/octavia/_client.py @@ -82,6 +82,10 @@ def get_member(pool_id, member_id, client=None): member_id=member_id) +def list_members(pool_id: str, client=None): + return octavia_client(client).member_list(pool_id=pool_id)['members'] + + def list_amphorae(loadbalancer_id: str, client=None): return octavia_client(client).amphora_list( loadbalancer_id=loadbalancer_id)['amphorae'] diff --git a/tobiko/openstack/octavia/_validators.py b/tobiko/openstack/octavia/_validators.py index 3b36b0904..25d17feeb 100644 --- a/tobiko/openstack/octavia/_validators.py +++ b/tobiko/openstack/octavia/_validators.py @@ -20,6 +20,7 @@ import typing from oslo_log import log import tobiko +from tobiko.openstack import octavia from tobiko.shell import curl from tobiko.shell import ssh @@ -27,10 +28,11 @@ from tobiko.shell import ssh LOG = log.getLogger(__name__) -def check_members_balanced(members_count: int, - ip_address: str, +def check_members_balanced(ip_address: str, protocol: str, port: int, + pool_id: str = None, + members_count: int = None, lb_algorithm: str = None, requests_count: int = 10, connect_timeout: tobiko.Seconds = 2., @@ -42,6 +44,15 @@ def check_members_balanced(members_count: int, test_case = tobiko.get_test_case() + # Getting the members count + if members_count is None: + if pool_id is None: + raise ValueError('Either members_count or pool_id has to be passed' + ' to the function.') + + else: # members_count is None and pool_id is not None + members_count = len(octavia.list_members(pool_id=pool_id)) + replies: typing.Dict[str, int] = collections.defaultdict(lambda: 0) for attempt in tobiko.retry(count=members_count * requests_count, interval=interval): diff --git a/tobiko/tests/faults/octavia/test_faults.py b/tobiko/tests/faults/octavia/test_faults.py index 1949e7c9a..64c7c5c25 100644 --- a/tobiko/tests/faults/octavia/test_faults.py +++ b/tobiko/tests/faults/octavia/test_faults.py @@ -54,8 +54,6 @@ class OctaviaBasicFaultTest(testtools.TestCase): member2_stack = tobiko.required_setup_fixture( stacks.OctaviaOtherMemberServerStackFixture) - members_count = 2 - def setUp(self): # pylint: disable=no-member super(OctaviaBasicFaultTest, self).setUp() @@ -75,7 +73,7 @@ class OctaviaBasicFaultTest(testtools.TestCase): # Send traffic octavia.check_members_balanced( - members_count=self.members_count, + pool_id=self.pool_stack.pool_id, ip_address=self.loadbalancer_stack.floating_ip_address, lb_algorithm=self.pool_stack.lb_algorithm, protocol=self.listener_stack.lb_protocol, @@ -110,7 +108,7 @@ class OctaviaBasicFaultTest(testtools.TestCase): # Verify Octavia functionality octavia.check_members_balanced( - members_count=self.members_count, + pool_id=self.pool_stack.pool_id, ip_address=self.loadbalancer_stack.floating_ip_address, lb_algorithm=self.pool_stack.lb_algorithm, protocol=self.listener_stack.lb_protocol, diff --git a/tobiko/tests/faults/octavia/test_services.py b/tobiko/tests/faults/octavia/test_services.py index 3c8485e91..039562099 100644 --- a/tobiko/tests/faults/octavia/test_services.py +++ b/tobiko/tests/faults/octavia/test_services.py @@ -64,8 +64,6 @@ class OctaviaServicesFaultTest(testtools.TestCase): member2_stack = tobiko.required_setup_fixture( stacks.OctaviaOtherMemberServerStackFixture) - members_count = 2 - list_octavia_active_units = ('systemctl list-units ' + '--state=active tripleo_octavia_*') @@ -91,7 +89,7 @@ class OctaviaServicesFaultTest(testtools.TestCase): # Sending initial traffic before we stop octavia services octavia.check_members_balanced( - members_count=self.members_count, + pool_id=self.pool_stack.pool_id, ip_address=self.loadbalancer_stack.floating_ip_address, lb_algorithm=self.pool_stack.lb_algorithm, protocol=self.listener_stack.lb_protocol, @@ -179,7 +177,7 @@ class OctaviaServicesFaultTest(testtools.TestCase): self.assertTrue(service not in octavia_active_units, err_msg) octavia.check_members_balanced( - members_count=self.members_count, + pool_id=self.pool_stack.pool_id, ip_address=self.loadbalancer_stack.floating_ip_address, lb_algorithm=self.pool_stack.lb_algorithm, protocol=self.listener_stack.lb_protocol, @@ -210,7 +208,7 @@ class OctaviaServicesFaultTest(testtools.TestCase): self._make_sure_octavia_services_are_active(controller) octavia.check_members_balanced( - members_count=self.members_count, + pool_id=self.pool_stack.pool_id, ip_address=self.loadbalancer_stack.floating_ip_address, lb_algorithm=self.pool_stack.lb_algorithm, protocol=self.listener_stack.lb_protocol, diff --git a/tobiko/tests/scenario/octavia/test_traffic.py b/tobiko/tests/scenario/octavia/test_traffic.py index 49c999f59..cb899d0de 100644 --- a/tobiko/tests/scenario/octavia/test_traffic.py +++ b/tobiko/tests/scenario/octavia/test_traffic.py @@ -46,8 +46,6 @@ class OctaviaBasicTrafficScenarioTest(testtools.TestCase): member2_stack = tobiko.required_setup_fixture( stacks.OctaviaOtherMemberServerStackFixture) - members_count = 2 - def setUp(self): # pylint: disable=no-member super(OctaviaBasicTrafficScenarioTest, self).setUp() @@ -65,7 +63,7 @@ class OctaviaBasicTrafficScenarioTest(testtools.TestCase): @pytest.mark.flaky(reruns=3) def test_traffic(self): octavia.check_members_balanced( - members_count=self.members_count, + pool_id=self.pool_stack.pool_id, ip_address=self.loadbalancer_stack.floating_ip_address, lb_algorithm=self.pool_stack.lb_algorithm, protocol=self.listener_stack.lb_protocol,