Merge "Updated from global requirements"
diff --git a/barbican_tempest_plugin/tests/scenario/test_image_signing.py b/barbican_tempest_plugin/tests/scenario/test_image_signing.py
index d641f28..794d33e 100644
--- a/barbican_tempest_plugin/tests/scenario/test_image_signing.py
+++ b/barbican_tempest_plugin/tests/scenario/test_image_signing.py
@@ -13,6 +13,7 @@
# under the License.
from oslo_log import log as logging
+from tempest.api.compute import base as compute_base
from tempest.common import utils
from tempest import config
from tempest import exceptions
@@ -81,3 +82,51 @@
"Signature verification for the image failed",
self.create_server,
image_id=img_uuid)
+
+
+class ImageSigningSnapshotTest(barbican_manager.BarbicanScenarioTest,
+ compute_base.BaseV2ComputeTest):
+
+ @classmethod
+ def setup_clients(cls):
+ super(ImageSigningSnapshotTest, cls).setup_clients()
+ cls.client = cls.servers_client
+
+ @decorators.idempotent_id('f0603dfd-8b2c-44e2-8b0f-d65c87aab257')
+ @utils.services('compute', 'image')
+ def test_signed_image_upload_boot_snapshot(self):
+ """Test that Glance can snapshot an instance using a signed image.
+
+ Verify that a snapshot can be taken of an instance booted from a signed
+ image and that the resulting snapshot image has had all image signature
+ properties dropped from the original image.
+
+ The test follows these steps:
+ * Create an asymmetric keypair
+ * Sign an image file with the private key
+ * Create a certificate with the public key
+ * Store the certificate in Barbican
+ * Store the signed image in Glance
+ * Boot the signed image
+ * Confirm the instance changes state to Active
+ * Snapshot the running instance
+ * Uploading the snapshot and confirm the state moves to ACTIVE
+ """
+ img_uuid = self.sign_and_upload_image()
+ instance = self.create_server(name='signed_img_server_to_snapshot',
+ image_id=img_uuid,
+ wait_until='ACTIVE')
+
+ # Snapshot the instance, wait until the snapshot is active
+ image = self.create_image_from_server(instance['id'],
+ wait_until='ACTIVE')
+
+ # Ensure all img_signature image props have been dropped
+ signature_props = ['img_signature_hash_method',
+ 'img_signature',
+ 'img_signature_key_type',
+ 'img_signature_certificate_uuid']
+ img_meta = self.compute_images_client.list_image_metadata(image['id'])
+ self.assertFalse(any(x in img_meta for x in signature_props))
+
+ self.servers_client.delete_server(instance['id'])