#!/usr/bin/env bash
# group: rw auto backing
#
# Tests handling of colons in filenames (which may be confused with protocol
# prefixes)
#
# Copyright (C) 2017 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!

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

# Needs backing file support
_supported_fmt qcow qcow2 qed vmdk
_unsupported_imgopts "subformat=monolithicFlat" \
                     "subformat=twoGbMaxExtentFlat"
# This is the default protocol (and we want to test the difference between
# colons which separate a protocol prefix from the rest and colons which are
# just part of the filename, so we cannot test protocols which require a prefix)
_supported_proto file

echo
echo '=== Testing plain files ==='
echo

# A colon after a slash is not a protocol prefix separator
TEST_IMG="$TEST_DIR/a:b.$IMGFMT" _make_test_img 64M
_rm_test_img "$TEST_DIR/a:b.$IMGFMT"

# But if you want to be really sure, you can do this
TEST_IMG="file:$TEST_DIR/a:b.$IMGFMT" _make_test_img 64M
_rm_test_img "$TEST_DIR/a:b.$IMGFMT"


echo
echo '=== Testing relative backing filename resolution ==='
echo

BASE_IMG="$TEST_DIR/image:base.$IMGFMT"
TOP_IMG="$TEST_DIR/image:top.$IMGFMT"

TEST_IMG=$BASE_IMG _make_test_img 64M
TEST_IMG=$TOP_IMG _make_test_img -b ./image:base.$IMGFMT -F $IMGFMT

# (1) The default cluster size depends on the image format
# (2) vmdk only supports vmdk backing files, so it always reports the
#     format of its backing file as such (but neither it nor qcow
#     support the backing_fmt creation option, so we cannot use that to
#     harmonize the output across all image formats this test supports)
TEST_IMG=$TOP_IMG _img_info | grep -ve 'cluster_size' -e 'backing file format'

_rm_test_img "$BASE_IMG"
_rm_test_img "$TOP_IMG"


# Do another test where we access both top and base without any slash in them
echo
pushd "$TEST_DIR" >/dev/null

BASE_IMG="base.$IMGFMT"
TOP_IMG="file:image:top.$IMGFMT"

TEST_IMG=$BASE_IMG _make_test_img 64M
TEST_IMG=$TOP_IMG _make_test_img -b "$BASE_IMG" -F $IMGFMT

TEST_IMG=$TOP_IMG _img_info | grep -ve 'cluster_size' -e 'backing file format'

_rm_test_img "$BASE_IMG"
_rm_test_img "image:top.$IMGFMT"

popd >/dev/null

# Note that we could also do the same test with BASE_IMG=file:image:base.$IMGFMT
# -- but behavior for that case is a bit strange. Protocol-prefixed paths are
# in a sense always absolute paths, so such paths will never be combined with
# the path of the overlay. But since "image:base.$IMGFMT" is actually a
# relative path, it will always be evaluated relative to qemu's CWD (but not
# relative to the overlay!). While this is more or less intended, it is still
# pretty strange and thus not something that is tested here.
# (The root of the issue is the use of a relative path with a protocol prefix.
#  This may always give you weird results because in one sense, qemu considers
#  such paths absolute, whereas in another, they are still relative.)


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