This avoid breaking tests on RHEL6 where gnutls is too old for quorum to be built by default.
Signed-off-by: Benoit Canet <ben...@irqsave.net> --- tests/qemu-iotests/041 | 49 +++++++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 47 insertions(+), 2 deletions(-) diff --git a/tests/qemu-iotests/041 b/tests/qemu-iotests/041 index 0815e19..2b1e8a0 100755 --- a/tests/qemu-iotests/041 +++ b/tests/qemu-iotests/041 @@ -18,10 +18,12 @@ # along with this program. If not, see <http://www.gnu.org/licenses/>. # +import subprocess import time import os import iotests from iotests import qemu_img, qemu_io +import unittest backing_img = os.path.join(iotests.test_dir, 'backing.img') target_backing_img = os.path.join(iotests.test_dir, 'target-backing.img') @@ -735,6 +737,15 @@ class TestRepairQuorum(ImageMirroringTestCase): image_len = 1 * 1024 * 1024 # MB IMAGES = [ quorum_img1, quorum_img2, quorum_img3 ] + def has_quorum(self): + qemu_img_args = os.environ.get('QEMU_IMG', 'qemu-img').strip().split(' ') + qemu_img_args.append("--help") + p1 = subprocess.Popen(qemu_img_args, stdout=subprocess.PIPE) + p2 = subprocess.Popen(["grep", "quorum"], stdin=p1.stdout, + stdout=subprocess.PIPE) + p1.stdout.close() + return len(p2.communicate()[0]) + def setUp(self): self.vm = iotests.VM() @@ -752,8 +763,9 @@ class TestRepairQuorum(ImageMirroringTestCase): #assemble the quorum block device from the individual files args = { "options" : { "driver": "quorum", "id": "quorum0", "vote-threshold": 2, "children": [ "img0", "img1", "img2" ] } } - result = self.vm.qmp("blockdev-add", **args) - self.assert_qmp(result, 'return', {}) + if self.has_quorum(): + result = self.vm.qmp("blockdev-add", **args) + self.assert_qmp(result, 'return', {}) def tearDown(self): @@ -766,6 +778,9 @@ class TestRepairQuorum(ImageMirroringTestCase): pass def test_complete(self): + if not self.has_quorum(): + return + self.assert_no_active_block_jobs() result = self.vm.qmp('drive-mirror', device='quorum0', sync='full', @@ -784,6 +799,9 @@ class TestRepairQuorum(ImageMirroringTestCase): 'target image does not match source after mirroring') def test_cancel(self): + if not self.has_quorum(): + return + self.assert_no_active_block_jobs() result = self.vm.qmp('drive-mirror', device='quorum0', sync='full', @@ -800,6 +818,9 @@ class TestRepairQuorum(ImageMirroringTestCase): self.vm.shutdown() def test_cancel_after_ready(self): + if not self.has_quorum(): + return + self.assert_no_active_block_jobs() result = self.vm.qmp('drive-mirror', device='quorum0', sync='full', @@ -818,6 +839,9 @@ class TestRepairQuorum(ImageMirroringTestCase): 'target image does not match source after mirroring') def test_pause(self): + if not self.has_quorum(): + return + self.assert_no_active_block_jobs() result = self.vm.qmp('drive-mirror', device='quorum0', sync='full', @@ -846,6 +870,9 @@ class TestRepairQuorum(ImageMirroringTestCase): 'target image does not match source after mirroring') def test_medium_not_found(self): + if not self.has_quorum(): + return + result = self.vm.qmp('drive-mirror', device='ide1-cd0', sync='full', node_name='repair0', replaces='img1', @@ -853,6 +880,9 @@ class TestRepairQuorum(ImageMirroringTestCase): self.assert_qmp(result, 'error/class', 'GenericError') def test_image_not_found(self): + if not self.has_quorum(): + return + result = self.vm.qmp('drive-mirror', device='quorum0', sync='full', node_name='repair0', replaces='img1', @@ -861,6 +891,9 @@ class TestRepairQuorum(ImageMirroringTestCase): self.assert_qmp(result, 'error/class', 'GenericError') def test_device_not_found(self): + if not self.has_quorum(): + return + result = self.vm.qmp('drive-mirror', device='nonexistent', sync='full', node_name='repair0', replaces='img1', @@ -868,6 +901,9 @@ class TestRepairQuorum(ImageMirroringTestCase): self.assert_qmp(result, 'error/class', 'DeviceNotFound') def test_wrong_sync_mode(self): + if not self.has_quorum(): + return + result = self.vm.qmp('drive-mirror', device='quorum0', node_name='repair0', replaces='img1', @@ -875,12 +911,18 @@ class TestRepairQuorum(ImageMirroringTestCase): self.assert_qmp(result, 'error/class', 'GenericError') def test_no_node_name(self): + if not self.has_quorum(): + return + result = self.vm.qmp('drive-mirror', device='quorum0', sync='full', replaces='img1', target=quorum_repair_img, format=iotests.imgfmt) self.assert_qmp(result, 'error/class', 'GenericError') def test_unexistant_replaces(self): + if not self.has_quorum(): + return + result = self.vm.qmp('drive-mirror', device='quorum0', sync='full', node_name='repair0', replaces='img77', @@ -888,6 +930,9 @@ class TestRepairQuorum(ImageMirroringTestCase): self.assert_qmp(result, 'error/class', 'GenericError') def test_after_a_quorum_snapshot(self): + if not self.has_quorum(): + return + result = self.vm.qmp('blockdev-snapshot-sync', node_name='img1', snapshot_file=quorum_snapshot_file, snapshot_node_name="snap1"); -- 2.0.0