qemu/tests/qemu-iotests/087
<<
>>
Prefs
   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
  23owner=kwolf@redhat.com
  24
  25seq=`basename $0`
  26echo "QA output created by $seq"
  27
  28status=1        # failure is the default!
  29
  30_cleanup()
  31{
  32    _cleanup_test_img
  33}
  34trap "_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
  45do_run_qemu()
  46{
  47    echo Testing: "$@"
  48    $QEMU -nographic -qmp stdio -serial none "$@"
  49    echo
  50}
  51
  52run_qemu()
  53{
  54    do_run_qemu "$@" 2>&1 | _filter_testdir | _filter_qmp \
  55                          | _filter_qemu | _filter_imgfmt \
  56                          | _filter_actual_image_size
  57}
  58
  59size=128M
  60
  61_make_test_img $size
  62
  63echo
  64echo === Missing ID and node-name ===
  65echo
  66
  67run_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" }
  79EOF
  80
  81echo
  82echo === Duplicate ID ===
  83echo
  84
  85run_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" }
 106EOF
 107
 108echo
 109echo === aio=native without O_DIRECT ===
 110echo
 111
 112# Skip this test if AIO is not enabled in this build
 113run_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
 119run_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" }
 133EOF
 134
 135echo
 136echo === Encrypted image QCow ===
 137echo
 138
 139_make_test_img --object secret,id=sec0,data=123456 -o encryption=on,encrypt.key-secret=sec0 $size
 140run_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" }
 164EOF
 165
 166echo
 167echo === Encrypted image LUKS ===
 168echo
 169
 170_make_test_img --object secret,id=sec0,data=123456 -o encrypt.format=luks,encrypt.key-secret=sec0 $size
 171run_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" }
 195EOF
 196
 197echo
 198echo === Missing driver ===
 199echo
 200
 201_make_test_img --object secret,id=sec0,data=123456 -o encryption=on,encrypt.key-secret=sec0 $size
 202run_qemu -S <<EOF
 203{ "execute": "qmp_capabilities" }
 204{ "execute": "blockdev-add",
 205  "arguments": {
 206      "node-name": "disk"
 207    }
 208  }
 209{ "execute": "quit" }
 210EOF
 211
 212# success, all done
 213echo "*** done"
 214rm -f $seq.full
 215status=0
 216