if [ "$DESCRIPTION"x != x ]; then
	test_description="$DESCRIPTION"
fi
if [ "$IMAGE"x = x ]; then
	IMAGE=$test_dir/image.gz
fi

if [ "$FSCK_OPT"x = x ]; then
	FSCK_OPT=-yf
fi

if [ "$SECOND_FSCK_OPT"x = x ]; then
	SECOND_FSCK_OPT=-yf
fi

if [ "$OUT1"x = x ]; then
	OUT1=$test_name.1.log
fi

if [ "$OUT2"x = x ]; then
	OUT2=$test_name.2.log
fi

if [ "$EXP1"x = x ]; then
	if [ -f $test_dir/expect.1.gz ]; then
		EXP1=$test_name.1.tmp
		gunzip < $test_dir/expect.1.gz > $EXP1
	else
		EXP1=$test_dir/expect.1
	fi
fi

if [ "$EXP2"x = x ]; then
	if [ -f $test_dir/expect.2.gz ]; then
		EXP2=$test_name.2.tmp
		gunzip < $test_dir/expect.2.gz > $EXP2
	else
		EXP2=$test_dir/expect.2
	fi
fi

if [ "$SKIP_GUNZIP" != "true" ] ; then
	gunzip < $IMAGE > $TMPFILE
fi

eval $PREP_CMD

echo 'ex /a' > $TMPFILE.cmd
$DEBUGFS -f $TMPFILE.cmd $TMPFILE > $OUT1.new 2>&1
$FSCK $FSCK_OPT  -N test_filesys $TMPFILE >> $OUT1.new 2>&1
status=$?
echo Exit status is $status >> $OUT1.new
sed -f $cmd_dir/filter.sed $OUT1.new > $OUT1

if [ "$ONE_PASS_ONLY" != "true" ]; then
	$FSCK $SECOND_FSCK_OPT -N test_filesys $TMPFILE > $OUT2.new 2>&1 
	status=$?
	echo Exit status is $status >> $OUT2.new
	echo 'ex /a' > $TMPFILE.cmd
	$DEBUGFS -f $TMPFILE.cmd $TMPFILE >> $OUT2.new 2>&1
	sed -f $cmd_dir/filter.sed $OUT2.new > $OUT2
fi
rm -f $TMPFILE.cmd $OUT1.new $OUT2.new

eval $AFTER_CMD

if [ "$SKIP_VERIFY" != "true" ] ; then
	rm -f $test_name.ok $test_name.failed
	cmp -s $OUT1 $EXP1
	status1=$?
	if [ "$ONE_PASS_ONLY" != "true" ]; then
		cmp -s $OUT2 $EXP2
		status2=$?
	else
		status2=0
	fi
	if [ "$PASS_ZERO" = "true" ]; then
		cmp -s $test_name.0.log	$test_dir/expect.0
		status3=$?
	else
		status3=0
	fi

	if [ -z "$test_description" ] ; then
		description="$test_name"
	else
		description="$test_name: $test_description"
	fi

	if [ "$status1" -eq 0 -a "$status2" -eq 0 -a "$status3" -eq 0 ] ; then
		echo "$description: ok"
		touch $test_name.ok
	else
		echo "$description: failed"
		rm -f $test_name.failed
		if [ "$PASS_ZERO" = "true" ]; then
			diff $DIFF_OPTS $test_dir/expect.0 \
				$test_name.0.log >> $test_name.failed
		fi
		diff $DIFF_OPTS $EXP1 $OUT1 >> $test_name.failed
		if [ "$ONE_PASS_ONLY" != "true" ]; then
			diff $DIFF_OPTS $EXP2 $OUT2 >> $test_name.failed
		fi
	fi
	rm -f tmp_expect
fi

if [ "$SKIP_CLEANUP" != "true" ] ; then
	unset IMAGE FSCK_OPT SECOND_FSCK_OPT OUT1 OUT2 EXP1 EXP2 
	unset SKIP_VERIFY SKIP_CLEANUP SKIP_GUNZIP ONE_PASS_ONLY PREP_CMD
	unset DESCRIPTION SKIP_UNLINK AFTER_CMD PASS_ZERO
fi

