From 3ac3bee7b0d9c9be693415206efa664bf4a7d4a7 Mon Sep 17 00:00:00 2001
From: Tavian Barnes <tavianator@tavianator.com>
Date: Tue, 17 Oct 2023 11:35:41 -0400
Subject: dir: Fix FreeBSD union mounts

---
 tests/posix/overlayfs.out | 5 +++++
 1 file changed, 5 insertions(+)
 create mode 100644 tests/posix/overlayfs.out

(limited to 'tests/posix/overlayfs.out')

diff --git a/tests/posix/overlayfs.out b/tests/posix/overlayfs.out
new file mode 100644
index 0000000..754d01d
--- /dev/null
+++ b/tests/posix/overlayfs.out
@@ -0,0 +1,5 @@
+scratch/merged
+scratch/merged/bar
+scratch/merged/baz
+scratch/merged/baz/qux
+scratch/merged/foo
-- 
cgit v1.2.3


From a2af2746c4686201e2e0796fbdfa115d08727b86 Mon Sep 17 00:00:00 2001
From: Tavian Barnes <tavianator@tavianator.com>
Date: Sun, 22 Oct 2023 16:41:41 -0400
Subject: tests: Use test-specific scratch directories

---
 tests/bfs/L_capable.out                 |  4 +-
 tests/bfs/L_capable.sh                  | 13 +++---
 tests/bfs/capable.out                   |  2 +-
 tests/bfs/capable.sh                    | 13 +++---
 tests/bfs/color_ls.sh                   |  2 +-
 tests/bfs/exec_flush_fprint.sh          |  3 +-
 tests/bsd/L_acl.out                     |  4 +-
 tests/bsd/L_acl.sh                      | 12 +++---
 tests/bsd/L_xattr.out                   |  6 +--
 tests/bsd/L_xattr.sh                    |  4 +-
 tests/bsd/L_xattrname.out               |  4 +-
 tests/bsd/L_xattrname.sh                |  6 +--
 tests/bsd/acl.out                       |  2 +-
 tests/bsd/acl.sh                        | 12 +++---
 tests/bsd/flags.out                     |  2 +-
 tests/bsd/flags.sh                      | 10 ++---
 tests/bsd/rm.out                        |  2 +-
 tests/bsd/rm.sh                         | 10 ++---
 tests/bsd/type_w.out                    | 72 ++++++++++++++++-----------------
 tests/bsd/type_w.sh                     | 36 ++++++++---------
 tests/bsd/xattr.out                     |  6 +--
 tests/bsd/xattr.sh                      |  4 +-
 tests/bsd/xattrname.out                 |  4 +-
 tests/bsd/xattrname.sh                  |  6 +--
 tests/common/L_ls.sh                    |  3 +-
 tests/common/L_mount.out                | 10 ++---
 tests/common/L_mount.sh                 | 16 ++++----
 tests/common/delete.out                 |  2 +-
 tests/common/delete.sh                  | 11 ++---
 tests/common/delete_many.out            |  2 +-
 tests/common/delete_many.sh             | 10 ++---
 tests/common/execdir_ulimit.out         |  2 +-
 tests/common/execdir_ulimit.sh          |  8 ++--
 tests/common/inum_bind_mount.out        |  4 +-
 tests/common/inum_bind_mount.sh         | 10 ++---
 tests/common/inum_mount.out             |  2 +-
 tests/common/inum_mount.sh              | 10 ++---
 tests/common/ls.sh                      |  3 +-
 tests/common/mount.out                  |  8 ++--
 tests/common/mount.sh                   | 12 +++---
 tests/gnu/L_delete.out                  |  4 +-
 tests/gnu/L_delete.sh                   | 11 +++--
 tests/gnu/files0_from_file.sh           |  6 +--
 tests/gnu/fls.sh                        |  3 +-
 tests/gnu/fls_nonexistent.sh            |  2 +-
 tests/gnu/fprint0_nonexistent.sh        |  2 +-
 tests/gnu/fprint_duplicate.sh           | 10 ++---
 tests/gnu/fprint_nonexistent.sh         |  2 +-
 tests/gnu/fprintf_nonexistent.sh        |  2 +-
 tests/gnu/fstype_stacked.out            |  2 +-
 tests/gnu/fstype_stacked.sh             | 14 +++----
 tests/gnu/fstype_umount.sh              | 14 +++----
 tests/gnu/ignore_readdir_race.sh        |  6 +--
 tests/gnu/ignore_readdir_race_notdir.sh |  6 +--
 tests/gnu/inum_automount.out            |  2 +-
 tests/gnu/inum_automount.sh             | 14 +++----
 tests/gnu/printf_Y_error.out            |  6 +--
 tests/gnu/printf_Y_error.sh             | 12 +++---
 tests/gnu/regex_invalid_utf8.out        |  2 +-
 tests/gnu/regex_invalid_utf8.sh         | 10 ++---
 tests/gnu/xtype_bind_mount.out          |  4 +-
 tests/gnu/xtype_bind_mount.sh           | 12 +++---
 tests/posix/L_xdev.out                  | 10 ++---
 tests/posix/L_xdev.sh                   | 16 ++++----
 tests/posix/depth_error.out             |  4 +-
 tests/posix/depth_error.sh              | 10 ++---
 tests/posix/overlayfs.out               | 10 ++---
 tests/posix/overlayfs.sh                | 14 +++----
 tests/posix/readdir_error.sh            | 18 ++++-----
 tests/posix/type_bind_mount.out         |  2 +-
 tests/posix/type_bind_mount.sh          | 10 ++---
 tests/posix/unionfs.out                 | 20 ++++-----
 tests/posix/unionfs.sh                  | 13 +++---
 tests/posix/xdev.out                    |  8 ++--
 tests/posix/xdev.sh                     | 12 +++---
 tests/run.sh                            | 28 ++++++-------
 tests/stddirs.sh                        | 25 ------------
 77 files changed, 330 insertions(+), 368 deletions(-)

(limited to 'tests/posix/overlayfs.out')

diff --git a/tests/bfs/L_capable.out b/tests/bfs/L_capable.out
index e5ba3c7..0810d4a 100644
--- a/tests/bfs/L_capable.out
+++ b/tests/bfs/L_capable.out
@@ -1,2 +1,2 @@
-scratch/capable
-scratch/link
+./capable
+./link
diff --git a/tests/bfs/L_capable.sh b/tests/bfs/L_capable.sh
index 232d6ac..97c404f 100644
--- a/tests/bfs/L_capable.sh
+++ b/tests/bfs/L_capable.sh
@@ -1,11 +1,10 @@
 test "$UNAME" = "Linux" || skip
+invoke_bfs . -quit -capable || skip
 
-clean_scratch
+cd "$TEST"
 
-invoke_bfs scratch -quit -capable || skip
+"$XTOUCH" normal capable
+bfs_sudo setcap all+ep capable || skip
+ln -s capable link
 
-"$XTOUCH" scratch/{normal,capable}
-bfs_sudo setcap all+ep scratch/capable || skip
-ln -s capable scratch/link
-
-bfs_diff -L scratch -capable
+bfs_diff -L . -capable
diff --git a/tests/bfs/capable.out b/tests/bfs/capable.out
index 78b5bd9..ac7b5ce 100644
--- a/tests/bfs/capable.out
+++ b/tests/bfs/capable.out
@@ -1 +1 @@
-scratch/capable
+./capable
diff --git a/tests/bfs/capable.sh b/tests/bfs/capable.sh
index e5cad63..35bb0b4 100644
--- a/tests/bfs/capable.sh
+++ b/tests/bfs/capable.sh
@@ -1,11 +1,10 @@
 test "$UNAME" = "Linux" || skip
