4 # Test hot plugging and unplugging with iothreads
6 # Copyright (C) 2019 Igalia, S.L.
7 # Author: Alberto Garcia <berto@igalia.com>
9 # This program is free software; you can redistribute it and/or modify
10 # it under the terms of the GNU General Public License as published by
11 # the Free Software Foundation; either version 2 of the License, or
12 # (at your option) any later version.
14 # This program is distributed in the hope that it will be useful,
15 # but WITHOUT ANY WARRANTY; without even the implied warranty of
16 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17 # GNU General Public License for more details.
19 # You should have received a copy of the GNU General Public License
20 # along with this program. If not, see <http://www.gnu.org/licenses/>.
25 nbd_sock = iotests.file_path('nbd.sock', base_dir=iotests.sock_dir)
27 class TestCase(iotests.QMPTestCase):
28 test_driver = "null-co"
30 def required_drivers(self):
31 return [self.test_driver]
33 @iotests.skip_if_unsupported(required_drivers)
35 self.vm = iotests.VM()
42 iotests.log('==Unplug a SCSI disk and then plug it again==')
43 self.vm.qmp_log('blockdev-add', driver='null-co', read_zeroes=True, node_name='hd0')
44 self.vm.qmp_log('object-add', qom_type='iothread', id="iothread0")
45 self.vm.qmp_log('device_add', id='scsi0', driver='virtio-scsi', iothread='iothread0', filters=[iotests.filter_qmp_virtio_scsi])
46 self.vm.qmp_log('device_add', id='scsi-hd0', driver='scsi-hd', drive='hd0')
47 self.vm.qmp_log('device_del', id='scsi-hd0')
48 self.vm.event_wait('DEVICE_DELETED')
49 self.vm.qmp_log('device_add', id='scsi-hd0', driver='scsi-hd', drive='hd0')
50 self.vm.qmp_log('device_del', id='scsi-hd0')
51 self.vm.event_wait('DEVICE_DELETED')
52 self.vm.qmp_log('blockdev-del', node_name='hd0')
55 iotests.log('==Attach two SCSI disks using the same block device and the same iothread==')
56 self.vm.qmp_log('blockdev-add', driver='null-co', read_zeroes=True, node_name='hd0', read_only=True)
57 self.vm.qmp_log('object-add', qom_type='iothread', id="iothread0")
58 self.vm.qmp_log('device_add', id='scsi0', driver='virtio-scsi', iothread='iothread0', filters=[iotests.filter_qmp_virtio_scsi])
60 self.vm.qmp_log('device_add', id='scsi-hd0', driver='scsi-hd', drive='hd0')
61 self.vm.qmp_log('device_add', id='scsi-hd1', driver='scsi-hd', drive='hd0')
62 self.vm.qmp_log('device_del', id='scsi-hd0')
63 self.vm.event_wait('DEVICE_DELETED')
64 self.vm.qmp_log('device_del', id='scsi-hd1')
65 self.vm.event_wait('DEVICE_DELETED')
66 self.vm.qmp_log('blockdev-del', node_name='hd0')
69 iotests.log('==Attach two SCSI disks using the same block device but different iothreads==')
71 self.vm.qmp_log('blockdev-add', driver='null-co', read_zeroes=True, node_name='hd0', read_only=True)
73 self.vm.qmp_log('object-add', qom_type='iothread', id="iothread0")
74 self.vm.qmp_log('object-add', qom_type='iothread', id="iothread1")
76 self.vm.qmp_log('device_add', id='scsi0', driver='virtio-scsi', iothread='iothread0', filters=[iotests.filter_qmp_virtio_scsi])
77 self.vm.qmp_log('device_add', id='scsi1', driver='virtio-scsi', iothread='iothread1', filters=[iotests.filter_qmp_virtio_scsi])
79 self.vm.qmp_log('device_add', id='scsi-hd0', driver='scsi-hd', drive='hd0', bus="scsi0.0")
80 self.vm.qmp_log('device_add', id='scsi-hd1', driver='scsi-hd', drive='hd0', bus="scsi1.0")
82 self.vm.qmp_log('device_del', id='scsi-hd0')
83 self.vm.event_wait('DEVICE_DELETED')
84 self.vm.qmp_log('device_add', id='scsi-hd1', driver='scsi-hd', drive='hd0', bus="scsi1.0")
86 self.vm.qmp_log('device_del', id='scsi-hd1')
87 self.vm.event_wait('DEVICE_DELETED')
88 self.vm.qmp_log('blockdev-del', node_name='hd0')
91 iotests.log('==Attach a SCSI disks using the same block device as a NBD server==')
93 self.vm.qmp_log('blockdev-add', driver='null-co', read_zeroes=True, node_name='hd0', read_only=True)
95 self.vm.qmp_log('nbd-server-start',
96 filters=[iotests.filter_qmp_testfiles],
97 addr={'type':'unix', 'data':{'path':nbd_sock}})
99 self.vm.qmp_log('nbd-server-add', device='hd0')
101 self.vm.qmp_log('object-add', qom_type='iothread', id="iothread0")
102 self.vm.qmp_log('device_add', id='scsi0', driver='virtio-scsi', iothread='iothread0', filters=[iotests.filter_qmp_virtio_scsi])
103 self.vm.qmp_log('device_add', id='scsi-hd0', driver='scsi-hd', drive='hd0')
105 if __name__ == '__main__':
106 iotests.activate_logging()