#
# Test case for copying directories from local filesystem to Gfarm
#

#
# Test parameters
#
# GFARM_HOME:	A directory path of Gfarm which this test will be executed
# NUM_DIRS:	Number of directories created
#
setup_copy_dir_local_to_gfarm()
{
	# define mount point
	MOUNT_POINT=mnt_$TEST_EXEC_ID

	# default parameter
	GFARM_HOME=${GFARM_HOME-"/"}
	NUM_DIRS=${NUM_DIRS-"3"}

	# miscellaneous parameters
	SRC_PATH_TMPL="${TEST_EXEC_ID}_%d"
	SRC_FILE_TMPL="$SRC_PATH_TMPL/${TEST_EXEC_ID}_%d.txt"

	DST_PATH_TMPL="$MOUNT_POINT/${TEST_EXEC_ID}_%d"
	DST_FILE_TMPL="$DST_PATH_TMPL/${TEST_EXEC_ID}_%d.txt"

	# prepare: check whether required host is defined
	$GFSERVICE systest::gfarm_v2::check_hostids_defined - "gfmd1 client1"
	[ $? -ne 0 ] && return $RESULT_UNSUPPORTED

	# prepare: mount
	$GFSERVICE systest::gfarm2fs::exec_ssh client1 mkdir $MOUNT_POINT
	$GFSERVICE mount client1 $MOUNT_POINT -o modules=subdir \
		-o subdir=$GFARM_HOME

	return $RESULT_PASS
}

test_copy_dir_local_to_gfarm()
{
	RESULT=$RESULT_PASS

	# step: create directories
	for I in `seq $NUM_DIRS`; do
		SRC_PATH=`printf $SRC_PATH_TMPL $I`
		$GFSERVICE systest::gfarm2fs::exec_ssh client1 mkdir $SRC_PATH
	done

	# step: create file
	for I in `seq $NUM_DIRS`; do
		SRC_FILE=`printf $SRC_FILE_TMPL $I $I`
		$GFSERVICE systest::gfarm2fs::exec_ssh client1 "echo ${TEST_EXEC_ID}_$I \
		> $SRC_FILE"
	done

	# step: cp
	for I in `seq $NUM_DIRS`; do
		SRC_PATH=`printf $SRC_PATH_TMPL $I`
		$GFSERVICE systest::gfarm2fs::exec_ssh client1 cp -r $SRC_PATH $MOUNT_POINT
	done

	# step: diff
	DIFF_CMD="diff -q"
	for I in `seq $NUM_DIRS`; do
		SRC_FILE=`printf $SRC_FILE_TMPL $I $I`
		DST_FILE=`printf $DST_FILE_TMPL $I $I`
		$GFSERVICE systest::gfarm2fs::exec_ssh client1 $DIFF_CMD $SRC_FILE \
			$DST_FILE
		if [ $? -ne 0 ]; then
			log_warn "$TESTNAME: contents of $SRC_FILE is not same"
			set_result RESULT $RESULT_FAIL
		fi
	done

	# step: check spool
	for I in `seq $NUM_DIRS`; do
		DST_FILE=`printf $DST_FILE_TMPL $I $I`
		HOST=`$GFSERVICE gfcmd client1 gfwhere $DST_FILE`
		HOSTID=`$GFSERVICE systest::gfarm_v2::get_gfsd_hostid_by_name $HOST`
		SPOOL_PATH=`$GFSERVICE gfcmd client1 gfspoolpath \
			$DST_FILE`
		echo ${TEST_EXEC_ID}_$I | $GFSERVICE systest::gfarm_v2::compare_spool_file \
			$HOSTID $SPOOL_PATH
		if [ $? -ne 0 ]; then
			log_warn "$TESTNAME: $DST_FILE in spool directory" \
				"is not same"
			set_result RESULT $RESULT_FAIL
		fi
	done

	return $RESULT
}

teardown_copy_dir_local_to_gfarm()
{
	# cleanup: remove directories
	for I in `seq $NUM_DIRS`; do
		SRC_PATH=`printf $SRC_PATH_TMPL $I`
		DST_PATH=`printf $DST_PATH_TMPL $I`
		$GFSERVICE systest::gfarm2fs::exec_ssh client1 rm -rf $SRC_PATH $DST_PATH
	done

	# cleanup: unmount
	$GFSERVICE umount client1 $MOUNT_POINT

	# cleanup: remove mount point
	$GFSERVICE systest::gfarm2fs::exec_ssh client1 rmdir $MOUNT_POINT

	return $RESULT_PASS
}
