summaryrefslogtreecommitdiff
path: root/openstack_dashboard/test/api_tests/glance_rest_tests.py
diff options
context:
space:
mode:
Diffstat (limited to 'openstack_dashboard/test/api_tests/glance_rest_tests.py')
-rw-r--r--openstack_dashboard/test/api_tests/glance_rest_tests.py250
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 = (