exa/generate-testcases.sh

119 lines
3.1 KiB
Bash
Raw Normal View History

#!/bin/bash
# This is a script to generate "awkward" files and directories as test cases,
# to check that exa can actually handle them: symlinks that point at
# themselves, directories that you aren't allowed to view, files with strange
# extended attributes, that sort of thing.
## -- configuration --
# Directory that the files should be generated in.
DIR=testcases
if [[ -e "$DIR" ]]
then
echo "'$DIR' already exists - aborting" >&2
exit 2
fi
# You! Yes, you, the name of the user running this script.
YOU=`whoami`
# Someone with *higher* privileges than yourself, such as root.
ROOT=root
# A UID that doesn't map to any user on the system.
INVALID_UID=666
# A GID that doesn't map to any group on the system.
INVALID_GID=616
# List commands as they are run
# set -x
# Abort on any error!
abort() { echo 'Hit an error - aborting' >&2; exit 1; }
trap 'abort' ERR
# Get confirmation from the user before running.
# echo "This script will generate files into the $DIR directory."
# echo "It requires sudo for the '$ROOT' user."
# echo "You probably want to edit this file before running it."
# read -r -p "Continue? [y/N] " response
# if [[ ! $response =~ ^([yY][eE][sS]|[yY])$ ]]
# then
# exit 2
# fi
mkdir "$DIR"
## -- links --
mkdir "$DIR/links"
ln -s / "$DIR/links/root"
ln -s /usr "$DIR/links/usr"
ln -s nowhere "$DIR/links/broken"
## -- users and groups --
mkdir "$DIR/passwd"
# sudo is needed for these because we technically aren't a member of the
# groups (because they don't exist), and chown and chgrp are smart enough to
# disallow it!
touch "$DIR/passwd/unknown-uid"
sudo -u "$ROOT" chown $INVALID_UID "$DIR/passwd/unknown-uid"
touch "$DIR/passwd/unknown-gid"
sudo -u "$ROOT" chgrp $INVALID_GID "$DIR/passwd/unknown-gid"
## -- permissions --
mkdir "$DIR/permissions"
touch "$DIR/permissions/all-permissions"
chmod 777 "$DIR/permissions/all-permissions"
touch "$DIR/permissions/no-permissions"
chmod 000 "$DIR/permissions/no-permissions"
mkdir "$DIR/permissions/forbidden-directory"
chmod 000 "$DIR/permissions/forbidden-directory"
## -- extended attributes --
mkdir "$DIR/attributes"
touch "$DIR/attributes/none"
touch "$DIR/attributes/one"
xattr -w greeting hello "$DIR/attributes/one"
touch "$DIR/attributes/two"
xattr -w greeting hello "$DIR/attributes/two"
xattr -w another_greeting hi "$DIR/attributes/two"
touch "$DIR/attributes/forbidden"
xattr -w greeting hello "$DIR/attributes/forbidden"
chmod +a "$YOU deny readextattr" "$DIR/attributes/forbidden"
mkdir "$DIR/attributes/dirs"
mkdir "$DIR/attributes/dirs/empty-with-attribute"
xattr -w greeting hello "$DIR/attributes/dirs/empty-with-attribute"
mkdir "$DIR/attributes/dirs/full-with-attribute"
touch "$DIR/attributes/dirs/full-with-attribute/file"
xattr -w greeting hello "$DIR/attributes/dirs/full-with-attribute"
mkdir "$DIR/attributes/dirs/full-but-forbidden"
touch "$DIR/attributes/dirs/full-but-forbidden/file"
xattr -w greeting hello "$DIR/attributes/dirs/full-but-forbidden"
chmod 000 "$DIR/attributes/dirs/full-but-forbidden"
chmod +a "$YOU deny readextattr" "$DIR/attributes/dirs/full-but-forbidden"