Bläddra i källkod

Add script to generate awkward testcases

Ben S 10 år sedan
förälder
incheckning
456c516bee
2 ändrade filer med 120 tillägg och 0 borttagningar
  1. 1 0
      .gitignore
  2. 119 0
      generate-testcases.sh

+ 1 - 0
.gitignore

@@ -1,2 +1,3 @@
 *~
 target
+testcases

+ 119 - 0
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"