master
text 105 lines 4.72 KB
Raw
1 #!/usr/bin/env python3
2 # group: quick
3
4 # Test hot plugging and unplugging with iothreads
5 #
6 # Copyright (C) 2019 Igalia, S.L.
7 # Author: Alberto Garcia <berto@igalia.com>
8 #
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.
13 #
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.
18 #
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/>.
21
22 import iotests
23 import os
24
25 nbd_sock = iotests.file_path('nbd.sock', base_dir=iotests.sock_dir)
26
27 class TestCase(iotests.QMPTestCase):
28 test_driver = "null-co"
29
30 def required_drivers(self):
31 return [self.test_driver]
32
33 @iotests.skip_if_unsupported(required_drivers)
34 def setUp(self):
35 self.vm = iotests.VM()
36 self.vm.launch()
37
38 def tearDown(self):
39 self.vm.shutdown()
40
41 def test1(self):
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')
53
54 def test2(self):
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])
59
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')
67
68 def test3(self):
69 iotests.log('==Attach two SCSI disks using the same block device but different iothreads==')
70
71 self.vm.qmp_log('blockdev-add', driver='null-co', read_zeroes=True, node_name='hd0', read_only=True)
72
73 self.vm.qmp_log('object-add', qom_type='iothread', id="iothread0")
74 self.vm.qmp_log('object-add', qom_type='iothread', id="iothread1")
75
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])
78
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")
81
82 self.vm.qmp_log('device_del', id='scsi-hd0')
83 self.vm.event_wait('DEVICE_DELETED')
84 self.vm.qmp_log('device_del', id='scsi-hd1')
85 self.vm.event_wait('DEVICE_DELETED')
86 self.vm.qmp_log('blockdev-del', node_name='hd0')
87
88 def test4(self):
89 iotests.log('==Attach a SCSI disks using the same block device as a NBD server==')
90
91 self.vm.qmp_log('blockdev-add', driver='null-co', read_zeroes=True, node_name='hd0', read_only=True)
92
93 self.vm.qmp_log('nbd-server-start',
94 filters=[iotests.filter_qmp_testfiles],
95 addr={'type':'unix', 'data':{'path':nbd_sock}})
96
97 self.vm.qmp_log('nbd-server-add', device='hd0')
98
99 self.vm.qmp_log('object-add', qom_type='iothread', id="iothread0")
100 self.vm.qmp_log('device_add', id='scsi0', driver='virtio-scsi', iothread='iothread0', filters=[iotests.filter_qmp_virtio_scsi])
101 self.vm.qmp_log('device_add', id='scsi-hd0', driver='scsi-hd', drive='hd0')
102
103 if __name__ == '__main__':
104 iotests.activate_logging()
105 iotests.main()