#!/bin/sh -efu

# This is part on ALT Linux tests environment based on Tapper
# (c) 2013 Andrey Cherepanov <cas@altlinux.org>
# License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>.

if [ -z "${__included_alt_test_functions:-}" ]; then
__included_alt_test_functions=1

. /usr/share/perl5/auto/Tapper/Cmd/Init/hello-world/01-executing-tests/tapper-autoreport --import-utils

SUITEVERSION=2.01

. shell-error
. shell-quote
. shell-var

# Test existing file
test_file()
{
	file="${1:-UNKNOWNFILE}"
	explanation="${2:-Missing file $file}"

	if test -e  "$file" >/dev/null 2>&1; then
		ok $_SUCCESS "File $file exists"
		return $_SUCCESS
	else
		ok $_FAILURE "$explanation"
		return $_FAILURE
	fi
}

# Test available executable
test_exec()
{
	program="${1:-UNKNOWNPROGRAM}"
	explanation="${2:-Missing program $program}"

	if type -P "$program" >/dev/null ; then
		ok $_SUCCESS "Program $program exists"
		return $_SUCCESS
	else
		ok $_FAILURE "$explanation"
		return $_FAILURE
	fi
}

# Test unwished RPM package (error if it is installed)
test_unwished_package()
{
        package="${1:-UNKNOWNPACKAGE}"
        explanation="${2:-Missing package $package}"
	ver="$(get_package_version "$package")"
	if [ -n "$ver" ] ; then
                ok $_FAILURE "Unwished package $package exists with version $ver"
                return $_FAILURE
        else
		ok $_SUCCESS "Unavailable $package"
		return $_SUCCESS
        fi
}



# Test installed RPM package
test_package()
{
	package="${1:-UNKNOWNPACKAGE}"
	explanation="${2:-Missing package $package}"
	cond=""
	needed=""

	# Check if version condition is defined
	if [ $(expr match "$package" '.*[<=>]') -gt 0 ] ; then
		p="$(echo "$package" | sed 's/[[:space:]]*\([=<>]\+\)[[:space:]]*/ \1 /')"
		read -r package cond needed <<< "$p"
		#append_comment "package=$package cond=$cond needed=$needed"
	fi

	ver="$(get_package_version "$package")"
	if [ -n "$ver" ] ; then
		# Check version
		if [ "$cond" -a "$needed" ] ; then
			res="$(rpmvercmp "$ver" "$needed")"

			case "$cond" in
				">")
					test "$res" -le 0 && ver=""
					;;
				">=")
					test "$res" -lt 0 && ver=""
					;;
				"<")
					test "$res" -gt 0 && ver=""
					;;
				"<=")
					test "$res" -ge 0 && ver=""
					;;
				"=")
					test "$res" -ne 0 && ver=""
					;;
			esac
		fi

		if [ -z "$ver" ] ; then
			ok $_FAILURE "$explanation"
			return $_FAILURE
		fi
		ok $_SUCCESS "Package $package exists with version $ver"
		return $_SUCCESS
	else
		ok $_FAILURE "$explanation"
		return $_FAILURE
	fi
}

# End of test
test_end()
{
	done_testing
}

# Return version and release number for package
get_package_version()
{
	package="${1:-UNKNOWNPACKAGE}"
	if [ -n "$TEST_PACKAGE_SOURCE" ]; then
		# Look in iso image
		test -e "$TEST_PACKAGE_SOURCE" || fatal "Cannot open ISO file $TEST_PACKAGE_SOURCE"
		isoinfo -lR -i "$TEST_PACKAGE_SOURCE" | \
			awk '/\.rpm/ {print $NF}' | \
			sed 's/%3a/:/g;s/%5f/_/g' | \
			sed 's/-\([^-]*-[^-]*\)\.[a-z5864_]\+\.rpm$/ \1/' | \
			grep "^$package " | \
			cut -f2 -d' '
	else
		rpm -q "$package" --qf "%{version}-%{release}" 2>/dev/null
	fi
}


fi # __included_alt_test_functions
# Put test name in comment
test ${#BASH_SOURCE[@]} -gt 1 && append_comment "${BASH_SOURCE[1]}"
