qemu

FORK: QEMU emulator
git clone https://git.neptards.moe/neptards/qemu.git
Log | Files | Refs | Submodules | LICENSE

240 (4938B)


      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_add', id='scsi-hd1', driver='scsi-hd', drive='hd0', bus="scsi1.0")
     85 
     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')
     89 
     90     def test4(self):
     91         iotests.log('==Attach a SCSI disks using the same block device as a NBD server==')
     92 
     93         self.vm.qmp_log('blockdev-add', driver='null-co', read_zeroes=True, node_name='hd0', read_only=True)
     94 
     95         self.vm.qmp_log('nbd-server-start',
     96                         filters=[iotests.filter_qmp_testfiles],
     97                         addr={'type':'unix', 'data':{'path':nbd_sock}})
     98 
     99         self.vm.qmp_log('nbd-server-add', device='hd0')
    100 
    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')
    104 
    105 if __name__ == '__main__':
    106     iotests.activate_logging()
    107     iotests.main()