#!/usr/bin/env bash
# group: rw quick
#
# Test case for vmdk
#
# Copyright (C) 2013 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=fam@euphon.net

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

status=1	# failure is the default!

_cleanup()
{
    _cleanup_test_img
    IMGFMT=qcow2 _rm_test_img "$TEST_IMG.qcow2"
}
trap "_cleanup; exit \$status" 0 1 2 3 15

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

# This tests vmdk-specific low-level functionality
_supported_fmt vmdk
_supported_proto file
_supported_os Linux

# We test all kinds of VMDK options here, so ignore user-specified options
IMGOPTS=""

capacity_offset=16
granularity_offset=20
grain_table_size_offset=44

echo
echo "=== Testing invalid granularity ==="
_make_test_img 64M
poke_file "$TEST_IMG" "$granularity_offset" "\xff\xff\xff\xff\xff\xff\xff\xff"
{ $QEMU_IO -c "read 0 512" "$TEST_IMG"; } 2>&1 | _filter_qemu_io | _filter_testdir

echo
echo "=== Testing too big L2 table size ==="
_make_test_img 64M
poke_file "$TEST_IMG" "$grain_table_size_offset" "\xff\xff\xff\xff"
{ $QEMU_IO -c "read 0 512" "$TEST_IMG"; } 2>&1 | _filter_qemu_io | _filter_testdir

echo
echo "=== Testing too big L1 table size ==="
_make_test_img 64M
poke_file "$TEST_IMG" "$capacity_offset" "\xff\xff\xff\xff"
poke_file "$TEST_IMG" "$grain_table_size_offset" "\x01\x00\x00\x00"
{ $QEMU_IO -c "read 0 512" "$TEST_IMG"; } 2>&1 | _filter_qemu_io | _filter_testdir

echo
echo "=== Testing monolithicFlat creation and opening ==="
_make_test_img -o "subformat=monolithicFlat" 2G
_img_info
_cleanup_test_img

echo
echo "=== Testing monolithicFlat with zeroed_grain ==="
_make_test_img -o "subformat=monolithicFlat,zeroed_grain=on" 2G
_cleanup_test_img

echo
echo "=== Testing big twoGbMaxExtentFlat ==="
_make_test_img -o "subformat=twoGbMaxExtentFlat" 1000G
_img_info --format-specific | _filter_img_info --format-specific
_cleanup_test_img

echo
echo "=== Testing malformed VMFS extent description line ==="
cat >"$TEST_IMG" <<EOF
# Disk DescriptorFile
version=1
CID=58ab4847
parentCID=ffffffff
createType="vmfs"

# Extent description
RW 12582912 VMFS "dummy.vmdk" 1
EOF
_img_info

echo
echo "=== Testing truncated sparse ==="
_make_test_img -o "subformat=monolithicSparse" 100G
truncate -s 10M $TEST_IMG
_img_info

echo
echo "=== Converting to streamOptimized from image with small cluster size==="
TEST_IMG="$TEST_IMG.qcow2" IMGFMT=qcow2 _make_test_img -o "cluster_size=4096" 1G
$QEMU_IO -f qcow2 -c "write -P 0xa 0 512" "$TEST_IMG.qcow2" | _filter_qemu_io
$QEMU_IO -f qcow2 -c "write -P 0xb 10240 512" "$TEST_IMG.qcow2" | _filter_qemu_io
$QEMU_IMG convert -f qcow2 -O vmdk -o subformat=streamOptimized "$TEST_IMG.qcow2" "$TEST_IMG" 2>&1

echo
echo "=== Testing monolithicFlat with internally generated JSON file name ==="

echo '--- blkdebug ---'
# Should work, because bdrv_dirname() works fine with blkdebug
_make_test_img -o "subformat=monolithicFlat" 64M
$QEMU_IO -c "open -o driver=$IMGFMT,file.driver=blkdebug,file.image.filename=$TEST_IMG,file.inject-error.0.event=read_aio" \
         -c info \
    2>&1 \
    | _filter_testdir | _filter_imgfmt | _filter_img_info
_cleanup_test_img

echo '--- quorum ---'
# Should not work, because bdrv_dirname() does not work with quorum
_make_test_img -o "subformat=monolithicFlat" 64M
cp "$TEST_IMG" "$TEST_IMG.orig"

filename="json:{
    \"driver\": \"$IMGFMT\",
    \"file\": {
        \"driver\": \"quorum\",
        \"children\": [ {
            \"driver\": \"file\",
            \"filename\": \"$TEST_IMG\"
        }, {
            \"driver\": \"file\",
            \"filename\": \"$TEST_IMG.orig\"
        } ],
        \"vote-threshold\": 1
    } }"

filename=$(echo "$filename" | tr '\n' ' ' | sed -e 's/\s\+/ /g')
$QEMU_IMG info "$filename" 2>&1 \
    | sed -e "s/'json:[^']*'/\$QUORUM_FILE/g" \
    | _filter_testdir | _filter_imgfmt | _filter_img_info


echo
echo "=== Testing version 3 ==="
_use_sample_img iotest-version3.vmdk.bz2
_img_info
for i in {0..99}; do
    $QEMU_IO -r -c "read -P $(( i % 10 + 0x30 )) $(( i * 64 * 1024 * 10 + i * 512 )) 512" $TEST_IMG \
        | _filter_qemu_io
done
_cleanup_test_img

echo
echo "=== Testing 4TB monolithicFlat creation and IO ==="
_make_test_img -o "subformat=monolithicFlat" 4T
_img_info
$QEMU_IO -c "write -P 0xa 900G 512" "$TEST_IMG" | _filter_qemu_io
$QEMU_IO -c "read -v 900G 1024" "$TEST_IMG" | _filter_qemu_io
_cleanup_test_img

echo
echo "=== Testing qemu-img map on extents ==="
for fmt in monolithicSparse twoGbMaxExtentSparse; do
    _make_test_img -o "subformat=$fmt" 31G
    $QEMU_IO -c "write 65024 1k" "$TEST_IMG" | _filter_qemu_io
    $QEMU_IO -c "write 2147483136 1k" "$TEST_IMG" | _filter_qemu_io
    $QEMU_IO -c "write 5G 1k" "$TEST_IMG" | _filter_qemu_io
    $QEMU_IMG map "$TEST_IMG" | _filter_testdir
    _cleanup_test_img
done

echo
echo "=== Testing afl image with a very large capacity ==="
_use_sample_img afl9.vmdk.bz2
_img_info | grep -q 'Cannot allocate memory' && _notrun "Insufficent memory, skipped test"
_img_info
_cleanup_test_img

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