#!/usr/bin/env bash
############################################################################
# Purpose: Test of Slurm functionality
#          Executes the full battery of tests.
#
# Output:  "Failures:#\nCompletions:#" with a count of tests executed
#          successfully and failures respectively. The exit code is zero
#          only if all tests executed successfully.
############################################################################
# Copyright (C) 2002 The Regents of the University of California.
# Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
# Written by Morris Jette <jette1@llnl.gov>
# CODE-OCEC-09-009. All rights reserved.
#
# This file is part of Slurm, a resource management program.
# For details, see <https://slurm.schedmd.com/>.
# Please also read the supplied file: DISCLAIMER.
#
# Slurm is free software; you can redistribute it and/or modify it under
# the terms of the GNU General Public License as published by the Free
# Software Foundation; either version 2 of the License, or (at your option)
# any later version.
#
# Slurm is distributed in the hope that it will be useful, but WITHOUT ANY
# WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
# FOR A PARTICULAR PURPOSE.  See the GNU General Public License for more
# details.
#
# You should have received a copy of the GNU General Public License along
# with Slurm; if not, write to the Free Software Foundation, Inc.,
# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301  USA.
############################################################################

FAILURES=0
COMPLETIONS=0

# Clear any environment variables that could break the tests.
# Cray sets some squeue format options that break tests
unset SQUEUE_ALL
unset SQUEUE_SORT
unset SQUEUE_FORMAT
unset SQUEUE_FORMAT2

# Make sure we are in the desired directory before possibly
# removing files the user does not want to lose.
if [ ! -x ./regression ]; then
	echo "FAILURE: cd to 'testsuite/expect' before starting 'regression'"
	exit 1
fi
if [ ! -e ./globals ]; then
	echo "FAILURE: 'globals' file not found"
	exit 1
fi
if [ ! -x ./globals ]; then
	echo "FAILURE: 'globals' file not executable"
	exit 1
fi

# Remove any recently edited back-up files
/bin/rm -f test*.*% test*input test*output test*error

# Run the tests in this directory
/bin/date
BEGIN_TIME=`date +%s`
for major in `seq 1 100`; do
	for minor in `seq 1 150`; do
		TEST=test${major}.${minor}
		if [ ! -f ./$TEST ]; then continue; fi

		./$TEST
		if [ $? -eq 0 ]
		then
			COMPLETIONS=$((COMPLETIONS+1))
		else
			FAILURES=$((FAILURES+1))
			echo "=============" >& 2
			echo "$TEST FAILURE" >& 2
			echo "$TEST FAILURE"
			grep "$TEST " README >& 2
			echo "=============" >& 2
			if [ -f ./slurm_status ]; then ./slurm_status; fi
		fi
		/bin/echo "============================================"
	done
done
END_TIME=`date +%s`
DELTA_TIME=`expr $END_TIME - $BEGIN_TIME`

# Report the results
/bin/date
echo ""
echo ""
echo "Completions:$COMPLETIONS"
echo "Failures:   $FAILURES"
echo "Time (sec): $DELTA_TIME"

echo "Completions:$COMPLETIONS" >& 2
echo "Failures:   $FAILURES"    >& 2
echo "Time (sec): $DELTA_TIME"  >& 2
echo "Remember to check for mail send by tests" >& 2

if [ $FAILURES -eq 0 ]
then
	/bin/rm -f test*input test*output test*error
	exit 0
else
	exit 1
fi
