aboutsummaryrefslogtreecommitdiff
path: root/tests
diff options
context:
space:
mode:
authorPeter Maydell <peter.maydell@linaro.org>2017-07-24 16:58:16 +0100
committerPeter Maydell <peter.maydell@linaro.org>2017-07-24 16:58:16 +0100
commit50104f5ac537eecc890c65e99362df47bac3f9d9 (patch)
treef80ef7933fc3f4e43ccb11f24d7b98a93656e89a /tests
parentce1d20aac8533357650774c2c240e30de87dc122 (diff)
parent2c93c5cb43fd992038711f84ea34c9373273cda6 (diff)
downloadqemu-50104f5ac537eecc890c65e99362df47bac3f9d9.zip
qemu-50104f5ac537eecc890c65e99362df47bac3f9d9.tar.gz
qemu-50104f5ac537eecc890c65e99362df47bac3f9d9.tar.bz2
Merge remote-tracking branch 'remotes/kevin/tags/for-upstream' into staging
Block layer patches for 2.10.0-rc0 # gpg: Signature made Mon 24 Jul 2017 15:16:42 BST # gpg: using RSA key 0x7F09B272C88F2FD6 # gpg: Good signature from "Kevin Wolf <kwolf@redhat.com>" # Primary key fingerprint: DC3D EB15 9A9A F95D 3D74 56FE 7F09 B272 C88F 2FD6 * remotes/kevin/tags/for-upstream: qemu-iotests: Avoid unnecessary sleeps block: Skip implicit nodes in query-block/blockstats qcow2: Fix sector calculation in qcow2_measure() dirty-bitmap: Report BlockDirtyInfo.count in bytes, as documented iotests: Remove a few tests from 'quick' group Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
Diffstat (limited to 'tests')
-rwxr-xr-xtests/qemu-iotests/0307
-rwxr-xr-xtests/qemu-iotests/04030
-rw-r--r--tests/qemu-iotests/040.out4
-rwxr-xr-xtests/qemu-iotests/04150
-rw-r--r--tests/qemu-iotests/041.out4
-rwxr-xr-xtests/qemu-iotests/05515
-rw-r--r--tests/qemu-iotests/group4
-rw-r--r--tests/qemu-iotests/iotests.py27
8 files changed, 116 insertions, 25 deletions
diff --git a/tests/qemu-iotests/030 b/tests/qemu-iotests/030
index feee861..d745cb4 100755
--- a/tests/qemu-iotests/030
+++ b/tests/qemu-iotests/030
@@ -89,18 +89,19 @@ class TestSingleDrive(iotests.QMPTestCase):
result = self.vm.qmp('block-job-pause', device='drive0')
self.assert_qmp(result, 'return', {})
- time.sleep(1)
+ self.vm.resume_drive('drive0')
+ self.pause_job('drive0')
+
result = self.vm.qmp('query-block-jobs')
offset = self.dictpath(result, 'return[0]/offset')
- time.sleep(1)
+ time.sleep(0.5)
result = self.vm.qmp('query-block-jobs')
self.assert_qmp(result, 'return[0]/offset', offset)
result = self.vm.qmp('block-job-resume', device='drive0')
self.assert_qmp(result, 'return', {})
- self.vm.resume_drive('drive0')
self.wait_until_completed()
self.assert_no_active_block_jobs()
diff --git a/tests/qemu-iotests/040 b/tests/qemu-iotests/040
index 9d381d9..95b7510 100755
--- a/tests/qemu-iotests/040
+++ b/tests/qemu-iotests/040
@@ -81,7 +81,7 @@ class TestSingleDrive(ImageCommitTestCase):
qemu_img('create', '-f', iotests.imgfmt, '-o', 'backing_file=%s' % mid_img, test_img)
qemu_io('-f', 'raw', '-c', 'write -P 0xab 0 524288', backing_img)
qemu_io('-f', iotests.imgfmt, '-c', 'write -P 0xef 524288 524288', mid_img)
- self.vm = iotests.VM().add_drive(test_img, interface="none")
+ self.vm = iotests.VM().add_drive(test_img, "node-name=top,backing.node-name=mid,backing.backing.node-name=base", interface="none")
self.vm.add_device("virtio-scsi-pci")
self.vm.add_device("scsi-hd,id=scsi0,drive=drive0")
self.vm.launch()
@@ -163,6 +163,34 @@ class TestSingleDrive(ImageCommitTestCase):
self.assert_no_active_block_jobs()
+ # Tests that the insertion of the commit_top filter node doesn't make a
+ # difference to query-blockstat
+ def test_implicit_node(self):
+ if self.image_len == 0:
+ return
+
+ self.assert_no_active_block_jobs()
+ result = self.vm.qmp('block-commit', device='drive0', top=mid_img,
+ base=backing_img, speed=(self.image_len / 4))
+ self.assert_qmp(result, 'return', {})
+
+ result = self.vm.qmp('query-block')
+ self.assert_qmp(result, 'return[0]/inserted/file', test_img)
+ self.assert_qmp(result, 'return[0]/inserted/drv', iotests.imgfmt)
+ self.assert_qmp(result, 'return[0]/inserted/backing_file', mid_img)
+ self.assert_qmp(result, 'return[0]/inserted/backing_file_depth', 2)
+ self.assert_qmp(result, 'return[0]/inserted/image/filename', test_img)
+ self.assert_qmp(result, 'return[0]/inserted/image/backing-image/filename', mid_img)
+ self.assert_qmp(result, 'return[0]/inserted/image/backing-image/backing-image/filename', backing_img)
+
+ result = self.vm.qmp('query-blockstats')
+ self.assert_qmp(result, 'return[0]/node-name', 'top')
+ self.assert_qmp(result, 'return[0]/backing/node-name', 'mid')
+ self.assert_qmp(result, 'return[0]/backing/backing/node-name', 'base')
+
+ self.cancel_and_wait()
+ self.assert_no_active_block_jobs()
+
class TestRelativePaths(ImageCommitTestCase):
image_len = 1 * 1024 * 1024
test_len = 1 * 1024 * 256
diff --git a/tests/qemu-iotests/040.out b/tests/qemu-iotests/040.out
index 6d9bee1..e20a75c 100644
--- a/tests/qemu-iotests/040.out
+++ b/tests/qemu-iotests/040.out
@@ -1,5 +1,5 @@
-...........................
+.............................
----------------------------------------------------------------------
-Ran 27 tests
+Ran 29 tests
OK
diff --git a/tests/qemu-iotests/041 b/tests/qemu-iotests/041
index 2f54986..4cda540 100755
--- a/tests/qemu-iotests/041
+++ b/tests/qemu-iotests/041
@@ -42,7 +42,7 @@ class TestSingleDrive(iotests.QMPTestCase):
def setUp(self):
iotests.create_image(backing_img, self.image_len)
qemu_img('create', '-f', iotests.imgfmt, '-o', 'backing_file=%s' % backing_img, test_img)
- self.vm = iotests.VM().add_drive(test_img)
+ self.vm = iotests.VM().add_drive(test_img, "node-name=top,backing.node-name=base")
if iotests.qemu_default_machine == 'pc':
self.vm.add_drive(None, 'media=cdrom', 'ide')
self.vm.launch()
@@ -103,14 +103,12 @@ class TestSingleDrive(iotests.QMPTestCase):
target=self.qmp_target)
self.assert_qmp(result, 'return', {})
- result = self.vm.qmp('block-job-pause', device='drive0')
- self.assert_qmp(result, 'return', {})
+ self.pause_job('drive0')
- time.sleep(1)
result = self.vm.qmp('query-block-jobs')
offset = self.dictpath(result, 'return[0]/offset')
- time.sleep(1)
+ time.sleep(0.5)
result = self.vm.qmp('query-block-jobs')
self.assert_qmp(result, 'return[0]/offset', offset)
@@ -169,6 +167,42 @@ class TestSingleDrive(iotests.QMPTestCase):
self.assertTrue(iotests.compare_images(test_img, target_img),
'target image does not match source after mirroring')
+ # Tests that the insertion of the mirror_top filter node doesn't make a
+ # difference to query-block
+ def test_implicit_node(self):
+ self.assert_no_active_block_jobs()
+
+ result = self.vm.qmp(self.qmp_cmd, device='drive0', sync='full',
+ target=self.qmp_target)
+ self.assert_qmp(result, 'return', {})
+
+ result = self.vm.qmp('query-block')
+ self.assert_qmp(result, 'return[0]/inserted/file', test_img)
+ self.assert_qmp(result, 'return[0]/inserted/drv', iotests.imgfmt)
+ self.assert_qmp(result, 'return[0]/inserted/backing_file', backing_img)
+ self.assert_qmp(result, 'return[0]/inserted/backing_file_depth', 1)
+ self.assert_qmp(result, 'return[0]/inserted/image/filename', test_img)
+ self.assert_qmp(result, 'return[0]/inserted/image/backing-image/filename', backing_img)
+
+ result = self.vm.qmp('query-blockstats')
+ self.assert_qmp(result, 'return[0]/node-name', 'top')
+ self.assert_qmp(result, 'return[0]/backing/node-name', 'base')
+
+ self.cancel_and_wait(force=True)
+ result = self.vm.qmp('query-block')
+ self.assert_qmp(result, 'return[0]/inserted/file', test_img)
+ self.assert_qmp(result, 'return[0]/inserted/drv', iotests.imgfmt)
+ self.assert_qmp(result, 'return[0]/inserted/backing_file', backing_img)
+ self.assert_qmp(result, 'return[0]/inserted/backing_file_depth', 1)
+ self.assert_qmp(result, 'return[0]/inserted/image/filename', test_img)
+ self.assert_qmp(result, 'return[0]/inserted/image/backing-image/filename', backing_img)
+
+ result = self.vm.qmp('query-blockstats')
+ self.assert_qmp(result, 'return[0]/node-name', 'top')
+ self.assert_qmp(result, 'return[0]/backing/node-name', 'base')
+
+ self.vm.shutdown()
+
def test_medium_not_found(self):
if iotests.qemu_default_machine != 'pc':
return
@@ -860,14 +894,12 @@ class TestRepairQuorum(iotests.QMPTestCase):
target=quorum_repair_img, format=iotests.imgfmt)
self.assert_qmp(result, 'return', {})
- result = self.vm.qmp('block-job-pause', device='job0')
- self.assert_qmp(result, 'return', {})
+ self.pause_job('job0')
- time.sleep(1)
result = self.vm.qmp('query-block-jobs')
offset = self.dictpath(result, 'return[0]/offset')
- time.sleep(1)
+ time.sleep(0.5)
result = self.vm.qmp('query-block-jobs')
self.assert_qmp(result, 'return[0]/offset', offset)
diff --git a/tests/qemu-iotests/041.out b/tests/qemu-iotests/041.out
index e30fd3b..c28b392 100644
--- a/tests/qemu-iotests/041.out
+++ b/tests/qemu-iotests/041.out
@@ -1,5 +1,5 @@
-...............................................................................
+.....................................................................................
----------------------------------------------------------------------
-Ran 79 tests
+Ran 85 tests
OK
diff --git a/tests/qemu-iotests/055 b/tests/qemu-iotests/055
index ba4da65..e1206ca 100755
--- a/tests/qemu-iotests/055
+++ b/tests/qemu-iotests/055
@@ -89,11 +89,12 @@ class TestSingleDrive(iotests.QMPTestCase):
self.assert_qmp(result, 'return', {})
self.vm.resume_drive('drive0')
- time.sleep(1)
+ self.pause_job('drive0')
+
result = self.vm.qmp('query-block-jobs')
offset = self.dictpath(result, 'return[0]/offset')
- time.sleep(1)
+ time.sleep(0.5)
result = self.vm.qmp('query-block-jobs')
self.assert_qmp(result, 'return[0]/offset', offset)
@@ -302,11 +303,12 @@ class TestSingleTransaction(iotests.QMPTestCase):
self.assert_qmp(result, 'return', {})
self.vm.resume_drive('drive0')
- time.sleep(1)
+ self.pause_job('drive0')
+
result = self.vm.qmp('query-block-jobs')
offset = self.dictpath(result, 'return[0]/offset')
- time.sleep(1)
+ time.sleep(0.5)
result = self.vm.qmp('query-block-jobs')
self.assert_qmp(result, 'return[0]/offset', offset)
@@ -529,11 +531,12 @@ class TestDriveCompression(iotests.QMPTestCase):
self.assert_qmp(result, 'return', {})
self.vm.resume_drive('drive0')
- time.sleep(1)
+ self.pause_job('drive0')
+
result = self.vm.qmp('query-block-jobs')
offset = self.dictpath(result, 'return[0]/offset')
- time.sleep(1)
+ time.sleep(0.5)
result = self.vm.qmp('query-block-jobs')
self.assert_qmp(result, 'return[0]/offset', offset)
diff --git a/tests/qemu-iotests/group b/tests/qemu-iotests/group
index 0961f8c..287f0ea 100644
--- a/tests/qemu-iotests/group
+++ b/tests/qemu-iotests/group
@@ -175,7 +175,7 @@
175 auto quick
176 rw auto backing
177 rw auto quick
-178 auto quick
+178 auto
179 rw auto quick
181 rw auto migration
182 rw auto quick
@@ -183,4 +183,4 @@
185 rw auto
186 rw auto
188 rw auto quick
-189 rw auto quick
+189 rw auto
diff --git a/tests/qemu-iotests/iotests.py b/tests/qemu-iotests/iotests.py
index abcf3c1..22439c4 100644
--- a/tests/qemu-iotests/iotests.py
+++ b/tests/qemu-iotests/iotests.py
@@ -27,6 +27,7 @@ sys.path.append(os.path.join(os.path.dirname(__file__), '..', '..', 'scripts'))
import qtest
import struct
import json
+import signal
# This will not work if arguments contain spaces but is necessary if we
@@ -137,6 +138,20 @@ def log(msg, filters=[]):
msg = flt(msg)
print msg
+class Timeout:
+ def __init__(self, seconds, errmsg = "Timeout"):
+ self.seconds = seconds
+ self.errmsg = errmsg
+ def __enter__(self):
+ signal.signal(signal.SIGALRM, self.timeout)
+ signal.setitimer(signal.ITIMER_REAL, self.seconds)
+ return self
+ def __exit__(self, type, value, traceback):
+ signal.setitimer(signal.ITIMER_REAL, 0)
+ return False
+ def timeout(self, signum, frame):
+ raise Exception(self.errmsg)
+
class VM(qtest.QEMUQtestMachine):
'''A QEMU VM'''
@@ -346,6 +361,18 @@ class QMPTestCase(unittest.TestCase):
event = self.wait_until_completed(drive=drive)
self.assert_qmp(event, 'data/type', 'mirror')
+ def pause_job(self, job_id='job0'):
+ result = self.vm.qmp('block-job-pause', device=job_id)
+ self.assert_qmp(result, 'return', {})
+
+ with Timeout(1, "Timeout waiting for job to pause"):
+ while True:
+ result = self.vm.qmp('query-block-jobs')
+ for job in result['return']:
+ if job['device'] == job_id and job['paused'] == True and job['busy'] == False:
+ return job
+
+
def notrun(reason):
'''Skip this test suite'''
# Each test in qemu-iotests has a number ("seq")