#
# Test case for reading files
#
load "gfarm2fs::exec_on_multiple_clients"
load "gfarm2fs::mkdir_n"
load "gfarm2fs::mount_n"
load "gfarm2fs::make_files_single"
load "gfarm2fs::log_view"
load "gfarm2fs::remove_files"
load "gfarm2fs::umount_n"
load "gfarm2fs::rmdir_n"

#
# read files
#
read_files()
{
	HOSTID=$1
	MNTDIR_PREFIX=$2
	COUNT=$3
	NFILES=$4
	SIZE=$5

	$GFSERVICE systest::gfarm2fs::read_files_n $HOSTID $MNTDIR_PREFIX $COUNT \
		test_${COUNT}_${NFILES}_${SIZE} $NFILES 
	if [ $? -ne 0 ]; then
		log_warn "gfservice read_files_n failed $HOSTID $NFILES"
		return 1
	fi

	return 0
}

#
# 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 read
# FILE_SIZE:	File size of each file to be read
setup_read_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
	TARGET_DIR="test_${NUM_MOUNT}_${NUM_FILES}_${FILE_SIZE}"

	return $RESULT_PASS
}

test_read_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

	make_files_single client1 $MOUNT_DIR_PREFIX $TARGET_DIR $NUM_FILES \
		$FILE_SIZE

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

	log_view client1

	return $RESULT
}

teardown_read_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
}
