From 456c516bee846e0082073dbaa43d463c0af78e47 Mon Sep 17 00:00:00 2001 From: Ben S Date: Thu, 3 Sep 2015 18:49:27 +0100 Subject: [PATCH] Add script to generate awkward testcases --- .gitignore | 1 + generate-testcases.sh | 119 ++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 120 insertions(+) create mode 100755 generate-testcases.sh diff --git a/.gitignore b/.gitignore index d9860d5..a09abb7 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1,3 @@ *~ target +testcases diff --git a/generate-testcases.sh b/generate-testcases.sh new file mode 100755 index 0000000..6bf1464 --- /dev/null +++ b/generate-testcases.sh @@ -0,0 +1,119 @@ +#!/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" \ No newline at end of file