1
0
Fork 0
mirror of https://github.com/vbatts/go-mtree.git synced 2025-09-13 22:03:19 +00:00

tests: cli: properly check for exit status codes in error cases

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
commit 83c9fdb78b ("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>
This commit is contained in:
Aleksa Sarai 2025-09-08 23:39:17 +10:00
parent 23151ae80f
commit 945eeeda2d
No known key found for this signature in database
GPG key ID: 2897FAD2B7E9446F
4 changed files with 6 additions and 6 deletions

View file

@ -17,14 +17,14 @@ setfattr -n user.mtree.testing -v "apples and=bananas" "${t}/dir/file"
$gomtree -c -k "sha256digest,xattrs" -p ${t}/dir > ${t}/${name}.mtree $gomtree -c -k "sha256digest,xattrs" -p ${t}/dir > ${t}/${name}.mtree
setfattr -n user.mtree.testing -v "bananas and lemons" "${t}/dir/file" setfattr -n user.mtree.testing -v "bananas and lemons" "${t}/dir/file"
! $gomtree -p ${t}/dir -f ${t}/${name}.mtree (! $gomtree -p ${t}/dir -f ${t}/${name}.mtree)
setfattr -x user.mtree.testing "${t}/dir/file" setfattr -x user.mtree.testing "${t}/dir/file"
! $gomtree -p ${t}/dir -f ${t}/${name}.mtree (! $gomtree -p ${t}/dir -f ${t}/${name}.mtree)
setfattr -n user.mtree.testing -v "apples and=bananas" "${t}/dir/file" setfattr -n user.mtree.testing -v "apples and=bananas" "${t}/dir/file"
setfattr -n user.mtree.another -v "another a=b" "${t}/dir/file" setfattr -n user.mtree.another -v "another a=b" "${t}/dir/file"
! $gomtree -p ${t}/dir -f ${t}/${name}.mtree (! $gomtree -p ${t}/dir -f ${t}/${name}.mtree)
setfattr -n user.mtree.testing -v "apples and=bananas" "${t}/dir/file" setfattr -n user.mtree.testing -v "apples and=bananas" "${t}/dir/file"
setfattr -x user.mtree.another "${t}/dir/file" setfattr -x user.mtree.another "${t}/dir/file"

View file

@ -24,7 +24,7 @@ ${gomtree} -k uid,gid,size,type,link,nlink,sha256digest -f ${t}/root.mtree -p ${
# Modify it and make sure that it successfully figures out what changed. # Modify it and make sure that it successfully figures out what changed.
echo "othe data" > "${t}/root/$(printf 'this file has \u042a some unicode !!')" 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 (! ${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 !!')" 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 ${gomtree} -k uid,gid,size,type,link,nlink,sha256digest -f ${t}/root.mtree -p ${t}/root

View file

@ -19,7 +19,7 @@ rm -rf ${t}/extract/*.go
${gomtree} -K sha256digest -c -p ${t}/extract/ > ${t}/${name}-2.mtree ${gomtree} -K sha256digest -c -p ${t}/extract/ > ${t}/${name}-2.mtree
# this _ought_ to fail because the files are missing now # this _ought_ to fail because the files are missing now
! ${gomtree} -f ${t}/${name}-1.mtree -f ${t}/${name}-2.mtree (! ${gomtree} -f ${t}/${name}-1.mtree -f ${t}/${name}-2.mtree)
popd popd
rm -rf ${t} rm -rf ${t}

View file

@ -16,7 +16,7 @@ touch ${t}/foo
## can not walk a file. We're expecting a directory. ## can not walk a file. We're expecting a directory.
## https://github.com/vbatts/go-mtree/issues/166 ## https://github.com/vbatts/go-mtree/issues/166
! ${gomtree} -c -K uname,uid,gname,gid,type,nlink,link,mode,flags,xattr,xattrs,size,time,sha256 -p ${t}/foo (! ${gomtree} -c -K uname,uid,gname,gid,type,nlink,link,mode,flags,xattr,xattrs,size,time,sha256 -p ${t}/foo)
popd popd
rm -rf ${t} rm -rf ${t}