diff options
author | Zuul <zuul@review.opendev.org> | 2020-03-15 23:25:36 +0000 |
---|---|---|
committer | Gerrit Code Review <review@openstack.org> | 2020-03-15 23:25:36 +0000 |
commit | dd359ba38dc74868379f445983185a870a54cc55 (patch) | |
tree | 94c8aee2c14fc87923e460c95f5a30ec40608287 | |
parent | 46dc595f21f758b31efeedcbbfe17bc7f23485d2 (diff) | |
parent | 4916fe115fea151b36f6d63d45ea1dbe8e7a003f (diff) | |
download | designate-dd359ba38dc74868379f445983185a870a54cc55.tar.gz |
Merge "Fix issue with neutron_api tests"
-rw-r--r-- | designate/network_api/neutron.py | 3 | ||||
-rw-r--r-- | designate/tests/test_network_api/__init__.py | 0 | ||||
-rw-r--r-- | designate/tests/test_network_api/test_neutron.py | 52 | ||||
-rw-r--r-- | designate/tests/unit/network_api/test_neutron.py | 140 |
4 files changed, 142 insertions, 53 deletions
diff --git a/designate/network_api/neutron.py b/designate/network_api/neutron.py index 91e5bc96..111da5a2 100644 --- a/designate/network_api/neutron.py +++ b/designate/network_api/neutron.py @@ -15,6 +15,7 @@ # # Copied partially from nova import concurrent.futures +import futurist from neutronclient.common import exceptions as neutron_exceptions from neutronclient.v2_0 import client as clientv20 from oslo_config import cfg @@ -66,7 +67,7 @@ class NeutronNetworkAPI(base.NetworkAPI): ) floating_ips = [] - with concurrent.futures.ThreadPoolExecutor(max_workers=5) as executor: + with futurist.GreenThreadPoolExecutor(max_workers=5) as executor: executors = [ executor.submit( self._get_floating_ips, diff --git a/designate/tests/test_network_api/__init__.py b/designate/tests/test_network_api/__init__.py deleted file mode 100644 index e69de29b..00000000 --- a/designate/tests/test_network_api/__init__.py +++ /dev/null diff --git a/designate/tests/test_network_api/test_neutron.py b/designate/tests/test_network_api/test_neutron.py deleted file mode 100644 index 21de801f..00000000 --- a/designate/tests/test_network_api/test_neutron.py +++ /dev/null @@ -1,52 +0,0 @@ -# Copyright 2013 Hewlett-Packard Development Company, L.P. -# -# Author: Endre Karlson <endre.karlson@hpe.com> -# -# Licensed under the Apache License, Version 2.0 (the "License"); you may -# not use this file except in compliance with the License. You may obtain -# a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT -# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the -# License for the specific language governing permissions and limitations -# under the License. -from neutronclient.v2_0 import client as clientv20 -from neutronclient.common import exceptions as neutron_exceptions -from oslo_config import cfg -from mock import patch -import testtools - -from designate import exceptions -from designate.network_api import get_network_api -from designate.tests import TestCase - - -cfg.CONF.import_group('network_api:neutron', 'designate.network_api.neutron') - - -class NeutronAPITest(TestCase): - def setUp(self): - super(NeutronAPITest, self).setUp() - self.config(endpoints=['RegionOne|http://localhost:9696'], - group='network_api:neutron') - self.api = get_network_api('neutron') - - @patch.object(clientv20.Client, 'list_floatingips', - side_effect=neutron_exceptions.Unauthorized) - def test_unauthorized_returns_empty(self, _): - context = self.get_context(project_id='a', auth_token='test') - - fips = self.api.list_floatingips(context) - self.assertEqual(0, len(fips)) - - @patch.object(clientv20.Client, 'list_floatingips', - side_effect=neutron_exceptions.NeutronException) - def test_communication_failure(self, _): - context = self.get_context(project_id='a', auth_token='test') - - with testtools.ExpectedException( - exceptions.NeutronCommunicationFailure): - self.api.list_floatingips(context) diff --git a/designate/tests/unit/network_api/test_neutron.py b/designate/tests/unit/network_api/test_neutron.py new file mode 100644 index 00000000..14979005 --- /dev/null +++ b/designate/tests/unit/network_api/test_neutron.py @@ -0,0 +1,140 @@ +# Copyright 2013 Hewlett-Packard Development Company, L.P. +# +# Author: Endre Karlson <endre.karlson@hpe.com> +# +# Licensed under the Apache License, Version 2.0 (the "License"); you may +# not use this file except in compliance with the License. You may obtain +# a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT +# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the +# License for the specific language governing permissions and limitations +# under the License. +import mock +from neutronclient.common import exceptions as neutron_exceptions +from neutronclient.v2_0 import client as clientv20 +from oslo_config import cfg +from oslo_config import fixture as cfg_fixture +import oslotest.base + +from designate import context +from designate import exceptions +from designate.network_api import get_network_api +from designate.network_api import neutron + +CONF = cfg.CONF + + +class NeutronNetworkAPITest(oslotest.base.BaseTestCase): + def setUp(self): + super(NeutronNetworkAPITest, self).setUp() + self.useFixture(cfg_fixture.Config(CONF)) + + CONF.set_override( + 'endpoints', ['RegionOne|http://localhost:9696'], + 'network_api:neutron' + ) + + self.api = get_network_api('neutron') + self.context = context.DesignateContext( + user_id='12345', project_id='54321', + ) + + @mock.patch.object(clientv20, 'Client') + def test_get_client(self, mock_client): + neutron.get_client(self.context, 'http://localhost:9696') + + kwargs = mock_client.call_args.kwargs + + self.assertIn('endpoint_url', kwargs) + self.assertIn('timeout', kwargs) + self.assertIn('insecure', kwargs) + self.assertIn('ca_cert', kwargs) + + self.assertNotIn('token', kwargs) + self.assertNotIn('username', kwargs) + + self.assertEqual('http://localhost:9696', kwargs['endpoint_url']) + + @mock.patch.object(clientv20, 'Client') + def test_get_client_using_token(self, mock_client): + self.context = context.DesignateContext( + user_id='12345', project_id='54321', auth_token='token', + ) + + neutron.get_client(self.context, 'http://localhost:9696') + + kwargs = mock_client.call_args.kwargs + + self.assertIn('token', kwargs) + self.assertIn('auth_strategy', kwargs) + self.assertNotIn('username', kwargs) + + self.assertEqual('http://localhost:9696', kwargs['endpoint_url']) + self.assertEqual(kwargs['token'], self.context.auth_token) + + @mock.patch.object(clientv20, 'Client') + def test_get_client_using_admin(self, mock_client): + CONF.set_override( + 'admin_username', 'test', + 'network_api:neutron' + ) + + neutron.get_client(self.context, 'http://localhost:9696') + + kwargs = mock_client.call_args.kwargs + + self.assertIn('auth_strategy', kwargs) + self.assertIn('username', kwargs) + self.assertIn('project_name', kwargs) + self.assertIn('password', kwargs) + self.assertIn('auth_url', kwargs) + self.assertNotIn('token', kwargs) + + self.assertEqual('http://localhost:9696', kwargs['endpoint_url']) + self.assertEqual( + kwargs['username'], CONF['network_api:neutron'].admin_username + ) + + @mock.patch.object(neutron, 'get_client') + def test_list_floatingips(self, get_client): + driver = mock.Mock() + driver.list_floatingips.return_value = {'floatingips': [ + { + 'id': '123', + 'floating_ip_address': '192.168.0.100', + 'region': 'RegionOne' + }, + { + 'id': '456', + 'floating_ip_address': '192.168.0.200', + 'region': 'RegionOne' + }, + ]} + get_client.return_value = driver + + self.assertEqual(2, len(self.api.list_floatingips(self.context))) + + @mock.patch.object(neutron, 'get_client') + def test_list_floatingips_unauthorized(self, get_client): + driver = mock.Mock() + driver.list_floatingips.side_effect = neutron_exceptions.Unauthorized + get_client.return_value = driver + + self.assertEqual(0, len(self.api.list_floatingips(self.context))) + + @mock.patch.object(neutron, 'get_client') + def test_list_floatingips_communication_failure(self, get_client): + driver = mock.Mock() + driver.list_floatingips.side_effect = ( + neutron_exceptions.NeutronException + ) + get_client.return_value = driver + + self.assertRaises( + exceptions.NeutronCommunicationFailure, + self.api.list_floatingips, self.context + ) |