diff options
Diffstat (limited to 'openstack_dashboard/test/api_tests/glance_rest_tests.py')
-rw-r--r-- | openstack_dashboard/test/api_tests/glance_rest_tests.py | 250 |
1 files changed, 235 insertions, 15 deletions
diff --git a/openstack_dashboard/test/api_tests/glance_rest_tests.py b/openstack_dashboard/test/api_tests/glance_rest_tests.py index 58ae091c0..41410b141 100644 --- a/openstack_dashboard/test/api_tests/glance_rest_tests.py +++ b/openstack_dashboard/test/api_tests/glance_rest_tests.py @@ -14,11 +14,16 @@ # limitations under the License. import mock +from openstack_dashboard import api from openstack_dashboard.api.rest import glance from openstack_dashboard.test import helpers as test -class ImagesRestTestCase(test.TestCase): +class ImagesRestTestCase(test.ResetImageAPIVersionMixin, test.TestCase): + def setUp(self): + super(ImagesRestTestCase, self).setUp() + api.glance.VERSIONS.clear_active_cache() + # # Version # @@ -70,7 +75,7 @@ class ImagesRestTestCase(test.TestCase): gc.image_delete.assert_called_once_with(request, "1") @mock.patch.object(glance.api, 'glance') - def test_image_edit(self, gc): + def test_image_edit_v1(self, gc): request = self.mock_rest_request(body='''{"name": "Test", "disk_format": "aki", "container_format": "aki", "visibility": "public", "protected": false, @@ -79,6 +84,7 @@ class ImagesRestTestCase(test.TestCase): "description": "description", "kernel": "kernel", "min_disk": 10, "min_ram": 5, "ramdisk": 10 } ''') + gc.VERSIONS.active = 1 metadata = {'name': 'Test', 'disk_format': 'aki', @@ -87,13 +93,41 @@ class ImagesRestTestCase(test.TestCase): 'protected': False, 'min_disk': 10, 'min_ram': 5, - 'properties': { - 'description': 'description', - 'architecture': 'testArch', - 'ramdisk_id': 10, - 'kernel_id': 'kernel', - }, - 'purge_props': False} + 'properties': {'description': 'description', + 'architecture': 'testArch', + 'ramdisk_id': 10, + 'kernel_id': 'kernel'} + } + + response = glance.Image().patch(request, "1") + self.assertStatusCode(response, 204) + self.assertEqual(response.content.decode('utf-8'), '') + gc.image_update.assert_called_once_with(request, '1', **metadata) + + @mock.patch.object(glance.api, 'glance') + def test_image_edit_v2(self, gc): + request = self.mock_rest_request(body='''{"name": "Test", + "disk_format": "aki", "container_format": "aki", + "visibility": "public", "protected": false, + "image_url": "test.com", + "source_type": "url", "architecture": "testArch", + "description": "description", "kernel": "kernel", + "min_disk": 10, "min_ram": 5, "ramdisk": 10 } + ''') + gc.VERSIONS.active = 2 + + metadata = {'name': 'Test', + 'disk_format': 'aki', + 'container_format': 'aki', + 'visibility': 'public', + 'protected': False, + 'min_disk': 10, + 'min_ram': 5, + 'description': 'description', + 'architecture': 'testArch', + 'ramdisk_id': 10, + 'kernel_id': 'kernel' + } response = glance.Image().patch(request, "1") self.assertStatusCode(response, 204) @@ -126,7 +160,7 @@ class ImagesRestTestCase(test.TestCase): **kwargs) @mock.patch.object(glance.api, 'glance') - def test_image_create_basic(self, gc): + def test_image_create_v1_basic(self, gc): request = self.mock_rest_request(body='''{"name": "Test", "disk_format": "aki", "import_data": false, "visibility": "public", "container_format": "aki", @@ -136,6 +170,7 @@ class ImagesRestTestCase(test.TestCase): "min_disk": 10, "min_ram": 5, "ramdisk": 10 } ''') new = gc.image_create.return_value + gc.VERSIONS.active = 1 new.to_dict.return_value = {'name': 'testimage'} new.name = 'testimage' @@ -162,7 +197,43 @@ class ImagesRestTestCase(test.TestCase): gc.image_create.assert_called_once_with(request, **metadata) @mock.patch.object(glance.api, 'glance') - def test_image_create_shared(self, gc): + def test_image_create_v2_basic(self, gc): + request = self.mock_rest_request(body='''{"name": "Test", + "disk_format": "aki", "import_data": false, + "visibility": "public", "container_format": "aki", + "protected": false, "image_url": "test.com", + "source_type": "url", "architecture": "testArch", + "description": "description", "kernel": "kernel", + "min_disk": 10, "min_ram": 5, "ramdisk": 10 } + ''') + gc.VERSIONS.active = 2 + new = gc.image_create.return_value + new.to_dict.return_value = {'name': 'testimage'} + new.name = 'testimage' + + metadata = {'name': 'Test', + 'disk_format': 'aki', + 'container_format': 'aki', + 'visibility': 'public', + 'protected': False, + 'min_disk': 10, + 'min_ram': 5, + 'location': 'test.com', + 'description': 'description', + 'architecture': 'testArch', + 'ramdisk_id': 10, + 'kernel_id': 'kernel', + } + + response = glance.Images().put(request) + self.assertStatusCode(response, 201) + self.assertEqual(response.content.decode('utf-8'), + '{"name": "testimage"}') + self.assertEqual(response['location'], '/api/glance/images/testimage') + gc.image_create.assert_called_once_with(request, **metadata) + + @mock.patch.object(glance.api, 'glance') + def test_image_create_v1_shared(self, gc): request = self.mock_rest_request(body='''{"name": "Test", "disk_format": "aki", "import_data": false, "visibility": "shared", "container_format": "aki", @@ -171,6 +242,7 @@ class ImagesRestTestCase(test.TestCase): "description": "description", "kernel": "kernel", "min_disk": 10, "min_ram": 5, "ramdisk": 10 } ''') + gc.VERSIONS.active = 1 new = gc.image_create.return_value new.to_dict.return_value = {'name': 'testimage'} new.name = 'testimage' @@ -198,7 +270,43 @@ class ImagesRestTestCase(test.TestCase): gc.image_create.assert_called_once_with(request, **metadata) @mock.patch.object(glance.api, 'glance') - def test_image_create_private(self, gc): + def test_image_create_v2_shared(self, gc): + request = self.mock_rest_request(body='''{"name": "Test", + "disk_format": "aki", "import_data": false, + "visibility": "shared", "container_format": "aki", + "protected": false, "image_url": "test.com", + "source_type": "url", "architecture": "testArch", + "description": "description", "kernel": "kernel", + "min_disk": 10, "min_ram": 5, "ramdisk": 10 } + ''') + gc.VERSIONS.active = 2 + new = gc.image_create.return_value + new.to_dict.return_value = {'name': 'testimage'} + new.name = 'testimage' + + metadata = {'name': 'Test', + 'disk_format': 'aki', + 'container_format': 'aki', + 'visibility': 'shared', + 'protected': False, + 'min_disk': 10, + 'min_ram': 5, + 'location': 'test.com', + 'description': 'description', + 'architecture': 'testArch', + 'ramdisk_id': 10, + 'kernel_id': 'kernel', + } + + response = glance.Images().put(request) + self.assertStatusCode(response, 201) + self.assertEqual(response.content.decode('utf-8'), + '{"name": "testimage"}') + self.assertEqual(response['location'], '/api/glance/images/testimage') + gc.image_create.assert_called_once_with(request, **metadata) + + @mock.patch.object(glance.api, 'glance') + def test_image_create_v1_private(self, gc): request = self.mock_rest_request(body='''{"name": "Test", "disk_format": "aki", "import_data": false, "visibility": "private", "container_format": "aki", @@ -207,6 +315,7 @@ class ImagesRestTestCase(test.TestCase): "description": "description", "kernel": "kernel", "min_disk": 10, "min_ram": 5, "ramdisk": 10 } ''') + gc.VERSIONS.active = 1 new = gc.image_create.return_value new.to_dict.return_value = {'name': 'testimage'} new.name = 'testimage' @@ -234,7 +343,60 @@ class ImagesRestTestCase(test.TestCase): gc.image_create.assert_called_once_with(request, **metadata) @mock.patch.object(glance.api, 'glance') - def test_image_create_bad_visibility(self, gc): + def test_image_create_v2_private(self, gc): + request = self.mock_rest_request(body='''{"name": "Test", + "disk_format": "aki", "import_data": false, + "visibility": "private", "container_format": "aki", + "protected": false, "image_url": "test.com", + "source_type": "url", "architecture": "testArch", + "description": "description", "kernel": "kernel", + "min_disk": 10, "min_ram": 5, "ramdisk": 10 } + ''') + gc.VERSIONS.active = 2 + new = gc.image_create.return_value + new.to_dict.return_value = {'name': 'testimage'} + new.name = 'testimage' + + metadata = {'name': 'Test', + 'disk_format': 'aki', + 'container_format': 'aki', + 'visibility': 'private', + 'protected': False, + 'min_disk': 10, + 'min_ram': 5, + 'location': 'test.com', + 'description': 'description', + 'architecture': 'testArch', + 'ramdisk_id': 10, + 'kernel_id': 'kernel', + } + + response = glance.Images().put(request) + self.assertStatusCode(response, 201) + self.assertEqual(response.content.decode('utf-8'), + '{"name": "testimage"}') + self.assertEqual(response['location'], '/api/glance/images/testimage') + gc.image_create.assert_called_once_with(request, **metadata) + + @mock.patch.object(glance.api, 'glance') + def test_image_create_v1_bad_visibility(self, gc): + request = self.mock_rest_request(body='''{"name": "Test", + "disk_format": "aki", "import_data": false, + "visibility": "verybad", "container_format": "aki", + "protected": false, "image_url": "test.com", + "source_type": "url", "architecture": "testArch", + "description": "description", "kernel": "kernel", + "min_disk": 10, "min_ram": 5, "ramdisk": 10 } + ''') + gc.VERSIONS.active = 1 + + response = glance.Images().put(request) + self.assertStatusCode(response, 400) + self.assertEqual(response.content.decode('utf-8'), + '"invalid visibility option: verybad"') + + @mock.patch.object(glance.api, 'glance') + def test_image_create_v2_bad_visibility(self, gc): request = self.mock_rest_request(body='''{"name": "Test", "disk_format": "aki", "import_data": false, "visibility": "verybad", "container_format": "aki", @@ -243,6 +405,7 @@ class ImagesRestTestCase(test.TestCase): "description": "description", "kernel": "kernel", "min_disk": 10, "min_ram": 5, "ramdisk": 10 } ''') + gc.VERSIONS.active = 2 response = glance.Images().put(request) self.assertStatusCode(response, 400) @@ -250,12 +413,13 @@ class ImagesRestTestCase(test.TestCase): '"invalid visibility option: verybad"') @mock.patch.object(glance.api, 'glance') - def test_image_create_required(self, gc): + def test_image_create_v1_required(self, gc): request = self.mock_rest_request(body='''{"name": "Test", "disk_format": "raw", "import_data": true, "container_format": "docker", "visibility": "public", "protected": false, "source_type": "url", "image_url": "test.com" }''') + gc.VERSIONS.active = 1 new = gc.image_create.return_value new.to_dict.return_value = {'name': 'testimage'} new.name = 'testimage' @@ -276,13 +440,40 @@ class ImagesRestTestCase(test.TestCase): gc.image_create.assert_called_once_with(request, **metadata) @mock.patch.object(glance.api, 'glance') - def test_image_create_additional_props(self, gc): + def test_image_create_v2_required(self, gc): + request = self.mock_rest_request(body='''{"name": "Test", + "disk_format": "raw", "import_data": true, + "container_format": "docker", + "visibility": "public", "protected": false, + "source_type": "url", "image_url": "test.com" }''') + gc.VERSIONS.active = 2 + new = gc.image_create.return_value + new.to_dict.return_value = {'name': 'testimage'} + new.name = 'testimage' + + metadata = {'name': 'Test', + 'disk_format': 'raw', + 'container_format': 'docker', + 'copy_from': 'test.com', + 'visibility': 'public', + 'protected': False, + 'min_disk': 0, + 'min_ram': 0 + } + response = glance.Images().put(request) + self.assertStatusCode(response, 201) + self.assertEqual(response['location'], '/api/glance/images/testimage') + gc.image_create.assert_called_once_with(request, **metadata) + + @mock.patch.object(glance.api, 'glance') + def test_image_create_v1_additional_props(self, gc): request = self.mock_rest_request(body='''{"name": "Test", "disk_format": "raw", "import_data": true, "container_format": "docker", "visibility": "public", "protected": false, "arbitrary": "property", "another": "prop", "source_type": "url", "image_url": "test.com" }''') + gc.VERSIONS.active = 1 new = gc.image_create.return_value new.to_dict.return_value = {'name': 'testimage'} new.name = 'testimage' @@ -303,6 +494,35 @@ class ImagesRestTestCase(test.TestCase): gc.image_create.assert_called_once_with(request, **metadata) @mock.patch.object(glance.api, 'glance') + def test_image_create_v2_additional_props(self, gc): + request = self.mock_rest_request(body='''{"name": "Test", + "disk_format": "raw", "import_data": true, + "container_format": "docker", + "visibility": "public", "protected": false, + "arbitrary": "property", "another": "prop", + "source_type": "url", "image_url": "test.com" }''') + gc.VERSIONS.active = 2 + new = gc.image_create.return_value + new.to_dict.return_value = {'name': 'testimage'} + new.name = 'testimage' + + metadata = {'name': 'Test', + 'disk_format': 'raw', + 'container_format': 'docker', + 'copy_from': 'test.com', + 'visibility': 'public', + 'protected': False, + 'min_disk': 0, + 'min_ram': 0, + 'arbitrary': 'property', + 'another': 'prop' + } + response = glance.Images().put(request) + self.assertStatusCode(response, 201) + self.assertEqual(response['location'], '/api/glance/images/testimage') + gc.image_create.assert_called_once_with(request, **metadata) + + @mock.patch.object(glance.api, 'glance') def test_namespace_get_list(self, gc): request = self.mock_rest_request(**{'GET': {}}) gc.metadefs_namespace_full_list.return_value = ( |