#!/bin/bash
#
# Test unsupported blockdev-add cases
#
# Copyright (C) 2014 Red Hat, Inc.
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program.  If not, see <http://www.gnu.org/licenses/>.
#

# creator
owner=kwolf@redhat.com

seq=`basename $0`
echo "QA output created by $seq"

status=1	# failure is the default!

# get standard environment, filters and checks
. ./common.rc
. ./common.filter

_supported_fmt qcow2
_supported_proto file
_supported_os Linux

do_run_qemu()
{
    echo Testing: "$@"
    $QEMU -nographic -qmp stdio -serial none "$@"
    echo
}

run_qemu()
{
    do_run_qemu "$@" 2>&1 | _filter_testdir | _filter_qmp \
                          | _filter_qemu | _filter_imgfmt \
                          | _filter_actual_image_size
}

size=128M

_make_test_img $size

echo
echo === Missing ID and node-name ===
echo

run_qemu <<EOF
{ "execute": "qmp_capabilities" }
{ "execute": "blockdev-add",
  "arguments": {
      "driver": "$IMGFMT",
      "file": {
          "driver": "file",
          "filename": "$TEST_IMG"
      }
    }
  }
{ "execute": "quit" }
EOF

echo
echo === Duplicate ID ===
echo

run_qemu -drive driver=$IMGFMT,id=disk,node-name=test-node,file="$TEST_IMG" <<EOF
{ "execute": "qmp_capabilities" }
{ "execute": "blockdev-add",
  "arguments": {
      "driver": "$IMGFMT",
      "node-name": "disk",
      "file": {
          "driver": "null-co"
      }
    }
  }
{ "execute": "blockdev-add",
  "arguments": {
      "driver": "$IMGFMT",
      "node-name": "test-node",
      "file": {
          "driver": "null-co"
      }
    }
  }
{ "execute": "quit" }
EOF

echo
echo === aio=native without O_DIRECT ===
echo

# Skip this test if AIO is not enabled in this build
run_qemu_filter_aio()
{
    run_qemu "$@" | \
        sed -e 's/is not supported in this build/it requires cache.direct=on, which was not specified/'
}

run_qemu_filter_aio <<EOF
{ "execute": "qmp_capabilities" }
{ "execute": "blockdev-add",
  "arguments": {
      "driver": "$IMGFMT",
      "node-name": "disk",
      "file": {
          "driver": "file",
          "filename": "$TEST_IMG",
          "aio": "native"
      }
    }
  }
{ "execute": "quit" }
EOF

echo
echo === Encrypted image QCow ===
echo

_make_test_img --object secret,id=sec0,data=123456 -o encryption=on,encrypt.key-secret=sec0 $size
run_qemu <<EOF
{ "execute": "qmp_capabilities" }
{ "execute": "object-add",
  "arguments": {
      "qom-type": "secret",
      "id": "sec0",
      "props": {
          "data": "123456"
      }
  }
}
{ "execute": "blockdev-add",
  "arguments": {
      "driver": "$IMGFMT",
      "node-name": "disk",
      "file": {
          "driver": "file",
          "filename": "$TEST_IMG"
      },
      "encrypt": {
          "format": "aes",
          "key-secret": "sec0"
      }
    }
  }
{ "execute": "quit" }
EOF

echo
echo === Encrypted image LUKS ===
echo

_make_test_img --object secret,id=sec0,data=123456 -o encrypt.format=luks,encrypt.key-secret=sec0 $size
run_qemu <<EOF
{ "execute": "qmp_capabilities" }
{ "execute": "object-add",
  "arguments": {
      "qom-type": "secret",
      "id": "sec0",
      "props": {
          "data": "123456"
      }
  }
}
{ "execute": "blockdev-add",
  "arguments": {
      "driver": "$IMGFMT",
      "node-name": "disk",
      "file": {
          "driver": "file",
          "filename": "$TEST_IMG"
      },
      "encrypt": {
        "format": "luks",
        "key-secret": "sec0"
      }
    }
  }
{ "execute": "quit" }
EOF

echo
echo === Missing driver ===
echo

_make_test_img --object secret,id=sec0,data=123456 -o encryption=on,encrypt.key-secret=sec0 $size
run_qemu -S <<EOF
{ "execute": "qmp_capabilities" }
{ "execute": "blockdev-add",
  "arguments": {
      "node-name": "disk"
    }
  }
{ "execute": "quit" }
EOF

# success, all done
echo "*** done"
rm -f $seq.full
status=0
