#!/usr/bin/env 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!

_cleanup()
{
    _cleanup_test_img
}
trap "_cleanup; exit \$status" 0 1 2 3 15

# 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
