#!/bin/bash
#
# Test case for the QMP blkdebug and blkverify interfaces
#
# 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=mreitz@redhat.com

seq="$(basename $0)"
echo "QA output created by $seq"

here="$PWD"
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

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

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

IMG_SIZE=64M

echo
echo "=== Testing blkverify through filename ==="
echo

TEST_IMG="$TEST_IMG.base" IMGOPTS="" IMGFMT="raw" _make_test_img $IMG_SIZE |\
    _filter_imgfmt
_make_test_img $IMG_SIZE
$QEMU_IO -c "open -o driver=raw,file.driver=blkverify,file.raw.filename=$TEST_IMG.base $TEST_IMG" \
         -c 'read 0 512' -c 'write -P 42 0x38000 512' -c 'read -P 42 0x38000 512' | _filter_qemu_io

$QEMU_IO -c 'write -P 42 0 512' "$TEST_IMG" | _filter_qemu_io

$QEMU_IO -c "open -o driver=raw,file.driver=blkverify,file.raw.filename=$TEST_IMG.base $TEST_IMG" \
         -c 'read -P 42 0 512' | _filter_qemu_io

echo
echo "=== Testing blkverify through file blockref ==="
echo

TEST_IMG="$TEST_IMG.base" IMGOPTS="" IMGFMT="raw" _make_test_img $IMG_SIZE |\
    _filter_imgfmt
_make_test_img $IMG_SIZE
$QEMU_IO -c "open -o driver=raw,file.driver=blkverify,file.raw.filename=$TEST_IMG.base,file.test.driver=$IMGFMT,file.test.file.filename=$TEST_IMG" \
         -c 'read 0 512' -c 'write -P 42 0x38000 512' -c 'read -P 42 0x38000 512' | _filter_qemu_io

$QEMU_IO -c 'write -P 42 0 512' "$TEST_IMG" | _filter_qemu_io

$QEMU_IO -c "open -o driver=raw,file.driver=blkverify,file.raw.filename=$TEST_IMG.base $TEST_IMG" \
         -c 'read -P 42 0 512' | _filter_qemu_io

echo
echo "=== Testing blkdebug through filename ==="
echo

$QEMU_IO -c "open -o file.driver=blkdebug,file.inject-error.event=l2_load $TEST_IMG" \
         -c 'read -P 42 0x38000 512'

echo
echo "=== Testing blkdebug through file blockref ==="
echo

$QEMU_IO -c "open -o driver=$IMGFMT,file.driver=blkdebug,file.inject-error.event=l2_load,file.image.filename=$TEST_IMG" \
         -c 'read -P 42 0x38000 512'

echo
echo "=== Testing blkdebug on existing block device ==="
echo

run_qemu <<EOF
{ "execute": "qmp_capabilities" }
{ "execute": "blockdev-add",
    "arguments": {
        "options": {
            "node-name": "drive0",
            "driver": "file",
            "filename": "$TEST_IMG"
        }
    }
}
{ "execute": "blockdev-add",
    "arguments": {
        "options": {
            "driver": "$IMGFMT",
            "id": "drive0-debug",
            "file": {
                "driver": "blkdebug",
                "image": "drive0",
                "inject-error": [{
                    "event": "l2_load"
                }]
            }
        }
    }
}
{ "execute": "human-monitor-command",
    "arguments": {
        "command-line": 'qemu-io drive0-debug "read 0 512"'
    }
}
{ "execute": "quit" }
EOF

echo
echo "=== Testing blkverify on existing block device ==="
echo

run_qemu <<EOF
{ "execute": "qmp_capabilities" }
{ "execute": "blockdev-add",
    "arguments": {
        "options": {
            "node-name": "drive0",
            "driver": "$IMGFMT",
            "file": {
                "driver": "file",
                "filename": "$TEST_IMG"
            }
        }
    }
}
{ "execute": "blockdev-add",
    "arguments": {
        "options": {
            "driver": "blkverify",
            "id": "drive0-verify",
            "test": "drive0",
            "raw": {
                "driver": "file",
                "filename": "$TEST_IMG.base"
            }
        }
    }
}
{ "execute": "human-monitor-command",
    "arguments": {
        "command-line": 'qemu-io drive0-verify "read 0 512"'
    }
}
{ "execute": "quit" }
EOF

echo
echo "=== Testing blkverify on existing raw block device ==="
echo

run_qemu <<EOF
{ "execute": "qmp_capabilities" }
{ "execute": "blockdev-add",
    "arguments": {
        "options": {
            "node-name": "drive0",
            "driver": "file",
            "filename": "$TEST_IMG.base"
        }
    }
}
{ "execute": "blockdev-add",
    "arguments": {
        "options": {
            "driver": "blkverify",
            "id": "drive0-verify",
            "test": {
                "driver": "$IMGFMT",
                "file": {
                    "driver": "file",
                    "filename": "$TEST_IMG"
                }
            },
            "raw": "drive0"
        }
    }
}
{ "execute": "human-monitor-command",
    "arguments": {
        "command-line": 'qemu-io drive0-verify "read 0 512"'
    }
}
{ "execute": "quit" }
EOF

echo
echo "=== Testing blkdebug's set-state through QMP ==="
echo

run_qemu <<EOF
{ "execute": "qmp_capabilities" }
{ "execute": "blockdev-add",
    "arguments": {
        "options": {
            "node-name": "drive0",
            "driver": "file",
            "filename": "$TEST_IMG"
        }
    }
}
{ "execute": "blockdev-add",
    "arguments": {
        "options": {
            "driver": "$IMGFMT",
            "id": "drive0-debug",
            "file": {
                "driver": "blkdebug",
                "image": "drive0",
                "inject-error": [{
                    "event": "read_aio",
                    "state": 42
                }],
                "set-state": [{
                    "event": "write_aio",
                    "new_state": 42
                }]
            }
        }
    }
}
{ "execute": "human-monitor-command",
    "arguments": {
        "command-line": 'qemu-io drive0-debug "read 0 512"'
    }
}
{ "execute": "human-monitor-command",
    "arguments": {
        "command-line": 'qemu-io drive0-debug "write 0 512"'
    }
}
{ "execute": "human-monitor-command",
    "arguments": {
        "command-line": 'qemu-io drive0-debug "read 0 512"'
    }
}
{ "execute": "quit" }
EOF

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