#!/usr/bin/env bash
# group: rw quick
#
# 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
_require_working_luks

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",
      "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",
      "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