+invoke_bfs . -quit -capable || skip
 
-clean_scratch
+cd "$TEST"
 
-invoke_bfs scratch -quit -capable || skip
+"$XTOUCH" normal capable
+bfs_sudo setcap all+ep capable || skip
+ln -s capable link
 
-"$XTOUCH" scratch/{normal,capable}
-bfs_sudo setcap all+ep scratch/capable || skip
-ln -s capable scratch/link
-
-bfs_diff scratch -capable
+bfs_diff . -capable
diff --git a/tests/bfs/color_ls.sh b/tests/bfs/color_ls.sh
index f2d3c72..f1cc216 100644
--- a/tests/bfs/color_ls.sh
+++ b/tests/bfs/color_ls.sh
@@ -1,4 +1,4 @@
-clean_scratch
+cd "$TEST"
 "$XTOUCH" -p scratch/foo/bar/baz
 ln -s foo/bar/baz scratch/link
 ln -s foo/bar/nowhere scratch/broken
diff --git a/tests/bfs/exec_flush_fprint.sh b/tests/bfs/exec_flush_fprint.sh
index bf6b62f..a862773 100644
--- a/tests/bfs/exec_flush_fprint.sh
+++ b/tests/bfs/exec_flush_fprint.sh
@@ -1,3 +1,2 @@
 # Even non-stdstreams should be flushed
-clean_scratch
-bfs_diff basic/a -fprint scratch/foo -exec cat scratch/foo \;
+bfs_diff basic/a -fprint "$OUT.f" -exec cat "$OUT.f" \;
diff --git a/tests/bsd/L_acl.out b/tests/bsd/L_acl.out
index 1dae00a..dd89800 100644
--- a/tests/bsd/L_acl.out
+++ b/tests/bsd/L_acl.out
@@ -1,2 +1,2 @@
-scratch/acl
-scratch/link
+./acl
+./link
diff --git a/tests/bsd/L_acl.sh b/tests/bsd/L_acl.sh
index db97013..a3fcbc8 100644
--- a/tests/bsd/L_acl.sh
+++ b/tests/bsd/L_acl.sh
@@ -1,9 +1,9 @@
-clean_scratch
+cd "$TEST"
 
-invoke_bfs scratch -quit -acl || skip
+invoke_bfs . -quit -acl || skip
 
-"$XTOUCH" scratch/{normal,acl}
-set_acl scratch/acl || skip
-ln -s acl scratch/link
+"$XTOUCH" normal acl
+set_acl acl || skip
+ln -s acl link
 
-bfs_diff -L scratch -acl
+bfs_diff -L . -acl
diff --git a/tests/bsd/L_xattr.out b/tests/bsd/L_xattr.out
index 12fac95..21eb50f 100644
--- a/tests/bsd/L_xattr.out
+++ b/tests/bsd/L_xattr.out
@@ -1,3 +1,3 @@
-scratch/link
-scratch/xattr
-scratch/xattr_2
+./link
+./xattr
+./xattr_2
diff --git a/tests/bsd/L_xattr.sh b/tests/bsd/L_xattr.sh
index 1f61c78..f8b56d8 100644
--- a/tests/bsd/L_xattr.sh
+++ b/tests/bsd/L_xattr.sh
@@ -1,3 +1,3 @@
-invoke_bfs scratch -quit -xattr || skip
+invoke_bfs . -quit -xattr || skip
 make_xattrs || skip
-bfs_diff -L scratch -xattr
+bfs_diff -L . -xattr
diff --git a/tests/bsd/L_xattrname.out b/tests/bsd/L_xattrname.out
index 4dc4836..9e4c172 100644
--- a/tests/bsd/L_xattrname.out
+++ b/tests/bsd/L_xattrname.out
@@ -1,2 +1,2 @@
-scratch/link
-scratch/xattr
+./link
+./xattr
diff --git a/tests/bsd/L_xattrname.sh b/tests/bsd/L_xattrname.sh
index 3b2006b..8108d57 100644
--- a/tests/bsd/L_xattrname.sh
+++ b/tests/bsd/L_xattrname.sh
@@ -1,11 +1,11 @@
-invoke_bfs scratch -quit -xattr || skip
+invoke_bfs . -quit -xattr || skip
 make_xattrs || skip
 
 case "$UNAME" in
     Darwin|FreeBSD)
-        bfs_diff -L scratch -xattrname bfs_test
+        bfs_diff -L . -xattrname bfs_test
         ;;
     *)
-        bfs_diff -L scratch -xattrname security.bfs_test
+        bfs_diff -L . -xattrname security.bfs_test
         ;;
 esac
diff --git a/tests/bsd/acl.out b/tests/bsd/acl.out
index ddf8446..92e2f67 100644
--- a/tests/bsd/acl.out
+++ b/tests/bsd/acl.out
@@ -1 +1 @@
-scratch/acl
+./acl
diff --git a/tests/bsd/acl.sh b/tests/bsd/acl.sh
index c044398..a13c75f 100644
--- a/tests/bsd/acl.sh
+++ b/tests/bsd/acl.sh
@@ -1,9 +1,9 @@
-clean_scratch
+cd "$TEST"
 
-invoke_bfs scratch -quit -acl || skip
+invoke_bfs . -quit -acl || skip
 
-"$XTOUCH" scratch/{normal,acl}
-set_acl scratch/acl || skip
-ln -s acl scratch/link
+"$XTOUCH" normal acl
+set_acl acl || skip
+ln -s acl link
 
-bfs_diff scratch -acl
+bfs_diff . -acl
diff --git a/tests/bsd/flags.out b/tests/bsd/flags.out
index 11998ed..3216ff5 100644
--- a/tests/bsd/flags.out
+++ b/tests/bsd/flags.out
@@ -1 +1 @@
-scratch/bar
+./bar
diff --git a/tests/bsd/flags.sh b/tests/bsd/flags.sh
index 949a7d3..eb9bc22 100644
--- a/tests/bsd/flags.sh
+++ b/tests/bsd/flags.sh
@@ -1,8 +1,8 @@
-invoke_bfs scratch -quit -flags offline || skip
+invoke_bfs . -quit -flags offline || skip
 
-clean_scratch
+cd "$TEST"
 
-"$XTOUCH" scratch/{foo,bar}
-chflags offline scratch/bar || skip
+"$XTOUCH" foo bar
+chflags offline bar || skip
 
