mirror of
https://github.com/vbatts/go-mtree.git
synced 2025-10-04 04:31:00 +00:00
POSIX explicitly requires "set -e" to NOT treat "! cmd" as an error even if fails[1]: > The -e setting shall be ignored when executing the compound list > following the while, until, if, or elif reserved word, *a pipeline > beginning with the ! reserved word*, or any command of an AND-OR list > other than the last. *[emphasis added]* And bash has similar documentation on this behaviour[2]. This means that our tests were completely ineffective at detecting error codes from gomtree, and as a result we did not detect the regression in commit83c9fdb78b
("refactor: prefactor for adding new subcommands"). The simplest solution (as done in this patch) is to just wrap all of the failing examples in a subshell, which causes the shell to no longer consider them exempt from "set -e". A more complete solution would be to either switch to something like bats entirely or at least use something like their "run" helper function to test for exit status codes correctly. [1]: https://pubs.opengroup.org/onlinepubs/9699919799/utilities/V3_chap02.html#set [2]: https://www.gnu.org/software/bash/manual/html_node/The-Set-Builtin.html Fixes:5d7f6c36e0
("walk: directory is expected to be walked. A file is not.") Fixes:2d841d54bf
("test: testing the double -f comparison") Fixes:f6c295f2e9
("test: cli: add unicode verification test") Fixes:071977cef6
("test: cli: add xattr tests") Signed-off-by: Aleksa Sarai <cyphar@cyphar.com>
33 lines
1.7 KiB
Bash
33 lines
1.7 KiB
Bash
#!/bin/bash
|
|
set -e
|
|
|
|
name=$(basename $0)
|
|
root="$(dirname $(dirname $(dirname $0)))"
|
|
gomtree=$(go run ${root}/test/realpath/main.go ${root}/gomtree)
|
|
t=$(mktemp -d -t go-mtree.XXXXXX)
|
|
|
|
echo "[${name}] Running in ${t}"
|
|
|
|
pushd ${root}
|
|
|
|
# Create some unicode files.
|
|
mkdir ${t}/root
|
|
echo "some data" > "${t}/root/$(printf 'this file has \u042a some unicode !!')"
|
|
echo "more data" > "${t}/root/$(printf 'even more \x07 unicode \ua4ff characters \udead\ubeef\ucafe')"
|
|
mkdir -p "${t}/root/$(printf '\024 <-- some more weird characters --> \u4f60\u597d\uff0c\u4e16\u754c')"
|
|
ln -s "$(printf '62_\u00c6\u00c62\u00ae\u00b7m\u00db\u00c3r^\u00bfp\u00c6u"q\u00fbc2\u00f0u\u00b8\u00dd\u00e8v\u00ff\u00b0\u00dc\u00c2\u00f53\u00db')" "${t}/root/$(printf 'k\u00f2sd4\\p\u00da\u00a6\u00d3\u00eea<\u00e6s{\u00a0p\u00f0\u00ffj\u00e0\u00e8\u00b8\u00b8\u00bc\u00fcb')"
|
|
printf 'some lovely data 62_\u00c6\u00c62\u00ae\u00b7m\u00db\u00c3r' > "${t}/root/$(printf 'T\u00dcB\u0130TAK_UEKAE_K\u00f6k_Sertifika_Hizmet_Sa\u011flay\u0131c\u0131s\u0131_-_S\u00fcr\u00fcm_3.pem')"
|
|
|
|
# Create manifest and check it against the same root.
|
|
${gomtree} -k uid,gid,size,type,link,nlink,sha256digest -c -p ${t}/root > ${t}/root.mtree
|
|
${gomtree} -k uid,gid,size,type,link,nlink,sha256digest -f ${t}/root.mtree -p ${t}/root
|
|
|
|
# Modify it and make sure that it successfully figures out what changed.
|
|
echo "othe data" > "${t}/root/$(printf 'this file has \u042a some unicode !!')"
|
|
(! ${gomtree} -k uid,gid,size,type,link,nlink,sha256digest -f ${t}/root.mtree -p ${t}/root)
|
|
|
|
echo "some data" > "${t}/root/$(printf 'this file has \u042a some unicode !!')"
|
|
${gomtree} -k uid,gid,size,type,link,nlink,sha256digest -f ${t}/root.mtree -p ${t}/root
|
|
|
|
popd
|
|
rm -rf ${t}
|