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

140 (2997B)


      1#!/usr/bin/env bash
      2# group: rw auto quick
      3#
      4# Test case for ejecting a BlockBackend with an NBD server attached to it
      5#
      6# Verify that the NBD server stops offering the drive when ejecting a
      7# BlockDriverState tree from a BlockBackend (that is, a medium from a
      8# drive) exposed via an NBD server.
      9#
     10# Copyright (C) 2016 Red Hat, Inc.
     11#
     12# This program is free software; you can redistribute it and/or modify
     13# it under the terms of the GNU General Public License as published by
     14# the Free Software Foundation; either version 2 of the License, or
     15# (at your option) any later version.
     16#
     17# This program is distributed in the hope that it will be useful,
     18# but WITHOUT ANY WARRANTY; without even the implied warranty of
     19# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
     20# GNU General Public License for more details.
     21#
     22# You should have received a copy of the GNU General Public License
     23# along with this program.  If not, see <http://www.gnu.org/licenses/>.
     24#
     25
     26# creator
     27owner=mreitz@redhat.com
     28
     29seq="$(basename $0)"
     30echo "QA output created by $seq"
     31
     32status=1	# failure is the default!
     33
     34_cleanup()
     35{
     36    _cleanup_qemu
     37    _cleanup_test_img
     38    rm -f "$SOCK_DIR/nbd"
     39}
     40trap "_cleanup; exit \$status" 0 1 2 3 15
     41
     42# get standard environment, filters and checks
     43. ./common.rc
     44. ./common.filter
     45. ./common.qemu
     46
     47_supported_fmt generic
     48_supported_proto file fuse
     49_supported_os Linux
     50
     51_make_test_img 64k
     52
     53$QEMU_IO -c 'write -P 42 0 64k' "$TEST_IMG" | _filter_qemu_io
     54
     55if test "$IMGOPTSSYNTAX" = "true"
     56then
     57    SYSEMU_DRIVE_ARG=if=none,media=cdrom,id=drv,"$TEST_IMG"
     58else
     59    SYSEMU_DRIVE_ARG=if=none,media=cdrom,id=drv,file="$TEST_IMG",driver=$IMGFMT
     60fi
     61
     62keep_stderr=y \
     63_launch_qemu -drive $SYSEMU_DRIVE_ARG \
     64    2> >(_filter_nbd)
     65
     66_send_qemu_cmd $QEMU_HANDLE \
     67    "{ 'execute': 'qmp_capabilities' }" \
     68    'return'
     69
     70_send_qemu_cmd $QEMU_HANDLE \
     71    "{ 'execute': 'nbd-server-start',
     72       'arguments': { 'addr': { 'type': 'unix',
     73                                'data': { 'path': '$SOCK_DIR/nbd' }}}}" \
     74    'return'
     75
     76_send_qemu_cmd $QEMU_HANDLE \
     77    "{ 'execute': 'nbd-server-add',
     78       'arguments': { 'device': 'drv' }}" \
     79    'return'
     80
     81$QEMU_IO_PROG -f raw -r -c 'read -P 42 0 64k' \
     82    "nbd+unix:///drv?socket=$SOCK_DIR/nbd" 2>&1 \
     83    | _filter_qemu_io | _filter_nbd
     84
     85# The order of 'return' and the BLOCK_EXPORT_DELETED event is undefined. Just
     86# wait until we've twice seen one of them. Filter the 'return' line out so that
     87# the output is defined.
     88_send_qemu_cmd $QEMU_HANDLE \
     89    "{ 'execute': 'eject',
     90       'arguments': { 'device': 'drv' }}" \
     91    'return\|BLOCK_EXPORT_DELETED' |
     92    grep -v 'return'
     93
     94_send_qemu_cmd $QEMU_HANDLE '' 'return\|BLOCK_EXPORT_DELETED' |
     95    grep -v 'return'
     96
     97$QEMU_IO_PROG -f raw -r -c close \
     98    "nbd+unix:///drv?socket=$SOCK_DIR/nbd" 2>&1 \
     99    | _filter_qemu_io | _filter_nbd
    100
    101_send_qemu_cmd $QEMU_HANDLE \
    102    "{ 'execute': 'quit' }" \
    103    'return'
    104
    105wait=1 _cleanup_qemu
    106
    107# success, all done
    108echo '*** done'
    109rm -f $seq.full
    110status=0