#! /usr/bin/env atf-sh

. $(atf_get_srcdir)/test_environment.sh

tests_init \
	basic \
	dirs

basic_body() {
	atf_check sh ${RESOURCEDIR}/test_subr.sh new_pkg "test" "test" "1"

	user=$(id -un)
	if [ "${OS}" = "FreeBSD" ]; then
	    group=$(stat -f "%Sg" .)
	else
	    group=$(id -gn)
	fi
	cat <<__EOF__ >> test.ucl
files: {
    ${TMPDIR}/a: {
		 uname: "${user}"
		 gname: "${group}"
		 perm: 0644
    },
}
__EOF__

	echo a > a
	atf_check pkg create -M test.ucl
	atf_check mkdir -p target
	atf_check pkg -o REPOS_DIR=/dev/null -r target install -qfy ${TMPDIR}/test-1.pkg
	atf_check pkg -r target check -q
	atf_check -s exit:0 pkg -r target check -mq
	echo b > ${TMPDIR}/target/${TMPDIR}/a
	touch -r ./a ${TMPDIR}/target/${TMPDIR}/a
	atf_check -s not-exit:0 -e inline:"test-1: checksum mismatch for ${TMPDIR}/a\n" \
		  pkg -r target check -q
	atf_check -s exit:0 pkg -r target check -mq
	touch -t 197001010000.01 ${TMPDIR}/target/${TMPDIR}/a
	atf_check -s exit:1 -e match:"\[mtime\]" pkg -r target check -mq
	touch -r ./a ${TMPDIR}/target/${TMPDIR}/a
	atf_check -s exit:0 pkg -r target check -mq
	ln -sf b ${TMPDIR}/target/${TMPDIR}/a
	atf_check -s exit:1 -e match:"\[symlink\]" -e match:"\[perm\]" pkg -r target check -mq
	chmod -h 0644 ${TMPDIR}/target/${TMPDIR}/a
	touch -hr ./a ${TMPDIR}/target/${TMPDIR}/a
	# linux mangles perms on symlinks
	if [ "${OS}" = "FreeBSD" -o ${OS} = "Darwin" ]; then
	    atf_check -s exit:1 -e match:"\[symlink\]" -e not-match:"\[perm\]" -e not-match:"\[mtime\]" pkg -r target check -mq
	else
	    atf_check -s exit:1 -e match:"\[symlink\]" -e match:"\[perm\]" -e not-match:"\[mtime\]" pkg -r target check -mq
	fi
	rm ${TMPDIR}/target/${TMPDIR}/a
	mkdir ${TMPDIR}/target/${TMPDIR}/a
	touch -r a ${TMPDIR}/target/${TMPDIR}/a
	chmod 0644 ${TMPDIR}/target/${TMPDIR}/a
	atf_check -s exit:1 -e match:"\[type\]" pkg -r target check -mq
}

dirs_body() {
	atf_check sh ${RESOURCEDIR}/test_subr.sh new_pkg "test" "test" "1"

	user=$(id -un)
	if [ "${OS}" = "FreeBSD" ]; then
	    group=$(stat -f "%Sg" .)
	else
	    group=$(id -gn)
	fi
	cat <<__EOF__ >> test.ucl
directories: {
    ${TMPDIR}/a: {
		 uname: "${user}"
		 gname: "${group}"
		 perm: 0644
    },
}
__EOF__

	mkdir a
	atf_check pkg create -M test.ucl
	atf_check mkdir -p target
	atf_check pkg -o REPOS_DIR=/dev/null -r target install -qfy ${TMPDIR}/test-1.pkg
	atf_check pkg -r target check -mq
	# mtime is not checked for directories
	touch -t 197001010000.01 ${TMPDIR}/target/${TMPDIR}/a
	atf_check pkg -r target check -mq
	chmod 0600 ${TMPDIR}/target/${TMPDIR}/a
	atf_check -s exit:1 -e match:"\[perm\]" pkg -r target check -mq
	chmod 0644 ${TMPDIR}/target/${TMPDIR}/a
	atf_check -s exit:0 pkg -r target check -mq
	rmdir ${TMPDIR}/target/${TMPDIR}/a
	touch ${TMPDIR}/target/${TMPDIR}/a
	atf_check -s exit:1 -e match:"\[type\]" pkg -r target check -mq
}
