#!/usr/share/ucs-test/runner bash
## desc: Check UCR layer priorities
## tags:
##  - basic
##  - apptest
## bugs: [29632]
## exposure: careful
## versions:
##  3.1-1: skip
##  3.2-0: fixed

failed=()

recursion () {
	local expected="$1" level="$2"
	shift 2 || exit 2
	case "$level" in
		force)
			ucr set --force test/29632=force
			recursion "${expected:-force}" "$@" +force
			ucr unset --force test/29632
			recursion "$expected" "$@" -force
			;;
		schedule)
			ucr set --schedule test/29632=schedule
			recursion "${expected:-schedule}" "$@" +schedule
			ucr unset --schedule test/29632
			recursion "$expected" "$@" -schedule
			;;
		ldap)
			ucr set --ldap-policy test/29632=ldap
			recursion "${expected:-ldap}" "$@" +ldap
			ucr unset --ldap-policy test/29632
			recursion "$expected" "$@" -ldap
			;;
		normal)
			ucr set test/29632=normal
			recursion "${expected:-normal}" "$@" +normal
			ucr unset test/29632
			recursion "$expected" "$@" -normal
			;;
		--)
			local test_29632
			test_29632=$(ucr get test/29632)
			[ "$test_29632" = "$expected" ] ||
				failed+=("get '$expected' '$test_29632' -- $*")
			test_29632=$(ucr search --brief --key '^test/29632$')
			[ "$test_29632" = "${expected:+test/29632: $expected}" ] ||
				failed+=("search '$expected' '$test_29632' -- $*")
			eval "$(ucr shell test/29632)"
			[ "$test_29632" = "$expected" ] ||
				failed+=("shell '$expected' '$test_29632' -- $*")
			eval "$(ucr --shell search --key '^test/29632$')"
			[ "$test_29632" = "$expected" ] ||
				failed+=("search --shell '$expected' '$test_29632' -- $*")
			;;
		*)
			echo "Unknown level: $level $*" >&2
			exit 2
			;;
	esac
}

recursion "" force schedule ldap normal --
for fail in "${failed[@]}"
do
	echo "$fail" >&2
done

[ -z "$failed" ]
# vim: set filetype=sh :
