On Wed, May 22, 2013 at 01:19:58PM +0200, Kevin Wolf wrote: > Am 16.05.2013 um 10:36 hat Stefan Hajnoczi geschrieben: > > Testing drive-backup is similar to image streaming and drive mirroring. > > This test case is based on 041. > > > > Signed-off-by: Stefan Hajnoczi <stefa...@redhat.com> > > --- > > tests/qemu-iotests/055 | 230 > > +++++++++++++++++++++++++++++++++++++++++++++ > > tests/qemu-iotests/055.out | 5 + > > tests/qemu-iotests/group | 1 + > > 3 files changed, 236 insertions(+) > > create mode 100755 tests/qemu-iotests/055 > > create mode 100644 tests/qemu-iotests/055.out > > > > diff --git a/tests/qemu-iotests/055 b/tests/qemu-iotests/055 > > new file mode 100755 > > index 0000000..bc2eebf > > --- /dev/null > > +++ b/tests/qemu-iotests/055 > > @@ -0,0 +1,230 @@ > > +#!/usr/bin/env python > > +# > > +# Tests for drive-backup > > +# > > +# Copyright (C) 2013 Red Hat, Inc. > > +# > > +# Based on 041. > > +# > > +# This program is free software; you can redistribute it and/or modify > > +# it under the terms of the GNU General Public License as published by > > +# the Free Software Foundation; either version 2 of the License, or > > +# (at your option) any later version. > > +# > > +# This program is distributed in the hope that it will be useful, > > +# but WITHOUT ANY WARRANTY; without even the implied warranty of > > +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the > > +# GNU General Public License for more details. > > +# > > +# You should have received a copy of the GNU General Public License > > +# along with this program. If not, see <http://www.gnu.org/licenses/>. > > +# > > + > > +import time > > +import os > > +import iotests > > +from iotests import qemu_img, qemu_io > > + > > +test_img = os.path.join(iotests.test_dir, 'test.img') > > +target_img = os.path.join(iotests.test_dir, 'target.img') > > + > > +class DriveBackupTestCase(iotests.QMPTestCase): > > + '''Abstract base class for drive-backup test cases''' > > + > > + def assert_no_active_backups(self): > > + result = self.vm.qmp('query-block-jobs') > > + self.assert_qmp(result, 'return', []) > > + > > + def cancel_and_wait(self, drive='drive0'): > > + '''Cancel a block job and wait for it to finish''' > > + result = self.vm.qmp('block-job-cancel', device=drive) > > + self.assert_qmp(result, 'return', {}) > > + > > + cancelled = False > > + while not cancelled: > > + for event in self.vm.get_qmp_events(wait=True): > > + if event['event'] == 'BLOCK_JOB_COMPLETED' or \ > > + event['event'] == 'BLOCK_JOB_CANCELLED': > > + self.assert_qmp(event, 'data/type', 'backup') > > + self.assert_qmp(event, 'data/device', drive) > > + cancelled = True > > + > > + self.assert_no_active_backups() > > + > > + def complete_and_wait(self): > > + completed = False > > + while not completed: > > + for event in self.vm.get_qmp_events(wait=True): > > + if event['event'] == 'BLOCK_JOB_COMPLETED': > > + self.assert_qmp(event, 'data/type', 'backup') > > + self.assert_qmp(event, 'data/device', 'drive0') > > + self.assert_qmp(event, 'data/offset', self.image_len) > > + self.assert_qmp(event, 'data/len', self.image_len) > > + completed = True > > + self.assert_no_active_backups() > > + > > + def compare_images(self, img1, img2): > > + try: > > + qemu_img('convert', '-f', iotests.imgfmt, '-O', 'raw', img1, > > img1 + '.raw') > > + qemu_img('convert', '-f', iotests.imgfmt, '-O', 'raw', img2, > > img2 + '.raw') > > + file1 = open(img1 + '.raw', 'r') > > + file2 = open(img2 + '.raw', 'r') > > + return file1.read() == file2.read() > > + finally: > > + if file1 is not None: > > + file1.close() > > + if file2 is not None: > > + file2.close() > > + try: > > + os.remove(img1 + '.raw') > > + except OSError: > > + pass > > + try: > > + os.remove(img2 + '.raw') > > + except OSError: > > + pass > > compare_images() is an exact copy of its 041 counterparts, > complete_and_wait() and cancel_and_wait() are the same as in 041 in the > wait_ready = False case. Sounds like candidates for factoring out.
Will fix.