X-Git-Url: http://gitweb.michael.orlitzky.com/?p=apply-default-acl.git;a=blobdiff_plain;f=run-tests.sh;h=cb04d47cf759f1d44205eb4fab66e4725320f9ad;hp=86b22c24e1908b930fec54b3744cadeb0e9cdda9;hb=6f5f41a8a87ac60de171e18e6d233f34f61c4454;hpb=a946bc0f04a82a5d9faa44bbc79c4df440d9ce8a diff --git a/run-tests.sh b/run-tests.sh index 86b22c2..cb04d47 100755 --- a/run-tests.sh +++ b/run-tests.sh @@ -32,11 +32,14 @@ for idx in $( seq 0 $((${#USERS[@]} - 1)) ); do done # The program name. -BIN=src/apply-default-acl +BIN=$(realpath src/apply-default-acl) # The directory where we'll do all the ACL manipulation. TESTDIR=test +# Will auto-increment. +TESTNUM=0 + acl_reset() { # Remove any ACLs on our test directory and remove its contents. setfacl --remove-all --recursive "${TESTDIR}" @@ -69,7 +72,7 @@ mkdir "${TESTDIR}" # When using a minimal ACL, the default user, group, and other # permissions should all be propagated to the mode bits. -TESTNUM=1 +((TESTNUM++)) TARGET="${TESTDIR}"/foo touch "${TARGET}" chmod 777 "${TARGET}" @@ -86,11 +89,11 @@ other::r-- EOF ) -ACTUAL=`getfacl --omit-header "${TARGET}"` +ACTUAL=$(getfacl --omit-header "${TARGET}") compare # Do the same thing as the last test, except with an extended ACL. -TESTNUM=2 +((TESTNUM++)) setfacl -d -m user::r-- "${TESTDIR}" setfacl -d -m group::r-- "${TESTDIR}" setfacl -d -m other::r-- "${TESTDIR}" @@ -109,13 +112,13 @@ other::r-- EOF ) -ACTUAL=`getfacl --omit-header "${TARGET}"` +ACTUAL=$(getfacl --omit-header "${TARGET}") compare # A file shared by a group, should still be group-writable # afterwards. -TESTNUM=3 +((TESTNUM++)) touch "${TARGET}" chmod 644 "${TARGET}" setfacl -d -m group:${USERS[0]}:rwx "${TESTDIR}" @@ -131,12 +134,12 @@ other::r-- EOF ) -ACTUAL=`getfacl --omit-header "${TARGET}"` +ACTUAL=$(getfacl --omit-header "${TARGET}") compare # Same test as before except with a directory. -TESTNUM=4 +((TESTNUM++)) setfacl -d -m group:${USERS[0]}:rwx "${TESTDIR}" mkdir "${TARGET}" chmod 755 "${TARGET}" @@ -157,12 +160,12 @@ default:other::r-x EOF ) -ACTUAL=`getfacl --omit-header "${TARGET}"` +ACTUAL=$(getfacl --omit-header "${TARGET}") compare # With no default, things are left alone. -TESTNUM=5 +((TESTNUM++)) touch "${TARGET}" chmod 744 "${TARGET}" $BIN "${TARGET}" @@ -176,14 +179,14 @@ other::r-- EOF ) -ACTUAL=`getfacl --omit-header "${TARGET}"` +ACTUAL=$(getfacl --omit-header "${TARGET}") compare # Since the default ACL will grant r-x to group/other, they will wind # up with it. -TESTNUM=6 +((TESTNUM++)) touch "${TARGET}" chmod 744 "${TARGET}" setfacl -d -m user:${USERS[0]}:rwx "${TESTDIR}" @@ -200,13 +203,13 @@ other::r-x EOF ) -ACTUAL=`getfacl --omit-header "${TARGET}"` +ACTUAL=$(getfacl --omit-header "${TARGET}") compare # Some named entries can be granted execute permissions as the result # of reapplication. -TESTNUM=7 +((TESTNUM++)) touch "${TARGET}" chmod 744 "${TARGET}" setfacl -m user:${USERS[1]}:rw "${TARGET}" @@ -219,7 +222,6 @@ setfacl -d -m user:${USERS[0]}:rwx "${TESTDIR}" setfacl -d -m user:${USERS[1]}:rwx "${TESTDIR}" $BIN "${TARGET}" - EXPECTED=$(cat <&1 ) +EXPECTED="test/nonexistent: No such file or directory" +compare + + +# Same as the previous test, but with --recursive. +((TESTNUM++)) +ACTUAL=$( "${BIN}" --recursive test/nonexistent 2>&1 ) +EXPECTED="test/nonexistent: No such file or directory" +compare + + +# If we call apply-default-acl on more than one file, it should report any +# that don't exist (but proceed to operate on the others). +((TESTNUM++)) +DUMMY1="${TESTDIR}/dummy1" +DUMMY2="${TESTDIR}/dummy2" +touch "${DUMMY1}" "${DUMMY2}" +ACTUAL=$( "${BIN}" "${DUMMY1}" test/nonexistent "${DUMMY2}" 2>&1 ) +EXPECTED="test/nonexistent: No such file or directory" +compare + + +# Ensure that symlinks are not followed. +((TESTNUM++)) +TARGET="${TESTDIR}/foo" +LINK2TARGET="${TESTDIR}/foo-sym" +touch "${TARGET}" +ln -s "${TARGET#${TESTDIR}/}" "${LINK2TARGET}" +setfacl --default --modify user:${USERS[0]}:rwx "${TESTDIR}" +"${BIN}" "${LINK2TARGET}" +ACTUAL=$( getfacl --omit-header "${TARGET}" ) +EXPECTED=$(cat < /dev/null +"${BIN}" bar +popd > /dev/null +ACTUAL=$( getfacl --omit-header "${TARGET}" ) +EXPECTED=$(cat </dev/null +ACTUAL="$?" +EXPECTED="1" +compare + + +# Test that one "failure" exit code overrides two "successes" +# We need a default ACL on ${TESTDIR} because otherwise we do +# nothing, successfully, on the symlink path. +((TESTNUM++)) +mkdir "${TESTDIR}/foo" +ln -s foo "${TESTDIR}/bar" +mkdir "${TESTDIR}/baz" +setfacl --default --modify user:${USERS[0]}:rw "${TESTDIR}" +"${BIN}" "${TESTDIR}/foo" "${TESTDIR}/bar" "${TESTDIR}/baz" +ACTUAL="$?" +EXPECTED="1" +compare + + +# The failure should prevail when using --recursive, too. +((TESTNUM++)) +mkdir "${TESTDIR}/foo" +ln -s foo "${TESTDIR}/bar" +mkdir "${TESTDIR}/baz" +"${BIN}" --recursive "${TESTDIR}" +ACTUAL="$?" +EXPECTED="1" +compare + + +# We should get "Not a directory" if we stick a trailing slash on the +# end of the path to a file. +((TESTNUM++)) +TARGET="${TESTDIR}/foo" +touch "${TARGET}" +ACTUAL=$( "${BIN}" "${TARGET}/" 2>&1 ) +EXPECTED="${TARGET}/: Not a directory" +compare + + +# We should be a no-op on files contained in directories that have no +# default ACL. +((TESTNUM++)) +TARGET="${TESTDIR}/foo" +touch "${TARGET}" +setfacl --modify user:${USERS[0]}:rw "${TARGET}" +EXPECTED=$( getfacl --omit-header "${TARGET}" ) +"${BIN}" "${TARGET}" +ACTUAL=$( getfacl --omit-header "${TARGET}" ) +compare + + +# We should be a no-op on directories contained in directories that +# have no default ACL (same as the previous test, but with a directory). +((TESTNUM++)) +TARGET="${TESTDIR}/foo" +mkdir "${TARGET}" +setfacl --modify user:${USERS[0]}:rw "${TARGET}" +setfacl --default --modify user:${USERS[0]}:rw "${TARGET}" +EXPECTED=$( getfacl --omit-header "${TARGET}" ) +"${BIN}" --recursive "${TARGET}" +ACTUAL=$( getfacl --omit-header "${TARGET}" ) +compare + + +# Make sure we descend into subdirectories that don't have default ACLs. +((TESTNUM++)) +TARGET="${TESTDIR}/foo/bar/baz" +mkdir -p $(dirname "${TARGET}") +touch "${TARGET}" +touch "${TARGET}-direct" +setfacl --default --modify user:${USERS[0]}:rw $(dirname "${TARGET}") +"${BIN}" "${TARGET}-direct" +EXPECTED=$( getfacl --omit-header "${TARGET}-direct" ) +"${BIN}" --recursive "${TESTDIR}" +ACTUAL=$( getfacl --omit-header "${TARGET}" ) +compare + + +# Ensure that we don't get "error" results for symlinks encountered +# during a recursive traversal. +((TESTNUM++)) +TARGET="${TESTDIR}" +mkdir "${TARGET}/foo" +mkdir "${TARGET}/bar" +ln -s "../foo" "${TARGET}/bar/baz" +setfacl --default --modify user:${USERS[0]}:rw "${TARGET}" +EXPECTED="1" +"${BIN}" --recursive "${TARGET}" +ACTUAL=$? +compare + + +# Ensure that "." works as an argument. +((TESTNUM++)) +TARGET="${TESTDIR}" +mkdir "${TARGET}/foo" +mkdir "${TARGET}/bar" +setfacl --default --modify user:${USERS[0]}:rw "${TARGET}" +"${BIN}" "${TARGET}/foo" +EXPECTED=$( getfacl --omit-header "${TARGET}/foo" ) +pushd "${TARGET}/bar" > /dev/null +"${BIN}" "." +ACTUAL=$( getfacl --omit-header "." ) +popd > /dev/null +compare + +# Ensure that "." works as an argument (recursive). +((TESTNUM++)) +TARGET="${TESTDIR}" +mkdir -p "${TARGET}/foo/baz" +mkdir -p "${TARGET}/bar/baz" +setfacl --default --modify user:${USERS[0]}:rw "${TARGET}" +"${BIN}" --recursive "${TARGET}/foo" +EXPECTED=$( getfacl --omit-header "${TARGET}/foo/baz" ) +pushd "${TARGET}/bar" > /dev/null +"${BIN}" --recursive "." +ACTUAL=$( getfacl --omit-header "./baz" ) +popd > /dev/null +compare + +# Ensure that "./" works as an argument. +((TESTNUM++)) +TARGET="${TESTDIR}" +mkdir "${TARGET}/foo" +mkdir "${TARGET}/bar" +setfacl --default --modify user:${USERS[0]}:rw "${TARGET}" +"${BIN}" "${TARGET}/foo" +EXPECTED=$( getfacl --omit-header "${TARGET}/foo" ) +pushd "${TARGET}/bar" > /dev/null +"${BIN}" "./" +ACTUAL=$( getfacl --omit-header "./" ) +popd > /dev/null +compare + +# Ensure that ".." works as an argument. +((TESTNUM++)) +TARGET="${TESTDIR}" +mkdir "${TARGET}/foo" +mkdir -p "${TARGET}/bar/baz" +setfacl --default --modify user:${USERS[0]}:rw "${TARGET}" +"${BIN}" "${TARGET}/foo" +EXPECTED=$( getfacl --omit-header "${TARGET}/foo" ) +pushd "${TARGET}/bar/baz" > /dev/null +"${BIN}" ".." +ACTUAL=$( getfacl --omit-header ".." ) +popd > /dev/null +compare + +# Ensure that ".." works as an argument (recursive). +((TESTNUM++)) +TARGET="${TESTDIR}" +mkdir -p "${TARGET}/foo/baz" +mkdir -p "${TARGET}/bar/baz" +setfacl --default --modify user:${USERS[0]}:rw "${TARGET}" +"${BIN}" --recursive "${TARGET}/foo" +EXPECTED=$( getfacl --omit-header "${TARGET}/foo/baz" ) +pushd "${TARGET}/bar/baz" > /dev/null +"${BIN}" --recursive ".." +ACTUAL=$( getfacl --omit-header "." ) +popd > /dev/null +compare + +# Ensure that "../" works as an argument. +((TESTNUM++)) +TARGET="${TESTDIR}" +mkdir "${TARGET}/foo" +mkdir -p "${TARGET}/bar/baz" +setfacl --default --modify user:${USERS[0]}:rw "${TARGET}" +"${BIN}" "${TARGET}/foo" +EXPECTED=$( getfacl --omit-header "${TARGET}/foo" ) +pushd "${TARGET}/bar/baz" > /dev/null +"${BIN}" "../" +ACTUAL=$( getfacl --omit-header "../" ) +popd > /dev/null compare