-bfs_diff scratch -flags -offline,nohidden
+bfs_diff . -flags -offline,nohidden
diff --git a/tests/bsd/rm.out b/tests/bsd/rm.out
index fb188b9..9c558e3 100644
--- a/tests/bsd/rm.out
+++ b/tests/bsd/rm.out
@@ -1 +1 @@
-scratch
+.
diff --git a/tests/bsd/rm.sh b/tests/bsd/rm.sh
index 9ee2b0a..595d514 100644
--- a/tests/bsd/rm.sh
+++ b/tests/bsd/rm.sh
@@ -1,6 +1,4 @@
-clean_scratch
-"$XTOUCH" -p scratch/foo/bar/baz
-
-(cd scratch && invoke_bfs . -rm)
-
-bfs_diff scratch
+cd "$TEST"
+"$XTOUCH" -p foo/bar/baz
+invoke_bfs . -rm
+bfs_diff .
diff --git a/tests/bsd/type_w.out b/tests/bsd/type_w.out
index d383f69..a20a4f3 100644
--- a/tests/bsd/type_w.out
+++ b/tests/bsd/type_w.out
@@ -1,38 +1,34 @@
-1: -rw-r--r-- scratch/mnt/lower/bar
-1: -rw-r--r-- scratch/mnt/lower/baz
-1: -rw-r--r-- scratch/mnt/lower/foo
-1: -rw-r--r-- scratch/mnt/upper/baz/qux
-1: -rw-r--r-- scratch/mnt/upper/foo
-1: drwxr-xr-x scratch/mnt
-1: drwxr-xr-x scratch/mnt/lower
-1: drwxr-xr-x scratch/mnt/upper
-1: drwxr-xr-x scratch/mnt/upper/baz
-2: w--------- scratch/mnt/upper/bar
-3: -rw-r--r-- scratch/mnt/lower/bar
-3: -rw-r--r-- scratch/mnt/lower/baz
-3: -rw-r--r-- scratch/mnt/lower/foo
-3: -rw-r--r-- scratch/mnt/upper/baz/qux
-3: -rw-r--r-- scratch/mnt/upper/foo
-3: drwxr-xr-x scratch/mnt
-3: drwxr-xr-x scratch/mnt/lower
-3: drwxr-xr-x scratch/mnt/upper
-3: drwxr-xr-x scratch/mnt/upper/baz
-3: w--------- scratch/mnt/upper/bar
-4: -rw-r--r-- scratch/mnt/lower/bar
-4: -rw-r--r-- scratch/mnt/lower/baz
-4: -rw-r--r-- scratch/mnt/lower/foo
-4: -rw-r--r-- scratch/mnt/upper/baz/qux
-4: drwxr-xr-x scratch/mnt
-4: drwxr-xr-x scratch/mnt/lower
-4: drwxr-xr-x scratch/mnt/upper
-4: drwxr-xr-x scratch/mnt/upper/baz
-5: w--------- scratch/mnt/upper/bar
-6: -rw-r--r-- scratch/mnt/lower/bar
-6: -rw-r--r-- scratch/mnt/lower/baz
-6: -rw-r--r-- scratch/mnt/lower/foo
-6: -rw-r--r-- scratch/mnt/upper/baz/qux
-6: drwxr-xr-x scratch/mnt
-6: drwxr-xr-x scratch/mnt/lower
-6: drwxr-xr-x scratch/mnt/upper
-6: drwxr-xr-x scratch/mnt/upper/baz
-6: w--------- scratch/mnt/upper/bar
+1: -rw-r--r-- mnt/lower/bar
+1: -rw-r--r-- mnt/lower/baz
+1: -rw-r--r-- mnt/lower/foo
+1: -rw-r--r-- mnt/upper/baz/qux
+1: -rw-r--r-- mnt/upper/foo
+1: drwxr-xr-x mnt/lower
+1: drwxr-xr-x mnt/upper
+1: drwxr-xr-x mnt/upper/baz
+2: w--------- mnt/upper/bar
+3: -rw-r--r-- mnt/lower/bar
+3: -rw-r--r-- mnt/lower/baz
+3: -rw-r--r-- mnt/lower/foo
+3: -rw-r--r-- mnt/upper/baz/qux
+3: -rw-r--r-- mnt/upper/foo
+3: drwxr-xr-x mnt/lower
+3: drwxr-xr-x mnt/upper
+3: drwxr-xr-x mnt/upper/baz
+3: w--------- mnt/upper/bar
+4: -rw-r--r-- mnt/lower/bar
+4: -rw-r--r-- mnt/lower/baz
+4: -rw-r--r-- mnt/lower/foo
+4: -rw-r--r-- mnt/upper/baz/qux
+4: drwxr-xr-x mnt/lower
+4: drwxr-xr-x mnt/upper
+4: drwxr-xr-x mnt/upper/baz
+5: w--------- mnt/upper/bar
+6: -rw-r--r-- mnt/lower/bar
+6: -rw-r--r-- mnt/lower/baz
+6: -rw-r--r-- mnt/lower/foo
+6: -rw-r--r-- mnt/upper/baz/qux
+6: drwxr-xr-x mnt/lower
+6: drwxr-xr-x mnt/upper
+6: drwxr-xr-x mnt/upper/baz
+6: w--------- mnt/upper/bar
diff --git a/tests/bsd/type_w.sh b/tests/bsd/type_w.sh
index 15b4e68..aec9cb1 100644
--- a/tests/bsd/type_w.sh
+++ b/tests/bsd/type_w.sh
@@ -2,51 +2,51 @@
 command -v mdconfig &>/dev/null || skip
 command -v newfs &>/dev/null || skip
 
-clean_scratch
+cd "$TEST"
 
 # Create a ramdisk
-truncate -s1M scratch/img
-md=$(bfs_sudo mdconfig scratch/img) || skip
+truncate -s1M img
+md=$(bfs_sudo mdconfig img) || skip
 defer bfs_sudo mdconfig -du "$md"
 
 # Make an ffs filesystem
 bfs_sudo newfs -n "/dev/$md" >&2 || skip
-mkdir scratch/mnt
+mkdir mnt
 
 # Mount it
-bfs_sudo mount "/dev/$md" scratch/mnt || skip
-defer bfs_sudo umount scratch/mnt
+bfs_sudo mount "/dev/$md" mnt || skip
+defer bfs_sudo umount mnt
 
 # Make it owned by us
-bfs_sudo chown "$(id -u):$(id -g)" scratch/mnt
-"$XTOUCH" -p scratch/mnt/{lower/{foo,bar,baz},upper/{bar,baz/qux}}
+bfs_sudo chown "$(id -u):$(id -g)" mnt
+"$XTOUCH" -p mnt/{lower/{foo,bar,baz},upper/{bar,baz/qux}}
 
 # Mount a union filesystem within it
-bfs_sudo mount -t unionfs -o below scratch/mnt/{lower,upper}
-defer bfs_sudo umount scratch/mnt/upper
+bfs_sudo mount -t unionfs -o below mnt/{lower,upper}
+defer bfs_sudo umount mnt/upper
 
 # Create a whiteout
-rm scratch/mnt/upper/bar
+rm mnt/upper/bar
 
 # FreeBSD find doesn't have -printf, so munge -ls output
 munge_ls() {
-    sed -En 's|.*([-drwx]{10}).*(scratch/.*)|'"$1"': \1 \2|p'
+    sed -En 's|.*([-drwx]{10}).*(mnt/.*)|'"$1"': \1 \2|p'
 }
 
 # Do a few tests in one
 {
     # Normally, we shouldn't see the whiteouts
-    invoke_bfs scratch/mnt -ls | munge_ls 1
+    invoke_bfs mnt -ls | munge_ls 1
     # -type w adds whiteouts to the output
-    invoke_bfs scratch/mnt -type w -ls | munge_ls 2
+    invoke_bfs mnt -type w -ls | munge_ls 2
     # So this is not the same as test 1
-    invoke_bfs scratch/mnt \( -type w -or -not -type w \) -ls | munge_ls 3
+    invoke_bfs mnt \( -type w -or -not -type w \) -ls | munge_ls 3
     # Unmount the unionfs
     pop_defer
     # Now repeat the same tests
-    invoke_bfs scratch/mnt -ls | munge_ls 4
-    invoke_bfs scratch/mnt -type w -ls | munge_ls 5
-    invoke_bfs scratch/mnt \( -type w -or -not -type w \) -ls | munge_ls 6
+    invoke_bfs mnt -ls | munge_ls 4
+    invoke_bfs mnt -type w -ls | munge_ls 5
+    invoke_bfs mnt \( -type w -or -not -type w \) -ls | munge_ls 6
 } >"$OUT"
 sort_output
 diff_output
