diff options
Diffstat (limited to 'scripts/test')
-rwxr-xr-x | scripts/test/chgrp.test | 103 |
1 files changed, 103 insertions, 0 deletions
diff --git a/scripts/test/chgrp.test b/scripts/test/chgrp.test new file mode 100755 index 00000000..0ee3a98c --- /dev/null +++ b/scripts/test/chgrp.test @@ -0,0 +1,103 @@ +#!/bin/bash + +[ -f testing.sh ] && . testing.sh + +VERBOSE=1 + +if [ "$(id -u)" -ne 0 ] +then + echo "SKIPPED: chgrp (not root)" + exit +fi + +# We chgrp between "root" and the last group in /etc/group. + +GRP="$(sed -n '$s/:.*//p' /etc/group)" + +# Set up a little testing hierarchy + +rm -rf testdir && +mkdir -p testdir/dir/dir/dir testdir/dir2 && +touch testdir/dir/file && +ln -s ../dir/dir testdir/dir2/dir && +ln -s ../dir/file testdir/dir2/file || exit 1 + +# Wrapper to reset groups and return results + +IN="cd testdir && chgrp -R $GRP dir dir2 &&" +OUT="&& cd .. && echo \$(ls -lR testdir | awk '{print \$4}')" + +# The groups returned by $OUT are, in order: +# dir dir2 dir/dir dir/file dir/dir/dir dir2/dir dir2/file + +#testing "name" "command" "result" "infile" "stdin" + +# Basic smoketest +testing "chgrp dir" "$IN chgrp root dir $OUT" \ + "root $GRP $GRP $GRP $GRP $GRP $GRP\n" "" "" +testing "chgrp file" "$IN chgrp root dir/file $OUT" \ + "$GRP $GRP $GRP root $GRP $GRP $GRP\n" "" "" +testing "chgrp dir and file" "$IN chgrp root dir dir/file $OUT" \ + "root $GRP $GRP root $GRP $GRP $GRP\n" "" "" + +# symlinks (affect target, not symlink) +testing "chgrp symlink->file" "$IN chgrp root dir2/file $OUT" \ + "$GRP $GRP $GRP root $GRP $GRP $GRP\n" "" "" +testing "chgrp symlink->dir" "$IN chgrp root dir2/dir $OUT" \ + "$GRP $GRP root $GRP $GRP $GRP $GRP\n" "" "" +testing "chgrp -h symlink->dir" "$IN chgrp -h root dir2/dir $OUT" \ + "$GRP $GRP $GRP $GRP $GRP root $GRP\n" "" "" + +# What does -h do (affect symlink, not target) +testing "chgrp -h symlink->file" "$IN chgrp -h root dir2/file $OUT" \ + "$GRP $GRP $GRP $GRP $GRP $GRP root\n" "" "" +testing "chgrp -h symlink->dir" "$IN chgrp -h root dir2/dir $OUT" \ + "$GRP $GRP $GRP $GRP $GRP root $GRP\n" "" "" + +# chgrp -R (note, -h is implied by -R) + +testing "chgrp -R dir" "$IN chgrp -R root dir $OUT" \ + "root $GRP root root root $GRP $GRP\n" "" "" +testing "chgrp -R dir2" "$IN chgrp -R root dir2 $OUT" \ + "$GRP root $GRP $GRP $GRP root root\n" "" "" +testing "chgrp -R symlink->dir" "$IN chgrp -R root dir2/dir $OUT" \ + "$GRP $GRP $GRP $GRP $GRP root $GRP\n" "" "" +testing "chgrp -R symlink->file" "$IN chgrp -R root dir2/file $OUT" \ + "$GRP $GRP $GRP $GRP $GRP $GRP root\n" "" "" + +# chgrp -RP (same as -R by itself) + +testing "chgrp -RP dir2" "$IN chgrp -RP root dir2 $OUT" \ + "$GRP root $GRP $GRP $GRP root root\n" "" "" +testing "chgrp -RP symlink->dir" "$IN chgrp -RP root dir2/dir $OUT" \ + "$GRP $GRP $GRP $GRP $GRP root $GRP\n" "" "" +testing "chgrp -RP symlink->file" "$IN chgrp -RP root dir2/file $OUT" \ + "$GRP $GRP $GRP $GRP $GRP $GRP root\n" "" "" + +# chgrp -RH (change target but only recurse through symlink->dir on cmdline) + +testing "chgrp -RH dir2" "$IN chgrp -RH root dir2 $OUT" \ + "$GRP root root root $GRP $GRP $GRP\n" "" "" +testing "chgrp -RH symlink->dir" "$IN chgrp -RH root dir2/dir $OUT" \ + "$GRP $GRP root $GRP root $GRP $GRP\n" "" "" +testing "chgrp -RH symlink->file" "$IN chgrp -RH root dir2/file $OUT" \ + "$GRP $GRP $GRP root $GRP $GRP $GRP\n" "" "" + +# chgrp -RL (change target and always recurse through symlink->dir) + +testing "chgrp -RL dir2" "$IN chgrp -RL root dir2 $OUT" \ + "$GRP root root root root $GRP $GRP\n" "" "" +testing "chgrp -RL symlink->dir" "$IN chgrp -RL root dir2/dir $OUT" \ + "$GRP $GRP root $GRP root $GRP $GRP\n" "" "" +testing "chgrp -RL symlink->file" "$IN chgrp -RL root dir2/file $OUT" \ + "$GRP $GRP $GRP root $GRP $GRP $GRP\n" "" "" + +# -HLP are NOPs without -R +testing "chgrp -H without -R" "$IN chgrp -H root dir2/dir $OUT" \ + "$GRP $GRP root $GRP $GRP $GRP $GRP\n" "" "" +testing "chgrp -L without -R" "$IN chgrp -L root dir2/dir $OUT" \ + "$GRP $GRP root $GRP $GRP $GRP $GRP\n" "" "" +testing "chgrp -P without -R" "$IN chgrp -P root dir2/dir $OUT" \ + "$GRP $GRP root $GRP $GRP $GRP $GRP\n" "" "" + +rm -rf testdir |