summaryrefslogtreecommitdiff
path: root/automated/linux/dockerized-tests/over-ssh.sh
blob: f7f187f597fbe195b3ae12f741d9bb03409c3bb9 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
#!/bin/sh -ex
# shellcheck disable=SC1090
# shellcheck disable=SC2154
# shellcheck disable=SC2034
# shellcheck disable=SC2016

TEST_DIR=$(dirname "$(realpath "$0")")
OUTPUT="${TEST_DIR}/output"
LOGFILE="${OUTPUT}/stdout.txt"
RESULT_FILE="${OUTPUT}/result.txt"

SKIP_INSTALL="false"
TEST="automated/linux/smoke/smoke.yaml"
TESTDEF_PARAMS=""
TARGET_IP="lava-target-ip"
DOCKER_IMG="linaro/testdef-arm64-debian-stretch:b6e5458"

usage() {
    echo "Usage: $0 [-s <skip_install>] [-t <test>] [-r <testdef_params>] [-i <target_ip>] [-u <ssh_user>] [-p <ssh_passwd>] [-d <docker_img>]" 1>&2
    exit 1
}

while getopts "s:t:r:o:i:u:p:d:h" opt; do
    case "$opt" in
        s) SKIP_INSTALL="${OPTARG}" ;;
        t) TEST="${OPTARG}" ;;
        r) TESTDEF_PARAMS="${OPTARG}" ;;
        i) TARGET_IP="${OPTARG}" ;;
        u) SSH_USER="${OPTARG}" ;;
        p) SSH_PASSWD="${OPTARG}" ;;
        d) DOCKER_IMG="${OPTARG}" ;;
        *) usage ;;
    esac
done
. "${TEST_DIR}/../../lib/sh-test-lib"
test -z "${SSH_USER}" && error_msg "Please set SSH_USER with -u <ssh_user>"
test -z "${SSH_PASSWD}" && error_msg "Please set SSH_PASSWD with -p <ssh_passwd>"

create_out_dir "${OUTPUT}"
cd "${OUTPUT}"

[ "${TARGET_IP}" = "lava-target-ip" ] && TARGET_IP="$(lava-target-ip)"
ssh_cmd="sshpass -p ${SSH_PASSWD} ssh -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no ${SSH_USER}@${TARGET_IP}"

install_deps sshpass "${SKIP_INSTALL}"
# Assume docker pre-installed on test target.
# Installation on remote ssh target isn't supported yet.
eval "${ssh_cmd}" which docker | grep 'docker' || error_msg "docker not found on test target!"

# When using ssh, to avoid 'x509: certificate has expired or is not yet valid',
# set time to client's date, which more likely has ntp sync enabled.
client_date="$(date +%Y%m%d)"
echo "${SSH_PASSWD}" | eval "${ssh_cmd}" sudo -S date +%Y%m%d -s "${client_date}"

# Trigger test run.
if [ -z "${TESTDEF_PARAMS}" ]; then
    cmd1='eval "${ssh_cmd}" docker run "${DOCKER_IMG}" test-runner -d "${TEST}"'
else
    cmd1='eval "${ssh_cmd}" docker run "${DOCKER_IMG}" test-runner -d "${TEST}" -r "${TESTDEF_PARAMS}"'
fi
pipe0_status "${cmd1}" 'tee -a "${LOGFILE}"'
if [ "$?" != 0 ]; then
    echo "docker-run fail" | tee -a "${RESULT_FILE}"
    error_msg "Please check your docker image!
       Here is an Dockerfile example: https://git.linaro.org/ci/dockerfiles.git/tree/stretch-arm64-testdef"
fi

# Parse test log.
awk '/^<TEST_CASE_ID/ {gsub(/(<|>|=|TEST_CASE_ID|RESULT|UNITS|MEASUREMENT)/,""); print}' "${LOGFILE}" | tee -a "${RESULT_FILE}"