Add new test for the volume upload in Glance functionality
The new test belongs to the _actions endpoints. A new method
"upload_volume" is added in the base volume class to support the
functionality.
Change-Id: I7f9f0e6983199012522d5a398dd7759d9adb7d71
Fixes: bug #1193379
diff --git a/tempest/api/volume/test_volumes_actions.py b/tempest/api/volume/test_volumes_actions.py
index cd5ab34..56a3006 100644
--- a/tempest/api/volume/test_volumes_actions.py
+++ b/tempest/api/volume/test_volumes_actions.py
@@ -27,7 +27,7 @@
def setUpClass(cls):
super(VolumesActionsTest, cls).setUpClass()
cls.client = cls.volumes_client
- cls.servers_client = cls.servers_client
+ cls.image_client = cls.os.image_client
# Create a test shared instance and volume for attach/detach tests
srv_name = rand_name('Instance-')
@@ -93,3 +93,16 @@
finally:
self.client.detach_volume(self.volume['id'])
self.client.wait_for_volume_status(self.volume['id'], 'available')
+
+ @attr(type='gate')
+ def test_volume_upload(self):
+ # NOTE(gfidente): the volume uploaded in Glance comes from setUpClass,
+ # it is shared with the other tests. After it is uploaded in Glance,
+ # there is no way to delete it from Cinder, so we delete it from Glance
+ # using the Glance image_client and from Cinder via tearDownClass.
+ image_name = rand_name('Image-')
+ resp, body = self.client.upload_volume(self.volume['id'], image_name)
+ image_id = body["image_id"]
+ self.addCleanup(self.image_client.delete_image, image_id)
+ self.assertEqual(202, resp.status)
+ self.image_client.wait_for_image_status(image_id, 'active')
diff --git a/tempest/services/volume/json/volumes_client.py b/tempest/services/volume/json/volumes_client.py
index 87c0eba..c22b398 100644
--- a/tempest/services/volume/json/volumes_client.py
+++ b/tempest/services/volume/json/volumes_client.py
@@ -85,6 +85,17 @@
"""Deletes the Specified Volume."""
return self.delete("volumes/%s" % str(volume_id))
+ def upload_volume(self, volume_id, image_name):
+ """Uploads a volume in Glance."""
+ post_body = {
+ 'image_name': image_name,
+ }
+ post_body = json.dumps({'os-volume_upload_image': post_body})
+ url = 'volumes/%s/action' % (volume_id)
+ resp, body = self.post(url, post_body, self.headers)
+ body = json.loads(body)
+ return resp, body['os-volume_upload_image']
+
def attach_volume(self, volume_id, instance_uuid, mountpoint):
"""Attaches a volume to a given instance on a given mountpoint."""
post_body = {