From 988efd6b25528d13b17c80f4959dca33e4aba7ad Mon Sep 17 00:00:00 2001 From: Martin Kalcok Date: Wed, 28 Jul 2021 14:52:04 +0200 Subject: [PATCH 01/11] Tests for new "status" actions in neutron-gateway --- zaza/openstack/charm_tests/neutron/tests.py | 112 ++++++++++++++++++++ 1 file changed, 112 insertions(+) diff --git a/zaza/openstack/charm_tests/neutron/tests.py b/zaza/openstack/charm_tests/neutron/tests.py index 54420e8..b3daafe 100644 --- a/zaza/openstack/charm_tests/neutron/tests.py +++ b/zaza/openstack/charm_tests/neutron/tests.py @@ -21,6 +21,7 @@ import copy +import json import logging import tenacity @@ -248,6 +249,117 @@ class NeutronGatewayTest(NeutronPluginApiSharedTests): return services +class NeutronGatewayStatusActionsTest(test_utils.OpenStackBaseTest): + """Test status actions of Neutron Gateway Charm. + + actions: + * get-status-routers + * get-status-dhcp + * get-status-lb + """ + + @classmethod + def setUpClass(cls, application_name='neutron-gateway', model_alias=None): + """Run class setup for running Neutron Gateway tests.""" + super(NeutronGatewayStatusActionsTest, cls).setUpClass(application_name, + model_alias) + # set up clients + cls.neutron_client = ( + openstack_utils.get_neutron_session_client(cls.keystone_session)) + + def tearDown(self): + """Cleanup loadbalancers if there are any left over.""" + super(NeutronGatewayStatusActionsTest, self).tearDown() + load_balancers = self.neutron_client.list_loadbalancers().get('loadbalancers', + []) + for lbaas in load_balancers: + self.neutron_client.delete_loadbalancer(lbaas['id']) + + def test_get_status_routers(self): + """Test that routers reported by neutron client match those from action.""" + ngw_unit = zaza.model.get_units(self.application_name, + model_name=self.model_name)[0] + routers_from_client = self.neutron_client.list_routers().get('routers', []) + + if not routers_from_client: + self.fail('At least one router must be configured for this test to pass.') + + result = zaza.model.run_action(ngw_unit.entity_id, + 'get-status-routers', + model_name=self.model_name, + action_params={"format": "json"}) + self.assertEqual(result.status, 'completed') + action_data = result.data.get('results', {}).get('router-list') + routers_from_action = json.loads(action_data) + + ids_from_client = {router['id'] for router in routers_from_client} + ids_from_action = {router['id'] for router in routers_from_action} + + self.assertEqual(ids_from_action, ids_from_client) + + def test_get_status_dhcp(self): + """Test that DHCP networks reported by neutron client match those from action.""" + ngw_unit = zaza.model.get_units(self.application_name, + model_name=self.model_name)[0] + networks_from_client = self.neutron_client.list_networks().get('networks', []) + + if not networks_from_client: + self.fail('At least one network must be configured for this test to pass.') + + result = zaza.model.run_action(ngw_unit.entity_id, + 'get-status-dhcp', + model_name=self.model_name, + action_params={"format": "json"}) + self.assertEqual(result.status, 'completed') + action_data = result.data.get('results', {}).get('dhcp-networks') + networks_from_action = json.loads(action_data) + + ids_from_client = {net['id'] for net in networks_from_client} + ids_from_action = {net['id'] for net in networks_from_action} + + self.assertEqual(ids_from_action, ids_from_client) + + def test_get_status_load_balancers(self): + """Test that loadbalancers reported by neutron client match those from action.""" + current_release = openstack_utils.get_os_release() + bionic_train = openstack_utils.get_os_release('bionic_train') + if current_release >= bionic_train: + self.skipTest('LBaasV2 is not supported in this version.') + + # create LBaasV2 for the purpose of this test + lbaas_name = 'test_lbaas' + + subnet_list = self.neutron_client.list_subnets(name='private_subnet').\ + get('subnets', []) + + if not subnet_list: + raise RuntimeError('Expected subnet "private_subnet" is not configured.') + + subnet = subnet_list[0] + loadbalancer_data = {'loadbalancer': {'name': lbaas_name, + 'vip_subnet_id': subnet['id']}} + self.neutron_client.create_loadbalancer(body=loadbalancer_data) + + # test that client and action report same data + ngw_unit = zaza.model.get_units(self.application_name, + model_name=self.model_name)[0] + lbaas_from_client = self.neutron_client.list_loadbalancers()\ + .get('loadbalancers', []) + + result = zaza.model.run_action(ngw_unit.entity_id, + 'get-status-lb', + model_name=self.model_name, + action_params={"format": "json"}) + self.assertEqual(result.status, 'completed') + action_data = result.data.get('results', {}).get('load-balancers') + lbaas_from_action = json.loads(action_data) + + ids_from_client = {lbaas['id'] for lbaas in lbaas_from_client} + ids_from_action = {lbaas['id'] for lbaas in lbaas_from_action} + + self.assertEqual(ids_from_action, ids_from_client) + + class NeutronCreateNetworkTest(test_utils.OpenStackBaseTest): """Test creating a Neutron network through the API. From 5f0c43da2ea06f7e80f1d0fdb6ba3fad7fcc82e9 Mon Sep 17 00:00:00 2001 From: Martin Kalcok Date: Wed, 28 Jul 2021 15:59:12 +0200 Subject: [PATCH 02/11] Skip loadbalancer cleanup on releases that don't support them --- zaza/openstack/charm_tests/neutron/tests.py | 20 +++++++++++++------- 1 file changed, 13 insertions(+), 7 deletions(-) diff --git a/zaza/openstack/charm_tests/neutron/tests.py b/zaza/openstack/charm_tests/neutron/tests.py index b3daafe..328f771 100644 --- a/zaza/openstack/charm_tests/neutron/tests.py +++ b/zaza/openstack/charm_tests/neutron/tests.py @@ -258,6 +258,8 @@ class NeutronGatewayStatusActionsTest(test_utils.OpenStackBaseTest): * get-status-lb """ + SKIP_LBAAS_TESTS = True + @classmethod def setUpClass(cls, application_name='neutron-gateway', model_alias=None): """Run class setup for running Neutron Gateway tests.""" @@ -267,13 +269,19 @@ class NeutronGatewayStatusActionsTest(test_utils.OpenStackBaseTest): cls.neutron_client = ( openstack_utils.get_neutron_session_client(cls.keystone_session)) + # Loadbalancer tests not supported on Train and above + current_release = openstack_utils.get_os_release() + bionic_train = openstack_utils.get_os_release('bionic_train') + cls.SKIP_LBAAS_TESTS = current_release >= bionic_train + def tearDown(self): """Cleanup loadbalancers if there are any left over.""" super(NeutronGatewayStatusActionsTest, self).tearDown() - load_balancers = self.neutron_client.list_loadbalancers().get('loadbalancers', - []) - for lbaas in load_balancers: - self.neutron_client.delete_loadbalancer(lbaas['id']) + if not self.SKIP_LBAAS_TESTS: + load_balancers = self.neutron_client.list_loadbalancers().get('loadbalancers', + []) + for lbaas in load_balancers: + self.neutron_client.delete_loadbalancer(lbaas['id']) def test_get_status_routers(self): """Test that routers reported by neutron client match those from action.""" @@ -321,9 +329,7 @@ class NeutronGatewayStatusActionsTest(test_utils.OpenStackBaseTest): def test_get_status_load_balancers(self): """Test that loadbalancers reported by neutron client match those from action.""" - current_release = openstack_utils.get_os_release() - bionic_train = openstack_utils.get_os_release('bionic_train') - if current_release >= bionic_train: + if self.SKIP_LBAAS_TESTS: self.skipTest('LBaasV2 is not supported in this version.') # create LBaasV2 for the purpose of this test From 74959dee3aa360bff5e13c9cdebe45050f2e9f91 Mon Sep 17 00:00:00 2001 From: Martin Kalcok Date: Thu, 29 Jul 2021 09:07:39 +0200 Subject: [PATCH 03/11] fix linting errors --- zaza/openstack/charm_tests/neutron/tests.py | 29 ++++++++++++--------- 1 file changed, 17 insertions(+), 12 deletions(-) diff --git a/zaza/openstack/charm_tests/neutron/tests.py b/zaza/openstack/charm_tests/neutron/tests.py index 328f771..dd54757 100644 --- a/zaza/openstack/charm_tests/neutron/tests.py +++ b/zaza/openstack/charm_tests/neutron/tests.py @@ -263,8 +263,8 @@ class NeutronGatewayStatusActionsTest(test_utils.OpenStackBaseTest): @classmethod def setUpClass(cls, application_name='neutron-gateway', model_alias=None): """Run class setup for running Neutron Gateway tests.""" - super(NeutronGatewayStatusActionsTest, cls).setUpClass(application_name, - model_alias) + super(NeutronGatewayStatusActionsTest, cls).setUpClass( + application_name, model_alias) # set up clients cls.neutron_client = ( openstack_utils.get_neutron_session_client(cls.keystone_session)) @@ -278,19 +278,21 @@ class NeutronGatewayStatusActionsTest(test_utils.OpenStackBaseTest): """Cleanup loadbalancers if there are any left over.""" super(NeutronGatewayStatusActionsTest, self).tearDown() if not self.SKIP_LBAAS_TESTS: - load_balancers = self.neutron_client.list_loadbalancers().get('loadbalancers', - []) + load_balancers = self.neutron_client.list_loadbalancers().get( + 'loadbalancers', []) for lbaas in load_balancers: self.neutron_client.delete_loadbalancer(lbaas['id']) def test_get_status_routers(self): - """Test that routers reported by neutron client match those from action.""" + """Test that get-status-routers reports correct neutron routers.""" ngw_unit = zaza.model.get_units(self.application_name, model_name=self.model_name)[0] - routers_from_client = self.neutron_client.list_routers().get('routers', []) + routers_from_client = self.neutron_client.list_routers().get( + 'routers', []) if not routers_from_client: - self.fail('At least one router must be configured for this test to pass.') + self.fail('At least one router must be configured for this test ' + 'to pass.') result = zaza.model.run_action(ngw_unit.entity_id, 'get-status-routers', @@ -306,13 +308,15 @@ class NeutronGatewayStatusActionsTest(test_utils.OpenStackBaseTest): self.assertEqual(ids_from_action, ids_from_client) def test_get_status_dhcp(self): - """Test that DHCP networks reported by neutron client match those from action.""" + """Test that get-status-dhcp reports correct DHCP networks.""" ngw_unit = zaza.model.get_units(self.application_name, model_name=self.model_name)[0] - networks_from_client = self.neutron_client.list_networks().get('networks', []) + networks_from_client = self.neutron_client.list_networks().get( + 'networks', []) if not networks_from_client: - self.fail('At least one network must be configured for this test to pass.') + self.fail('At least one network must be configured for this test ' + 'to pass.') result = zaza.model.run_action(ngw_unit.entity_id, 'get-status-dhcp', @@ -328,7 +332,7 @@ class NeutronGatewayStatusActionsTest(test_utils.OpenStackBaseTest): self.assertEqual(ids_from_action, ids_from_client) def test_get_status_load_balancers(self): - """Test that loadbalancers reported by neutron client match those from action.""" + """Test that get-status-lb reports correct loadbalancers.""" if self.SKIP_LBAAS_TESTS: self.skipTest('LBaasV2 is not supported in this version.') @@ -339,7 +343,8 @@ class NeutronGatewayStatusActionsTest(test_utils.OpenStackBaseTest): get('subnets', []) if not subnet_list: - raise RuntimeError('Expected subnet "private_subnet" is not configured.') + raise RuntimeError('Expected subnet "private_subnet" is not ' + 'configured.') subnet = subnet_list[0] loadbalancer_data = {'loadbalancer': {'name': lbaas_name, From cbc9c8419460889228e5ec068b8d47e8ccb16f63 Mon Sep 17 00:00:00 2001 From: Martin Kalcok Date: Thu, 29 Jul 2021 12:53:45 +0200 Subject: [PATCH 04/11] Move common functionality into helper method --- zaza/openstack/charm_tests/neutron/tests.py | 57 ++++++++++++--------- 1 file changed, 32 insertions(+), 25 deletions(-) diff --git a/zaza/openstack/charm_tests/neutron/tests.py b/zaza/openstack/charm_tests/neutron/tests.py index dd54757..8d34a88 100644 --- a/zaza/openstack/charm_tests/neutron/tests.py +++ b/zaza/openstack/charm_tests/neutron/tests.py @@ -283,8 +283,27 @@ class NeutronGatewayStatusActionsTest(test_utils.OpenStackBaseTest): for lbaas in load_balancers: self.neutron_client.delete_loadbalancer(lbaas['id']) + def _assert_result_match(self, action_result, resource_list, + resource_name): + """Assert that action_result contains same data as resource_list.""" + # make sure that action completed successfully + self.assertEqual(action_result.status, 'completed') + + # extract data from juju action + action_data = action_result.data.get('results', {}).get(resource_name) + resources_from_action = json.loads(action_data) + + # pull resource IDs from expected resource list and juju action data + expected_resource_ids = {resource['id'] for resource in resource_list} + result_resource_ids = {resource['id'] for resource in + resources_from_action} + + # assert that juju action returned expected resources + self.assertEqual(result_resource_ids, expected_resource_ids) + def test_get_status_routers(self): """Test that get-status-routers reports correct neutron routers.""" + # fetch neutron routers using neutron client ngw_unit = zaza.model.get_units(self.application_name, model_name=self.model_name)[0] routers_from_client = self.neutron_client.list_routers().get( @@ -294,21 +313,18 @@ class NeutronGatewayStatusActionsTest(test_utils.OpenStackBaseTest): self.fail('At least one router must be configured for this test ' 'to pass.') + # fetch neutron routers using juju-action result = zaza.model.run_action(ngw_unit.entity_id, 'get-status-routers', model_name=self.model_name, action_params={"format": "json"}) - self.assertEqual(result.status, 'completed') - action_data = result.data.get('results', {}).get('router-list') - routers_from_action = json.loads(action_data) - ids_from_client = {router['id'] for router in routers_from_client} - ids_from_action = {router['id'] for router in routers_from_action} - - self.assertEqual(ids_from_action, ids_from_client) + # assert that data from neutron client match data from juju action + self._assert_result_match(result, routers_from_client, 'router-list') def test_get_status_dhcp(self): """Test that get-status-dhcp reports correct DHCP networks.""" + # fetch DHCP networks using neutron client ngw_unit = zaza.model.get_units(self.application_name, model_name=self.model_name)[0] networks_from_client = self.neutron_client.list_networks().get( @@ -318,18 +334,15 @@ class NeutronGatewayStatusActionsTest(test_utils.OpenStackBaseTest): self.fail('At least one network must be configured for this test ' 'to pass.') + # fetch DHCP networks using juju-action result = zaza.model.run_action(ngw_unit.entity_id, 'get-status-dhcp', model_name=self.model_name, action_params={"format": "json"}) - self.assertEqual(result.status, 'completed') - action_data = result.data.get('results', {}).get('dhcp-networks') - networks_from_action = json.loads(action_data) - ids_from_client = {net['id'] for net in networks_from_client} - ids_from_action = {net['id'] for net in networks_from_action} - - self.assertEqual(ids_from_action, ids_from_client) + # assert that data from neutron client match data from juju action + self._assert_result_match(result, networks_from_client, + 'dhcp-networks') def test_get_status_load_balancers(self): """Test that get-status-lb reports correct loadbalancers.""" @@ -339,8 +352,8 @@ class NeutronGatewayStatusActionsTest(test_utils.OpenStackBaseTest): # create LBaasV2 for the purpose of this test lbaas_name = 'test_lbaas' - subnet_list = self.neutron_client.list_subnets(name='private_subnet').\ - get('subnets', []) + subnet_list = self.neutron_client.list_subnets( + name='private_subnet').get('subnets', []) if not subnet_list: raise RuntimeError('Expected subnet "private_subnet" is not ' @@ -354,21 +367,15 @@ class NeutronGatewayStatusActionsTest(test_utils.OpenStackBaseTest): # test that client and action report same data ngw_unit = zaza.model.get_units(self.application_name, model_name=self.model_name)[0] - lbaas_from_client = self.neutron_client.list_loadbalancers()\ - .get('loadbalancers', []) + lbaas_from_client = self.neutron_client.list_loadbalancers().get( + 'loadbalancers', []) result = zaza.model.run_action(ngw_unit.entity_id, 'get-status-lb', model_name=self.model_name, action_params={"format": "json"}) - self.assertEqual(result.status, 'completed') - action_data = result.data.get('results', {}).get('load-balancers') - lbaas_from_action = json.loads(action_data) - ids_from_client = {lbaas['id'] for lbaas in lbaas_from_client} - ids_from_action = {lbaas['id'] for lbaas in lbaas_from_action} - - self.assertEqual(ids_from_action, ids_from_client) + self._assert_result_match(result, lbaas_from_client, 'load-balancers') class NeutronCreateNetworkTest(test_utils.OpenStackBaseTest): From 837bfad3956c48de33cd642e16f8462479147c5c Mon Sep 17 00:00:00 2001 From: Martin Kalcok Date: Thu, 29 Jul 2021 17:54:29 +0200 Subject: [PATCH 05/11] Skip LBaas tests on releases below mitaka. The last mitaka test bundle (xenial-mitaka) does not have loadbalancer services enabled. --- zaza/openstack/charm_tests/neutron/tests.py | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/zaza/openstack/charm_tests/neutron/tests.py b/zaza/openstack/charm_tests/neutron/tests.py index 8d34a88..889a46d 100644 --- a/zaza/openstack/charm_tests/neutron/tests.py +++ b/zaza/openstack/charm_tests/neutron/tests.py @@ -269,10 +269,13 @@ class NeutronGatewayStatusActionsTest(test_utils.OpenStackBaseTest): cls.neutron_client = ( openstack_utils.get_neutron_session_client(cls.keystone_session)) - # Loadbalancer tests not supported on Train and above + # Loadbalancer tests not supported on Train and above and on + # releases Mitaka and below current_release = openstack_utils.get_os_release() bionic_train = openstack_utils.get_os_release('bionic_train') - cls.SKIP_LBAAS_TESTS = current_release >= bionic_train + xenial_mitaka = openstack_utils.get_os_release('xenial_mitaka') + cls.SKIP_LBAAS_TESTS = (xenial_mitaka <= current_release or + current_release >= bionic_train) def tearDown(self): """Cleanup loadbalancers if there are any left over.""" From 12afecced1860a7a831c92693a36db1be71b274c Mon Sep 17 00:00:00 2001 From: Martin Kalcok Date: Fri, 30 Jul 2021 14:43:55 +0200 Subject: [PATCH 06/11] move loadbalancer cleanup logic to specific test. --- zaza/openstack/charm_tests/neutron/tests.py | 65 +++++++++++---------- 1 file changed, 34 insertions(+), 31 deletions(-) diff --git a/zaza/openstack/charm_tests/neutron/tests.py b/zaza/openstack/charm_tests/neutron/tests.py index 889a46d..bf57d6d 100644 --- a/zaza/openstack/charm_tests/neutron/tests.py +++ b/zaza/openstack/charm_tests/neutron/tests.py @@ -274,18 +274,9 @@ class NeutronGatewayStatusActionsTest(test_utils.OpenStackBaseTest): current_release = openstack_utils.get_os_release() bionic_train = openstack_utils.get_os_release('bionic_train') xenial_mitaka = openstack_utils.get_os_release('xenial_mitaka') - cls.SKIP_LBAAS_TESTS = (xenial_mitaka <= current_release or + cls.SKIP_LBAAS_TESTS = (current_release <= xenial_mitaka or current_release >= bionic_train) - def tearDown(self): - """Cleanup loadbalancers if there are any left over.""" - super(NeutronGatewayStatusActionsTest, self).tearDown() - if not self.SKIP_LBAAS_TESTS: - load_balancers = self.neutron_client.list_loadbalancers().get( - 'loadbalancers', []) - for lbaas in load_balancers: - self.neutron_client.delete_loadbalancer(lbaas['id']) - def _assert_result_match(self, action_result, resource_list, resource_name): """Assert that action_result contains same data as resource_list.""" @@ -352,33 +343,45 @@ class NeutronGatewayStatusActionsTest(test_utils.OpenStackBaseTest): if self.SKIP_LBAAS_TESTS: self.skipTest('LBaasV2 is not supported in this version.') - # create LBaasV2 for the purpose of this test - lbaas_name = 'test_lbaas' + loadbalancer_id = None - subnet_list = self.neutron_client.list_subnets( - name='private_subnet').get('subnets', []) + try: + # create LBaasV2 for the purpose of this test + lbaas_name = 'test_lbaas' + subnet_list = self.neutron_client.list_subnets( + name='private_subnet').get('subnets', []) - if not subnet_list: - raise RuntimeError('Expected subnet "private_subnet" is not ' - 'configured.') + if not subnet_list: + raise RuntimeError('Expected subnet "private_subnet" is not ' + 'configured.') - subnet = subnet_list[0] - loadbalancer_data = {'loadbalancer': {'name': lbaas_name, - 'vip_subnet_id': subnet['id']}} - self.neutron_client.create_loadbalancer(body=loadbalancer_data) + subnet = subnet_list[0] + loadbalancer_data = {'loadbalancer': {'name': lbaas_name, + 'vip_subnet_id': subnet['id'] + } + } + loadbalancer = self.neutron_client.create_loadbalancer( + body=loadbalancer_data) + loadbalancer_id = loadbalancer['loadbalancer']['id'] - # test that client and action report same data - ngw_unit = zaza.model.get_units(self.application_name, - model_name=self.model_name)[0] - lbaas_from_client = self.neutron_client.list_loadbalancers().get( - 'loadbalancers', []) + # test that client and action report same data + ngw_unit = zaza.model.get_units(self.application_name, + model_name=self.model_name)[0] + lbaas_from_client = self.neutron_client.list_loadbalancers().get( + 'loadbalancers', []) - result = zaza.model.run_action(ngw_unit.entity_id, - 'get-status-lb', - model_name=self.model_name, - action_params={"format": "json"}) + result = zaza.model.run_action(ngw_unit.entity_id, + 'get-status-lb', + model_name=self.model_name, + action_params={"format": "json"}) - self._assert_result_match(result, lbaas_from_client, 'load-balancers') + self._assert_result_match(result, lbaas_from_client, + 'load-balancers') + except Exception as exc: + raise exc + finally: + if loadbalancer_id: + self.neutron_client.delete_loadbalancer(loadbalancer_id) class NeutronCreateNetworkTest(test_utils.OpenStackBaseTest): From a5e5d9ec0fe2666d804fc3656b7b09d0958144d5 Mon Sep 17 00:00:00 2001 From: Martin Kalcok Date: Mon, 2 Aug 2021 09:27:54 +0200 Subject: [PATCH 07/11] add more info to output of juju action fails --- zaza/openstack/charm_tests/neutron/tests.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/zaza/openstack/charm_tests/neutron/tests.py b/zaza/openstack/charm_tests/neutron/tests.py index bf57d6d..0d1738f 100644 --- a/zaza/openstack/charm_tests/neutron/tests.py +++ b/zaza/openstack/charm_tests/neutron/tests.py @@ -281,7 +281,8 @@ class NeutronGatewayStatusActionsTest(test_utils.OpenStackBaseTest): resource_name): """Assert that action_result contains same data as resource_list.""" # make sure that action completed successfully - self.assertEqual(action_result.status, 'completed') + if action_result.status != 'completed': + self.fail('Juju Action failed: {}'.format(action_result.message)) # extract data from juju action action_data = action_result.data.get('results', {}).get(resource_name) From 15ed2ab6dbbc2689f601083d9bf761befdb93f91 Mon Sep 17 00:00:00 2001 From: Martin Kalcok Date: Mon, 2 Aug 2021 17:50:38 +0200 Subject: [PATCH 08/11] Flip test logic for better readability & remove unnecessary `except` block --- zaza/openstack/charm_tests/neutron/tests.py | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/zaza/openstack/charm_tests/neutron/tests.py b/zaza/openstack/charm_tests/neutron/tests.py index 0d1738f..3ed8239 100644 --- a/zaza/openstack/charm_tests/neutron/tests.py +++ b/zaza/openstack/charm_tests/neutron/tests.py @@ -271,11 +271,10 @@ class NeutronGatewayStatusActionsTest(test_utils.OpenStackBaseTest): # Loadbalancer tests not supported on Train and above and on # releases Mitaka and below - current_release = openstack_utils.get_os_release() + current = openstack_utils.get_os_release() bionic_train = openstack_utils.get_os_release('bionic_train') xenial_mitaka = openstack_utils.get_os_release('xenial_mitaka') - cls.SKIP_LBAAS_TESTS = (current_release <= xenial_mitaka or - current_release >= bionic_train) + cls.SKIP_LBAAS_TESTS = not (xenial_mitaka > current < bionic_train) def _assert_result_match(self, action_result, resource_list, resource_name): @@ -378,8 +377,6 @@ class NeutronGatewayStatusActionsTest(test_utils.OpenStackBaseTest): self._assert_result_match(result, lbaas_from_client, 'load-balancers') - except Exception as exc: - raise exc finally: if loadbalancer_id: self.neutron_client.delete_loadbalancer(loadbalancer_id) From b6f6db365b84af5240ab8622c2009cc40e841136 Mon Sep 17 00:00:00 2001 From: Martin Kalcok Date: Fri, 20 Aug 2021 14:23:37 +0200 Subject: [PATCH 09/11] Fix after change of get-status-* actions output --- zaza/openstack/charm_tests/neutron/tests.py | 15 ++++++--------- 1 file changed, 6 insertions(+), 9 deletions(-) diff --git a/zaza/openstack/charm_tests/neutron/tests.py b/zaza/openstack/charm_tests/neutron/tests.py index 3ed8239..1ab88c6 100644 --- a/zaza/openstack/charm_tests/neutron/tests.py +++ b/zaza/openstack/charm_tests/neutron/tests.py @@ -27,6 +27,7 @@ import tenacity from neutronclient.common import exceptions as neutronexceptions +import yaml import zaza import zaza.openstack.charm_tests.nova.utils as nova_utils import zaza.openstack.charm_tests.test_utils as test_utils @@ -285,12 +286,11 @@ class NeutronGatewayStatusActionsTest(test_utils.OpenStackBaseTest): # extract data from juju action action_data = action_result.data.get('results', {}).get(resource_name) - resources_from_action = json.loads(action_data) + resources_from_action = yaml.load(action_data) # pull resource IDs from expected resource list and juju action data expected_resource_ids = {resource['id'] for resource in resource_list} - result_resource_ids = {resource['id'] for resource in - resources_from_action} + result_resource_ids = resources_from_action.keys() # assert that juju action returned expected resources self.assertEqual(result_resource_ids, expected_resource_ids) @@ -310,8 +310,7 @@ class NeutronGatewayStatusActionsTest(test_utils.OpenStackBaseTest): # fetch neutron routers using juju-action result = zaza.model.run_action(ngw_unit.entity_id, 'get-status-routers', - model_name=self.model_name, - action_params={"format": "json"}) + model_name=self.model_name) # assert that data from neutron client match data from juju action self._assert_result_match(result, routers_from_client, 'router-list') @@ -331,8 +330,7 @@ class NeutronGatewayStatusActionsTest(test_utils.OpenStackBaseTest): # fetch DHCP networks using juju-action result = zaza.model.run_action(ngw_unit.entity_id, 'get-status-dhcp', - model_name=self.model_name, - action_params={"format": "json"}) + model_name=self.model_name) # assert that data from neutron client match data from juju action self._assert_result_match(result, networks_from_client, @@ -372,8 +370,7 @@ class NeutronGatewayStatusActionsTest(test_utils.OpenStackBaseTest): result = zaza.model.run_action(ngw_unit.entity_id, 'get-status-lb', - model_name=self.model_name, - action_params={"format": "json"}) + model_name=self.model_name) self._assert_result_match(result, lbaas_from_client, 'load-balancers') From 00742d547f24627c267bcbbd757f38699e22f097 Mon Sep 17 00:00:00 2001 From: Martin Kalcok Date: Fri, 20 Aug 2021 14:28:24 +0200 Subject: [PATCH 10/11] remove unused import --- zaza/openstack/charm_tests/neutron/tests.py | 1 - 1 file changed, 1 deletion(-) diff --git a/zaza/openstack/charm_tests/neutron/tests.py b/zaza/openstack/charm_tests/neutron/tests.py index 1ab88c6..99088a4 100644 --- a/zaza/openstack/charm_tests/neutron/tests.py +++ b/zaza/openstack/charm_tests/neutron/tests.py @@ -21,7 +21,6 @@ import copy -import json import logging import tenacity From 728c9fc294693e532423a8fdb41ec6d0d989e561 Mon Sep 17 00:00:00 2001 From: Martin Kalcok Date: Fri, 10 Sep 2021 16:30:24 +0200 Subject: [PATCH 11/11] Rename actions from "get-status-*" to "show-*" --- zaza/openstack/charm_tests/neutron/tests.py | 30 ++++++++++----------- 1 file changed, 15 insertions(+), 15 deletions(-) diff --git a/zaza/openstack/charm_tests/neutron/tests.py b/zaza/openstack/charm_tests/neutron/tests.py index 99088a4..96b45de 100644 --- a/zaza/openstack/charm_tests/neutron/tests.py +++ b/zaza/openstack/charm_tests/neutron/tests.py @@ -249,13 +249,13 @@ class NeutronGatewayTest(NeutronPluginApiSharedTests): return services -class NeutronGatewayStatusActionsTest(test_utils.OpenStackBaseTest): - """Test status actions of Neutron Gateway Charm. +class NeutronGatewayShowActionsTest(test_utils.OpenStackBaseTest): + """Test "show" actions of Neutron Gateway Charm. actions: - * get-status-routers - * get-status-dhcp - * get-status-lb + * show-routers + * show-dhcp-networks + * show-loadbalancers """ SKIP_LBAAS_TESTS = True @@ -263,7 +263,7 @@ class NeutronGatewayStatusActionsTest(test_utils.OpenStackBaseTest): @classmethod def setUpClass(cls, application_name='neutron-gateway', model_alias=None): """Run class setup for running Neutron Gateway tests.""" - super(NeutronGatewayStatusActionsTest, cls).setUpClass( + super(NeutronGatewayShowActionsTest, cls).setUpClass( application_name, model_alias) # set up clients cls.neutron_client = ( @@ -294,8 +294,8 @@ class NeutronGatewayStatusActionsTest(test_utils.OpenStackBaseTest): # assert that juju action returned expected resources self.assertEqual(result_resource_ids, expected_resource_ids) - def test_get_status_routers(self): - """Test that get-status-routers reports correct neutron routers.""" + def test_show_routers(self): + """Test that show-routers action reports correct neutron routers.""" # fetch neutron routers using neutron client ngw_unit = zaza.model.get_units(self.application_name, model_name=self.model_name)[0] @@ -308,14 +308,14 @@ class NeutronGatewayStatusActionsTest(test_utils.OpenStackBaseTest): # fetch neutron routers using juju-action result = zaza.model.run_action(ngw_unit.entity_id, - 'get-status-routers', + 'show-routers', model_name=self.model_name) # assert that data from neutron client match data from juju action self._assert_result_match(result, routers_from_client, 'router-list') - def test_get_status_dhcp(self): - """Test that get-status-dhcp reports correct DHCP networks.""" + def test_show_dhcp_networks(self): + """Test that show-dhcp-networks reports correct DHCP networks.""" # fetch DHCP networks using neutron client ngw_unit = zaza.model.get_units(self.application_name, model_name=self.model_name)[0] @@ -328,15 +328,15 @@ class NeutronGatewayStatusActionsTest(test_utils.OpenStackBaseTest): # fetch DHCP networks using juju-action result = zaza.model.run_action(ngw_unit.entity_id, - 'get-status-dhcp', + 'show-dhcp-networks', model_name=self.model_name) # assert that data from neutron client match data from juju action self._assert_result_match(result, networks_from_client, 'dhcp-networks') - def test_get_status_load_balancers(self): - """Test that get-status-lb reports correct loadbalancers.""" + def test_show_load_balancers(self): + """Test that show-loadbalancers reports correct loadbalancers.""" if self.SKIP_LBAAS_TESTS: self.skipTest('LBaasV2 is not supported in this version.') @@ -368,7 +368,7 @@ class NeutronGatewayStatusActionsTest(test_utils.OpenStackBaseTest): 'loadbalancers', []) result = zaza.model.run_action(ngw_unit.entity_id, - 'get-status-lb', + 'show-load-balancers', model_name=self.model_name) self._assert_result_match(result, lbaas_from_client,