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

# (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"

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
