--- /dev/null
+#!/bin/sh
+
+source scaffold
+
+# initial directories
+function directories {
+cat <<FILES
+d $TOP_LOWER_DIR
+d $LOWER_DIR0
+d $LOWER_DIR0/d6
+d $LOWER_DIR1
+d $LOWER_DIR1/d5
+d $LOWER_DIR1/d1
+d $LOWER_DIR1/d1/d2
+d $LOWER_DIR1/d1/d2/d3
+f $LOWER_DIR1/d1/d2/d3/a
+f $LOWER_DIR1/d1/d2/d3/b
+f $LOWER_DIR1/d1/d2/d3/c
+d $LOWER_DIR1/d1/d2/d3/d4
+d $LOWER_DIR2
+d $LOWER_DIR2/d5
+d $LOWER_DIR2/d1
+d $LOWER_DIR2/d1/d2
+d $LOWER_DIR2/d1/d2/d3
+f $LOWER_DIR2/d1/d2/d3/d
+f $LOWER_DIR2/d1/d2/d3/e
+f $LOWER_DIR2/d1/d2/d3/f
+d $LOWER_DIR2/d1/d2/d3/d4
+d $LOWER_DIR3
+
+FILES
+}
+
+# initial set of files
+function beforefiles {
+cat <<FILES
+d $LOWER_DIR0/d1
+d $LOWER_DIR0/d1/d2
+f $LOWER_DIR0/d1/.wh.x
+f $LOWER_DIR0/d1/d2/.wh.d3
+
+FILES
+}
+
+
+function afterfiles_rw {
+cat <<FILES
+
+f $LOWER_DIR0/.wh.d1
+f $LOWER_DIR0/.wh.y
+
+FILES
+}
+
+
+
+function afterfiles_ro {
+cat <<FILES
+
+f $LOWER_DIR0/.wh.d1
+f $LOWER_DIR0/.wh.y
+
+FILES
+}
+
+
+##### simple tests
+( directories ; beforefiles) | create_hierarchy
+
+mount_union "" $LOWER_DIR0 $LOWER_DIR1 $LOWER_DIR2
+
+mkdir $MOUNTPOINT/y
+mkdir $MOUNTPOINT/d1/x
+mkdir $MOUNTPOINT/d1/d2/d3
+rm -fr $MOUNTPOINT/d1
+rm -fr $MOUNTPOINT/y
+
+unmount_union
+( directories ; afterfiles_rw ) | check_hierarchy $TOP_LOWER_DIR
+echo -n "[rw] "
+
+
+#### simple tests
+( directories ; beforefiles) | create_hierarchy
+
+mount_union "" $LOWER_DIR0 $LOWER_DIR1=ro $LOWER_DIR2=ro
+
+mkdir $MOUNTPOINT/y
+mkdir $MOUNTPOINT/d1/x
+mkdir $MOUNTPOINT/d1/d2/d3
+rm -fr $MOUNTPOINT/d1
+rm -fr $MOUNTPOINT/y
+
+unmount_union
+( directories ; afterfiles_ro ) | check_hierarchy $TOP_LOWER_DIR
+echo -n "[ro] "
+
+complete_test