| Index: run_remote_tests.sh
|
| diff --git a/run_remote_tests.sh b/run_remote_tests.sh
|
| deleted file mode 100755
|
| index 1051257187b22c4d1b9eef20b80195f083827fd0..0000000000000000000000000000000000000000
|
| --- a/run_remote_tests.sh
|
| +++ /dev/null
|
| @@ -1,340 +0,0 @@
|
| -#!/bin/bash
|
| -
|
| -# Copyright (c) 2009 The Chromium OS Authors. All rights reserved.
|
| -# Use of this source code is governed by a BSD-style license that can be
|
| -# found in the LICENSE file.
|
| -
|
| -# Script to run client or server tests on a live remote image.
|
| -
|
| -# Load common constants. This should be the first executable line.
|
| -# The path to common.sh should be relative to your script's location.
|
| -
|
| -# --- BEGIN COMMON.SH BOILERPLATE ---
|
| -# Load common CrOS utilities. Inside the chroot this file is installed in
|
| -# /usr/lib/crosutils. Outside the chroot we find it relative to the script's
|
| -# location.
|
| -find_common_sh() {
|
| - local common_paths=(/usr/lib/crosutils $(dirname "$(readlink -f "$0")"))
|
| - local path
|
| -
|
| - SCRIPT_ROOT=
|
| - for path in "${common_paths[@]}"; do
|
| - if [ -r "${path}/common.sh" ]; then
|
| - SCRIPT_ROOT=${path}
|
| - break
|
| - fi
|
| - done
|
| -}
|
| -
|
| -find_common_sh
|
| -. "${SCRIPT_ROOT}/common.sh" || (echo "Unable to load common.sh" && exit 1)
|
| -# --- END COMMON.SH BOILERPLATE ---
|
| -
|
| -. "${SCRIPT_ROOT}/remote_access.sh" || die "Unable to load remote_access.sh"
|
| -
|
| -DEFINE_string args "" \
|
| - "Command line arguments for test. Quoted and space separated if multiple." a
|
| -DEFINE_string board "" \
|
| - "The board for which you are building autotest"
|
| -DEFINE_boolean build ${FLAGS_FALSE} "Build tests while running" b
|
| -DEFINE_string chroot "${DEFAULT_CHROOT_DIR}" "alternate chroot location" c
|
| -DEFINE_boolean cleanup ${FLAGS_FALSE} "Clean up temp directory"
|
| -DEFINE_integer iterations 1 "Iterations to run every top level test" i
|
| -DEFINE_string results_dir_root "" "alternate root results directory"
|
| -DEFINE_boolean verbose ${FLAGS_FALSE} "Show verbose autoserv output" v
|
| -DEFINE_boolean use_emerged ${FLAGS_FALSE} \
|
| - "Force use of emerged autotest packages"
|
| -
|
| -RAN_ANY_TESTS=${FLAGS_FALSE}
|
| -
|
| -function stop_ssh_agent() {
|
| - # Call this function from the exit trap of the main script.
|
| - # Iff we started ssh-agent, be nice and clean it up.
|
| - # Note, only works if called from the main script - no subshells.
|
| - if [[ 1 -eq ${OWN_SSH_AGENT} ]]; then
|
| - kill ${SSH_AGENT_PID} 2>/dev/null
|
| - unset OWN_SSH_AGENT SSH_AGENT_PID SSH_AUTH_SOCK
|
| - fi
|
| -}
|
| -
|
| -function start_ssh_agent() {
|
| - local tmp_private_key=$TMP/autotest_key
|
| - if [ -z "$SSH_AGENT_PID" ]; then
|
| - eval $(ssh-agent)
|
| - OWN_SSH_AGENT=1
|
| - else
|
| - OWN_SSH_AGENT=0
|
| - fi
|
| - cp $FLAGS_private_key $tmp_private_key
|
| - chmod 0400 $tmp_private_key
|
| - ssh-add $tmp_private_key
|
| -}
|
| -
|
| -function cleanup() {
|
| - # Always remove the build path in case it was used.
|
| - [[ -n "${BUILD_DIR}" ]] && sudo rm -rf "${BUILD_DIR}"
|
| - if [[ $FLAGS_cleanup -eq ${FLAGS_TRUE} ]] || \
|
| - [[ ${RAN_ANY_TESTS} -eq ${FLAGS_FALSE} ]]; then
|
| - rm -rf "${TMP}"
|
| - else
|
| - ln -nsf "${TMP}" /tmp/run_remote_tests.latest
|
| - echo ">>> Details stored under ${TMP}"
|
| - fi
|
| - stop_ssh_agent
|
| - cleanup_remote_access
|
| -}
|
| -
|
| -# Determine if a control is for a client or server test. Echos
|
| -# either "server" or "client".
|
| -# Arguments:
|
| -# $1 - control file path
|
| -function read_test_type() {
|
| - local control_file=$1
|
| - # Assume a line starts with TEST_TYPE =
|
| - local test_type=$(egrep -m1 \
|
| - '^[[:space:]]*TEST_TYPE[[:space:]]*=' "${control_file}")
|
| - if [[ -z "${test_type}" ]]; then
|
| - die "Unable to find TEST_TYPE line in ${control_file}"
|
| - fi
|
| - test_type=$(python -c "${test_type}; print TEST_TYPE.lower()")
|
| - if [[ "${test_type}" != "client" ]] && [[ "${test_type}" != "server" ]]; then
|
| - die "Unknown type of test (${test_type}) in ${control_file}"
|
| - fi
|
| - echo ${test_type}
|
| -}
|
| -
|
| -function create_tmp() {
|
| - # Set global TMP for remote_access.sh's sake
|
| - # and if --results_dir_root is specified,
|
| - # set TMP and create dir appropriately
|
| - if [[ -n "${FLAGS_results_dir_root}" ]]; then
|
| - TMP=${FLAGS_results_dir_root}
|
| - mkdir -p -m 777 ${TMP}
|
| - else
|
| - TMP=$(mktemp -d /tmp/run_remote_tests.XXXX)
|
| - fi
|
| -}
|
| -
|
| -function prepare_build_env() {
|
| - info "Pilfering toolchain shell environment from Portage."
|
| - local ebuild_dir="${TMP}/chromeos-base/autotest-build"
|
| - mkdir -p "${ebuild_dir}"
|
| - local E_only="autotest-build-9999.ebuild"
|
| - cat > "${ebuild_dir}/${E_only}" <<EOF
|
| -inherit toolchain-funcs
|
| -SLOT="0"
|
| -EOF
|
| - local E="chromeos-base/autotest-build/${E_only}"
|
| - "ebuild-${FLAGS_board}" --skip-manifest "${ebuild_dir}/${E_only}" \
|
| - clean unpack 2>&1 > /dev/null
|
| - local P_tmp="/build/${FLAGS_board}/tmp/portage/"
|
| - local E_dir="${E%%/*}/${E_only%.*}"
|
| - export BUILD_ENV="${P_tmp}/${E_dir}/temp/environment"
|
| -}
|
| -
|
| -function autodetect_build() {
|
| - if [ ${FLAGS_use_emerged} -eq ${FLAGS_TRUE} ]; then
|
| - AUTOTEST_DIR="/build/${FLAGS_board}/usr/local/autotest"
|
| - FLAGS_build=${FLAGS_FALSE}
|
| - if [ ! -d "${AUTOTEST_DIR}" ]; then
|
| - die \
|
| -"Could not find pre-installed autotest, you need to emerge-${FLAGS_board} \
|
| -autotest autotest-tests (or use --build)."
|
| - fi
|
| - info \
|
| -"As requested, using emerged autotests already installed at ${AUTOTEST_DIR}."
|
| - return
|
| - fi
|
| -
|
| - if [ ${FLAGS_build} -eq ${FLAGS_FALSE} ] &&
|
| - cros_workon --board=${FLAGS_board} list |
|
| - grep -q autotest; then
|
| - AUTOTEST_DIR="${SRC_ROOT}/third_party/autotest/files"
|
| - FLAGS_build=${FLAGS_TRUE}
|
| - if [ ! -d "${AUTOTEST_DIR}" ]; then
|
| - die \
|
| -"Detected cros_workon autotest but ${AUTOTEST_DIR} does not exist. Run \
|
| -repo sync autotest."
|
| - fi
|
| - info \
|
| -"Detected cros_workon autotests. Building and running your autotests from \
|
| -${AUTOTEST_DIR}. To use emerged autotest, pass --use_emerged."
|
| - return
|
| - fi
|
| -
|
| - # flag use_emerged should be false once the code reaches here.
|
| - if [ ${FLAGS_build} -eq ${FLAGS_TRUE} ]; then
|
| - AUTOTEST_DIR="${SRC_ROOT}/third_party/autotest/files"
|
| - if [ ! -d "${AUTOTEST_DIR}" ]; then
|
| - die \
|
| -"Build flag was turned on but ${AUTOTEST_DIR} is not found. Run cros_workon \
|
| -start autotest and repo sync to continue."
|
| - fi
|
| - info "Build and run autotests from ${AUTOTEST_DIR}."
|
| - else
|
| - AUTOTEST_DIR="/build/${FLAGS_board}/usr/local/autotest"
|
| - if [ ! -d "${AUTOTEST_DIR}" ]; then
|
| - die \
|
| -"Autotest was not emerged. Run emerge-${FLAGS_board} autotest \
|
| -autotest-tests to continue."
|
| - fi
|
| - info "Using emerged autotests already installed at ${AUTOTEST_DIR}."
|
| - fi
|
| -}
|
| -
|
| -function main() {
|
| - cd "${SCRIPTS_DIR}"
|
| -
|
| - FLAGS "$@" || exit 1
|
| -
|
| - if [[ -z "${FLAGS_ARGV}" ]]; then
|
| - echo "Usage: $0 --remote=[hostname] [regexp...]:"
|
| - echo "Each regexp pattern must uniquely match a control file. For example:"
|
| - echo " $0 --remote=MyMachine BootPerfServer"
|
| - exit 1
|
| - fi
|
| -
|
| - # Check the validity of the user-specified result directory
|
| - # It must be within the /tmp directory
|
| - if [[ -n "${FLAGS_results_dir_root}" ]]; then
|
| - SUBSTRING=${FLAGS_results_dir_root:0:5}
|
| - if [[ ${SUBSTRING} != "/tmp/" ]]; then
|
| - echo "User-specified result directory must be within the /tmp directory"
|
| - echo "ex: --results_dir_root=/tmp/<result_directory>"
|
| - exit 1
|
| - fi
|
| - fi
|
| -
|
| - set -e
|
| -
|
| - create_tmp
|
| -
|
| - trap cleanup EXIT
|
| -
|
| - remote_access_init
|
| - # autotest requires that an ssh-agent already be running
|
| - start_ssh_agent
|
| -
|
| - learn_board
|
| - autodetect_build
|
| -
|
| - local control_files_to_run=""
|
| - local chrome_autotests="${CHROME_ROOT}/src/chrome/test/chromeos/autotest/files"
|
| - # Now search for tests which unambiguously include the given identifier
|
| - local search_path=$(echo {client,server}/{tests,site_tests})
|
| - # Include chrome autotest in the search path
|
| - if [ -n "${CHROME_ROOT}" ]; then
|
| - search_path="${search_path} ${chrome_autotests}/client/site_tests"
|
| - fi
|
| -
|
| - pushd ${AUTOTEST_DIR} > /dev/null
|
| - for test_request in $FLAGS_ARGV; do
|
| - test_request=$(remove_quotes "${test_request}")
|
| - ! finds=$(find ${search_path} -maxdepth 2 -type f \( -name control.\* -or \
|
| - -name control \) | egrep -v "~$" | egrep "${test_request}")
|
| - if [[ -z "${finds}" ]]; then
|
| - die "Cannot find match for \"${test_request}\""
|
| - fi
|
| - local matches=$(echo "${finds}" | wc -l)
|
| - if [[ ${matches} -gt 1 ]]; then
|
| - echo ">>> \"${test_request}\" is an ambiguous pattern. Disambiguate by" \
|
| - "passing one of these patterns instead:"
|
| - for FIND in ${finds}; do
|
| - echo " ^${FIND}\$"
|
| - done
|
| - exit 1
|
| - fi
|
| - for i in $(seq 1 $FLAGS_iterations); do
|
| - control_files_to_run="${control_files_to_run} '${finds}'"
|
| - done
|
| - done
|
| -
|
| - echo ""
|
| -
|
| - if [[ -z "${control_files_to_run}" ]]; then
|
| - die "Found no control files"
|
| - fi
|
| -
|
| - [ ${FLAGS_build} -eq ${FLAGS_TRUE} ] && prepare_build_env
|
| -
|
| - info "Running the following control files:"
|
| - for control_file in ${control_files_to_run}; do
|
| - info " * ${control_file}"
|
| - done
|
| -
|
| - for control_file in ${control_files_to_run}; do
|
| - # Assume a line starts with TEST_TYPE =
|
| - control_file=$(remove_quotes "${control_file}")
|
| - local test_type=$(read_test_type "${AUTOTEST_DIR}/${control_file}")
|
| - # Check if the control file is an absolute path (i.e. chrome autotests case)
|
| - if [[ ${control_file:0:1} == "/" ]]; then
|
| - test_type=$(read_test_type "${control_file}")
|
| - fi
|
| - local option
|
| - if [[ "${test_type}" == "client" ]]; then
|
| - option="-c"
|
| - else
|
| - option="-s"
|
| - fi
|
| - echo ""
|
| - info "Running ${test_type} test ${control_file}"
|
| - local control_file_name=$(basename "${control_file}")
|
| - local short_name=$(basename "$(dirname "${control_file}")")
|
| -
|
| - # testName/control --> testName
|
| - # testName/control.bvt --> testName.bvt
|
| - # testName/control.regression --> testName.regression
|
| - # testName/some_control --> testName.some_control
|
| - if [[ "${control_file_name}" != control ]]; then
|
| - if [[ "${control_file_name}" == control.* ]]; then
|
| - short_name=${short_name}.${control_file_name/control./}
|
| - else
|
| - short_name=${short_name}.${control_file_name}
|
| - fi
|
| - fi
|
| -
|
| - local results_dir_name="${short_name}"
|
| - local results_dir="${TMP}/${results_dir_name}"
|
| - rm -rf "${results_dir}"
|
| - local verbose=""
|
| - if [[ ${FLAGS_verbose} -eq $FLAGS_TRUE ]]; then
|
| - verbose="--verbose"
|
| - fi
|
| -
|
| - RAN_ANY_TESTS=${FLAGS_TRUE}
|
| -
|
| - # Remove chrome autotest location prefix from control_file if needed
|
| - if [[ ${control_file:0:${#chrome_autotests}} == \
|
| - "${chrome_autotests}" ]]; then
|
| - control_file="${control_file:${#chrome_autotests}+1}"
|
| - info "Running chrome autotest ${control_file}"
|
| - fi
|
| -
|
| - local autoserv_args="-m ${FLAGS_remote} --ssh-port ${FLAGS_ssh_port} \
|
| - ${option} ${control_file} -r ${results_dir} ${verbose}"
|
| - if [ -n "${FLAGS_args}" ]; then
|
| - autoserv_args="${autoserv_args} --args=${FLAGS_args}"
|
| - fi
|
| -
|
| - sudo chmod a+w ./server/{tests,site_tests}
|
| - echo ./server/autoserv ${autoserv_args}
|
| -
|
| - if [ ${FLAGS_build} -eq ${FLAGS_TRUE} ]; then
|
| - # run autoserv in subshell
|
| - (. ${BUILD_ENV} && tc-export CC CXX PKG_CONFIG &&
|
| - ./server/autoserv ${autoserv_args})
|
| - else
|
| - ./server/autoserv ${autoserv_args}
|
| - fi
|
| - done
|
| - popd > /dev/null
|
| -
|
| - echo ""
|
| - info "Test results:"
|
| - ./generate_test_report "${TMP}" --strip="${TMP}/"
|
| -
|
| - print_time_elapsed
|
| -}
|
| -
|
| -restart_in_chroot_if_needed "$@"
|
| -main "$@"
|
|
|