diff --git a/tests/bsd/xattr.out b/tests/bsd/xattr.out
index 109e7c9..0afed35 100644
--- a/tests/bsd/xattr.out
+++ b/tests/bsd/xattr.out
@@ -1,3 +1,3 @@
-scratch/xattr
-scratch/xattr_2
-scratch/xattr_link
+./xattr
+./xattr_2
+./xattr_link
diff --git a/tests/bsd/xattr.sh b/tests/bsd/xattr.sh
index 4a4658c..68f729a 100644
--- a/tests/bsd/xattr.sh
+++ b/tests/bsd/xattr.sh
@@ -1,3 +1,3 @@
-invoke_bfs scratch -quit -xattr || skip
+invoke_bfs . -quit -xattr || skip
 make_xattrs || skip
-bfs_diff scratch -xattr
+bfs_diff . -xattr
diff --git a/tests/bsd/xattrname.out b/tests/bsd/xattrname.out
index 0285ac1..ef732bd 100644
--- a/tests/bsd/xattrname.out
+++ b/tests/bsd/xattrname.out
@@ -1,2 +1,2 @@
-scratch/xattr
-scratch/xattr_link
+./xattr
+./xattr_link
diff --git a/tests/bsd/xattrname.sh b/tests/bsd/xattrname.sh
index 655bd74..38b111a 100644
--- a/tests/bsd/xattrname.sh
+++ b/tests/bsd/xattrname.sh
@@ -1,11 +1,11 @@
-invoke_bfs scratch -quit -xattr || skip
+invoke_bfs . -quit -xattr || skip
 make_xattrs || skip
 
 case "$UNAME" in
     Darwin|FreeBSD)
-        bfs_diff scratch -xattrname bfs_test
+        bfs_diff . -xattrname bfs_test
         ;;
     *)
-        bfs_diff scratch -xattrname security.bfs_test
+        bfs_diff . -xattrname security.bfs_test
         ;;
 esac
diff --git a/tests/common/L_ls.sh b/tests/common/L_ls.sh
index ced16c6..7ee2b44 100644
--- a/tests/common/L_ls.sh
+++ b/tests/common/L_ls.sh
@@ -1,2 +1 @@
-clean_scratch
-invoke_bfs -L rainbow -ls >scratch/L_ls.out
+invoke_bfs -L rainbow -ls >"$OUT"
diff --git a/tests/common/L_mount.out b/tests/common/L_mount.out
index 2e80082..788579d 100644
--- a/tests/common/L_mount.out
+++ b/tests/common/L_mount.out
@@ -1,5 +1,5 @@
-scratch
-scratch/foo
-scratch/foo/bar
-scratch/foo/qux
-scratch/mnt
+.
+./foo
+./foo/bar
+./foo/qux
+./mnt
diff --git a/tests/common/L_mount.sh b/tests/common/L_mount.sh
index aaf9069..fd8042a 100644
--- a/tests/common/L_mount.sh
+++ b/tests/common/L_mount.sh
@@ -1,13 +1,13 @@
 test "$UNAME" = "Darwin" && skip
 
-clean_scratch
-mkdir scratch/{foo,mnt}
+cd "$TEST"
+mkdir foo mnt
 
-bfs_sudo mount -t tmpfs tmpfs scratch/mnt || skip
-defer bfs_sudo umount scratch/mnt
+bfs_sudo mount -t tmpfs tmpfs mnt || skip
+defer bfs_sudo umount mnt
 
-ln -s ../mnt scratch/foo/bar
-"$XTOUCH" scratch/mnt/baz
-ln -s ../mnt/baz scratch/foo/qux
+ln -s ../mnt foo/bar
+"$XTOUCH" mnt/baz
+ln -s ../mnt/baz foo/qux
 
-bfs_diff -L scratch -mount
+bfs_diff -L . -mount
diff --git a/tests/common/delete.out b/tests/common/delete.out
index fb188b9..9c558e3 100644
--- a/tests/common/delete.out
+++ b/tests/common/delete.out
@@ -1 +1 @@
-scratch
+.
diff --git a/tests/common/delete.sh b/tests/common/delete.sh
index 89cf2a2..638f307 100644
--- a/tests/common/delete.sh
+++ b/tests/common/delete.sh
@@ -1,7 +1,4 @@
-clean_scratch
-"$XTOUCH" -p scratch/foo/bar/baz
-
-# Don't try to delete '.'
-(cd scratch && invoke_bfs . -delete)
-
-bfs_diff scratch
+cd "$TEST"
+"$XTOUCH" -p foo/bar/baz
+invoke_bfs . -delete
+bfs_diff .
diff --git a/tests/common/delete_many.out b/tests/common/delete_many.out
index fb188b9..9c558e3 100644
--- a/tests/common/delete_many.out
+++ b/tests/common/delete_many.out
@@ -1 +1 @@
-scratch
+.
diff --git a/tests/common/delete_many.sh b/tests/common/delete_many.sh
index 6274319..48fe4c2 100644
--- a/tests/common/delete_many.sh
+++ b/tests/common/delete_many.sh
@@ -1,8 +1,8 @@
 # Test for https://github.com/tavianator/bfs/issues/67
 
-clean_scratch
-mkdir scratch/foo
-"$XTOUCH" scratch/foo/{1..256}
+cd "$TEST"
+mkdir foo
+"$XTOUCH" foo/{1..256}
 
-invoke_bfs scratch/foo -delete
-bfs_diff scratch
+invoke_bfs foo -delete
+bfs_diff .
diff --git a/tests/common/execdir_ulimit.out b/tests/common/execdir_ulimit.out
index 7f53982..bf52c09 100644
--- a/tests/common/execdir_ulimit.out
+++ b/tests/common/execdir_ulimit.out
@@ -1,3 +1,4 @@
+./.
 ./0
 ./1
 ./2
@@ -30,7 +31,6 @@
 ./q
 ./r
 ./s
-./scratch
 ./t
 ./u
 ./v
diff --git a/tests/common/execdir_ulimit.sh b/tests/common/execdir_ulimit.sh
index f7fc467..90c93c1 100644
--- a/tests/common/execdir_ulimit.sh
+++ b/tests/common/execdir_ulimit.sh
@@ -1,6 +1,6 @@
-clean_scratch
-mkdir -p scratch/a/b/c/d/e/f/g/h/i/j/k/l/m/n/o/p/q/r/s/t/u/v/w/x/y/z
-mkdir -p scratch/a/b/c/d/e/f/g/h/i/j/k/l/m/0/1/2/3/4/5/6/7/8/9/A/B/C
+cd "$TEST"
+mkdir -p a/b/c/d/e/f/g/h/i/j/k/l/m/n/o/p/q/r/s/t/u/v/w/x/y/z
+mkdir -p a/b/c/d/e/f/g/h/i/j/k/l/m/0/1/2/3/4/5/6/7/8/9/A/B/C
 
 ulimit -n 13
-bfs_diff scratch -execdir echo {} \;
+bfs_diff . -execdir echo {} \;
diff --git a/tests/common/inum_bind_mount.out b/tests/common/inum_bind_mount.out
index a520de3..ede8749 100644
--- a/tests/common/inum_bind_mount.out
+++ b/tests/common/inum_bind_mount.out
@@ -1,2 +1,2 @@
-scratch/bar
-scratch/foo
+./bar
+./foo
diff --git a/tests/common/inum_bind_mount.sh b/tests/common/inum_bind_mount.sh
index 47f7c36..892713e 100644
--- a/tests/common/inum_bind_mount.sh
+++ b/tests/common/inum_bind_mount.sh
@@ -1,9 +1,9 @@
 test "$UNAME" = "Linux" || skip
 
