tests: Re-write jenkins scripts to parse test output for failures

Change-Id: Ic9adb25a7fa3bfdafa42e3ce3c2b23ce8446666a
Signed-off-by: Sean Wilson <spwilson2@wisc.edu>
diff --git a/tests/jenkins/continuous.sh b/tests/jenkins/continuous.sh
index daa2040..82fb1b0 100755
--- a/tests/jenkins/continuous.sh
+++ b/tests/jenkins/continuous.sh
@@ -1,4 +1,4 @@
-#!/bin/sh
+#!/bin/bash
 #
 # Copyright (c) 2016 ARM Limited
 # All rights reserved
@@ -36,36 +36,50 @@
 # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 #
 # Authors: Andreas Sandberg
+#          Sean Wilson
 
 set -e
+set -o pipefail
+
+# Use ccache with the default directory for caching
+export PATH="/usr/lib/ccache:$PATH"
+
+export LOGFILE="continuous-output"
+rm -f "${LOGFILE}"
 
 cd git/jenkins-gem5-prod
 
 BUILD_JOBS=4
 
 GEM5_ARCH="ALPHA ARM MIPS NULL POWER SPARC X86"
-GEM5_MODE=opt
+GEM5_VARIANT="opt"
 
 TARGETS=
 for A in ${GEM5_ARCH}; do
-    TARGETS="${TARGETS} build/${A}/gem5.${GEM5_MODE}"
+    TARGETS="${TARGETS} build/${A}/gem5.${GEM5_VARIANT}"
 done
 
-TEST_TARGETS=
+export TEST_TARGETS=""
 for A in ${GEM5_ARCH}; do
-    TEST_TARGETS="${TEST_TARGETS} build/${A}/tests/${GEM5_MODE}/quick"
+    TEST_TARGETS="${TEST_TARGETS} build/${A}/tests/${GEM5_VARIANT}\
+/quick/"
 done
 
+runtests () {
+	scons --ignore-style ${TARGETS} -j${BUILD_JOBS} &>> "${LOGFILE}"
 
-scons --ignore-style $TARGETS -j${BUILD_JOBS}
+    # Run the tests and check for a failure, return "0" for success
+    scons --ignore-style ${TEST_TARGETS} -j${BUILD_JOBS} |\
+    tee -a "${LOGFILE}" | grep 'FAILED!' | wc -l
 
-if [ "$?" = "0" ]; then
-  echo "SUCCESS"
-  cd ../..
-  exit 0
+	exit 0
+}
+
+# Check that there were zero failed tests and the subcommand was successful
+if [ "$(runtests 2>> ${LOGFILE})" = "0" -a "$?" = "0" ]; then
+    echo "SUCCESS"
+    exit 0
 else
-  echo "FAIL"
-  cd ../..
-  exit 1
+    echo "FAIL"
+    exit 1
 fi
-
diff --git a/tests/jenkins/presubmit.sh b/tests/jenkins/presubmit.sh
index d5eaaa6..79a9648 100755
--- a/tests/jenkins/presubmit.sh
+++ b/tests/jenkins/presubmit.sh
@@ -1,4 +1,4 @@
-#!/bin/sh
+#!/bin/bash
 #
 # Copyright (c) 2016 ARM Limited
 # All rights reserved
@@ -36,36 +36,50 @@
 # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 #
 # Authors: Andreas Sandberg
+#          Sean Wilson
 
 set -e
+set -o pipefail
+
+# Use ccache with the default directory for caching
+export PATH="/usr/lib/ccache:$PATH"
+
+export LOGFILE="presubmit-output"
+rm -f "${LOGFILE}"
 
 cd git/jenkins-gem5-prod
 
 BUILD_JOBS=4
 
-GEM5_ARCH="ALPHA ARM MIPS NULL POWER SPARC X86"
-GEM5_MODE=opt
+GEM5_ARCH="ARM NULL X86"
+GEM5_VARIANT="opt"
 
 TARGETS=
 for A in ${GEM5_ARCH}; do
-    TARGETS="${TARGETS} build/${A}/gem5.${GEM5_MODE}"
+    TARGETS="${TARGETS} build/${A}/gem5.${GEM5_VARIANT}"
 done
 
-TEST_TARGETS=
+export TEST_TARGETS=""
 for A in ${GEM5_ARCH}; do
-    TEST_TARGETS="${TEST_TARGETS} build/${A}/tests/${GEM5_MODE}/quick"
+    TEST_TARGETS="${TEST_TARGETS} build/${A}/tests/${GEM5_VARIANT}\
+/quick/se/00.hello"
 done
 
+runtests () {
+	scons --ignore-style ${TARGETS} -j${BUILD_JOBS} &>> "${LOGFILE}"
 
-scons --ignore-style $TARGETS -j${BUILD_JOBS}
+    # Run the tests and check for a failure, return "0" for success
+    scons --ignore-style ${TEST_TARGETS} -j${BUILD_JOBS} |\
+    tee -a "${LOGFILE}" | grep 'FAILED!' | wc -l
 
+	exit 0
+}
 
-if [ "$?" = "0" ]; then
-  echo "SUCCESS"
-  cd ../..
-  exit 0
+# Check that there were zero failed tests and the subcommand was successful
+if [ "$(runtests 2>> ${LOGFILE})" = "0" -a "$?" = "0" ]; then
+    echo "SUCCESS"
+    exit 0
 else
-  echo "FAIL"
-  cd ../..
-  exit 1
+    echo "FAIL"
+    exit 1
 fi