#!/usr/bin/env bash
#
# 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=mreitz@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
