#!/bin/bash
# This script runs trinity with default parameters

DURATION=300
GROUP=
SYSCALL=


###SHELLPACK preamble trinity-bench 0

###SHELLPACK parseargBegin
###SHELLPACK parseargInstall
###SHELLPACK parseargParam   --duration	DURATION
###SHELLPACK parseargParam   --group    GROUP
###SHELLPACK parseargParam   --syscall  SYSCALL
###SHELLPACK parseargEnd

###SHELLPACK check_install_required trinity-${VERSION}
###SHELLPACK init_complete

GROUP_PARAM=
if [ "$GROUP" != "" ]; then
	GROUP_PARAM="-g $GROUP"
fi

SYSCALL_PARAM=
if [ "$SYSCALL" != "" ]; then
	SYSCALL_PARAM="-c $SYSCALL"
fi

if [ "$SYSCALL" != "" -a "$GROUP" != "" ]; then
	die Cannot specify both syscall and groups
fi

# Run trinity in the background
echo Launching trinity
cd $SHELLPACK_DATA || die "Failed to cd to $SHELLPACK_DATA"
mkdir tmp
chmod 777 tmp
TAINT=`cat /proc/sys/kernel/tainted`
STARTTIME=`date +%s`
ENDTIME=$((STARTTIME+$DURATION))
su -s /bin/bash nobody -c "$SHELLPACK_SOURCES/trinity-$VERSION-installed/trinity -q $SYSCALL_PARAM $GROUP_PARAM" 2>&1 | tee $LOGDIR_RESULTS/trinity.log &
TRINITY_PID=$!

echo -n Waiting for trinity to exit, $DURATION seconds or a kernel taint
CURRENTTIME=`date +%s`
while [ $CURRENTTIME -lt $ENDTIME ]; do
	if [ "`ps h --pid $TRINITY_PID`" = "" ]; then
		dmesg > $LOGDIR_RESULTS/dmesg.log
		cat $LOGDIR_RESULTS/trinity.log
		die Trinity died unexpectedly
	fi
	if [ "`cat /proc/sys/kernel/tainted`" != $TAINT ]; then
		cat $LOGDIR_RESULTS/trinity.log
		echo ERROR: Taint flag changed `cat /proc/sys/kernel/tainted`
		kill -9 $TRINITY_PID
		dmesg > $LOGDIR_RESULTS/dmesg.log
		die Unable to continue due to taint
	fi

	echo MARK: Approximately $((($ENDTIME - $CURRENTTIME)/60)) minutes to go
	sleep 60
	CURRENTTIME=`date +%s`
done
echo

shutdown_pid trinity $TRINITY_PID

exit $SHELLPACK_SUCCESS
