#!/bin/sh -e
# NAME=HDD benchmark: IOzone
# DESCRIPTION=This benchmark measures the speed of sequential I/O to actual files. It generates and measures a variety of file operations.
# DESTROYS_HDD=true
# POWEROFF_DURING_TEST=false
# VERSION=0.1
# TAGS=benchmark,hdd,filesystem
# DEPENDS=HDD
# VAR=TEST_FILE_SIZE:int:0:Size of test file, MiB. If set to zero - double memory amount size will be used

. _inq-config-global; . $SHARE_DIR/functions-test

exit_handler()
{
	[ -f "$RESULT_FILE" ] && rm -fr "$RESULT_FILE"
	if [ -d "$SCRATCH_DIRECTORY" ]; then
		umount -f $SCRATCH_DIRECTORY >/dev/null || true
		rmdir $SCRATCH_DIRECTORY
	fi
}

RESULT_FILE=`mktemp`
SCRATCH_DIRECTORY=`mktemp -d`
STAGES_QUANTITY=$(( `perl -e 'print scalar split(" ",$ENV{FS})'` * `get_hdds_list | wc -l` ))

perform_benchmark()
{
	local drive=$1

	echo -n "Preparing $drive drive..."
	mkfs.$DEFAULT_FILESYSTEM $DEFAULT_FILESYSTEM_FORCE $drive >$DEBUG_TTY 2>&1 ||
		test_failed 'Filesystem creation failed'

	mount -t $DEFAULT_FILESYSTEM $drive $SCRATCH_DIRECTORY
	echo_success

	echo -n "Performing benchmark..."
	iozone -a -g "$TEST_FILE_SIZE"m -f $SCRATCH_DIRECTORY/iozone_testfile | tee $RESULT_FILE
	echo_success
	
	benchmark_submit_string "Drive: $drive" \
	"`perl -ne 'print if /^\s+random/ .. /^$/' < $RESULT_FILE | sed -n '$d; s/^ *//g; 3,$p'`"

	umount $SCRATCH_DIRECTORY

	TESTED_QUANTITY=$(( $TESTED_QUANTITY + 1 ))
	test_progress $TESTED_QUANTITY $STAGES_QUANTITY
}

test_succeed_if_no hdds

[ ! $TEST_FILE_SIZE -eq 0 ] || TEST_FILE_SIZE=$((`memory_amount` * 2))

TESTED_QUANTITY=0
for BLOCK_DEV in `get_hdds_list`; do
	perform_benchmark $BLOCK_DEV
done

test_succeeded
