#!/usr/bin/env bash
#*----------------------------------------------------------------------------*#
#* Copyright (c) FIRST 2014. All Rights Reserved.							  *#
#* Open Source Software - may be modified and shared by FRC teams. The code   *#
#* must be accompanied by the FIRST BSD license file in the root directory of *#
#* the project.															      *#
#*----------------------------------------------------------------------------*#

# Configurable variables
source config.sh

# Setup the mutex release before we grab it
mutexTaken=false
# This function should run even if the script exits abnormally
function finish {
	if [ "$mutexTaken" == true ]; then
		SSH_GIVE_MUTEX="ssh -t ${ROBOT_ADDRESS} /usr/local/frc/bin/teststand give --name=$(whoami)"
		if [ $(which sshpass) ]; then
			sshpass -p "" ${SSH_GIVE_MUTEX}
		else
			printf "WARNING!!! THIS IS HOW THE MUTEX IS RELEASED!\nIF YOU CHOOSE TO 'ctr+c' NOW YOU WILL HAVE TO HAND BACK THE MUTEX MANUALLY ON THE ROBOT.\n"
			eval ${SSH_GIVE_MUTEX}
		fi
		mutexTaken=false
	fi
}
trap finish EXIT SIGINT



# Take the mutex from the driver station
mutexTaken=true
SSH_TAKE_MUTEX="ssh -t ${ROBOT_ADDRESS} /usr/local/frc/bin/teststand take --name=$(whoami)"
if [ $(which sshpass) ]; then
	sshpass -p "" ${SSH_TAKE_MUTEX}
else
	eval ${SSH_TAKE_MUTEX}
fi

# If there are already test results in the repository then remove them
if [[ -e ${DEFAULT_LOCAL_TEST_RESULTS_DIR} ]]; then
	rm -R ${DEFAULT_LOCAL_TEST_RESULTS_DIR}
fi

# Make the directory where the tests should live
mkdir ${DEFAULT_LOCAL_TEST_RESULTS_DIR} 2>/dev/null

# Remove the preivous test results from the the robot
SSH_REMOVE_OLD_TEST_RESULTS="ssh -t ${ROBOT_ADDRESS} rm -R ${DEFAULT_DESTINATION_TEST_RESULTS_DIR}; mkdir ${DEFAULT_DESTINATION_TEST_RESULTS_DIR}"
if [ $(which sshpass) ]; then
	sshpass -p "" ${SSH_REMOVE_OLD_TEST_RESULTS}
else
	eval ${SSH_REMOVE_OLD_TEST_RESULTS}
fi

printf "Running cpp test\n"

# Run the C++ Tests
./deploy-and-run-test-on-robot.sh cpp -m -A "--gtest_output=xml:${DEFAULT_DESTINATION_CPP_TEST_RESULTS}"

# Retrive the C++ Test Results
SCP_GET_CPP_TEST_RESULT="scp ${ROBOT_ADDRESS}:${DEFAULT_DESTINATION_CPP_TEST_RESULTS} ${DEFAULT_LOCAL_CPP_TEST_RESULT}"
if [ $(which sshpass) ]; then
	sshpass -p "" ${SCP_GET_CPP_TEST_RESULT}
else
	eval ${SCP_GET_CPP_TEST_RESULT}
fi

# Run the Java Tests
./deploy-and-run-test-on-robot.sh java -m

# Retrive the Java Test Results
SCP_GET_JAVA_TEST_RESULT="scp ${ROBOT_ADDRESS}:${DEFAULT_DESTINATION_JAVA_TEST_RESULTS} ${DEFAULT_LOCAL_JAVA_TEST_RESULT}"
if [ $(which sshpass) ]; then
	sshpass -p "" ${SCP_GET_JAVA_TEST_RESULT}
else
	eval ${SCP_GET_JAVA_TEST_RESULT}
fi

# The mutex is released when this program exits