# HG changeset patch # User Rob Landley # Date 1340504918 18000 # Node ID cd4475a2efdeb724cb9b1563077ba83300f23cf5 # Parent 90d6026c36c3be98d9bd6bed720f4857a0eaa36c Add chgrp test. diff -r 90d6026c36c3 -r cd4475a2efde scripts/test/chgrp.test --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/scripts/test/chgrp.test Sat Jun 23 21:28:38 2012 -0500 @@ -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