-clean_scratch
-"$XTOUCH" scratch/{foo,bar}
+cd "$TEST"
+"$XTOUCH" foo bar baz
 
-bfs_sudo mount --bind scratch/{foo,bar} || skip
-defer bfs_sudo umount scratch/bar
+bfs_sudo mount --bind foo bar || skip
+defer bfs_sudo umount bar
 
-bfs_diff scratch -inum "$(inum scratch/bar)"
+bfs_diff . -inum "$(inum bar)"
diff --git a/tests/common/inum_mount.out b/tests/common/inum_mount.out
index 99c7511..99fa01e 100644
--- a/tests/common/inum_mount.out
+++ b/tests/common/inum_mount.out
@@ -1 +1 @@
-scratch/mnt
+./mnt
diff --git a/tests/common/inum_mount.sh b/tests/common/inum_mount.sh
index 1bf2d86..7facf57 100644
--- a/tests/common/inum_mount.sh
+++ b/tests/common/inum_mount.sh
@@ -1,9 +1,9 @@
 test "$UNAME" = "Darwin" && skip
 
-clean_scratch
-mkdir scratch/{foo,mnt}
+cd "$TEST"
+mkdir foo mnt
 
-bfs_sudo mount -t tmpfs tmpfs scratch/mnt || skip
-defer bfs_sudo umount scratch/mnt
+bfs_sudo mount -t tmpfs tmpfs mnt || skip
+defer bfs_sudo umount mnt
 
-bfs_diff scratch -inum "$(inum scratch/mnt)"
+bfs_diff . -inum "$(inum mnt)"
diff --git a/tests/common/ls.sh b/tests/common/ls.sh
index 85ca39c..bc50d90 100644
--- a/tests/common/ls.sh
+++ b/tests/common/ls.sh
@@ -1,2 +1 @@
-clean_scratch
-invoke_bfs rainbow -ls >scratch/ls.out
+invoke_bfs rainbow -ls >"$OUT"
diff --git a/tests/common/mount.out b/tests/common/mount.out
index f7839fb..6253434 100644
--- a/tests/common/mount.out
+++ b/tests/common/mount.out
@@ -1,4 +1,4 @@
-scratch
-scratch/foo
-scratch/foo/bar
-scratch/mnt
+.
+./foo
+./foo/bar
+./mnt
diff --git a/tests/common/mount.sh b/tests/common/mount.sh
index db8b801..c9abde5 100644
--- a/tests/common/mount.sh
+++ b/tests/common/mount.sh
@@ -1,11 +1,11 @@
 test "$UNAME" = "Darwin" && skip
 
-clean_scratch
-mkdir scratch/{foo,mnt}
+cd "$TEST"
+mkdir foo mnt
 
-bfs_sudo mount -t tmpfs tmpfs scratch/mnt || skip
-defer bfs_sudo umount scratch/mnt
+bfs_sudo mount -t tmpfs tmpfs mnt || skip
+defer bfs_sudo umount mnt
 
-"$XTOUCH" scratch/foo/bar scratch/mnt/baz
+"$XTOUCH" foo/bar mnt/baz
 
-bfs_diff scratch -mount
+bfs_diff . -mount
diff --git a/tests/gnu/L_delete.out b/tests/gnu/L_delete.out
index ed0e9a1..7ed5f0d 100644
--- a/tests/gnu/L_delete.out
+++ b/tests/gnu/L_delete.out
@@ -1,2 +1,2 @@
-scratch
-scratch/foo
+.
+./foo
diff --git a/tests/gnu/L_delete.sh b/tests/gnu/L_delete.sh
index 8fdb12a..0559c49 100644
--- a/tests/gnu/L_delete.sh
+++ b/tests/gnu/L_delete.sh
@@ -1,9 +1,8 @@
-clean_scratch
-mkdir scratch/foo
-mkdir scratch/bar
-ln -s ../foo scratch/bar/baz
+cd "$TEST"
+mkdir foo bar
+ln -s ../foo bar/baz
 
 # Don't try to rmdir() a symlink
-invoke_bfs -L scratch/bar -delete
+invoke_bfs -L bar -delete
 
-bfs_diff scratch
+bfs_diff .
diff --git a/tests/gnu/files0_from_file.sh b/tests/gnu/files0_from_file.sh
index 089a20e..81435a0 100644
--- a/tests/gnu/files0_from_file.sh
+++ b/tests/gnu/files0_from_file.sh
@@ -1,4 +1,4 @@
-clean_scratch
+FILE="$TMP/$TEST.in"
 cd weirdnames
-invoke_bfs -mindepth 1 -fprintf ../scratch/files0.in "%P\0"
-bfs_diff -files0-from ../scratch/files0.in
+invoke_bfs -mindepth 1 -fprintf "$FILE" "%P\0"
+bfs_diff -files0-from "$FILE"
diff --git a/tests/gnu/fls.sh b/tests/gnu/fls.sh
index a86fa20..d2ff794 100644
--- a/tests/gnu/fls.sh
+++ b/tests/gnu/fls.sh
@@ -1,2 +1 @@
-clean_scratch
-invoke_bfs rainbow -fls scratch/fls.out
+invoke_bfs rainbow -fls "$OUT"
diff --git a/tests/gnu/fls_nonexistent.sh b/tests/gnu/fls_nonexistent.sh
index ff86763..2854569 100644
--- a/tests/gnu/fls_nonexistent.sh
+++ b/tests/gnu/fls_nonexistent.sh
@@ -1 +1 @@
-! invoke_bfs rainbow -fls scratch/nonexistent/path
+! invoke_bfs rainbow -fls nonexistent/path
diff --git a/tests/gnu/fprint0_nonexistent.sh b/tests/gnu/fprint0_nonexistent.sh
index ec14c2d..4906081 100644
--- a/tests/gnu/fprint0_nonexistent.sh
+++ b/tests/gnu/fprint0_nonexistent.sh
@@ -1 +1 @@
-! invoke_bfs basic -fprint0 scratch/nonexistent/path
+! invoke_bfs basic -fprint0 nonexistent/path
diff --git a/tests/gnu/fprint_duplicate.sh b/tests/gnu/fprint_duplicate.sh
index 5275502..8533b05 100644
--- a/tests/gnu/fprint_duplicate.sh
+++ b/tests/gnu/fprint_duplicate.sh
@@ -1,7 +1,7 @@
-"$XTOUCH" -p scratch/foo.out
-ln scratch/foo.out scratch/foo.hard
-ln -s foo.out scratch/foo.soft
+"$XTOUCH" -p "$TEST/foo.out"
+ln "$TEST/foo.out" "$TEST/foo.hard"
+ln -s foo.out "$TEST/foo.soft"
 
-invoke_bfs basic -fprint scratch/foo.out -fprint scratch/foo.hard -fprint scratch/foo.soft
-sort scratch/foo.out >"$OUT"
+invoke_bfs basic -fprint "$TEST/foo.out" -fprint "$TEST/foo.hard" -fprint "$TEST/foo.soft"
+sort "$TEST/foo.out" >"$OUT"
 diff_output
