exa/generate-testcases.sh
2016-06-11 14:06:43 +01:00

139 lines
3.8 KiB
Bash
Executable File
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#!/bin/bash
# This is a script to generate “awkward” files and directories that the
# testing scripts use as integration test cases.
#
# Tests like these verify that exa is doing the right thing at every step,
# from command-line parsing to colourising the output properly -- especially
# on multiple or weird platforms!
#
# Examples of the things it generates are:
# - files with newlines in their name
# - files with invalid UTF-8 in their name
# - directories you arent allowed to open
# - files with users and groups that dont exist
# - directories you arent allowed to read the xattrs for
## -- configuration --
# Directory that the files should be generated in.
DIR=testcases
# 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 doesnt map to any user on the system.
INVALID_UID=666
# A GID that doesnt map to any group on the system.
INVALID_GID=616
# 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 may 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
# First things first, dont try to overwrite the testcases if they already
# exist. Its safer to just start again from scratch.
if [[ -e "$DIR" ]]
then
echo "'$DIR' already exists - aborting" >&2
echo "(you'll probably have to sudo rm it.)" >&2
exit 2
fi
# Abort if anything goes wrong past this point!
abort() { echo 'Hit an error - aborting' >&2; exit 1; }
trap 'abort' ERR
# List commands as they are run
set -x
# Lets go!
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 arent a member of the
# groups (because they dont 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 --
# These tests are optional but the presence of the *directory* is used
# elsewhere! Yes I know this is a bad practice.
mkdir "$DIR/attributes"
if hash xattr; then
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"
else
echo "Skipping xattr tests"
fi