#!/bin/bash
#
# qcow2 error path testing
#
# Copyright (C) 2010 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`
tmp=/tmp/$$
status=1	# failure is the default!

_cleanup()
{
	_cleanup_test_img
    rm $TEST_DIR/blkdebug.conf
}
trap "_cleanup; exit \$status" 0 1 2 3 15

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

# Currently only qcow2 supports rebasing
_supported_fmt qcow2
_supported_proto generic
_supported_os Linux


echo "Errors while writing 128 kB"
echo

CLUSTER_SIZE=1024

BLKDBG_TEST_IMG="blkdebug:$TEST_DIR/blkdebug.conf:$TEST_IMG"

for event in \
    l1_update \
    \
    l2_load \
    l2_update \
    l2_alloc.write \
    \
    write_aio \
    \
    refblock_load \
    refblock_update_part \
    refblock_alloc \
    \
    cluster_alloc \

do

for errno in 5 28; do
for imm in off; do
for once in on off; do
for vmstate in "" "-b"; do

cat > $TEST_DIR/blkdebug.conf <<EOF
[inject-error]
event = "$event"
errno = "$errno"
immediately = "$imm"
once ="$once"
EOF

_make_test_img 1G

echo
echo "Event: $event; errno: $errno; imm: $imm; once: $once; write $vmstate"

# We want to catch a simple L2 update, not the allocation of the first L2 table
if [ "$event" == "l2_update" ]; then
    $QEMU_IO -c "write $vmstate 0 512" $TEST_IMG > /dev/null 2>&1
fi

$QEMU_IO -c "write $vmstate 0 128k " $BLKDBG_TEST_IMG | _filter_qemu_io

# l2_load is not called on allocation, so issue a second write
# Reads are another path to trigger l2_load, so do a read, too
if [ "$event" == "l2_load" ]; then
    $QEMU_IO -c "write $vmstate 0 128k " $BLKDBG_TEST_IMG | _filter_qemu_io
    $QEMU_IO -c "read $vmstate 0 128k " $BLKDBG_TEST_IMG | _filter_qemu_io
fi

$QEMU_IMG check $TEST_IMG 2>&1 | grep -v "refcount=1 reference=0"

done
done
done
done
done


echo
echo === Refcout table growth tests ===
echo
CLUSTER_SIZE=512


for event in \
    refblock_alloc.hookup \
    refblock_alloc.write \
    refblock_alloc.write_blocks \
    refblock_alloc.write_table \
    refblock_alloc.switch_table \

do

# This one takes a while, so let's test only one error code (ENOSPC should
# never be generated by qemu, so it's probably a good choice)
for errno in 28; do
for imm in off; do
for once in on off; do
for vmstate in "" "-b"; do

cat > $TEST_DIR/blkdebug.conf <<EOF
[inject-error]
event = "$event"
errno = "$errno"
immediately = "$imm"
once = "$once"
EOF

_make_test_img 1G

echo
echo "Event: $event; errno: $errno; imm: $imm; once: $once; write $vmstate"
$QEMU_IO -c "write $vmstate 0 64M" $BLKDBG_TEST_IMG | _filter_qemu_io

$QEMU_IMG check $TEST_IMG 2>&1 | grep -v "refcount=1 reference=0"

done
done
done
done
done

echo
echo === L1 growth tests ===
echo
CLUSTER_SIZE=1024


for event in \
    l1_grow.alloc_table \
    l1_grow.write_table \
    l1_grow.activate_table \

do

for errno in 5 28; do
for imm in off; do
for once in on off; do

cat > $TEST_DIR/blkdebug.conf <<EOF
[inject-error]
event = "$event"
errno = "$errno"
immediately = "$imm"
once = "$once"
EOF

_make_test_img 1G

echo
echo "Event: $event; errno: $errno; imm: $imm; once: $once"
$QEMU_IO -c "write -b 0 64k" $BLKDBG_TEST_IMG | _filter_qemu_io

$QEMU_IMG check $TEST_IMG 2>&1 | grep -v "refcount=1 reference=0"

done
done
done
done

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