On 7/31/18 12:30 PM, Vladimir Sementsov-Ogievskiy wrote: > Add test, which starts backup to nbd target and restarts nbd server > during backup. > > Signed-off-by: Vladimir Sementsov-Ogievskiy <vsement...@virtuozzo.com> > --- > tests/qemu-iotests/220 | 67 > +++++++++++++++++++++++++++++++++++++++++++ > tests/qemu-iotests/220.out | 7 +++++ > tests/qemu-iotests/group | 1 + > tests/qemu-iotests/iotests.py | 4 +++ > 4 files changed, 79 insertions(+) > create mode 100755 tests/qemu-iotests/220 > create mode 100644 tests/qemu-iotests/220.out >
Test 220 has been created in the meantime; the obvious resolution is to pick a new test number. > diff --git a/tests/qemu-iotests/220 b/tests/qemu-iotests/220 > new file mode 100755 > index 0000000000..c9702a7dad > --- /dev/null > +++ b/tests/qemu-iotests/220 > @@ -0,0 +1,67 @@ > +#!/usr/bin/env python > + > +import iotests > +from iotests import qemu_img_create, file_path, qemu_nbd_popen > + > +disk_a, disk_b, nbd_sock = file_path('disk_a', 'disk_b', 'nbd-sock') > +nbd_uri = 'nbd+unix:///exp?socket=' + nbd_sock > + > +qemu_img_create('-f', iotests.imgfmt, disk_a, '5M') > +qemu_img_create('-f', iotests.imgfmt, disk_b, '5M') > +srv = qemu_nbd_popen('-k', nbd_sock, '-x', 'exp', '-f', iotests.imgfmt, > disk_b) > +time.sleep(1) > + > +vm = iotests.VM().add_drive(disk_a) > +vm.launch() > +vm.hmp_qemu_io('drive0', 'write 0 5M') > + > +print 'blockdev-add:', vm.qmp('blockdev-add', node_name='backup0', > driver='raw', > + file={'driver':'nbd', > + 'export': 'exp', > + 'server': {'type': 'unix', > + 'path': nbd_sock}}) > +print 'blockdev-backup:', vm.qmp('blockdev-backup', device='drive0', > + sync='full', target='backup0') > + > +time.sleep(1) > +print 'Kill NBD server' > +srv.kill() > + > +jobs = vm.qmp('query-block-jobs')['return'] > +if jobs and jobs[0]['offset'] < jobs[0]['len']: > + print 'Backup job is still in progress' > + > +time.sleep(1) That's a lot of sleep()s for a test marked quick. Are we sure it won't fail under heavy load? Can you make the test more reliable by looking for specific events rather than just a fixed-length sleep? > + > +print 'Start NBD server' > +srv = qemu_nbd_popen('-k', nbd_sock, '-x', 'exp', '-f', iotests.imgfmt, > disk_b) > + > +try: > + e = vm.event_wait('BLOCK_JOB_COMPLETED') > + print e['event'], ':', e['data'] > +except: > + pass > + > +print 'blockdev-del:', vm.qmp('blockdev-del', node_name='backup0') > +srv.kill() > +vm.shutdown() > diff --git a/tests/qemu-iotests/220.out b/tests/qemu-iotests/220.out > new file mode 100644 > index 0000000000..dae1a49d9f > --- /dev/null > +++ b/tests/qemu-iotests/220.out > @@ -0,0 +1,7 @@ > +blockdev-add: {u'return': {}} > +blockdev-backup: {u'return': {}} > +Kill NBD server > +Backup job is still in progress > +Start NBD server > +BLOCK_JOB_COMPLETED : {u'device': u'drive0', u'type': u'backup', u'speed': > 0, u'len': 5242880, u'offset': 5242880} > +blockdev-del: {u'return': {}} > diff --git a/tests/qemu-iotests/group b/tests/qemu-iotests/group > index b973dc842d..ee2473c6a3 100644 > --- a/tests/qemu-iotests/group > +++ b/tests/qemu-iotests/group > @@ -219,6 +219,7 @@ > 217 rw auto quick > 218 rw auto quick > 219 rw auto > +220 rw auto quick > 221 rw auto quick > 222 rw auto quick > 223 rw auto quick > diff --git a/tests/qemu-iotests/iotests.py b/tests/qemu-iotests/iotests.py > index 4e67fbbe96..17bc8c8e32 100644 > --- a/tests/qemu-iotests/iotests.py > +++ b/tests/qemu-iotests/iotests.py > @@ -185,6 +185,10 @@ def qemu_nbd(*args): > '''Run qemu-nbd in daemon mode and return the parent's exit code''' > return subprocess.call(qemu_nbd_args + ['--fork'] + list(args)) > > +def qemu_nbd_popen(*args): > + '''Run qemu-nbd in daemon mode and return the parent's exit code''' > + return subprocess.Popen(qemu_nbd_args + ['--persistent'] + list(args)) > + > def compare_images(img1, img2, fmt1=imgfmt, fmt2=imgfmt): > '''Return True if two image files are identical''' > return qemu_img('compare', '-f', fmt1, > -- Eric Blake, Principal Software Engineer Red Hat, Inc. +1-919-301-3226 Virtualization: qemu.org | libvirt.org
signature.asc
Description: OpenPGP digital signature