# Export the type of file systems, as some tests need to know.
# For example: jffs2, cramfs, and squashfs.
- export FS0 FS1 FS2 FS3 ODF_FS DEV0 DEV1 DEV2 DEV3 ODF_DEV ODF_DIR SPECIAL_FS delay OUTPUT_COLOR POPULATE_ODF
+ export FS0 FS1 FS2 FS3 ODF_FS DEV0 DEV1 DEV2 DEV3 ODF_DEV ODF_DIR SPECIAL_FS delay OUTPUT_COLOR ODF POPULATE_ODF
# run actual test and abort on error (test script tries to umount unionfs)
runcmd bash $t
}
function create_hierarchy {
-
if [ "$POPULATE_ODF" -eq "0" ]; then
havechattr $LOWER_DIR0 && chattr -R -i $LOWER_DIR0
havechattr $LOWER_DIR1 && chattr -R -i $LOWER_DIR1
continue
fi
TYPE=`echo $LINE | cut -d' ' -f 1`
- NAME=`echo $LINE | cut -d' ' -f 2`
+ if [ "$TYPE" = "w" ]; then
+ WH_LOC=`echo $LINE | cut -d' ' -f 2`
+ NAME=`echo $LINE | cut -d' ' -f 3`
+ else
+ NAME=`echo $LINE | cut -d' ' -f 2`
+ fi
unset DIR FILE IMMUTABLE SOURCE SYMLINK WH
elif [ ! -z "$SYMLINK" ] ; then
ln -s "linktext:$NAME" $NAME
elif [ ! -z "$WH" ]; then
- mkdir -p `dirname $NAME` || exit $?
- ln $ODF_DIR/whiteout $NAME
+ if [ "$ODF" -eq "1" ]; then
+ mkdir -p `dirname $WH_LOC"/"$NAME` || exit $?
+ ln $ODF_DIR/whiteout $WH_LOC"/"$NAME
+ else
+ wh_abs_path=$WH_LOC"/"$NAME
+ wh_dir=`dirname $wh_abs_path`
+ wh_file=".wh."`basename $wh_abs_path`
+ wh_abs_path=$wh_dir""$wh_file
+ touch $wh_abs_path
+ fi
else
echo "What type am i: $TYPE" 1>&2
exit $?
}
+function fill_odf {
+mkdir $ODF_DIR/ic
+mkdir $ODF_DIR/ns
+mkdir $ODF_DIR/reclaim
+mkdir $ODF_DIR/sr
+touch $ODF_DIR/whiteout
+}
+
function mount_union {
# support compressed ram/rom file systems
function test1 {
# The read-write tests
+if [ $ODF -eq 1 ]; then
+ POPULATE_ODF=0
+fi
( beforefiles ) | create_hierarchy
-
-mount_union "" $LOWER_DIR0 $LOWER_DIR1
-
+if [ $ODF -eq 1 ]; then
+ setup_odf
+ mount_union "odf=$ODF_DIR" $LOWER_DIR0 $LOWER_DIR1
+else
+ mount_union "" $LOWER_DIR0 $LOWER_DIR1
+fi
+
do_chmod $MOUNTPOINT/a
do_chmod $MOUNTPOINT/b
do_chmod $MOUNTPOINT/c
do_chmod $MOUNTPOINT/f
unmount_union
-
( beforefiles ) | check_hierarchy $TOP_LOWER_DIR
echo -n "[rw] "
+
+if [ $ODF -eq 1 ]; then
+ discard_odf
+fi
}
function test2 {
# The readonly tests
+if [ $ODF -eq 1 ]; then
+ POPULATE_ODF=0
+fi
( beforefiles ) | create_hierarchy
-mount_union "" $LOWER_DIR0 $LOWER_DIR1=ro
-
+if [ $ODF -eq 1 ]; then
+ setup_odf
+ mount_union "odf=$ODF_DIR" $LOWER_DIR0 $LOWER_DIR1=ro
+else
+ mount_union "" $LOWER_DIR0 $LOWER_DIR1=ro
+fi
do_chmod $MOUNTPOINT/a
do_chmod $MOUNTPOINT/b
do_chmod $MOUNTPOINT/c
do_chmod $MOUNTPOINT/d
do_chmod $MOUNTPOINT/e
do_chmod $MOUNTPOINT/f
-
unmount_union
( beforefiles ; afterfiles_ro ) | check_hierarchy $TOP_LOWER_DIR
echo -n "[ro] "
+if [ $ODF -eq 1 ]; then
+ discard_odf
+fi
}
test1
f $LOWER_DIR0/b/creat-open
FILES
}
-
+if [ $ODF -eq 1 ]; then
+ POPULATE_ODF=0
+fi
( files ) | create_hierarchy
EXPECTED_SIZE=`ls -l progs/creat-open | awk '{print $5}'`
cp progs/creat-open $LOWER_DIR0/b/
-mount_union "" $LOWER_DIR0/b
+if [ $ODF -eq 1 ]; then
+ setup_odf
+ mount_union "odf=$ODF_DIR" $LOWER_DIR0/b
+else
+ mount_union "" $LOWER_DIR0/b
+fi
RET=0
$MOUNTPOINT/creat-open || RET="$?"
( afterfiles ) | check_hierarchy $LOWER_DIR0
+if [ $ODF -eq 1 ]; then
+ discard_odf
+fi
complete_test
# initial set of ODF files
function odf_beforefiles {
cat <<FILES
-w $ODF_DIR/ns/d1/x
-w $ODF_DIR/ns/d1/d2/d3/d4/d
+w $ODF_DIR/ns d1/x
+w $ODF_DIR/ns d1/d2/d3/d4/d
FILES
}
}
-function fill_odf {
- mkdir $ODF_DIR/ic
- mkdir $ODF_DIR/ns
- mkdir $ODF_DIR/reclaim
- mkdir $ODF_DIR/sr
- touch $ODF_DIR/whiteout
-}
+#function fill_odf {
+# mkdir $ODF_DIR/ic
+# mkdir $ODF_DIR/ns
+# mkdir $ODF_DIR/reclaim
+# mkdir $ODF_DIR/sr
+# touch $ODF_DIR/whiteout
+#}
if [ -z "$FXNS" ] ; then
FXNS="rw ro BUG383"
FILES
}
-
+if [ $ODF -eq 1 ]; then
+ POPULATE_ODF=0
+fi
( files ) | create_hierarchy
-mount_union "" $LOWER_DIR0 $LOWER_DIR1=ro
+if [ $ODF -eq 1 ]; then
+ setup_odf
+ mount_union "odf=$ODF_DIR" $LOWER_DIR0 $LOWER_DIR1=ro
+else
+ mount_union "" $LOWER_DIR0 $LOWER_DIR1=ro
+fi
+
./progs/flock-copyup $MOUNTPOINT/a || exit $?
unmount_union
( afterfiles_ro ) | check_hierarchy $TOP_LOWER_DIR
+if [ $ODF -eq 1 ]; then
+ discard_odf
+fi
+
( files ) | create_hierarchy
-mount_union "" $LOWER_DIR0 $LOWER_DIR1
+if [ $ODF -eq 1 ]; then
+ setup_odf
+ mount_union "odf=$ODF_DIR" $LOWER_DIR0 $LOWER_DIR1
+else
+ mount_union "" $LOWER_DIR0 $LOWER_DIR1
+fi
+
./progs/flock-copyup $MOUNTPOINT/a || exit $?
unmount_union
( afterfiles_rw ) | check_hierarchy $TOP_LOWER_DIR
+if [ $ODF -eq 1 ]; then
+ discard_odf
+fi
complete_test
}
function rw {
+ if [ $ODF -eq 1 ]; then
+ POPULATE_ODF=0
+ fi
( files ) | create_hierarchy
- mount_union "" $LOWER_DIR0 $LOWER_DIR1
+ if [ $ODF -eq 1 ]; then
+ setup_odf
+ mount_union "odf=$ODF_DIR" $LOWER_DIR0 $LOWER_DIR1
+ else
+ mount_union "" $LOWER_DIR0 $LOWER_DIR1
+ fi
./progs/fsync $MOUNTPOINT/a || exit $?
unmount_union
( files ) | check_hierarchy $TOP_LOWER_DIR
+ if [ $ODF -eq 1 ]; then
+ discard_odf
+ fi
}
if [ -z "$FXNS" ] ; then
f $LOWER_DIR1/b
d $LOWER_DIR2/b
-f $LOWER_DIR1/.wh.c
d $LOWER_DIR2/c
f $LOWER_DIR2/c/d
FILES
}
-files | create_hierarchy
+function beforefiles {
+cat <<FILES
+w $LOWER_DIR1 c
+FILES
+}
-mount_union "" $TOP_LOWER_DIR/b?
+function odf_afterfiles {
+cat <<FILES
+d $ODF_DIR/ns
+f $ODF_DIR/ns/a
+d $ODF_DIR/ns/b
+w $ODF_DIR/ns/c
+FILES
+}
-checktype $MOUNTPOINT/a 'f'
-checktype $MOUNTPOINT/b 'd'
-checktype $MOUNTPOINT/c '-'
+if [ $ODF -eq 1 ]; then
+ POPULATE_ODF=0
+ setup_odf
+ fill_odf
+ ./progs/make_sb 3 $LOWER_DIR0 6 $LOWER_DIR1 6 $LOWER_DIR2 6 $LOWER_DIR3 6
+fi
+( files ; beforefiles ) | create_hierarchy
+if [ $ODF -eq 1 ]; then
+ mount_union "odf=$ODF_DIR"
+ ls -lR $MOUNTPOINT >/dev/null
+else
+ mount_union "" $TOP_LOWER_DIR/b?
+fi
+
+checktype $MOUNTPOINT/a 'f'
+checktype $MOUNTPOINT/b 'd'
+checktype $MOUNTPOINT/c '-'
unmount_union
-files | check_hierarchy $TOP_LOWER_DIR
+if [ $ODF -eq 1 ]; then
+ files | check_hierarchy $TOP_LOWER_DIR
+ odf_afterfiles | check_hierarchy $ODF_DIR/ns
+ discard_odf
+else
+ ( files ; beforefiles ) | check_hierarchy $TOP_LOWER_DIR
+fi
complete_test
+
# initial set of files
function beforefiles {
cat <<FILES
-f $LOWER_DIR1/d1/d2/d3/d4/.wh.c
+w $LOWER_DIR1 d1/d2/d3/d4/c
FILES
}
}
+function afterfiles_odf_rw {
+cat <<FILES
+b $LOWER_DIR0/a
+d $LOWER_DIR0/d5
+c $LOWER_DIR0/d5/b
+d $LOWER_DIR0/d1/d2
+d $LOWER_DIR0/d1/d2/d3
+d $LOWER_DIR0/d1/d2/d3/d4
+b $LOWER_DIR0/d1/d2/d3/d4/c
+
+FILES
+}
function afterfiles_ro {
cat <<FILES
d $LOWER_DIR0/d5
c $LOWER_DIR0/d5/b
-f $LOWER_DIR1/d1/d2/d3/d4/.wh.c
+w $LOWER_DIR1 d1/d2/d3/d4/c
d $LOWER_DIR0/d1/d2
d $LOWER_DIR0/d1/d2/d3
d $LOWER_DIR0/d1/d2/d3/d4
-
+if [ $ODF -eq 1 ]; then
+ POPULATE_ODF=0
+ setup_odf
+ fill_odf
+ ./progs/make_sb 2 $LOWER_DIR0 6 $LOWER_DIR1 6
+fi
( directories ; beforefiles) | create_hierarchy
-mount_union "" $LOWER_DIR0 $LOWER_DIR1
+if [ $ODF -eq 1 ]; then
+ mount_union "odf=$ODF_DIR"
+ ls -lR $MOUNTPOINT >/dev/null
+else
+ mount_union "" $LOWER_DIR0 $LOWER_DIR1
+fi
mknod $MOUNTPOINT/a b 200 0
checktype "$MOUNTPOINT/a" 'b'
unmount_union
-( directories ; afterfiles_rw ) | check_hierarchy $TOP_LOWER_DIR
+if [ $ODF -eq 1 ]; then
+ ( directories ; afterfiles_odf_rw ) | check_hierarchy $TOP_LOWER_DIR
+else
+ ( directories ; afterfiles_rw ) | check_hierarchy $TOP_LOWER_DIR
+fi
+if [ $ODF -eq 1 ]; then
+ discard_odf
+fi
+
+
+
+if [ $ODF -eq 1 ]; then
+ POPULATE_ODF=0
+ setup_odf
+ fill_odf
+ ./progs/make_sb 2 $LOWER_DIR0 6 $LOWER_DIR1 4
+fi
( directories ; beforefiles) | create_hierarchy
-mount_union "" $LOWER_DIR0 $LOWER_DIR1=ro
+if [ $ODF -eq 1 ]; then
+ mount_union "odf=$ODF_DIR"
+ ls -lR $MOUNTPOINT >/dev/null
+else
+ mount_union "" $LOWER_DIR0 $LOWER_DIR1=ro
+fi
mknod $MOUNTPOINT/a b 200 0
checktype "$MOUNTPOINT/a" 'b'
checktype "$MOUNTPOINT/d1/d2/d3/d4/c" 'b'
unmount_union
-( directories ; afterfiles_ro ) | check_hierarchy $TOP_LOWER_DIR
+if [ $ODF -eq 1 ]; then
+ ( directories ; afterfiles_odf_rw ) | check_hierarchy $TOP_LOWER_DIR
+else
+ ( directories ; afterfiles_ro ) | check_hierarchy $TOP_LOWER_DIR
+fi
+
+if [ $ODF -eq 1 ]; then
+ discard_odf
+fi
complete_test