#!/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
# 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
_supported_os Linux

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

# The default cluster size depends on the image format
TEST_IMG=$TOP_IMG _img_info | grep -v 'cluster_size'

_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"

TEST_IMG=$TOP_IMG _img_info | grep -v 'cluster_size'

_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
