On 13.10.2016 15:26, Kevin Wolf wrote: > Am 28.09.2016 um 22:56 hat Max Reitz geschrieben: >> Signed-off-by: Max Reitz >> --- >> tests/qemu-iotests/147 | 201 +++++++++++++++++++++++++++++++++++++++++++++ >> tests/qemu-iotests/147.out | 5 ++ >> tests/qemu-iotests/group | 1 + >> 3 files changed, 207 insertions(+) >> create mode 100755 tests/qemu-iotests/147 >> create mode 100644 tests/qemu-iotests/147.out >> >> diff --git a/tests/qemu-iotests/147 b/tests/qemu-iotests/147 >> new file mode 100755 >> index 0000000..61e1e6f >> --- /dev/null >> +++ b/tests/qemu-iotests/147 >> @@ -0,0 +1,201 @@ >> +#!/usr/bin/env python >> +# >> +# Test case for NBD's blockdev-add interface >> +# >> +# Copyright (C) 2016 Red Hat, Inc. >> +# >> +# 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 . >> +# >> + >> +import os >> +import socket >> +import stat >> +import time >> +import iotests >> +from iotests import cachemode, imgfmt, qemu_img, qemu_nbd >> + >> +NBD_PORT = 10811 >> + >> +test_img = os.path.join(iotests.test_dir, 'test.img') >> + >> +class NBDBlockdevAddBase(iotests.QMPTestCase): >> + def blockdev_add_options(self, address, export=None): >> + options = { 'node-name': 'nbd-blockdev', >> + 'driver': 'raw', >> + 'file': { >> + 'driver': 'nbd', >> + 'address': address >> + } } >> + if export is not None: >> + options['file']['export'] = export >> + return options >> + >> + def client_test(self, filename, address, export=None): >> + bao = self.blockdev_add_options(address, export) >> + result = self.vm.qmp('blockdev-add', options=bao) > > This needs a rebase (**bao instead of options=bao). > >> + self.assert_qmp(result, 'return', {}) >> + >> + result = self.vm.qmp('query-named-block-nodes') >> + for node in result['return']: >> + if node['node-name'] == 'nbd-blockdev': >> + self.assert_qmp(node, 'image/filename', filename) >> + break >> + >> + result = self.vm.qmp('x-blockdev-del', node_name='nbd-blockdev') >> + self.assert_qmp(result, 'return', {}) >> + >> + >> +class QemuNBD(NBDBlockdevAddBase): >> + def setUp(self): >> + qemu_img('create', '-f', iotests.imgfmt, test_img, '64k') >> + self.vm = iotests.VM() >> + self.vm.launch() >> + >> + def tearDown(self): >> + self.vm.shutdown() >> + os.remove(test_img) >> + >> + def _server_up(self, *args): >> + self.assertEqual(qemu_nbd('-f', imgfmt, test_img, *args), 0) >> + >> + def test_inet(self): >> + self._server_up('-p', str(NBD_PORT)) >> + address = { 'type': 'inet', >> + 'data': { >> + 'host': 'localhost', >> + 'port': str(NBD_PORT) >> + } } >> + self.client_test('nbd://localhost:%i' % NBD_PORT, address) >> + >> + def test_unix(self): >> + socket = os.path.join(iotests.test_dir, 'qemu-nbd.socket') >> + self._server_up('-k', socket) >> + address = { 'type': 'unix', >> + 'data': { 'path': socket } } >> + self.client_test('nbd+unix://?socket=' + socket, address) >> + try: >> + os.remove(socket) >> + except OSError: >> + pass > > If the test case fails, the socket file is leaked. We should probably > either create and remove it in setUp()/tearDown(), or use a try/finally > block around the test_unix code. Yes, will do, thanks. Max