#!/usr/bin/env bash
#
# Test case for qcow2 metadata cache size specification
#
# Copyright (C) 2014 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"

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 nfs
_supported_os Linux
# Internal snapshots are (currently) impossible with refcount_bits=1
_unsupported_imgopts 'refcount_bits=1[^0-9]'

IMG_SIZE=64K

_make_test_img $IMG_SIZE
$QEMU_IO -c 'write -P 42 0 64k' "$TEST_IMG" | _filter_qemu_io

echo
echo '=== Testing invalid option combinations ==='
echo

# all sizes set at the same time
$QEMU_IO -c "open -o cache-size=1.25M,l2-cache-size=1M,refcount-cache-size=0.25M $TEST_IMG" \
    2>&1 | _filter_testdir | _filter_imgfmt
# l2-cache-size may not exceed cache-size
$QEMU_IO -c "open -o cache-size=1M,l2-cache-size=2M $TEST_IMG" 2>&1 \
    | _filter_testdir | _filter_imgfmt
# refcount-cache-size may not exceed cache-size
$QEMU_IO -c "open -o cache-size=1M,refcount-cache-size=2M $TEST_IMG" 2>&1 \
    | _filter_testdir | _filter_imgfmt
# 0 should be a valid size (e.g. for enforcing the minimum), so this should not
# work
$QEMU_IO -c "open -o cache-size=0,l2-cache-size=0,refcount-cache-size=0 $TEST_IMG" \
    2>&1 | _filter_testdir | _filter_imgfmt

# Invalid cache entry sizes
$QEMU_IO -c "open -o l2-cache-entry-size=256 $TEST_IMG" \
    2>&1 | _filter_testdir | _filter_imgfmt
$QEMU_IO -c "open -o l2-cache-entry-size=4242 $TEST_IMG" \
    2>&1 | _filter_testdir | _filter_imgfmt
$QEMU_IO -c "open -o l2-cache-entry-size=128k $TEST_IMG" \
    2>&1 | _filter_testdir | _filter_imgfmt

echo
echo '=== Testing valid option combinations ==='
echo

# There should be a reasonable and working minimum
$QEMU_IO -c "open -o cache-size=0 $TEST_IMG" -c 'read -P 42 0 64k' \
    | _filter_qemu_io
$QEMU_IO -c "open -o l2-cache-size=0 $TEST_IMG" -c 'read -P 42 0 64k' \
    | _filter_qemu_io
$QEMU_IO -c "open -o refcount-cache-size=0 $TEST_IMG" -c 'read -P 42 0 64k' \
    | _filter_qemu_io

# Derive cache sizes from combined size (with a reasonable ratio, but we cannot
# test that)
$QEMU_IO -c "open -o cache-size=2M $TEST_IMG" -c 'read -P 42 0 64k' \
    | _filter_qemu_io
# Fix one cache, derive the other
$QEMU_IO -c "open -o cache-size=2M,l2-cache-size=1M $TEST_IMG" \
         -c 'read -P 42 0 64k' \
    | _filter_qemu_io
$QEMU_IO -c "open -o cache-size=2M,refcount-cache-size=1M $TEST_IMG" \
         -c 'read -P 42 0 64k' \
    | _filter_qemu_io
# Directly set both caches
$QEMU_IO -c "open -o l2-cache-size=1M,refcount-cache-size=0.25M $TEST_IMG" \
         -c 'read -P 42 0 64k' \
    | _filter_qemu_io

# Valid cache entry sizes
$QEMU_IO -c "open -o l2-cache-entry-size=512 $TEST_IMG" \
    2>&1 | _filter_testdir | _filter_imgfmt
$QEMU_IO -c "open -o l2-cache-entry-size=16k $TEST_IMG" \
    2>&1 | _filter_testdir | _filter_imgfmt
$QEMU_IO -c "open -o l2-cache-entry-size=64k $TEST_IMG" \
    2>&1 | _filter_testdir | _filter_imgfmt


echo
echo '=== Testing minimal L2 cache and COW ==='
echo

$QEMU_IMG snapshot -c foo "$TEST_IMG"
# This requires a COW operation, which accesses two L2 tables simultaneously
# (COW source and destination), so there must be enough space in the cache to
# place both tables there (and qemu should not crash)
$QEMU_IO -c "open -o cache-size=0 $TEST_IMG" -c 'write 0 64k' | _filter_qemu_io

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