#!/bin/bash

# Copyright JS Foundation and other contributors, http://js.foundation
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#     http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

TARGET="$1" #debug.linux release.linux
TARGET_IP="$2" # ip address of target board
TARGET_USER="$3" # login
TARGET_PASS="$4" # password

if [ $# -lt 4 ]
then
  echo "This script runs ./jerry/* and ./jerry-test-suite/* tests on the remote board."
  echo ""
  echo "Usage:"
  echo "  1st parameter: target to be tested: {debug.linux, release.linux}"
  echo "  2nd parameter: ip address of target board: {110.110.110.110}"
  echo "  3rd parameter: ssh login to target board: {login}"
  echo "  4th parameter: ssh password to target board: {password}"
  echo ""
  echo "Example:"
  echo "  ./tools/runners/run-tests-remote.sh debug.linux 110.110.110.110 login password"
  exit 1
fi

BASE_DIR=$(dirname "$(readlink -f "$0")" )

OUT_DIR="${BASE_DIR}"/../.././build/bin
LOGS_PATH_FULL="${OUT_DIR}"/"${TARGET}"/check

export SSHPASS="${TARGET_PASS}"

rm -rf "${LOGS_PATH_FULL}"

mkdir -p "${LOGS_PATH_FULL}"

REMOTE_TMP_DIR=$(sshpass -e ssh "${TARGET_USER}"@"${TARGET_IP}" 'mktemp -d')
REMOTE_TMP_TAR=$(sshpass -e ssh "${TARGET_USER}"@"${TARGET_IP}" 'mktemp')
LOCAL_TMP_TAR=$(mktemp)

tar -zcf "${LOCAL_TMP_TAR}" \
  "${BASE_DIR}"/../.././build/bin/"${TARGET}" \
  "${BASE_DIR}"/../.././tests/benchmarks \
  "${BASE_DIR}"/../.././tests/jerry \
  "${BASE_DIR}"/../.././tests/jerry-test-suite \
  "${BASE_DIR}"/../.././tools/runners \
  "${BASE_DIR}"/../.././tools/precommit-full-testing.sh > /dev/null 2>&1

sshpass -e scp "${LOCAL_TMP_TAR}" "${TARGET_USER}"@"${TARGET_IP}":"${REMOTE_TMP_TAR}"

sshpass -e ssh "${TARGET_USER}"@"${TARGET_IP}" \
  "tar -zxf \"${REMOTE_TMP_TAR}\" -C \"${REMOTE_TMP_DIR}\"; rm \"${REMOTE_TMP_TAR}\";\
  cd \"${REMOTE_TMP_DIR}\"; \
  ./tools/precommit-full-testing.sh ./build/bin \"$TARGET\" > ./build/bin/\"${TARGET}\"/check/run.log 2>&1; \
  echo \$? > ./build/bin/\"${TARGET}\"/check/IS_TEST_OK"

sshpass -e scp -r "${TARGET_USER}"@"${TARGET_IP}":"${REMOTE_TMP_DIR}"/build/bin/"${TARGET}"/check/* "${LOGS_PATH_FULL}"
sshpass -e ssh "${TARGET_USER}"@"${TARGET_IP}" "rm -rf \"${REMOTE_TMP_DIR}\""

STATUS=$(cat "${LOGS_PATH_FULL}"/IS_TEST_OK)

if [ "${STATUS}" == 0 ] ; then
  echo "${TARGET} testing passed."
  exit 0
else
  echo "${TARGET} testing failed."
  echo "See logs in ${LOGS_PATH_FULL} directory for details."
  exit 1
fi