diff --git a/shade/tests/unit/test_caching.py b/shade/tests/unit/test_caching.py index d4bcaffad..72acd8300 100644 --- a/shade/tests/unit/test_caching.py +++ b/shade/tests/unit/test_caching.py @@ -178,18 +178,23 @@ class TestMemoryCache(base.RequestsMockTestCase): self.cloud.list_projects()) self.assert_calls() - @mock.patch('shade.OpenStackCloud.nova_client') - def test_list_servers_no_herd(self, nova_mock): + def test_list_servers_no_herd(self): self.cloud._SERVER_AGE = 2 - fake_server = fakes.FakeServer('1234', '', 'ACTIVE') - nova_mock.servers.list.return_value = [fake_server] + fake_server = fakes.make_fake_server('1234', 'name') + self.register_uris([ + dict(method='GET', + uri=self.get_mock_url( + 'compute', 'public', append=['servers', 'detail']), + json={'servers': [fake_server]}), + ]) with concurrent.futures.ThreadPoolExecutor(16) as pool: for i in range(16): pool.submit(lambda: self.cloud.list_servers(bare=True)) # It's possible to race-condition 16 threads all in the # single initial lock without a tiny sleep time.sleep(0.001) - self.assertEqual(1, nova_mock.servers.list.call_count) + + self.assert_calls() def test_list_volumes(self): fake_volume = fakes.FakeVolume('volume1', 'available', diff --git a/shade/tests/unit/test_image_snapshot.py b/shade/tests/unit/test_image_snapshot.py index 860cb19e1..1e3a854fa 100644 --- a/shade/tests/unit/test_image_snapshot.py +++ b/shade/tests/unit/test_image_snapshot.py @@ -25,6 +25,9 @@ class TestImageSnapshot(base.RequestsMockTestCase): super(TestImageSnapshot, self).setUp() self.server_id = str(uuid.uuid4()) self.image_id = str(uuid.uuid4()) + self.server_name = self.getUniqueString('name') + self.fake_server = fakes.make_fake_server( + self.server_id, self.server_name) def test_create_image_snapshot_wait_until_active_never_active(self): snapshot_name = 'test-snapshot' @@ -97,17 +100,3 @@ class TestImageSnapshot(base.RequestsMockTestCase): self.assertEqual(image['id'], self.image_id) self.assert_calls() - - def test_create_image_snapshot_bad_name_exception(self): - self.register_uris([ - dict( - method='POST', - uri='{endpoint}/servers/{server_id}/action'.format( - endpoint=fakes.COMPUTE_ENDPOINT, - server_id=self.server_id), - json=dict(servers=[])), - ]) - self.assertRaises( - exc.OpenStackCloudException, - self.cloud.create_image_snapshot, - 'test-snapshot', self.server_id) diff --git a/shade/tests/unit/test_server_delete_metadata.py b/shade/tests/unit/test_server_delete_metadata.py index b34cf507f..29fea9a8a 100644 --- a/shade/tests/unit/test_server_delete_metadata.py +++ b/shade/tests/unit/test_server_delete_metadata.py @@ -17,35 +17,59 @@ test_server_delete_metadata Tests for the `delete_server_metadata` command. """ -import mock +import uuid -from shade import OpenStackCloud -from shade.exc import OpenStackCloudException +from shade.exc import OpenStackCloudURINotFound +from shade.tests import fakes from shade.tests.unit import base -class TestServerDeleteMetadata(base.TestCase): +class TestServerDeleteMetadata(base.RequestsMockTestCase): - @mock.patch.object(OpenStackCloud, 'nova_client') - def test_server_delete_metadata_with_exception(self, mock_nova): + def setUp(self): + super(TestServerDeleteMetadata, self).setUp() + self.server_id = str(uuid.uuid4()) + self.server_name = self.getUniqueString('name') + self.fake_server = fakes.make_fake_server( + self.server_id, self.server_name) + + def test_server_delete_metadata_with_exception(self): """ - Test that a generic exception in the novaclient delete_meta raises - an exception in delete_server_metadata. + Test that a missing metadata throws an exception. """ - mock_nova.servers.delete_meta.side_effect = Exception("exception") + self.register_uris([ + dict(method='GET', + uri=self.get_mock_url( + 'compute', 'public', append=['servers', 'detail']), + json={'servers': [self.fake_server]}), + dict(method='DELETE', + uri=self.get_mock_url( + 'compute', 'public', + append=['servers', self.fake_server['id'], + 'metadata', 'key']), + status_code=404), + ]) self.assertRaises( - OpenStackCloudException, self.cloud.delete_server_metadata, - {'id': 'server-id'}, ['key']) + OpenStackCloudURINotFound, self.cloud.delete_server_metadata, + self.server_name, ['key']) - @mock.patch.object(OpenStackCloud, 'nova_client') - def test_server_delete_metadata_with_exception_reraise(self, mock_nova): - """ - Test that an OpenStackCloudException exception gets re-raised - in delete_server_metadata. - """ - mock_nova.servers.delete_meta.side_effect = OpenStackCloudException("") + self.assert_calls() - self.assertRaises( - OpenStackCloudException, self.cloud.delete_server_metadata, - 'server-id', ['key']) + def test_server_delete_metadata(self): + self.register_uris([ + dict(method='GET', + uri=self.get_mock_url( + 'compute', 'public', append=['servers', 'detail']), + json={'servers': [self.fake_server]}), + dict(method='DELETE', + uri=self.get_mock_url( + 'compute', 'public', + append=['servers', self.fake_server['id'], + 'metadata', 'key']), + status_code=200), + ]) + + self.cloud.delete_server_metadata(self.server_id, ['key']) + + self.assert_calls() diff --git a/shade/tests/unit/test_server_set_metadata.py b/shade/tests/unit/test_server_set_metadata.py index a892cddaf..2af4787af 100644 --- a/shade/tests/unit/test_server_set_metadata.py +++ b/shade/tests/unit/test_server_set_metadata.py @@ -17,35 +17,62 @@ test_server_set_metadata Tests for the `set_server_metadata` command. """ -import mock +import uuid -from shade import OpenStackCloud -from shade.exc import OpenStackCloudException +from shade.exc import OpenStackCloudBadRequest +from shade.tests import fakes from shade.tests.unit import base -class TestServerSetMetadata(base.TestCase): +class TestServerSetMetadata(base.RequestsMockTestCase): - @mock.patch.object(OpenStackCloud, 'nova_client') - def test_server_set_metadata_with_set_meta_exception(self, mock_nova): + def setUp(self): + super(TestServerSetMetadata, self).setUp() + self.server_id = str(uuid.uuid4()) + self.server_name = self.getUniqueString('name') + self.fake_server = fakes.make_fake_server( + self.server_id, self.server_name) + + def test_server_set_metadata_with_exception(self): """ - Test that a generic exception in the novaclient set_meta raises - an exception in set_server_metadata. + Test that a generic exception in the novaclient delete_meta raises + an exception in delete_server_metadata. """ - mock_nova.servers.set_meta.side_effect = Exception("exception") + self.register_uris([ + dict(method='GET', + uri=self.get_mock_url( + 'compute', 'public', append=['servers', 'detail']), + json={'servers': [self.fake_server]}), + dict(method='POST', + uri=self.get_mock_url( + 'compute', 'public', + append=['servers', self.fake_server['id'], + 'metadata']), + validate=dict(json={'metadata': {'meta': 'data'}}), + json={}, + status_code=400), + ]) self.assertRaises( - OpenStackCloudException, self.cloud.set_server_metadata, - {'id': 'server-id'}, {'meta': 'data'}) + OpenStackCloudBadRequest, self.cloud.set_server_metadata, + self.server_name, {'meta': 'data'}) - @mock.patch.object(OpenStackCloud, 'nova_client') - def test_server_set_metadata_with_exception_reraise(self, mock_nova): - """ - Test that an OpenStackCloudException exception gets re-raised - in set_server_metadata. - """ - mock_nova.servers.set_meta.side_effect = OpenStackCloudException("") + self.assert_calls() - self.assertRaises( - OpenStackCloudException, self.cloud.set_server_metadata, - 'server-id', {'meta': 'data'}) + def test_server_set_metadata(self): + self.register_uris([ + dict(method='GET', + uri=self.get_mock_url( + 'compute', 'public', append=['servers', 'detail']), + json={'servers': [self.fake_server]}), + dict(method='POST', + uri=self.get_mock_url( + 'compute', 'public', + append=['servers', self.fake_server['id'], 'metadata']), + validate=dict(json={'metadata': {'meta': 'data'}}), + status_code=200), + ]) + + self.cloud.set_server_metadata(self.server_id, {'meta': 'data'}) + + self.assert_calls() diff --git a/shade/tests/unit/test_shade.py b/shade/tests/unit/test_shade.py index 2d5941aa2..73b51f163 100644 --- a/shade/tests/unit/test_shade.py +++ b/shade/tests/unit/test_shade.py @@ -11,7 +11,7 @@ # under the License. import mock -import munch +import uuid import testtools @@ -68,32 +68,49 @@ class TestShade(base.RequestsMockTestCase): r = self.cloud.get_image('doesNotExist') self.assertIsNone(r) - @mock.patch.object(shade.OpenStackCloud, '_expand_server') - @mock.patch.object(shade.OpenStackCloud, 'list_servers') - def test_get_server(self, mock_list, mock_expand): - server1 = dict(id='123', name='mickey') - server2 = dict(id='345', name='mouse') + def test_get_server(self): + server1 = fakes.make_fake_server('123', 'mickey') + server2 = fakes.make_fake_server('345', 'mouse') + + self.register_uris([ + dict(method='GET', + uri=self.get_mock_url( + 'compute', 'public', append=['servers', 'detail']), + json={'servers': [server1, server2]}), + ]) - def expand_server(server, detailed, bare): - return server - mock_expand.side_effect = expand_server - mock_list.return_value = [server1, server2] r = self.cloud.get_server('mickey') self.assertIsNotNone(r) - self.assertDictEqual(server1, r) + self.assertEqual(server1['name'], r['name']) + + self.assert_calls() + + def test_get_server_not_found(self): + self.register_uris([ + dict(method='GET', + uri=self.get_mock_url( + 'compute', 'public', append=['servers', 'detail']), + json={'servers': []}), + ]) - @mock.patch.object(shade.OpenStackCloud, 'search_servers') - def test_get_server_not_found(self, mock_search): - mock_search.return_value = [] r = self.cloud.get_server('doesNotExist') self.assertIsNone(r) - @mock.patch.object(shade.OpenStackCloud, 'nova_client') - def test_list_servers_exception(self, mock_client): - mock_client.servers.list.side_effect = Exception() + self.assert_calls() + + def test_list_servers_exception(self): + self.register_uris([ + dict(method='GET', + uri=self.get_mock_url( + 'compute', 'public', append=['servers', 'detail']), + status_code=400) + ]) + self.assertRaises(exc.OpenStackCloudException, self.cloud.list_servers) + self.assert_calls() + def test__neutron_exceptions_resource_not_found(self): self.register_uris([ dict(method='GET', @@ -116,64 +133,39 @@ class TestShade(base.RequestsMockTestCase): self.cloud.list_networks) self.assert_calls() - @mock.patch.object(shade._tasks.ServerList, 'main') - @mock.patch('shade.meta.add_server_interfaces') - def test_list_servers(self, mock_add_srv_int, mock_serverlist): - '''This test verifies that calling list_servers results in a call - to the ServerList task.''' - server_obj = munch.Munch({'name': 'testserver', - 'id': '1', - 'flavor': {}, - 'addresses': {}, - 'accessIPv4': '', - 'accessIPv6': '', - 'image': ''}) - mock_serverlist.return_value = [server_obj] - mock_add_srv_int.side_effect = [server_obj] + def test_list_servers(self): + server_id = str(uuid.uuid4()) + server_name = self.getUniqueString('name') + fake_server = fakes.make_fake_server(server_id, server_name) + self.register_uris([ + dict(method='GET', + uri=self.get_mock_url( + 'compute', 'public', append=['servers', 'detail']), + json={'servers': [fake_server]}), + ]) r = self.cloud.list_servers() self.assertEqual(1, len(r)) - self.assertEqual(1, mock_add_srv_int.call_count) - self.assertEqual('testserver', r[0]['name']) + self.assertEqual(server_name, r[0]['name']) - @mock.patch.object(shade._tasks.ServerList, 'main') - @mock.patch('shade.meta.get_hostvars_from_server') - def test_list_servers_detailed(self, - mock_get_hostvars_from_server, - mock_serverlist): + self.assert_calls() + + def test_list_servers_all_projects(self): '''This test verifies that when list_servers is called with - `detailed=True` that it calls `get_hostvars_from_server` for each - server in the list.''' - mock_serverlist.return_value = [ - fakes.FakeServer('server1', '', 'ACTIVE'), - fakes.FakeServer('server2', '', 'ACTIVE'), - ] - mock_get_hostvars_from_server.side_effect = [ - {'name': 'server1', 'id': '1'}, - {'name': 'server2', 'id': '2'}, - ] - - r = self.cloud.list_servers(detailed=True) - - self.assertEqual(2, len(r)) - self.assertEqual(len(r), mock_get_hostvars_from_server.call_count) - self.assertEqual('server1', r[0]['name']) - self.assertEqual('server2', r[1]['name']) - - @mock.patch.object(shade.OpenStackCloud, 'nova_client') - def test_list_servers_all_projects(self, mock_nova_client): - '''This test verifies that when list_servers is called with - `all_projects=True` that it passes `all_tenants=1` to novaclient.''' - mock_nova_client.servers.list.return_value = [ - fakes.FakeServer('server1', '', 'ACTIVE'), - fakes.FakeServer('server2', '', 'ACTIVE'), - ] + `all_projects=True` that it passes `all_tenants=True` to nova.''' + self.register_uris([ + dict(method='GET', + uri=self.get_mock_url( + 'compute', 'public', append=['servers', 'detail'], + qs_elements=['all_tenants=True']), + complete_qs=True, + json={'servers': []}), + ]) self.cloud.list_servers(all_projects=True) - mock_nova_client.servers.list.assert_called_with( - search_opts={'all_tenants': True}) + self.assert_calls() def test_iterate_timeout_bad_wait(self): with testtools.ExpectedException(