]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
test_volume_client: rewrite test_put_object_versioned
authorRishabh Dave <ridave@redhat.com>
Fri, 21 Jun 2019 10:13:07 +0000 (15:43 +0530)
committerNathan Cutler <ncutler@suse.com>
Sat, 7 Sep 2019 08:43:15 +0000 (10:43 +0200)
The test's success depends on whether CommandFailedError exception is
raised. This manner of testing is unreliable since there's no way to
check if the exception was raised by the statement (in the embedded
Python program) the test expects to.

This implies that this test's failure may go undetected. This is primary
reason why bugs like tracker #38946 occured despite of having a test.

Fixes: http://tracker.ceph.com/issues/39510
Signed-off-by: Rishabh Dave <ridave@redhat.com>
(cherry picked from commit 37744ecc2b113c31d8f5f12ca13b6bdcc8e84306)

qa/tasks/cephfs/test_volume_client.py

index 6df6bf5ab27f8d474c8142d311d6a80539c4eefc..c5d81b2553f8c08d064c18cb2617428a338de46f 100644 (file)
@@ -35,6 +35,7 @@ class TestVolumeClient(CephFSTestCase):
 from __future__ import print_function
 from ceph_volume_client import CephFSVolumeClient, VolumePath
 from sys import version_info as sys_version_info
+from rados import OSError as rados_OSError
 import logging
 log = logging.getLogger("ceph_volume_client")
 log.addHandler(logging.StreamHandler())
@@ -977,24 +978,30 @@ vc.disconnect()
 
         # Test if put_object_versioned() crosschecks the version of the
         # given object. Being a negative test, an exception is expected.
-        with self.assertRaises(CommandFailedError):
-            self._volume_client_python(vc_mount, dedent("""
-                data, version = vc.get_object_and_version("{pool_name}", "{obj_name}")
+        expected_exception = 'rados_OSError'
+        output = self._volume_client_python(vc_mount, dedent("""
+            data, version = vc.get_object_and_version("{pool_name}", "{obj_name}")
 
-                if sys_version_info.major < 3:
-                    data = data + 'm1'
-                elif sys_version_info.major > 3:
-                    data = str.encode(data.decode('utf-8') + 'm1')
+            if sys_version_info.major < 3:
+                data = data + 'm1'
+            elif sys_version_info.major > 3:
+                data = str.encode(data.decode('utf-8') + 'm1')
 
-                vc.put_object("{pool_name}", "{obj_name}", data)
+            vc.put_object("{pool_name}", "{obj_name}", data)
 
-                if sys_version_info.major < 3:
-                    data = data + 'm2'
-                elif sys_version_info.major > 3:
-                    data = str.encode(data.decode('utf-8') + 'm2')
+            if sys_version_info.major < 3:
+                data = data + 'm2'
+            elif sys_version_info.major > 3:
+                data = str.encode(data.decode('utf-8') + 'm2')
 
+            try:
                 vc.put_object_versioned("{pool_name}", "{obj_name}", data, version)
-            """).format(pool_name=pool_name, obj_name=obj_name))
+            except {expected_exception}:
+                print('{expected_exception} raised')
+        """).format(pool_name=pool_name, obj_name=obj_name,
+                    expected_exception=expected_exception))
+        self.assertEqual(expected_exception + ' raised', output)
+
 
     def test_delete_object(self):
         vc_mount = self.mounts[1]