#!/bin/bash
#
# Test luks and file image creation
#
# Copyright (C) 2018 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"

here=`pwd`
status=1	# failure is the default!

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

_supported_fmt luks
_supported_proto file
_supported_os Linux

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

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

echo
echo "=== Successful image creation (defaults) ==="
echo

size=$((128 * 1024 * 1024))

run_qemu -object secret,id=keysec0,data="foo" <<EOF
{ "execute": "qmp_capabilities" }
{ "execute": "x-blockdev-create",
  "arguments": {
      "driver": "file",
      "filename": "$TEST_IMG_FILE",
      "size": 0
  }
}
{ "execute": "blockdev-add",
  "arguments": {
      "driver": "file",
      "node-name": "imgfile",
      "filename": "$TEST_IMG_FILE"
  }
}
{ "execute": "x-blockdev-create",
  "arguments": {
      "driver": "$IMGFMT",
      "file": "imgfile",
      "key-secret": "keysec0",
      "size": $size,
      "iter-time": 10
  }
}
{ "execute": "quit" }
EOF

_img_info --format-specific | _filter_img_info --format-specific

echo
echo "=== Successful image creation (with non-default options) ==="
echo

# Choose a different size to show that we got a new image
size=$((64 * 1024 * 1024))

run_qemu -object secret,id=keysec0,data="foo" <<EOF
{ "execute": "qmp_capabilities" }
{ "execute": "x-blockdev-create",
  "arguments": {
      "driver": "file",
      "filename": "$TEST_IMG_FILE",
      "size": 0
  }
}
{ "execute": "x-blockdev-create",
  "arguments": {
      "driver": "$IMGFMT",
      "file": {
          "driver": "file",
          "filename": "$TEST_IMG_FILE"
      },
      "size": $size,
      "key-secret": "keysec0",
      "cipher-alg": "twofish-128",
      "cipher-mode": "ctr",
      "ivgen-alg": "plain64",
      "ivgen-hash-alg": "md5",
      "hash-alg": "sha1",
      "iter-time": 10
  }
}
{ "execute": "quit" }
EOF

_img_info --format-specific | _filter_img_info --format-specific

echo
echo "=== Invalid BlockdevRef ==="
echo

run_qemu <<EOF
{ "execute": "qmp_capabilities" }
{ "execute": "x-blockdev-create",
  "arguments": {
      "driver": "$IMGFMT",
      "file": "this doesn't exist",
      "size": $size
  }
}
{ "execute": "quit" }
EOF

echo
echo "=== Zero size ==="
echo

run_qemu -blockdev driver=file,filename="$TEST_IMG_FILE",node-name=node0 \
         -object secret,id=keysec0,data="foo" <<EOF
{ "execute": "qmp_capabilities" }
{ "execute": "x-blockdev-create",
  "arguments": {
      "driver": "$IMGFMT",
      "file": "node0",
      "key-secret": "keysec0",
      "size": 0,
      "iter-time": 10
  }
}
{ "execute": "quit" }
EOF

_img_info | _filter_img_info


echo
echo "=== Invalid sizes ==="
echo

# TODO Negative image sizes aren't handled correctly, but this is a problem
# with QAPI's implementation of the 'size' type and affects other commands as
# well. Once this is fixed, we may want to add a test case here.

# 1. 2^64 - 512
# 2. 2^63 = 8 EB (qemu-img enforces image sizes less than this)
# 3. 2^63 - 512 (generally valid, but with the crypto header the file will
#                exceed 63 bits)

run_qemu -blockdev driver=file,filename="$TEST_IMG_FILE",node-name=node0 \
         -object secret,id=keysec0,data="foo" <<EOF
{ "execute": "qmp_capabilities" }
{ "execute": "x-blockdev-create",
  "arguments": {
      "driver": "$IMGFMT",
      "file": "node0",
      "key-secret": "keysec0",
      "size": 18446744073709551104
  }
}
{ "execute": "x-blockdev-create",
  "arguments": {
      "driver": "$IMGFMT",
      "file": "node0",
      "key-secret": "keysec0",
      "size": 9223372036854775808
  }
}
{ "execute": "x-blockdev-create",
  "arguments": {
      "driver": "$IMGFMT",
      "file": "node0",
      "key-secret": "keysec0",
      "size": 9223372036854775296
  }
}
{ "execute": "quit" }
EOF

echo
echo "=== Resize image with invalid sizes ==="
echo

run_qemu -blockdev driver=file,filename="$TEST_IMG_FILE",node-name=node0 \
         -blockdev driver=luks,file=node0,key-secret=keysec0,node-name=node1 \
         -object secret,id=keysec0,data="foo" <<EOF
{ "execute": "qmp_capabilities" }
{ "execute": "block_resize",
  "arguments": {
      "node-name": "node1",
      "size": 9223372036854775296
  }
}
{ "execute": "block_resize",
  "arguments": {
      "node-name": "node1",
      "size": 9223372036854775808
  }
}
{ "execute": "block_resize",
  "arguments": {
      "node-name": "node1",
      "size": 18446744073709551104
  }
}
{ "execute": "block_resize",
  "arguments": {
      "node-name": "node1",
      "size": -9223372036854775808
  }
}
{ "execute": "quit" }
EOF

_img_info | _filter_img_info

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