#!/bin/bash
#
# Test VDI 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 vdi
_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 <<EOF
{ "execute": "qmp_capabilities" }
{ "execute": "x-blockdev-create",
  "arguments": {
      "driver": "file",
      "filename": "$TEST_IMG",
      "size": 0
  }
}
{ "execute": "blockdev-add",
  "arguments": {
      "driver": "file",
      "node-name": "imgfile",
      "filename": "$TEST_IMG"
  }
}
{ "execute": "x-blockdev-create",
  "arguments": {
      "driver": "$IMGFMT",
      "file": "imgfile",
      "size": $size
  }
}
{ "execute": "quit" }
EOF

_img_info --format-specific | _filter_img_info --format-specific
$QEMU_IMG map --output=json "$TEST_IMG" | _filter_qemu_img_map

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

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

run_qemu <<EOF
{ "execute": "qmp_capabilities" }
{ "execute": "x-blockdev-create",
  "arguments": {
      "driver": "file",
      "filename": "$TEST_IMG",
      "size": 0
  }
}
{ "execute": "x-blockdev-create",
  "arguments": {
      "driver": "$IMGFMT",
      "file": {
          "driver": "file",
          "filename": "$TEST_IMG"
      },
      "size": $size,
      "preallocation": "off"
  }
}
{ "execute": "quit" }
EOF

_img_info --format-specific | _filter_img_info --format-specific
$QEMU_IMG map --output=json "$TEST_IMG" | _filter_qemu_img_map

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

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

run_qemu <<EOF
{ "execute": "qmp_capabilities" }
{ "execute": "x-blockdev-create",
  "arguments": {
      "driver": "file",
      "filename": "$TEST_IMG",
      "size": 0
  }
}
{ "execute": "x-blockdev-create",
  "arguments": {
      "driver": "$IMGFMT",
      "file": {
          "driver": "file",
          "filename": "$TEST_IMG"
      },
      "size": $size,
      "preallocation": "metadata"
  }
}
{ "execute": "quit" }
EOF

_img_info --format-specific | _filter_img_info --format-specific
$QEMU_IMG map --output=json "$TEST_IMG" | _filter_qemu_img_map

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",node-name=node0 <<EOF
{ "execute": "qmp_capabilities" }
{ "execute": "x-blockdev-create",
  "arguments": {
      "driver": "$IMGFMT",
      "file": "node0",
      "size": 0
  }
}
{ "execute": "quit" }
EOF

_img_info | _filter_img_info

echo
echo "=== Maximum size ==="
echo

run_qemu -blockdev driver=file,filename="$TEST_IMG",node-name=node0 <<EOF
{ "execute": "qmp_capabilities" }
{ "execute": "x-blockdev-create",
  "arguments": {
      "driver": "$IMGFMT",
      "file": "node0",
      "size": 562949819203584
  }
}
{ "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. 0x1fffff8000001 (one byte more than maximum image size for VDI)

run_qemu -blockdev driver=file,filename="$TEST_IMG",node-name=node0 <<EOF
{ "execute": "qmp_capabilities" }
{ "execute": "x-blockdev-create",
  "arguments": {
      "driver": "$IMGFMT",
      "file": "node0",
      "size": 18446744073709551104
  }
}
{ "execute": "x-blockdev-create",
  "arguments": {
      "driver": "$IMGFMT",
      "file": "node0",
      "size": 9223372036854775808
  }
}
{ "execute": "x-blockdev-create",
  "arguments": {
      "driver": "$IMGFMT",
      "file": "node0",
      "size": 562949819203585
  }
}
{ "execute": "quit" }
EOF

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