diff --git a/tests/gnu/fprint_nonexistent.sh b/tests/gnu/fprint_nonexistent.sh
index 4409162..2a403a2 100644
--- a/tests/gnu/fprint_nonexistent.sh
+++ b/tests/gnu/fprint_nonexistent.sh
@@ -1 +1 @@
-! invoke_bfs basic -fprint scratch/nonexistent/path
+! invoke_bfs basic -fprint nonexistent/path
diff --git a/tests/gnu/fprintf_nonexistent.sh b/tests/gnu/fprintf_nonexistent.sh
index 160e739..b1eea10 100644
--- a/tests/gnu/fprintf_nonexistent.sh
+++ b/tests/gnu/fprintf_nonexistent.sh
@@ -1 +1 @@
-! invoke_bfs basic -fprintf scratch/nonexistent/path '%p\n'
+! invoke_bfs basic -fprintf nonexistent/path '%p\n'
diff --git a/tests/gnu/fstype_stacked.out b/tests/gnu/fstype_stacked.out
index 99c7511..c1e0e6c 100644
--- a/tests/gnu/fstype_stacked.out
+++ b/tests/gnu/fstype_stacked.out
@@ -1 +1 @@
-scratch/mnt
+mnt
diff --git a/tests/gnu/fstype_stacked.sh b/tests/gnu/fstype_stacked.sh
index a4b067a..a9739bb 100644
--- a/tests/gnu/fstype_stacked.sh
+++ b/tests/gnu/fstype_stacked.sh
@@ -1,12 +1,12 @@
 test "$UNAME" = "Linux" || skip
 
-clean_scratch
-mkdir scratch/mnt
+cd "$TEST"
+mkdir mnt
 
-bfs_sudo mount -t tmpfs tmpfs scratch/mnt || skip
-defer bfs_sudo umount scratch/mnt
+bfs_sudo mount -t tmpfs tmpfs mnt || skip
+defer bfs_sudo umount mnt
 
-bfs_sudo mount -t ramfs ramfs scratch/mnt || skip
-defer bfs_sudo umount scratch/mnt
+bfs_sudo mount -t ramfs ramfs mnt || skip
+defer bfs_sudo umount mnt
 
-bfs_diff scratch/mnt -fstype ramfs -print -o -printf '%p: %F\n'
+bfs_diff mnt -fstype ramfs -print -o -printf '%p: %F\n'
diff --git a/tests/gnu/fstype_umount.sh b/tests/gnu/fstype_umount.sh
index b6da7a3..81c195f 100644
--- a/tests/gnu/fstype_umount.sh
+++ b/tests/gnu/fstype_umount.sh
@@ -1,12 +1,12 @@
 test "$UNAME" = "Linux" || skip
 
-clean_scratch
+cd "$TEST"
 
-mkdir scratch/tmp
-bfs_sudo mount -t tmpfs tmpfs scratch/tmp || skip
-defer bfs_sudo umount -R scratch/tmp
+mkdir tmp
+bfs_sudo mount -t tmpfs tmpfs tmp || skip
+defer bfs_sudo umount -R tmp
 
-mkdir scratch/tmp/ram
-bfs_sudo mount -t ramfs ramfs scratch/tmp/ram || skip
+mkdir tmp/ram
+bfs_sudo mount -t ramfs ramfs tmp/ram || skip
 
-bfs_diff scratch/tmp -path scratch/tmp -exec "${SUDO[@]}" umount scratch/tmp/ram \; , -fstype ramfs -print
+bfs_diff tmp -path tmp -exec "${SUDO[@]}" umount tmp/ram \; , -fstype ramfs -print
diff --git a/tests/gnu/ignore_readdir_race.sh b/tests/gnu/ignore_readdir_race.sh
index 6586bcc..75165f6 100644
--- a/tests/gnu/ignore_readdir_race.sh
+++ b/tests/gnu/ignore_readdir_race.sh
@@ -1,5 +1,5 @@
-clean_scratch
-"$XTOUCH" scratch/{foo,bar}
+cd "$TEST"
+"$XTOUCH" foo bar
 
 # -links 1 forces a stat() call, which will fail for the second file
-invoke_bfs scratch -mindepth 1 -ignore_readdir_race -links 1 -exec "$TESTS/remove-sibling.sh" {} \;
+invoke_bfs . -mindepth 1 -ignore_readdir_race -links 1 -exec "$TESTS/remove-sibling.sh" {} \;
diff --git a/tests/gnu/ignore_readdir_race_notdir.sh b/tests/gnu/ignore_readdir_race_notdir.sh
index 5b8b56d..8b03164 100644
--- a/tests/gnu/ignore_readdir_race_notdir.sh
+++ b/tests/gnu/ignore_readdir_race_notdir.sh
@@ -1,5 +1,5 @@
 # Check -ignore_readdir_race handling when a directory is replaced with a file
-clean_scratch
-"$XTOUCH" -p scratch/foo/bar
+cd "$TEST"
+"$XTOUCH" -p foo/bar
 
-invoke_bfs scratch -mindepth 1 -ignore_readdir_race -execdir rm -r {} \; -execdir "$XTOUCH" {} \;
+invoke_bfs . -mindepth 1 -ignore_readdir_race -execdir rm -r {} \; -execdir "$XTOUCH" {} \;
diff --git a/tests/gnu/inum_automount.out b/tests/gnu/inum_automount.out
index 7b53ae3..3378e2d 100644
--- a/tests/gnu/inum_automount.out
+++ b/tests/gnu/inum_automount.out
@@ -1 +1 @@
-scratch/automnt
+./automnt
diff --git a/tests/gnu/inum_automount.sh b/tests/gnu/inum_automount.sh
index 261a4be..86b23e1 100644
--- a/tests/gnu/inum_automount.sh
+++ b/tests/gnu/inum_automount.sh
@@ -2,13 +2,13 @@
 
 command -v systemd-mount &>/dev/null || skip
 
-clean_scratch
-mkdir scratch/{foo,automnt}
+cd "$TEST"
+mkdir foo automnt
 
-bfs_sudo systemd-mount -A -o bind basic scratch/automnt || skip
-defer bfs_sudo systemd-umount scratch/automnt
+bfs_sudo systemd-mount -A -o bind "$TMP/basic" automnt || skip
+defer bfs_sudo systemd-umount automnt
 
-before=$(inum scratch/automnt)
-bfs_diff scratch -inum "$before" -prune
-after=$(inum scratch/automnt)
+before=$(inum automnt)
+bfs_diff . -inum "$before" -prune
+after=$(inum automnt)
 ((before == after))
diff --git a/tests/gnu/printf_Y_error.out b/tests/gnu/printf_Y_error.out
index 410a9b5..1dd554e 100644
--- a/tests/gnu/printf_Y_error.out
+++ b/tests/gnu/printf_Y_error.out
@@ -1,3 +1,3 @@
-(scratch) () d d
-(scratch/bar) (foo/bar) l ?
-(scratch/foo) () d d
+(.) () d d
+(./bar) (foo/bar) l ?
+(./foo) () d d
diff --git a/tests/gnu/printf_Y_error.sh b/tests/gnu/printf_Y_error.sh
index 13d52e3..d3130ce 100644
--- a/tests/gnu/printf_Y_error.sh
+++ b/tests/gnu/printf_Y_error.sh
@@ -1,8 +1,8 @@
-clean_scratch
-mkdir scratch/foo
-ln -s foo/bar scratch/bar
+cd "$TEST"
+mkdir foo
+ln -s foo/bar bar
 
-chmod -x scratch/foo
-defer chmod +x scratch/foo
+chmod -x foo
+defer chmod +x foo
 
