X-Git-Url: https://gitweb.michael.orlitzky.com/?a=blobdiff_plain;f=run-tests.sh;h=86b22c24e1908b930fec54b3744cadeb0e9cdda9;hb=a946bc0f04a82a5d9faa44bbc79c4df440d9ce8a;hp=7f6838f66d5e7d1036aa73098cd4b30ba7cb8c31;hpb=4e313c0b2ad1c2464ce0394b32e70abd5380d48e;p=apply-default-acl.git diff --git a/run-tests.sh b/run-tests.sh index 7f6838f..86b22c2 100755 --- a/run-tests.sh +++ b/run-tests.sh @@ -1,27 +1,64 @@ #!/bin/bash -# Our exit code. -RESULT=0 +# +# Exit codes +# + +EXIT_SUCCESS=0 + +# Exit with this when a test fails. +EXIT_FAILURE=1 + +# We use a few system users in the tests. If these users aren't +# present, we exit with a different (non-EXIT_FAILURE). +EXIT_MISSING_USERS=2 + +# Define the users that we'll use in the tests below. We store the +# names as variables to avoid repeating them everywhere. +# +# WARNING: These must be in alphabetical order; otherwise the getfacl +# output will not match. +# +USERS=( bin daemon ) + +# Check to see if the above users exist. If not, bail. +for idx in $( seq 0 $((${#USERS[@]} - 1)) ); do + id "${USERS[idx]}" >/dev/null 2>&1 + + if [ $? -ne $EXIT_SUCCESS ]; then + echo "Error: missing test user ${USERS[idx]}." 1>&2 + exit $EXIT_MISSING_USERS + fi +done + +# The program name. +BIN=src/apply-default-acl # The directory where we'll do all the ACL manipulation. TESTDIR=test acl_reset() { # Remove any ACLs on our test directory and remove its contents. - setfacl --remove-all --recursive "$TESTDIR" - rm "${TESTDIR}"/* + setfacl --remove-all --recursive "${TESTDIR}" + chmod 755 "${TESTDIR}" + rm -rf "${TESTDIR}"/* } compare() { if [[ "${ACTUAL}" == "${EXPECTED}" ]]; then - echo "Success." + echo "Success (#${TESTNUM})" + acl_reset else - echo "Failure." - echo "Expected result:" + echo "Failure (#${TESTNUM})" + echo 'Expected result:' + echo '================' echo "${EXPECTED}" - echo "Actual result:" + echo '================' + echo 'Actual result:' + echo '================' echo "${ACTUAL}" - RESULT=1 + echo '================' + exit $EXIT_FAILURE fi } @@ -32,19 +69,596 @@ mkdir "${TESTDIR}" # When using a minimal ACL, the default user, group, and other # permissions should all be propagated to the mode bits. +TESTNUM=1 +TARGET="${TESTDIR}"/foo +touch "${TARGET}" +chmod 777 "${TARGET}" +setfacl -d -m user::r-- "${TESTDIR}" +setfacl -d -m group::r-- "${TESTDIR}" +setfacl -d -m other::r-- "${TESTDIR}" +$BIN "${TARGET}" + +EXPECTED=$(cat <