#!/bin/sh -ex # shellcheck disable=SC1090 TEST_DIR=$(dirname "$(realpath "$0")") OUTPUT="${TEST_DIR}/output" SKIP_INSTALL="false" ANDROID_SERIAL="" BOOT_TIMEOUT="300" PROBE="" WA_TAG="master" WA_GIT_REPO="https://github.com/ARM-software/workload-automation" WA_TEMPLATES_REPO="https://git.linaro.org/qa/wa2-lava.git" TEMPLATES_BRANCH="wa-templates" CONFIG="config/generic-android.py" AGENDA="agenda/generic-linpack.yaml" BUILD_TOOLS_URL="http://testdata.validation.linaro.org/apks/workload-automation/build-tools.tar.gz" WA_HOME_URL="http://testdata.validation.linaro.org/apks/workload-automation/workload_automation_home.tar.gz" DEVLIB_REPO="https://github.com/ARM-software/devlib.git" DEVLIB_TAG="master" usage() { echo "Usage: $0 [-s ] [-S ] [-t ] [-T ] [-r ] [-g ] [-c ] [-a ] [-b ] [-w ] [-p ] [-o ] [-R ] [-d ] [-D ]" 1>&2 exit 1 } while getopts ":s:S:t:T:r:g:c:a:b:w:p:o:R:D:d:" opt; do case "${opt}" in s) SKIP_INSTALL="${OPTARG}" ;; S) ANDROID_SERIAL="${OPTARG}" ;; t) BOOT_TIMEOUT="${OPTARG}" ;; T) WA_TAG="${OPTARG}" ;; r) WA_TEMPLATES_REPO="${OPTARG}" ;; g) TEMPLATES_BRANCH="${OPTARG}" ;; c) CONFIG="${OPTARG}" ;; a) AGENDA="${OPTARG}" ;; b) BUILD_TOOLS_URL="${OPTARG}" ;; w) WA_HOME_URL="${OPTARG}" ;; R) WA_GIT_REPO="${OPTARG}" ;; p) PROBE="${OPTARG}" ;; o) NEW_OUTPUT="${OPTARG}" ;; D) DEVLIB_TAG="${OPTARG}" ;; d) DEVLIB_REPO="${OPTARG}" ;; *) usage ;; esac done . "${TEST_DIR}/../../lib/sh-test-lib" . "${TEST_DIR}/../../lib/android-test-lib" cd "${TEST_DIR}" if [ ! -z "${NEW_OUTPUT}" ]; then OUTPUT="${NEW_OUTPUT}" fi create_out_dir "${OUTPUT}" RESULT_FILE="${OUTPUT}/result.txt" export RESULT_FILE if [ "${SKIP_INSTALL}" = "true" ] || [ "${SKIP_INSTALL}" = "True" ]; then info_msg "WA installation skipped" else PKGS="git wget zip tar xz-utils python python-yaml python-lxml python-setuptools python-numpy python-colorama python-pip sqlite3 lib32stdc++6 lib32z1 lib32gcc1 lib32ncurses5 aapt time sysstat python-jinja2 curl" ! check_root && error_msg "Please run this test as root." dpkg --add-architecture i386 apt-get update -q install_deps "${PKGS}" # only install adb if it's not already available which adb || install_deps adb pip install --upgrade --quiet pip && hash -r pip install --upgrade --quiet setuptools pip install --quiet pexpect pyserial pyyaml docutils python-dateutil info_msg "Installing devlib..." rm -rf devlib git clone "${DEVLIB_REPO}" devlib ( cd devlib git checkout "${DEVLIB_TAG}" ) pip2 install --quiet ./devlib info_msg "Installing workload-automation..." rm -rf workload-automation git clone "${WA_GIT_REPO}" workload-automation ( cd workload-automation git checkout "${WA_TAG}" ) pip2 install --quiet ./workload-automation export PATH=$PATH:/usr/local/bin which wa info_msg "Installing SDK build-tools..." ( cd /usr/ # Copy build-tools.tar.gz to /usr for local run. test -f build-tools.tar.gz || wget -S --progress=dot:giga "${BUILD_TOOLS_URL}" tar -xf build-tools.tar.gz ) info_msg "Installing workloads bbench and APKs..." ( cd /root/ # Copy workload_automation_home.tar.gz to /root for local run. test -f workload_automation_home.tar.gz || wget -S --progress=dot:giga "${WA_HOME_URL}" -O workload_automation_home.tar.gz tar -xf workload_automation_home.tar.gz ) wa --version wa list instruments fi initialize_adb adb_root wait_boot_completed "${BOOT_TIMEOUT}" disable_suspend rm -rf wa-templates git clone "${WA_TEMPLATES_REPO}" wa-templates ( cd wa-templates git checkout "${TEMPLATES_BRANCH}" cp "${CONFIG}" ../config.py cp "${AGENDA}" ../agenda.yaml ) sed -i "s/adb_name=.*/adb_name=\'${ANDROID_SERIAL}\',/" ./config.py # Ensure that csv is enabled in result processors. if ! awk '/result_processors = [[]/,/[]]/' ./config.py | grep -q 'csv'; then sed -i "s/result_processors = [[]/result_processors = [\n 'csv',/" ./config.py fi if [ -z "${PROBE}" ]; then # LAVA supports one probe per device for now. PROBE=$(find /dev/serial/by-id/ -name "usb-NXP_SEMICOND_ARM_Energy_Probe*" | head -n 1) fi # If AEP exists, find the correct AEP config file and update the AEP config path in the agenda. if [ -n "${PROBE}" ]; then ( cd "${WA_EXTENSION_PATHS}" # find config file with matching probe ID CONFIG_FILE=$(basename "$(grep -rl "${PROBE}" .)") cd - # update AEP config path on agenda sed -i "s|\$WA_EXTENSION_PATHS/*.*|${WA_EXTENSION_PATHS}/${CONFIG_FILE}\"|" agenda.yaml sed -i "s|\$WA_PLUGIN_PATHS/*.*|${WA_EXTENSION_PATHS}/${CONFIG_FILE}\"|" agenda.yaml # update AEP config path on config.yaml if [ -f /root/.workload_automation/config.yaml ]; then sed -i "s|\$WA_EXTENSION_PATHS/*.*|${WA_EXTENSION_PATHS}/${CONFIG_FILE}\"|" /root/.workload_automation/config.yaml sed -i "s|\$WA_PLUGIN_PATHS/*.*|${WA_EXTENSION_PATHS}/${CONFIG_FILE}\"|" /root/.workload_automation/config.yaml fi ) fi info_msg "device-${ANDROID_SERIAL}: About to run WA with ${AGENDA}..." wa run ./agenda.yaml -v -f -d "${OUTPUT}/wa" -c ./config.py || report_fail "wa-test-run" # Generate result.txt for sending results to LAVA. # Use id-iteration_metric as test case name. awk -F',' 'NR>1 {gsub(/[ _]/,"-",$4); printf("%s-itr%s_%s pass %s %s\n",$1,$3,$4,$5,$6)}' "${OUTPUT}/wa/results.csv" \ | sed 's/\r//g' \ | tee -a "${RESULT_FILE}"