Merge "Use stable constraint in tox to release Tempest new tag"
diff --git a/tempest/api/image/base.py b/tempest/api/image/base.py
index 0cc088a..c2f067c 100644
--- a/tempest/api/image/base.py
+++ b/tempest/api/image/base.py
@@ -177,8 +177,8 @@
         # If we added the location directly, the image goes straight
         # to active and no hashing is done
         self.assertEqual('active', image['status'])
-        self.assertIsNone(None, image['os_hash_algo'])
-        self.assertIsNone(None, image['os_hash_value'])
+        self.assertIsNone(image['os_hash_algo'])
+        self.assertIsNone(image['os_hash_value'])
 
         return image
 
@@ -201,8 +201,8 @@
 
         # The image should still be active and still have no hashes
         self.assertEqual('active', image['status'])
-        self.assertIsNone(None, image['os_hash_algo'])
-        self.assertIsNone(None, image['os_hash_value'])
+        self.assertIsNone(image['os_hash_algo'])
+        self.assertIsNone(image['os_hash_value'])
 
         # The direct_url should still match the first location
         if 'direct_url' in image:
diff --git a/tempest/api/image/v2/test_images_formats.py b/tempest/api/image/v2/test_images_formats.py
index 7ebc685..48f1325 100644
--- a/tempest/api/image/v2/test_images_formats.py
+++ b/tempest/api/image/v2/test_images_formats.py
@@ -110,22 +110,25 @@
         if not CONF.image_feature_enabled.image_conversion:
             self.skipTest('Import image_conversion not enabled')
 
-        glance_noconvert = [
-            # Glance does not support vmdk-sparse-with-footer with the
-            # in-tree format_inspector
-            'vmdk-sparse-with-footer',
-            ]
-        # Any images glance does not support in *conversion* for some
-        # reason will fail, even though the manifest marks them as usable.
-        expect_fail = any(x in self.imgdef['name']
-                          for x in glance_noconvert)
+        # VMDK with footer was not supported by earlier service versions,
+        # so we need to tolerate it passing and failing (skip for the latter).
+        # See this for more info:
+        # https://bugs.launchpad.net/glance/+bug/2073262
+        is_broken = 'footer' in self.imgdef['name']
 
         if (self.imgdef['format'] in CONF.image.disk_formats and
-                self.imgdef['usable'] and not expect_fail):
+                self.imgdef['usable']):
             # Usable images should end up in active state
             image = self._test_image(self.imgdef, asimport=True)
-            waiters.wait_for_image_status(self.client, image['id'],
-                                          'active')
+            try:
+                waiters.wait_for_image_status(self.client, image['id'],
+                                              'active')
+            except lib_exc.TimeoutException:
+                if is_broken:
+                    self.skipTest(
+                        'Older glance did not support vmdk-with-footer')
+                else:
+                    raise
         else:
             # FIXME(danms): Make this better, but gpt will fail before
             # the import even starts until glance has it in its API
@@ -164,7 +167,9 @@
             self.skipTest(
                 'Format %s not allowed by config' % self.imgdef['format'])
 
-        # VMDK with footer is not supported by anyone yet until fixed:
+        # VMDK with footer was not supported by earlier service versions,
+        # so we need to tolerate it passing and failing (skip for the latter).
+        # See this for more info:
         # https://bugs.launchpad.net/glance/+bug/2073262
         is_broken = 'footer' in self.imgdef['name']