qemu

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

087 (4427B)


      1 #!/usr/bin/env bash
      2 # group: rw quick
      3 #
      4 # Test unsupported blockdev-add cases
      5 #
      6 # Copyright (C) 2014 Red Hat, Inc.
      7 #
      8 # This program is free software; you can redistribute it and/or modify
      9 # it under the terms of the GNU General Public License as published by
     10 # the Free Software Foundation; either version 2 of the License, or
     11 # (at your option) any later version.
     12 #
     13 # This program is distributed in the hope that it will be useful,
     14 # but WITHOUT ANY WARRANTY; without even the implied warranty of
     15 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
     16 # GNU General Public License for more details.
     17 #
     18 # You should have received a copy of the GNU General Public License
     19 # along with this program.  If not, see <http://www.gnu.org/licenses/>.
     20 #
     21 
     22 # creator
     23 owner=kwolf@redhat.com
     24 
     25 seq=`basename $0`
     26 echo "QA output created by $seq"
     27 
     28 status=1	# failure is the default!
     29 
     30 _cleanup()
     31 {
     32     _cleanup_test_img
     33 }
     34 trap "_cleanup; exit \$status" 0 1 2 3 15
     35 
     36 # get standard environment, filters and checks
     37 . ./common.rc
     38 . ./common.filter
     39 
     40 _supported_fmt qcow2
     41 _supported_proto file
     42 _supported_os Linux
     43 _require_working_luks
     44 
     45 do_run_qemu()
     46 {
     47     echo Testing: "$@"
     48     $QEMU -nographic -qmp stdio -serial none "$@"
     49     echo
     50 }
     51 
     52 run_qemu()
     53 {
     54     do_run_qemu "$@" 2>&1 | _filter_testdir | _filter_qmp \
     55                           | _filter_qemu | _filter_imgfmt \
     56                           | _filter_actual_image_size
     57 }
     58 
     59 size=128M
     60 
     61 _make_test_img $size
     62 
     63 echo
     64 echo === Missing ID and node-name ===
     65 echo
     66 
     67 run_qemu <<EOF
     68 { "execute": "qmp_capabilities" }
     69 { "execute": "blockdev-add",
     70   "arguments": {
     71       "driver": "$IMGFMT",
     72       "file": {
     73           "driver": "file",
     74           "filename": "$TEST_IMG"
     75       }
     76     }
     77   }
     78 { "execute": "quit" }
     79 EOF
     80 
     81 echo
     82 echo === Duplicate ID ===
     83 echo
     84 
     85 run_qemu -drive driver=$IMGFMT,id=disk,node-name=test-node,file="$TEST_IMG" <<EOF
     86 { "execute": "qmp_capabilities" }
     87 { "execute": "blockdev-add",
     88   "arguments": {
     89       "driver": "$IMGFMT",
     90       "node-name": "disk",
     91       "file": {
     92           "driver": "null-co"
     93       }
     94     }
     95   }
     96 { "execute": "blockdev-add",
     97   "arguments": {
     98       "driver": "$IMGFMT",
     99       "node-name": "test-node",
    100       "file": {
    101           "driver": "null-co"
    102       }
    103     }
    104   }
    105 { "execute": "quit" }
    106 EOF
    107 
    108 echo
    109 echo === aio=native without O_DIRECT ===
    110 echo
    111 
    112 # Skip this test if AIO is not enabled in this build
    113 run_qemu_filter_aio()
    114 {
    115     run_qemu "$@" | \
    116         sed -e 's/is not supported in this build/it requires cache.direct=on, which was not specified/'
    117 }
    118 
    119 run_qemu_filter_aio <<EOF
    120 { "execute": "qmp_capabilities" }
    121 { "execute": "blockdev-add",
    122   "arguments": {
    123       "driver": "$IMGFMT",
    124       "node-name": "disk",
    125       "file": {
    126           "driver": "file",
    127           "filename": "$TEST_IMG",
    128           "aio": "native"
    129       }
    130     }
    131   }
    132 { "execute": "quit" }
    133 EOF
    134 
    135 echo
    136 echo === Encrypted image QCow ===
    137 echo
    138 
    139 _make_test_img --object secret,id=sec0,data=123456 -o encryption=on,encrypt.key-secret=sec0 $size
    140 run_qemu <<EOF
    141 { "execute": "qmp_capabilities" }
    142 { "execute": "object-add",
    143   "arguments": {
    144       "qom-type": "secret",
    145       "id": "sec0",
    146       "data": "123456"
    147   }
    148 }
    149 { "execute": "blockdev-add",
    150   "arguments": {
    151       "driver": "$IMGFMT",
    152       "node-name": "disk",
    153       "file": {
    154           "driver": "file",
    155           "filename": "$TEST_IMG"
    156       },
    157       "encrypt": {
    158           "format": "aes",
    159           "key-secret": "sec0"
    160       }
    161     }
    162   }
    163 { "execute": "quit" }
    164 EOF
    165 
    166 echo
    167 echo === Encrypted image LUKS ===
    168 echo
    169 
    170 _make_test_img --object secret,id=sec0,data=123456 -o encrypt.format=luks,encrypt.key-secret=sec0 $size
    171 run_qemu <<EOF
    172 { "execute": "qmp_capabilities" }
    173 { "execute": "object-add",
    174   "arguments": {
    175       "qom-type": "secret",
    176       "id": "sec0",
    177       "data": "123456"
    178   }
    179 }
    180 { "execute": "blockdev-add",
    181   "arguments": {
    182       "driver": "$IMGFMT",
    183       "node-name": "disk",
    184       "file": {
    185           "driver": "file",
    186           "filename": "$TEST_IMG"
    187       },
    188       "encrypt": {
    189         "format": "luks",
    190         "key-secret": "sec0"
    191       }
    192     }
    193   }
    194 { "execute": "quit" }
    195 EOF
    196 
    197 echo
    198 echo === Missing driver ===
    199 echo
    200 
    201 _make_test_img --object secret,id=sec0,data=123456 -o encryption=on,encrypt.key-secret=sec0 $size
    202 run_qemu -S <<EOF
    203 { "execute": "qmp_capabilities" }
    204 { "execute": "blockdev-add",
    205   "arguments": {
    206       "node-name": "disk"
    207     }
    208   }
    209 { "execute": "quit" }
    210 EOF
    211 
    212 # success, all done
    213 echo "*** done"
    214 rm -f $seq.full
    215 status=0