Allow glance support for GPT images

This tweaks the image format tests to allow GPT to succeed if glance
is new enough. If gpt is not in image_disk_formats then it will skip
on failure, else it will require that it works. This allows us to
merge this ahead of glance support, tolerate it passing once glance
lands that patch, and we can move this to always-require-if-configured
later.

Related to blueprint glance-as-defender

Change-Id: Idefcf5c67d40809377d72a87c0c3b87b0a36e097
diff --git a/tempest/api/image/v2/test_images_formats.py b/tempest/api/image/v2/test_images_formats.py
index f0dec90..520a215 100644
--- a/tempest/api/image/v2/test_images_formats.py
+++ b/tempest/api/image/v2/test_images_formats.py
@@ -90,14 +90,18 @@
     @decorators.idempotent_id('a245fcbe-63ce-4dc1-a1d0-c16d76d9e6df')
     def test_accept_usable_formats(self):
         if self.imgdef['usable']:
-            if self.imgdef['format'] in CONF.image.disk_formats:
-                # These are expected to work
+            try:
                 self._test_image(self.imgdef)
-            else:
-                # If this is not configured to be supported, we should get
-                # a BadRequest from glance
-                self.assertRaises(lib_exc.BadRequest,
-                                  self._test_image, self.imgdef)
+            except lib_exc.BadRequest:
+                format = self.imgdef['format']
+                if format == 'gpt' and format not in CONF.image.disk_formats:
+                    # If we don't have gpt defined, we don't expect this to
+                    # work because glance has not been updated for GPT
+                    # FIXME(danms): Remove this once glance support for GPT is
+                    # landed on master
+                    self.skipTest('GPT not configured and glance is too '
+                                  'old to support it')
+                raise
         else:
             self.skipTest(
                 'Glance does not currently reject unusable images on upload')
@@ -134,15 +138,23 @@
             # the import even starts until glance has it in its API
             # schema as a valid value. Other formats expected to fail
             # do so during import and return to queued state.
-            if self.imgdef['format'] not in CONF.image.disk_formats:
-                self.assertRaises(lib_exc.BadRequest,
-                                  self._test_image,
-                                  self.imgdef, asimport=True)
-            else:
+            try:
                 image = self._test_image(self.imgdef, asimport=True)
                 waiters.wait_for_image_status(self.client, image['id'],
-                                              'queued')
+                                              ['queued', 'active'])
                 self.client.delete_image(image['id'])
+            except lib_exc.BadRequest:
+                format = self.imgdef['format']
+                if format == 'gpt' and format not in CONF.image.disk_formats:
+                    # If we don't have gpt defined, we don't expect this to
+                    # work because glance has not been updated for GPT
+                    # FIXME(danms): Remove this once glance support for GPT is
+                    # landed on master
+                    self.skipTest('GPT not configured and glance is too '
+                                  'old to support it')
+                elif format in CONF.image.disk_formats:
+                    # This is in our config so it's supposed to work, fail
+                    raise
 
         if self.imgdef['format'] == 'iso':
             # NOTE(danms): Glance has a special case to not convert ISO images