|
|
76daa3 |
From 40370c5bbdba27f7926e9cd7a55270249c06162b Mon Sep 17 00:00:00 2001
|
|
|
76daa3 |
From: Kevin Wolf <kwolf@redhat.com>
|
|
|
76daa3 |
Date: Mon, 12 Jun 2017 13:03:42 +0200
|
|
|
76daa3 |
Subject: [PATCH 06/13] qemu-iotests: Test automatic commit job cancel on hot
|
|
|
76daa3 |
unplug
|
|
|
76daa3 |
|
|
|
76daa3 |
RH-Author: Kevin Wolf <kwolf@redhat.com>
|
|
|
76daa3 |
Message-id: <1497272622-32221-3-git-send-email-kwolf@redhat.com>
|
|
|
76daa3 |
Patchwork-id: 75584
|
|
|
76daa3 |
O-Subject: [RHEL-7.4 qemu-kvm-rhev PATCH 2/2] qemu-iotests: Test automatic commit job cancel on hot unplug
|
|
|
76daa3 |
Bugzilla: 1452048
|
|
|
76daa3 |
RH-Acked-by: Jeffrey Cody <jcody@redhat.com>
|
|
|
76daa3 |
RH-Acked-by: Max Reitz <mreitz@redhat.com>
|
|
|
76daa3 |
RH-Acked-by: John Snow <jsnow@redhat.com>
|
|
|
76daa3 |
|
|
|
76daa3 |
Signed-off-by: Kevin Wolf <kwolf@redhat.com>
|
|
|
76daa3 |
Reviewed-by: John Snow <jsnow@redhat.com>
|
|
|
76daa3 |
(cherry picked from commit c3971b883a596abc6af45f53d2f43fb2f59ccd3b)
|
|
|
76daa3 |
Signed-off-by: Miroslav Rezanina <mrezanin@redhat.com>
|
|
|
76daa3 |
---
|
|
|
76daa3 |
tests/qemu-iotests/040 | 35 +++++++++++++++++++++++++++++++++--
|
|
|
76daa3 |
tests/qemu-iotests/040.out | 4 ++--
|
|
|
76daa3 |
2 files changed, 35 insertions(+), 4 deletions(-)
|
|
|
76daa3 |
|
|
|
76daa3 |
diff --git a/tests/qemu-iotests/040 b/tests/qemu-iotests/040
|
|
|
76daa3 |
index 5bdaf3d..9d381d9 100755
|
|
|
76daa3 |
--- a/tests/qemu-iotests/040
|
|
|
76daa3 |
+++ b/tests/qemu-iotests/040
|
|
|
76daa3 |
@@ -70,7 +70,9 @@ class ImageCommitTestCase(iotests.QMPTestCase):
|
|
|
76daa3 |
self.wait_for_complete()
|
|
|
76daa3 |
|
|
|
76daa3 |
class TestSingleDrive(ImageCommitTestCase):
|
|
|
76daa3 |
- image_len = 1 * 1024 * 1024
|
|
|
76daa3 |
+ # Need some space after the copied data so that throttling is effective in
|
|
|
76daa3 |
+ # tests that use it rather than just completing the job immediately
|
|
|
76daa3 |
+ image_len = 2 * 1024 * 1024
|
|
|
76daa3 |
test_len = 1 * 1024 * 256
|
|
|
76daa3 |
|
|
|
76daa3 |
def setUp(self):
|
|
|
76daa3 |
@@ -79,7 +81,9 @@ class TestSingleDrive(ImageCommitTestCase):
|
|
|
76daa3 |
qemu_img('create', '-f', iotests.imgfmt, '-o', 'backing_file=%s' % mid_img, test_img)
|
|
|
76daa3 |
qemu_io('-f', 'raw', '-c', 'write -P 0xab 0 524288', backing_img)
|
|
|
76daa3 |
qemu_io('-f', iotests.imgfmt, '-c', 'write -P 0xef 524288 524288', mid_img)
|
|
|
76daa3 |
- self.vm = iotests.VM().add_drive(test_img)
|
|
|
76daa3 |
+ self.vm = iotests.VM().add_drive(test_img, interface="none")
|
|
|
76daa3 |
+ self.vm.add_device("virtio-scsi-pci")
|
|
|
76daa3 |
+ self.vm.add_device("scsi-hd,id=scsi0,drive=drive0")
|
|
|
76daa3 |
self.vm.launch()
|
|
|
76daa3 |
|
|
|
76daa3 |
def tearDown(self):
|
|
|
76daa3 |
@@ -131,6 +135,33 @@ class TestSingleDrive(ImageCommitTestCase):
|
|
|
76daa3 |
self.assert_qmp(result, 'error/class', 'GenericError')
|
|
|
76daa3 |
self.assert_qmp(result, 'error/desc', 'Base \'%s\' not found' % mid_img)
|
|
|
76daa3 |
|
|
|
76daa3 |
+ # When the job is running on a BB that is automatically deleted on hot
|
|
|
76daa3 |
+ # unplug, the job is cancelled when the device disappears
|
|
|
76daa3 |
+ def test_hot_unplug(self):
|
|
|
76daa3 |
+ if self.image_len == 0:
|
|
|
76daa3 |
+ return
|
|
|
76daa3 |
+
|
|
|
76daa3 |
+ self.assert_no_active_block_jobs()
|
|
|
76daa3 |
+ result = self.vm.qmp('block-commit', device='drive0', top=mid_img,
|
|
|
76daa3 |
+ base=backing_img, speed=(self.image_len / 4))
|
|
|
76daa3 |
+ self.assert_qmp(result, 'return', {})
|
|
|
76daa3 |
+ result = self.vm.qmp('device_del', id='scsi0')
|
|
|
76daa3 |
+ self.assert_qmp(result, 'return', {})
|
|
|
76daa3 |
+
|
|
|
76daa3 |
+ cancelled = False
|
|
|
76daa3 |
+ deleted = False
|
|
|
76daa3 |
+ while not cancelled or not deleted:
|
|
|
76daa3 |
+ for event in self.vm.get_qmp_events(wait=True):
|
|
|
76daa3 |
+ if event['event'] == 'DEVICE_DELETED':
|
|
|
76daa3 |
+ self.assert_qmp(event, 'data/device', 'scsi0')
|
|
|
76daa3 |
+ deleted = True
|
|
|
76daa3 |
+ elif event['event'] == 'BLOCK_JOB_CANCELLED':
|
|
|
76daa3 |
+ self.assert_qmp(event, 'data/device', 'drive0')
|
|
|
76daa3 |
+ cancelled = True
|
|
|
76daa3 |
+ else:
|
|
|
76daa3 |
+ self.fail("Unexpected event %s" % (event['event']))
|
|
|
76daa3 |
+
|
|
|
76daa3 |
+ self.assert_no_active_block_jobs()
|
|
|
76daa3 |
|
|
|
76daa3 |
class TestRelativePaths(ImageCommitTestCase):
|
|
|
76daa3 |
image_len = 1 * 1024 * 1024
|
|
|
76daa3 |
diff --git a/tests/qemu-iotests/040.out b/tests/qemu-iotests/040.out
|
|
|
76daa3 |
index 4fd1c2d..6d9bee1 100644
|
|
|
76daa3 |
--- a/tests/qemu-iotests/040.out
|
|
|
76daa3 |
+++ b/tests/qemu-iotests/040.out
|
|
|
76daa3 |
@@ -1,5 +1,5 @@
|
|
|
76daa3 |
-.........................
|
|
|
76daa3 |
+...........................
|
|
|
76daa3 |
----------------------------------------------------------------------
|
|
|
76daa3 |
-Ran 25 tests
|
|
|
76daa3 |
+Ran 27 tests
|
|
|
76daa3 |
|
|
|
76daa3 |
OK
|
|
|
76daa3 |
--
|
|
|
76daa3 |
1.8.3.1
|
|
|
76daa3 |
|