#!/usr/bin/env bash
# group: rw auto quick
#
# General test case for qcow2's image check
#
# Copyright (C) 2015 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=hreitz@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

# This tests qcow2-specific low-level functionality
_supported_fmt qcow2
_supported_proto file fuse
_supported_os Linux
# With an external data file, data clusters are not refcounted
# (so qemu-img check would not do much);
# we want to modify the refcounts, so we need them to have a specific
# format (namely u16)
_unsupported_imgopts data_file 'refcount_bits=\([^1]\|.\([^6]\|$\)\)'

echo
echo '=== Check on an image with a multiple of 2^32 clusters ==='
echo

_make_test_img -o "cluster_size=512" 512

# Allocate L2 table
$QEMU_IO -c 'write 0 512' "$TEST_IMG" | _filter_qemu_io

# Put the data cluster at a multiple of 2 TB, resulting in the image apparently
# having a multiple of 2^32 clusters
# (To be more specific: It is at 32 PB)
poke_file "$TEST_IMG" $((2048 + 8)) "\x00\x80\x00\x00\x00\x00\x00\x00"

# An offset of 32 PB results in qemu-img check having to allocate an in-memory
# refcount table of 128 TB (16 bit refcounts, 512 byte clusters), if qemu-img
# don't check that referenced data cluster is far beyond the end of file.
# But starting from 4.0, qemu-img does this check, and instead of "Cannot
# allocate memory", we have an error showing that l2 entry is invalid.
_check_test_img

echo
echo '=== Check leaks-fixed/corruptions-fixed report'
echo

# After leaks and corruptions were fixed, those numbers should be
# reported by qemu-img check
_make_test_img 64k

# Allocate data cluster
$QEMU_IO -c 'write 0 64k' "$TEST_IMG" | _filter_qemu_io

reftable_ofs=$(peek_file_be "$TEST_IMG" 48 8)
refblock_ofs=$(peek_file_be "$TEST_IMG" $reftable_ofs 8)

# Introduce a leak: Make the image header's refcount 2
poke_file_be "$TEST_IMG" "$refblock_ofs" 2 2

l1_ofs=$(peek_file_be "$TEST_IMG" 40 8)

# Introduce a corruption: Drop the COPIED flag from the (first) L1 entry
l1_entry=$(peek_file_be "$TEST_IMG" $l1_ofs 8)
l1_entry=$((l1_entry & ~(1 << 63)))
poke_file_be "$TEST_IMG" $l1_ofs 8 $l1_entry

echo
# Should print the number of corruptions and leaks fixed
# (Filter out all JSON fields (recognizable by their four-space
# indentation), but keep the "-fixed" fields (by removing two spaces
# from their indentation))
# (Also filter out the L1 entry, because why not)
_check_test_img -r all --output=json \
    | sed -e 's/^  \(.*\)-fixed"/\1-fixed"/' \
          -e '/^    /d' \
          -e "s/\\([^0-9a-f]\\)$(printf %x $l1_entry)\\([^0-9a-f]\\)/\1L1_ENTRY_VALUE\2/"

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