-! bfs_diff scratch -printf '(%p) (%l) %y %Y\n'
+! bfs_diff . -printf '(%p) (%l) %y %Y\n'
diff --git a/tests/gnu/regex_invalid_utf8.out b/tests/gnu/regex_invalid_utf8.out
index 03f3f58..a133b1a 100644
--- a/tests/gnu/regex_invalid_utf8.out
+++ b/tests/gnu/regex_invalid_utf8.out
@@ -1 +1 @@
-scratch/�
+./�
diff --git a/tests/gnu/regex_invalid_utf8.sh b/tests/gnu/regex_invalid_utf8.sh
index 603d688..7006dcd 100644
--- a/tests/gnu/regex_invalid_utf8.sh
+++ b/tests/gnu/regex_invalid_utf8.sh
@@ -1,8 +1,8 @@
-clean_scratch
+cd "$TEST"
 
 # Incomplete UTF-8 sequences
-touch scratch/$'\xC3' || skip
-touch scratch/$'\xE2\x84' || skip
-touch scratch/$'\xF0\x9F\x92' || skip
+touch $'\xC3' || skip
+touch $'\xE2\x84' || skip
+touch $'\xF0\x9F\x92' || skip
 
-bfs_diff scratch -regex 'scratch/..'
+bfs_diff . -regex '\./..'
diff --git a/tests/gnu/xtype_bind_mount.out b/tests/gnu/xtype_bind_mount.out
index 16804ea..d18d706 100644
--- a/tests/gnu/xtype_bind_mount.out
+++ b/tests/gnu/xtype_bind_mount.out
@@ -1,2 +1,2 @@
-scratch/link
-scratch/null
+./link
+./null
diff --git a/tests/gnu/xtype_bind_mount.sh b/tests/gnu/xtype_bind_mount.sh
index 1cc20ec..35fb3f5 100644
--- a/tests/gnu/xtype_bind_mount.sh
+++ b/tests/gnu/xtype_bind_mount.sh
@@ -1,10 +1,10 @@
 test "$UNAME" = "Linux" || skip
 
-clean_scratch
-"$XTOUCH" scratch/{file,null}
-ln -s /dev/null scratch/link
+cd "$TEST"
+"$XTOUCH" file null
+ln -s /dev/null link
 
-bfs_sudo mount --bind /dev/null scratch/null || skip
-defer bfs_sudo umount scratch/null
+bfs_sudo mount --bind /dev/null null || skip
+defer bfs_sudo umount null
 
-bfs_diff -L scratch -type c
+bfs_diff . -xtype c
diff --git a/tests/posix/L_xdev.out b/tests/posix/L_xdev.out
index 2e80082..788579d 100644
--- a/tests/posix/L_xdev.out
+++ b/tests/posix/L_xdev.out
@@ -1,5 +1,5 @@
-scratch
-scratch/foo
-scratch/foo/bar
-scratch/foo/qux
-scratch/mnt
+.
+./foo
+./foo/bar
+./foo/qux
+./mnt
diff --git a/tests/posix/L_xdev.sh b/tests/posix/L_xdev.sh
index d16c211..82d8605 100644
--- a/tests/posix/L_xdev.sh
+++ b/tests/posix/L_xdev.sh
@@ -1,13 +1,13 @@
 test "$UNAME" = "Darwin" && skip
 
-clean_scratch
-mkdir scratch/{foo,mnt}
+cd "$TEST"
+mkdir foo mnt
 
-bfs_sudo mount -t tmpfs tmpfs scratch/mnt || skip
-defer bfs_sudo umount scratch/mnt
+bfs_sudo mount -t tmpfs tmpfs mnt || skip
+defer bfs_sudo umount mnt
 
-ln -s ../mnt scratch/foo/bar
-"$XTOUCH" scratch/mnt/baz
-ln -s ../mnt/baz scratch/foo/qux
+ln -s ../mnt foo/bar
+"$XTOUCH" mnt/baz
+ln -s ../mnt/baz foo/qux
 
-bfs_diff -L scratch -xdev
+bfs_diff -L . -xdev
diff --git a/tests/posix/depth_error.out b/tests/posix/depth_error.out
index ed0e9a1..7ed5f0d 100644
--- a/tests/posix/depth_error.out
+++ b/tests/posix/depth_error.out
@@ -1,2 +1,2 @@
-scratch
-scratch/foo
+.
+./foo
diff --git a/tests/posix/depth_error.sh b/tests/posix/depth_error.sh
index a6429d1..db414ba 100644
--- a/tests/posix/depth_error.sh
+++ b/tests/posix/depth_error.sh
@@ -1,7 +1,7 @@
-clean_scratch
-"$XTOUCH" -p scratch/foo/bar
+cd "$TEST"
+"$XTOUCH" -p foo/bar
 
-chmod a-r scratch/foo
-defer chmod +r scratch/foo
+chmod a-r foo
+defer chmod +r foo
 
-! bfs_diff scratch -depth
+! bfs_diff . -depth
diff --git a/tests/posix/overlayfs.out b/tests/posix/overlayfs.out
index 754d01d..b472b56 100644
--- a/tests/posix/overlayfs.out
+++ b/tests/posix/overlayfs.out
@@ -1,5 +1,5 @@
-scratch/merged
-scratch/merged/bar
-scratch/merged/baz
-scratch/merged/baz/qux
-scratch/merged/foo
+merged
+merged/bar
+merged/baz
+merged/baz/qux
+merged/foo
diff --git a/tests/posix/overlayfs.sh b/tests/posix/overlayfs.sh
index 4cccebf..21ef22f 100644
--- a/tests/posix/overlayfs.sh
+++ b/tests/posix/overlayfs.sh
@@ -1,11 +1,11 @@
 test "$UNAME" = "Linux" || skip
 
-clean_scratch
-"$XTOUCH" -p scratch/{lower/{foo,bar,baz},upper/{bar,baz/qux}}
+cd "$TEST"
+"$XTOUCH" -p lower/{foo,bar,baz} upper/{bar,baz/qux}
 
-mkdir -p scratch/{work,merged}
-bfs_sudo mount -t overlay overlay -olowerdir=scratch/lower,upperdir=scratch/upper,workdir=scratch/work scratch/merged || skip
-defer bfs_sudo rm -rf scratch/work
-defer bfs_sudo umount scratch/merged
+mkdir -p work merged
+bfs_sudo mount -t overlay overlay -olowerdir=lower,upperdir=upper,workdir=work merged || skip
+defer bfs_sudo rm -rf work
+defer bfs_sudo umount merged
 
-bfs_diff scratch/merged
+bfs_diff merged
diff --git a/tests/posix/readdir_error.sh b/tests/posix/readdir_error.sh
index fc48eb1..82fcd17 100644
--- a/tests/posix/readdir_error.sh
+++ b/tests/posix/readdir_error.sh
@@ -1,27 +1,27 @@
 test "$UNAME" = "Linux" || skip
 
-clean_scratch
-mkfifo scratch/{fever,pid,wait,running}
+cd "$TEST"
+mkfifo hang pid wait running
 
 (
     # Create a zombie process
-    cat scratch/fever >/dev/null &
-    # Write the PID to scratch/pid
-    echo $! >scratch/pid
+    cat hang >/dev/null &
+    # Write the PID to pid
+    echo $! >pid
     # Don't wait on the zombie process
-    exec cat scratch/wait scratch/fever >scratch/running
+    exec cat wait hang >running
 ) &
 
 # Kill the parent cat on exit
 defer kill -9 %1
 
 # Read the child PID
-read -r pid <scratch/pid
+read -r pid <pid
 
 # Make sure the parent cat is running before we kill the child, because bash
 # will wait() on its children
-echo >scratch/wait &
-read -r _ <scratch/running
+echo >wait &
+read -r _ <running
 
 # Turn the child into a zombie
 kill -9 "$pid"
