| Index: run_remote_tests.sh
|
| diff --git a/run_remote_tests.sh b/run_remote_tests.sh
|
| index 73309be5ffeb6c1c1a4424c96cfd8176fd6645fc..29b329475643239a5916d5839a999261c5ad9185 100755
|
| --- a/run_remote_tests.sh
|
| +++ b/run_remote_tests.sh
|
| @@ -18,42 +18,20 @@ DEFINE_string args "" \
|
| "Command line arguments for test. Quoted and space separated if multiple." a
|
| DEFINE_string board "$DEFAULT_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}
|
|
|
| -# Check if our stdout is a tty
|
| -function is_a_tty() {
|
| - local stdout=$(readlink /proc/$$/fd/1)
|
| - [[ "${stdout#/dev/tty}" != "${stdout}" ]] && return 0
|
| - [[ "${stdout#/dev/pts}" != "${stdout}" ]] && return 0
|
| - return 1
|
| -}
|
| -
|
| -# Writes out text in specified color if stdout is a tty
|
| -# Arguments:
|
| -# $1 - color
|
| -# $2 - text to color
|
| -# $3 - text following colored text (default colored)
|
| -# Returns:
|
| -# None
|
| -function echo_color() {
|
| - local color=0
|
| - [[ "$1" == "red" ]] && color=31
|
| - [[ "$1" == "green" ]] && color=32
|
| - [[ "$1" == "yellow" ]] && color=33
|
| - if is_a_tty; then
|
| - echo -e "\033[1;${color}m$2\033[0m$3"
|
| - else
|
| - echo "$2$3"
|
| - fi
|
| -}
|
| -
|
| 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}"
|
| @@ -63,27 +41,6 @@ function cleanup() {
|
| cleanup_remote_access
|
| }
|
|
|
| -# Adds attributes to all tests run
|
| -# Arguments:
|
| -# $1 - results directory
|
| -# $2 - attribute name (key)
|
| -# $3 - attribute value (value)
|
| -function add_test_attribute() {
|
| - local results_dir="$1"
|
| - local attribute_name="$2"
|
| - local attribute_value="$3"
|
| - if [[ -z "$attribute_value" ]]; then
|
| - return;
|
| - fi
|
| -
|
| - for status_file in $(echo "${results_dir}"/*/status); do
|
| - local keyval_file=$(dirname $status_file)/keyval
|
| - echo "Updating ${keyval_file}"
|
| - echo "${attribute_name}=${attribute_value}" >> "${keyval_file}"
|
| - done
|
| -}
|
| -
|
| -
|
| # Determine if a control is for a client or server test. Echos
|
| # either "server" or "client".
|
| # Arguments:
|
| @@ -94,17 +51,83 @@ function read_test_type() {
|
| local type=$(egrep -m1 \
|
| '^[[:space:]]*TEST_TYPE[[:space:]]*=' "${control_file}")
|
| if [[ -z "${type}" ]]; then
|
| - echo_color "red" ">>> Unable to find TEST_TYPE line in ${control_file}"
|
| - exit 1
|
| + die "Unable to find TEST_TYPE line in ${control_file}"
|
| fi
|
| type=$(python -c "${type}; print TEST_TYPE.lower()")
|
| if [[ "${type}" != "client" ]] && [[ "${type}" != "server" ]]; then
|
| - echo_color "red" ">>> Unknown type of test (${type}) in ${control_file}"
|
| - exit 1
|
| + die "Unknown type of test (${type}) in ${control_file}"
|
| fi
|
| echo ${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 [[ ${INSIDE_CHROOT} -eq 0 ]]; then
|
| + if [[ -n "${FLAGS_results_dir_root}" ]]; then
|
| + TMP=${FLAGS_chroot}${FLAGS_results_dir_root}
|
| + mkdir -m 777 ${TMP}
|
| + else
|
| + TMP=$(mktemp -d ${FLAGS_chroot}/tmp/run_remote_tests.XXXX)
|
| + fi
|
| + TMP_INSIDE_CHROOT=$(echo ${TMP#${FLAGS_chroot}})
|
| + else
|
| + if [[ -n "${FLAGS_results_dir_root}" ]]; then
|
| + TMP=${FLAGS_results_dir_root}
|
| + mkdir -m 777 ${TMP}
|
| + else
|
| + TMP=$(mktemp -d /tmp/run_remote_tests.XXXX)
|
| + fi
|
| + TMP_INSIDE_CHROOT=${TMP}
|
| + fi
|
| +}
|
| +
|
| +function prepare_build_dir() {
|
| + local autotest_dir="$1"
|
| + INSIDE_BUILD_DIR="${TMP_INSIDE_CHROOT}/build"
|
| + BUILD_DIR="${TMP}/build"
|
| + info "Copying autotest tree into ${BUILD_DIR}."
|
| + sudo mkdir -p "${BUILD_DIR}"
|
| + sudo rsync -rl --chmod=ugo=rwx "${autotest_dir}"/ "${BUILD_DIR}"
|
| + info "Pilfering toolchain shell environment from Portage."
|
| + local outside_ebuild_dir="${TMP}/chromeos-base/autotest-build"
|
| + local inside_ebuild_dir="${TMP_INSIDE_CHROOT}/chromeos-base/autotest-build"
|
| + mkdir -p "${outside_ebuild_dir}"
|
| + local E_only="autotest-build-9999.ebuild"
|
| + cat > "${outside_ebuild_dir}/${E_only}" <<EOF
|
| +inherit toolchain-funcs
|
| +SLOT="0"
|
| +EOF
|
| + local E="chromeos-base/autotest-build/${E_only}"
|
| + ${ENTER_CHROOT} "ebuild-${FLAGS_board}" "${inside_ebuild_dir}/${E_only}" \
|
| + clean unpack 2>&1 > /dev/null
|
| + local P_tmp="${FLAGS_chroot}/build/${FLAGS_board}/tmp/portage/"
|
| + local E_dir="${E%%/*}/${E_only%.*}"
|
| + sudo cp "${P_tmp}/${E_dir}/temp/environment" "${BUILD_DIR}"
|
| +}
|
| +
|
| +function autodetect_build() {
|
| + if [ ${FLAGS_use_emerged} -eq ${FLAGS_TRUE} ]; then
|
| + info \
|
| +"As requested, using emerged autotests already installed in your sysroot."
|
| + FLAGS_build=${FLAGS_FALSE}
|
| + return
|
| + fi
|
| + if ${ENTER_CHROOT} ./cros_workon --board=${FLAGS_board} list | \
|
| + grep -q autotest; then
|
| + info \
|
| +"Detected cros_workon autotests, building your sources instead of emerged \
|
| +autotest. To use installed autotest, pass --use_emerged."
|
| + FLAGS_build=${FLAGS_TRUE}
|
| + else
|
| + info \
|
| +"Using emerged autotests already installed in your sysroot. To build \
|
| +autotests directly from your source directory instead, pass --build."
|
| + FLAGS_build=${FLAGS_FALSE}
|
| + fi
|
| +}
|
| +
|
| function main() {
|
| cd $(dirname "$0")
|
|
|
| @@ -130,26 +153,7 @@ function main() {
|
|
|
| set -e
|
|
|
| - # Set global TMP for remote_access.sh's sake
|
| - # and if --results_dir_root is specified,
|
| - # set TMP and create dir appropriately
|
| - if [[ ${INSIDE_CHROOT} -eq 0 ]]; then
|
| - if [[ -n "${FLAGS_results_dir_root}" ]]; then
|
| - TMP=${FLAGS_chroot}${FLAGS_results_dir_root}
|
| - mkdir -m 777 ${TMP}
|
| - else
|
| - TMP=$(mktemp -d ${FLAGS_chroot}/tmp/run_remote_tests.XXXX)
|
| - fi
|
| - TMP_INSIDE_CHROOT=$(echo ${TMP#${FLAGS_chroot}})
|
| - else
|
| - if [[ -n "${FLAGS_results_dir_root}" ]]; then
|
| - TMP=${FLAGS_results_dir_root}
|
| - mkdir -m 777 ${TMP}
|
| - else
|
| - TMP=$(mktemp -d /tmp/run_remote_tests.XXXX)
|
| - fi
|
| - TMP_INSIDE_CHROOT=${TMP}
|
| - fi
|
| + create_tmp
|
|
|
| trap cleanup EXIT
|
|
|
| @@ -158,6 +162,23 @@ function main() {
|
| learn_board
|
| autotest_dir="${FLAGS_chroot}/build/${FLAGS_board}/usr/local/autotest"
|
|
|
| + ENTER_CHROOT=""
|
| + if [[ ${INSIDE_CHROOT} -eq 0 ]]; then
|
| + ENTER_CHROOT="./enter_chroot.sh --chroot ${FLAGS_chroot} --"
|
| + fi
|
| +
|
| + if [ ${FLAGS_build} -eq ${FLAGS_FALSE} ]; then
|
| + autodetect_build
|
| + fi
|
| +
|
| + if [ ${FLAGS_build} -eq ${FLAGS_TRUE} ]; then
|
| + autotest_dir="${SRC_ROOT}/third_party/autotest/files"
|
| + else
|
| + if [ ! -d "${autotest_dir}" ]; then
|
| + die "You need to emerge autotest-tests (or use --build)"
|
| + fi
|
| + fi
|
| +
|
| 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
|
| @@ -172,8 +193,7 @@ function main() {
|
| ! finds=$(find ${search_path} -maxdepth 2 -type f \( -name control.\* -or \
|
| -name control \) | egrep -v "~$" | egrep "${test_request}")
|
| if [[ -z "${finds}" ]]; then
|
| - echo_color "red" ">>> Cannot find match for \"${test_request}\""
|
| - exit 1
|
| + die "Cannot find match for \"${test_request}\""
|
| fi
|
| local matches=$(echo "${finds}" | wc -l)
|
| if [[ ${matches} -gt 1 ]]; then
|
| @@ -193,13 +213,14 @@ function main() {
|
| echo ""
|
|
|
| if [[ -z "${control_files_to_run}" ]]; then
|
| - echo_color "red" ">>> Found no control files"
|
| - exit 1
|
| + die "Found no control files"
|
| fi
|
|
|
| - echo_color "yellow" ">>> Running the following control files:"
|
| + [ ${FLAGS_build} -eq ${FLAGS_TRUE} ] && prepare_build_dir "${autotest_dir}"
|
| +
|
| + info "Running the following control files:"
|
| for CONTROL_FILE in ${control_files_to_run}; do
|
| - echo_color "yellow" " * " "${CONTROL_FILE}"
|
| + info " * ${CONTROL_FILE}"
|
| done
|
|
|
| for control_file in ${control_files_to_run}; do
|
| @@ -217,7 +238,7 @@ function main() {
|
| option="-s"
|
| fi
|
| echo ""
|
| - echo_color "yellow" ">>> Running ${type} test " ${control_file}
|
| + info "Running ${type} test ${control_file}"
|
| local control_file_name=$(basename "${control_file}")
|
| local short_name=$(basename $(dirname "${control_file}"))
|
|
|
| @@ -243,31 +264,49 @@ function main() {
|
|
|
| RAN_ANY_TESTS=${FLAGS_TRUE}
|
|
|
| - local enter_chroot=""
|
| - local autotest="${GCLIENT_ROOT}/src/scripts/autotest_workon"
|
| - if [[ ${INSIDE_CHROOT} -eq 0 ]]; then
|
| - enter_chroot="./enter_chroot.sh --chroot ${FLAGS_chroot} --"
|
| - autotest="./autotest_workon"
|
| - fi
|
| -
|
| # 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}"
|
| - echo_color "yellow" ">>> Running chrome autotest " ${control_file}
|
| - fi
|
| - if [[ -n "${FLAGS_args}" ]]; then
|
| - passthrough_args="--args=${FLAGS_args}"
|
| + info "Running chrome autotest ${control_file}"
|
| fi
|
|
|
| - ${enter_chroot} ${autotest} --board "${FLAGS_board}" -m "${FLAGS_remote}" \
|
| - --ssh-port ${FLAGS_ssh_port} \
|
| - "${option}" "${control_file}" -r "${results_dir}" ${verbose} \
|
| - "${passthrough_args}" >&2
|
| + export AUTOSERV_TEST_ARGS="${FLAGS_args}"
|
| + export AUTOSERV_ARGS="-m ${FLAGS_remote} \
|
| + --ssh-port ${FLAGS_ssh_port} \
|
| + ${option} ${control_file} -r ${results_dir} ${verbose}"
|
| + if [ ${FLAGS_build} -eq ${FLAGS_FALSE} ]; then
|
| + cat > "${TMP}/run_test.sh" <<EOF
|
| +export AUTOSERV_TEST_ARGS="${AUTOSERV_TEST_ARGS}"
|
| +export AUTOSERV_ARGS="${AUTOSERV_ARGS}"
|
| +cd /home/${USER}/trunk/src/scripts
|
| +./autotest_run.sh --board "${FLAGS_board}"
|
| +EOF
|
| + chmod a+rx "${TMP}/run_test.sh"
|
| + ${ENTER_CHROOT} ${TMP_INSIDE_CHROOT}/run_test.sh >&2
|
| + else
|
| + cp "${BUILD_DIR}/environment" "${TMP}/run_test.sh"
|
| + GRAPHICS_BACKEND=${GRAPHICS_BACKEND:-OPENGL}
|
| + if [ -n "${AUTOSERV_TEST_ARGS}" ]; then
|
| + AUTOSERV_TEST_ARGS="-a \"${AUTOSERV_TEST_ARGS}\""
|
| + fi
|
| + cat >> "${TMP}/run_test.sh" <<EOF
|
| +export GCLIENT_ROOT=/home/${USER}/trunk
|
| +export GRAPHICS_BACKEND=${GRAPHICS_BACKEND}
|
| +export SSH_AUTH_SOCK=${SSH_AUTH_SOCK} TMPDIR=/tmp SSH_AGENT_PID=${SSH_AGENT_PID}
|
| +export SYSROOT=/build/${FLAGS_board}
|
| +tc-export CC CXX PKG_CONFIG
|
| +cd ${INSIDE_BUILD_DIR}
|
| +./server/autoserv ${AUTOSERV_ARGS} ${AUTOSERV_TEST_ARGS}
|
| +EOF
|
| + sudo cp "${TMP}/run_test.sh" "${BUILD_DIR}"
|
| + sudo chmod a+rx "${BUILD_DIR}/run_test.sh"
|
| + ${ENTER_CHROOT} sudo bash -c "${INSIDE_BUILD_DIR}/run_test.sh" >&2
|
| + fi
|
| done
|
|
|
| echo ""
|
| - echo_color "yellow" ">>> Test results:"
|
| + info "Test results:"
|
| ./generate_test_report "${TMP}" --strip="${TMP}/"
|
|
|
| print_time_elapsed
|
|
|