cachepc-qemu

Fork of AMDESE/qemu with changes for cachepc side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-qemu
Log | Files | Refs | Submodules | LICENSE | sfeed.txt

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
     22import iotests
     23import os
     24
     25nbd_sock = iotests.file_path('nbd.sock', base_dir=iotests.sock_dir)
     26
     27class 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
    105if __name__ == '__main__':
    106    iotests.activate_logging()
    107    iotests.main()