#!/bin/sh -efu

WORKDIR=/opt

_p4_6_2_3_check_read()
{
	local expected="$1"
	local result=

	cd "$WORKDIR"

	result="$(cat "$2" 2>&1 1>/dev/null)" ||:
	assertEquals "$expected" "${result##*: }"
}

_p4_6_2_3_check_write()
{
	local expected="$1"
	local result=

	cd "$WORKDIR"

	result="$(echo "" | tee "$2" 2>&1 1>/dev/null)" ||:
	assertEquals "$expected" "${result##*: }"
}

_p4_6_2_3_check_exec()
{
	local expected="$1"
	local result=

	cd "$WORKDIR"

	result="$(sh -c "./$2" 2>&1)" ||:
	assertEquals "$expected" "${result##*: }"
}

####
p4_6_2_3_test01_read_writeonly() { # UnitTest
	_p4_6_2_3_check_read "Permission denied" writeonly
}

p4_6_2_3_test02_read_readonly() { # UnitTest
	_p4_6_2_3_check_read "Permission denied" readonly
}

p4_6_2_3_test03_read_readwrite() { # UnitTest
	_p4_6_2_3_check_read "Permission denied" readwrite
}

p4_6_2_3_test04_read_execonly() { # UnitTest
	_p4_6_2_3_check_read "Permission denied" execonly
}

####
p4_6_2_3_test05_write_writeonly() { # UnitTest
	_p4_6_2_3_check_write "Permission denied" writeonly
}

p4_6_2_3_test06_write_readonly() { # UnitTest
	_p4_6_2_3_check_write "Permission denied" readonly
}

p4_6_2_3_test07_write_readwrite() { # UnitTest
	_p4_6_2_3_check_write "Permission denied" readwrite
}

p4_6_2_3_test08_write_execonly() { # UnitTest
	_p4_6_2_3_check_write "Permission denied" execonly
}

####
p4_6_2_3_test09_exec_writeonly() { # UnitTest
	_p4_6_2_3_check_exec "Permission denied" writeonly
}

p4_6_2_3_test10_exec_readonly() { # UnitTest
	_p4_6_2_3_check_exec "Permission denied" readonly
}

p4_6_2_3_test11_exec_readwrite() { # UnitTest
	_p4_6_2_3_check_exec "Permission denied" readwrite
}

p4_6_2_3_test12_exec_execonly() { # UnitTest
	_p4_6_2_3_check_exec "Permission denied" execonly
}

p4_6_2_3_test13_chmod_writeonly() { # UnitTest
	cd "$WORKDIR"

	local result="$(chmod o+w writeonly 2>&1)" ||:

	assertEquals "Operation not permitted" "${result##*: }"
}

p4_6_2_3_test14_chown_writeonly() { # UnitTest
	cd "$WORKDIR"

	local result="$(chown $USER writeonly 2>&1)" ||:

	assertEquals "Operation not permitted" "${result##*: }"
}
