#
# Test case for writing files
#
load "gfarm2fs::calc_checksum"
load "gfarm2fs::exec_on_multiple_clients"
load "gfarm2fs::mkdir_n"
load "gfarm2fs::mount_n"
load "gfarm2fs::make_files"
load "gfarm2fs::gfwhere_check"
load "gfarm2fs::check_files"
load "gfarm2fs::log_view"
load "gfarm2fs::remove_files"
load "gfarm2fs::umount_n"
load "gfarm2fs::rmdir_n"
#
# Test parameters
#
# MOUNT_TOPDIR: A path to the top directory of mount points
# GFARM_HOME:	A directory path of Gfarm which this test will be executed
# NUM_CLIENTS:	Number of clients used
# NUM_MOUNT:	Number of mount points
# NUM_FILES:	Number of files to write
# FILE_SIZE:	File size of each file to be written
#
setup_write_files_common()
{
	# define mount point
	MOUNT_TOPDIR=${MOUNT_TOPDIR-"."}
	MOUNT_DIR_PREFIX="${MOUNT_TOPDIR}/${TEST_EXEC_ID}_"
	GFARM_HOME=${GFARM_HOME-"/"}

	# default parameter
	NUM_CLIENTS="$1"
	NUM_MOUNT="$2"
	NUM_FILES="$3"
	FILE_SIZE="$4"

	# miscellaneous parameters
	CHKSUM=`calc_checksum $FILE_SIZE`
	TARGET_DIR="test_${NUM_MOUNT}_${NUM_FILES}_${FILE_SIZE}"

	return $RESULT_PASS
}

test_write_files_common()
{
	RESULT=$RESULT_PASS

	exec_on_multiple_clients $NUM_CLIENTS mkdir_n false $MOUNT_DIR_PREFIX \
		$NUM_MOUNT

	exec_on_multiple_clients $NUM_CLIENTS mount_n false $MOUNT_DIR_PREFIX \
		$NUM_MOUNT $GFARM_HOME

	exec_on_multiple_clients $NUM_CLIENTS make_files true \
		$MOUNT_DIR_PREFIX $NUM_MOUNT $TARGET_DIR $NUM_FILES $FILE_SIZE
	if [ $? -ne 0 ]; then
		log_warn "$TESTNAME: failed to make files"
		set_result RESULT $RESULT_FAIL
	fi

	gfwhere_check client1 $GFARM_HOME

	check_files client1 $MOUNT_DIR_PREFIX $TARGET_DIR $NUM_FILES $CHKSUM
	if [ $? -ne 0 ]; then
		log_warn "$TESTNAME: file checksum is not expected one"
		set_result RESULT $RESULT_FAIL
	fi

	log_view client1

	return $RESULT
}

teardown_write_files_common()
{
	remove_files client1 $MOUNT_DIR_PREFIX $TARGET_DIR $NUM_FILES

	exec_on_multiple_clients $NUM_CLIENTS umount_n false \
		$MOUNT_DIR_PREFIX $NUM_MOUNT

	exec_on_multiple_clients $NUM_CLIENTS rmdir_n false \
		$MOUNT_DIR_PREFIX $NUM_MOUNT

	return $RESULT_PASS
}
