#!/bin/ksh
# 
# This Source Code Form is subject to the terms of the Mozilla Public
# License, v. 2.0. If a copy of the MPL was not distributed with this
# file, You can obtain one at http://mozilla.org/MPL/2.0/.

#
# runy2ktests.ksh
#	Set system clock to Y2K dates of interest and run the Y2K tests.
#	Needs root/administrator privilege
#
# WARNING: Because this script needs to be run with root/administrator
#	privilege, thorough understanding of the script and extreme
#	caution are urged.
#

#
# SECTION I
#	Define variables
#

SYSTEM_INFO=`uname -a`
OS_ARCH=`uname -s`
if [ $OS_ARCH = "Windows_NT" ] || [ $OS_ARCH = "Windows_95" ]
then
	NULL_DEVICE=nul
else
	NULL_DEVICE=/dev/null
fi

#
# Test dates for NSPR Y2K tests
#
Y2KDATES="	123123591998.55
			090923591999.55
			123123591999.55
			022823592000.55
			022923592000.55
			123123592000.55"

Y2KDATES_AIX="	12312359.5598
				09092359.5599
				12312359.5599
				02282359.5500
				02292359.5500
				12312359.5500"

Y2KDATES_HPUX="	123123591998
				090923591999
				123123591999
				022823592000
				022923592000
				123123592000"

Y2KDATES_MKS="	1231235998.55
				0909235999.55
				1231235999.55
				0228235900.55
				0229235900.55
				1231235900.55"

#
# NSPR Y2K tests
#
Y2KTESTS="
y2k		\n
y2ktmo	\n
y2k		\n
../runtests.ksh"

Y2KTESTS_HPUX="
y2k			\n
y2ktmo -l 60\n
y2k			\n
../runtests.ksh"

#
# SECTION II
#	Define functions
#

save_date()
{
	case $OS_ARCH in
	AIX)
		SAVED_DATE=`date "+%m%d%H%M.%S%y"`
	;;
	HP-UX)
		SAVED_DATE=`date "+%m%d%H%M%Y"`
	;;
	Windows_NT)
		SAVED_DATE=`date "+%m%d%H%M%y.%S"`
	;;
	Windows_95)
		SAVED_DATE=`date "+%m%d%H%M%y.%S"`
	;;
	*)
		SAVED_DATE=`date "+%m%d%H%M%Y.%S"`
	;;
	esac
}

set_date()
{
	case $OS_ARCH in
	Windows_NT)
#
# The date command in MKS Toolkit releases 5.1 and 5.2
# uses the current DST status for the date we want to
# set the system clock to.  However, the DST status for
# that date may be different from the current DST status.
# We can work around this problem by invoking the date
# command with the same date twice.
#
		date "$1" > $NULL_DEVICE
		date "$1" > $NULL_DEVICE
	;;
	*)
		date "$1" > $NULL_DEVICE
	;;
	esac
}

restore_date()
{
	set_date "$SAVED_DATE"
}

savedate()
{
	case $OS_ARCH in
	AIX)
		SAVED_DATE=`date "+%m%d%H%M.%S%y"`
	;;
	HP-UX)
		SAVED_DATE=`date "+%m%d%H%M%Y"`
	;;
	Windows_NT)
		SAVED_DATE=`date "+%m%d%H%M%y.%S"`
	;;
	Windows_95)
		SAVED_DATE=`date "+%m%d%H%M%y.%S"`
	;;
	*)
		SAVED_DATE=`date "+%m%d%H%M%Y.%S"`
	;;
	esac
}

set_y2k_test_parameters()
{
#
# set dates
#
	case $OS_ARCH in
	AIX)
		DATES=$Y2KDATES_AIX
	;;
	HP-UX)
		DATES=$Y2KDATES_HPUX
	;;
	Windows_NT)
		DATES=$Y2KDATES_MKS
	;;
	Windows_95)
		DATES=$Y2KDATES_MKS
	;;
	*)
		DATES=$Y2KDATES
	;;
	esac

#
# set tests
#
	case $OS_ARCH in
	HP-UX)
		TESTS=$Y2KTESTS_HPUX
	;;
	*)
		TESTS=$Y2KTESTS
	;;
	esac
}

#
# runtests:
#	-	runs each test in $TESTS after setting the
#		system clock to each date in $DATES
#

runtests()
{
for newdate in ${DATES}
do
	set_date $newdate
	echo $newdate
	echo "BEGIN\t\t\t`date`"
	echo "Date\t\t\t\t\tTest\t\t\tResult"
	echo $TESTS | while read prog
	do
		echo "`date`\t\t\c"
		echo "$prog\c"
		./$prog >> ${LOGFILE} 2>&1
		if [ 0 = $? ] ; then
			echo "\t\t\tPassed";
		else
			echo "\t\t\tFAILED";
		fi;
	done
	echo "END\t\t\t`date`\n"
done

}

#
# SECTION III
#	Run tests
#

LOGFILE=${NSPR_TEST_LOGFILE:-$NULL_DEVICE}
OBJDIR=`basename $PWD`
echo "\nNSPR Year 2000 Test Results - $OBJDIR\n"
echo "SYSTEM:\t\t\t${SYSTEM_INFO}"
echo "NSPR_TEST_LOGFILE:\t${LOGFILE}\n"


save_date

#
# Run NSPR Y2k and standard tests
#

set_y2k_test_parameters
runtests

restore_date