Commit 0e4a0644 authored by Max Reitz's avatar Max Reitz
Browse files

iotests: Add read-only test case to 030



This tests that the stream job exits cleanly (without abort) when the
top node is read-only and cannot be reopened read/write.

Signed-off-by: default avatarMax Reitz <mreitz@redhat.com>
Message-id: 20190703172813.6868-12-mreitz@redhat.com
Signed-off-by: default avatarMax Reitz <mreitz@redhat.com>
parent 13658cd7
Loading
Loading
Loading
Loading
+28 −1
Original line number Diff line number Diff line
@@ -36,7 +36,9 @@ class TestSingleDrive(iotests.QMPTestCase):
        qemu_img('create', '-f', iotests.imgfmt, '-o', 'backing_file=%s' % mid_img, test_img)
        qemu_io('-f', 'raw', '-c', 'write -P 0x1 0 512', backing_img)
        qemu_io('-f', iotests.imgfmt, '-c', 'write -P 0x1 524288 512', mid_img)
        self.vm = iotests.VM().add_drive("blkdebug::" + test_img, "backing.node-name=mid")
        self.vm = iotests.VM().add_drive("blkdebug::" + test_img,
                                         "backing.node-name=mid," +
                                         "backing.backing.node-name=base")
        self.vm.launch()

    def tearDown(self):
@@ -151,6 +153,31 @@ class TestSingleDrive(iotests.QMPTestCase):
        result = self.vm.qmp('block-stream', device='mid')
        self.assert_qmp(result, 'error/desc', "Invalid job ID ''")

    def test_read_only(self):
        # Create a new file that we can attach (we need a read-only top)
        with iotests.FilePath('ro-top.img') as ro_top_path:
            qemu_img('create', '-f', iotests.imgfmt, ro_top_path,
                     str(self.image_len))

            result = self.vm.qmp('blockdev-add',
                                 node_name='ro-top',
                                 driver=iotests.imgfmt,
                                 read_only=True,
                                 file={
                                     'driver': 'file',
                                     'filename': ro_top_path,
                                     'read-only': True
                                 },
                                 backing='mid')
            self.assert_qmp(result, 'return', {})

            result = self.vm.qmp('block-stream', job_id='stream',
                                 device='ro-top', base_node='base')
            self.assert_qmp(result, 'error/desc', 'Block node is read-only')

            result = self.vm.qmp('blockdev-del', node_name='ro-top')
            self.assert_qmp(result, 'return', {})


class TestParallelOps(iotests.QMPTestCase):
    num_ops = 4 # Number of parallel block-stream operations
+2 −2
Original line number Diff line number Diff line
..........................
...........................
----------------------------------------------------------------------
Ran 26 tests
Ran 27 tests

OK