Commit fd9c577b authored by Wenchao Xia's avatar Wenchao Xia Committed by Kevin Wolf
Browse files

qemu-iotests: add tests for runtime fd passing via SCM rights



This case will test whether the monitor can receive fd at runtime.
To verify better, additional monitor is created to see if qemu
can handler two monitor instances correctly.

Signed-off-by: default avatarWenchao Xia <xiawenc@linux.vnet.ibm.com>
Reviewed-by: default avatarStefan Hajnoczi <stefanha@redhat.com>
Signed-off-by: default avatarKevin Wolf <kwolf@redhat.com>
parent 30b005d9
Loading
Loading
Loading
Loading
+50 −1
Original line number Diff line number Diff line
#!/usr/bin/env python
#
# Tests for fdsets.
# Tests for fdsets and getfd.
#
# Copyright (C) 2012 IBM Corp.
#
@@ -125,5 +125,54 @@ class TestFdSets(iotests.QMPTestCase):
                'No file descriptor supplied via SCM_RIGHTS')
        self.vm.shutdown()

# Add fd at runtime, there are two ways: monitor related or fdset related
class TestSCMFd(iotests.QMPTestCase):
    def setUp(self):
        self.vm = iotests.VM()
        qemu_img('create', '-f', iotests.imgfmt, image0, '128K')
        # Add an unused monitor, to verify it works fine when two monitor
        # instances present
        self.vm.add_monitor_telnet("0",4445)
        self.vm.launch()

    def tearDown(self):
        self.vm.shutdown()
        os.remove(image0)

    def _send_fd_by_SCM(self):
        ret = self.vm.send_fd_scm(image0)
        self.assertEqual(ret, 0, 'Failed to send fd with UNIX SCM')

    def test_add_fd(self):
        self._send_fd_by_SCM()
        result = self.vm.qmp('add-fd', fdset_id=2, opaque='image0:r')
        self.assert_qmp(result, 'return/fdset-id', 2)

    def test_getfd(self):
        self._send_fd_by_SCM()
        result = self.vm.qmp('getfd', fdname='image0:r')
        self.assert_qmp(result, 'return', {})

    def test_getfd_invalid_fdname(self):
        self._send_fd_by_SCM()
        result = self.vm.qmp('getfd', fdname='0image0:r')
        self.assert_qmp(result, 'error/class', 'GenericError')
        self.assert_qmp(result, 'error/desc',
            "Parameter 'fdname' expects a name not starting with a digit")

    def test_closefd(self):
        self._send_fd_by_SCM()
        result = self.vm.qmp('getfd', fdname='image0:r')
        self.assert_qmp(result, 'return', {})
        result = self.vm.qmp('closefd', fdname='image0:r')
        self.assert_qmp(result, 'return', {})

    def test_closefd_fd_not_found(self):
        fdname = 'image0:r'
        result = self.vm.qmp('closefd', fdname=fdname)
        self.assert_qmp(result, 'error/class', 'GenericError')
        self.assert_qmp(result, 'error/desc',
            "File descriptor named '%s' not found" % fdname)

if __name__ == '__main__':
    iotests.main(supported_fmts=['raw'])
+2 −2
Original line number Diff line number Diff line
......
...........
----------------------------------------------------------------------
Ran 6 tests
Ran 11 tests

OK