diff --git a/tests/posix/type_bind_mount.out b/tests/posix/type_bind_mount.out
index 6435159..2f06c47 100644
--- a/tests/posix/type_bind_mount.out
+++ b/tests/posix/type_bind_mount.out
@@ -1 +1 @@
-scratch/null
+./null
diff --git a/tests/posix/type_bind_mount.sh b/tests/posix/type_bind_mount.sh
index 7852167..97b7305 100644
--- a/tests/posix/type_bind_mount.sh
+++ b/tests/posix/type_bind_mount.sh
@@ -1,9 +1,9 @@
 test "$UNAME" = "Linux" || skip
 
-clean_scratch
-"$XTOUCH" scratch/{file,null}
+cd "$TEST"
+"$XTOUCH" file null
 
-bfs_sudo mount --bind /dev/null scratch/null || skip
-defer bfs_sudo umount scratch/null
+bfs_sudo mount --bind /dev/null null || skip
+defer bfs_sudo umount null
 
-bfs_diff scratch -type c
+bfs_diff . -type c
diff --git a/tests/posix/unionfs.out b/tests/posix/unionfs.out
index 6d0fa3c..28c4ec1 100644
--- a/tests/posix/unionfs.out
+++ b/tests/posix/unionfs.out
@@ -1,10 +1,10 @@
-scratch
-scratch/lower
-scratch/lower/bar
-scratch/lower/baz
-scratch/lower/foo
-scratch/upper
-scratch/upper/bar
-scratch/upper/baz
-scratch/upper/baz/qux
-scratch/upper/foo
+.
+./lower
+./lower/bar
+./lower/baz
+./lower/foo
+./upper
+./upper/bar
+./upper/baz
+./upper/baz/qux
+./upper/foo
diff --git a/tests/posix/unionfs.sh b/tests/posix/unionfs.sh
index 0f68a43..94d3929 100644
--- a/tests/posix/unionfs.sh
+++ b/tests/posix/unionfs.sh
@@ -1,6 +1,9 @@
 [[ "$UNAME" == *BSD* ]] || skip
-clean_scratch
-"$XTOUCH" -p scratch/{lower/{foo,bar,baz},upper/{bar,baz/qux}}
-bfs_sudo mount -t unionfs -o below scratch/{lower,upper} || skip
-defer bfs_sudo umount scratch/upper
-bfs_diff scratch
+
+cd "$TEST"
+"$XTOUCH" -p lower/{foo,bar,baz} upper/{bar,baz/qux}
+
+bfs_sudo mount -t unionfs -o below lower upper || skip
+defer bfs_sudo umount upper
+
+bfs_diff .
diff --git a/tests/posix/xdev.out b/tests/posix/xdev.out
index f7839fb..6253434 100644
--- a/tests/posix/xdev.out
+++ b/tests/posix/xdev.out
@@ -1,4 +1,4 @@
-scratch
-scratch/foo
-scratch/foo/bar
-scratch/mnt
+.
+./foo
+./foo/bar
+./mnt
diff --git a/tests/posix/xdev.sh b/tests/posix/xdev.sh
index 461a1e9..c59c5c8 100644
--- a/tests/posix/xdev.sh
+++ b/tests/posix/xdev.sh
@@ -1,11 +1,11 @@
 test "$UNAME" = "Darwin" && skip
 
-clean_scratch
-mkdir scratch/{foo,mnt}
+cd "$TEST"
+mkdir foo mnt
 
-bfs_sudo mount -t tmpfs tmpfs scratch/mnt || skip
-defer bfs_sudo umount scratch/mnt
+bfs_sudo mount -t tmpfs tmpfs mnt || skip
+defer bfs_sudo umount mnt
 
-"$XTOUCH" scratch/foo/bar scratch/mnt/baz
+"$XTOUCH" foo/bar mnt/baz
 
-bfs_diff scratch -xdev
+bfs_diff . -xdev
diff --git a/tests/run.sh b/tests/run.sh
index 7b7fe24..28801f4 100644
--- a/tests/run.sh
+++ b/tests/run.sh
@@ -76,8 +76,8 @@ run_tests() {
     for TEST in "${TEST_CASES[@]}"; do
         printf "$TEST_FMT" "$TEST"
 
+        mkdir -p "$TMP/$TEST"
         OUT="$TMP/$TEST.out"
-        mkdir -p "${OUT%/*}"
 
         if ((VERBOSE_ERRORS)); then
             run_test "$TESTS/$TEST.sh"
@@ -252,29 +252,29 @@ bfs_pty() {
 
 # Create a directory tree with xattrs in scratch
 make_xattrs() {
-    clean_scratch
+    cd "$TEST"
 
-    "$XTOUCH" scratch/{normal,xattr,xattr_2}
-    ln -s xattr scratch/link
-    ln -s normal scratch/xattr_link
+    "$XTOUCH" normal xattr xattr_2
+    ln -s xattr link
+    ln -s normal xattr_link
 
     case "$UNAME" in
         Darwin)
-            xattr -w bfs_test true scratch/xattr \
-                && xattr -w bfs_test_2 true scratch/xattr_2 \
-                && xattr -s -w bfs_test true scratch/xattr_link
+            xattr -w bfs_test true xattr \
+                && xattr -w bfs_test_2 true xattr_2 \
+                && xattr -s -w bfs_test true xattr_link
             ;;
         FreeBSD)
-            setextattr user bfs_test true scratch/xattr \
-                && setextattr user bfs_test_2 true scratch/xattr_2 \
-                && setextattr -h user bfs_test true scratch/xattr_link
+            setextattr user bfs_test true xattr \
+                && setextattr user bfs_test_2 true xattr_2 \
+                && setextattr -h user bfs_test true xattr_link
             ;;
         *)
             # Linux tmpfs doesn't support the user.* namespace, so we use the security.*
             # namespace, which is writable by root and readable by others
-            bfs_sudo setfattr -n security.bfs_test scratch/xattr \
-                && bfs_sudo setfattr -n security.bfs_test_2 scratch/xattr_2 \
-                && bfs_sudo setfattr -h -n security.bfs_test scratch/xattr_link
+            bfs_sudo setfattr -n security.bfs_test xattr \
+                && bfs_sudo setfattr -n security.bfs_test_2 xattr_2 \
+                && bfs_sudo setfattr -h -n security.bfs_test xattr_link
             ;;
     esac
 }
diff --git a/tests/stddirs.sh b/tests/stddirs.sh
index acc23dc..a51c878 100644
--- a/tests/stddirs.sh
+++ b/tests/stddirs.sh
@@ -136,28 +136,6 @@ make_stddirs() {
     make_weirdnames "$TMP/weirdnames"
     make_deep "$TMP/deep"
     make_rainbow "$TMP/rainbow"
-    mkdir "$TMP/scratch"
-}
-
-# Clean whatever was left in the scratch directory
-clean_scratch() {
-    if [ -e "$TMP/scratch" ]; then
-        # Try to unmount anything left behind
-        if ((${#SUDO[@]})) && command -v mountpoint &>/dev/null; then
-            for path in "$TMP/scratch"/*; do
-                if mountpoint -q "$path"; then
-                    sudo umount "$path"
-                fi
-            done
-        fi
-
-        # Reset any modified permissions
-        chmod -R +rX "$TMP/scratch"
-
-        rm -rf "$TMP/scratch"
-    fi
-
-    mkdir "$TMP/scratch"
 }
 
 # Clean up temporary directories on exit
@@ -169,8 +147,5 @@ clean_stddirs() {
         fi
     done
 
-    # In case a test left anything weird in scratch/
-    clean_scratch
-
     rm -rf "$TMP"
 }
-- 
cgit v1.2.3