#!/bin/sh
# SPDX-License-Identifier: GPL-2.0+
#
# Run a group of kvm.sh tests on the specified commits.  This currently
# unconditionally does three-minute runs on each scenario in CFLIST,
# taking advantage of all available CPUs and trusting the "make" utility.
# In the short term, adjustments can be made by editing this script and
# CFLIST.  If some adjustments appear to have ongoing value, this script
# might grow some command-line arguments.
#
# Usage: kvm-check-branches.sh commit1 commit2..commit3 commit4 ...
#
# This script considers its arguments one at a time.  If more elaborate
# specification of commits is needed, please use "git rev-list" to
# produce something that this simple script can understand.  The reason
# for retaining the simplicity is that it allows the user to more easily
# see which commit came from which branch.
#
# This script creates a yyyy.mm.dd-hh.mm.ss-group entry in the "res"
# directory.  The calls to kvm.sh create the usual entries, but this script
# moves them under the yyyy.mm.dd-hh.mm.ss-group entry, each in its own
# directory numbered in run order, that is, "0001", "0002", and so on.
# For successful runs, the large build artifacts are removed.  Doing this
# reduces the disk space required by about two orders of magnitude for
# successful runs.
#
# Copyright (C) Facebook, 2020
#
# Authors: Paul E. McKenney <paulmck@kernel.org>

if ! git status > /dev/null 2>&1
then
	echo '!!!' This script needs to run in a git archive. 1>&2
	echo '!!!' Giving up. 1>&2
	exit 1
fi

# Remember where we started so that we can get back at the end.
curcommit="`git status | head -1 | awk '{ print $NF }'`"

nfail=0
ntry=0
resdir="tools/testing/selftests/rcutorture/res"
ds="`date +%Y.%m.%d-%H.%M.%S`-group"
if ! test -e $resdir
then
	mkdir $resdir || :
fi
mkdir $resdir/$ds
echo Results directory: $resdir/$ds

RCUTORTURE="`pwd`/tools/testing/selftests/rcutorture"; export RCUTORTURE
PATH=${RCUTORTURE}/bin:$PATH; export PATH
. functions.sh
echo Using all `identify_qemu_vcpus` CPUs.

# Each pass through this loop does one command-line argument.
for gitbr in $@
do
	echo ' --- git branch ' $gitbr

	# Each pass through this loop tests one commit.
	for i in `git rev-list "$gitbr"`
	do
		ntry=`expr $ntry + 1`
		idir=`awk -v ntry="$ntry" 'END { printf "%04d", ntry; }' < /dev/null`
		echo ' --- commit ' $i from branch $gitbr
		date
		mkdir $resdir/$ds/$idir
		echo $gitbr > $resdir/$ds/$idir/gitbr
		echo $i >> $resdir/$ds/$idir/gitbr

		# Test the specified commit.
		git checkout $i > $resdir/$ds/$idir/git-checkout.out 2>&1
		echo git checkout return code: $? "(Commit $ntry: $i)"
		kvm.sh --allcpus --duration 3 --trust-make --datestamp "$ds/$idir" > $resdir/$ds/$idir/kvm.sh.out 2>&1
		ret=$?
		echo kvm.sh return code $ret for commit $i from branch $gitbr
		echo Run results: $resdir/$ds/$idir
		if test "$ret" -ne 0
		then
			# Failure, so leave all evidence intact.
			nfail=`expr $nfail + 1`
		else
			# Success, so remove large files to save about 1GB.
			( cd $resdir/$ds/$idir/$rrd; rm -f */vmlinux */bzImage */System.map */Module.symvers )
		fi
	done
done
date

# Go back to the original commit.
git checkout "$curcommit"

if test $nfail -ne 0
then
	echo '!!! ' $nfail failures in $ntry 'runs!!!'
	exit 1
else
	echo No failures in $ntry runs.
	exit 0
fi
