Index: run_remote_tests.sh |
diff --git a/run_remote_tests.sh b/run_remote_tests.sh |
index 0c644d46f18e287f2623596babab7b4981c4e733..e920bb61bc34316e92cc08d5a961c2433cf4e5d1 100755 |
--- a/run_remote_tests.sh |
+++ b/run_remote_tests.sh |
@@ -48,83 +48,94 @@ function cleanup() { |
function read_test_type() { |
local control_file=$1 |
# Assume a line starts with TEST_TYPE = |
- local type=$(egrep -m1 \ |
- '^[[:space:]]*TEST_TYPE[[:space:]]*=' "${control_file}") |
- if [[ -z "${type}" ]]; then |
+ 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 |
- type=$(python -c "${type}; print TEST_TYPE.lower()") |
- if [[ "${type}" != "client" ]] && [[ "${type}" != "server" ]]; then |
- die "Unknown type of test (${type}) in ${control_file}" |
+ 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 ${type} |
+ 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 [[ ${INSIDE_CHROOT} -eq 0 ]]; then |
- if [[ -n "${FLAGS_results_dir_root}" ]]; then |
- TMP=${FLAGS_chroot}${FLAGS_results_dir_root} |
- mkdir -p -m 777 ${TMP} |
- else |
- TMP=$(mktemp -d ${FLAGS_chroot}/tmp/run_remote_tests.XXXX) |
- fi |
- TMP_INSIDE_CHROOT=$(echo ${TMP#${FLAGS_chroot}}) |
+ if [[ -n "${FLAGS_results_dir_root}" ]]; then |
+ TMP=${FLAGS_results_dir_root} |
+ mkdir -p -m 777 ${TMP} |
else |
- 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 |
- TMP_INSIDE_CHROOT=${TMP} |
+ TMP=$(mktemp -d /tmp/run_remote_tests.XXXX) |
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}" |
+function prepare_build_env() { |
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 ebuild_dir="${TMP}/chromeos-base/autotest-build" |
+ mkdir -p "${ebuild_dir}" |
local E_only="autotest-build-9999.ebuild" |
- cat > "${outside_ebuild_dir}/${E_only}" <<EOF |
+ cat > "${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}" \ |
+ "ebuild-${FLAGS_board}" --skip-manifest "${ebuild_dir}/${E_only}" \ |
clean unpack 2>&1 > /dev/null |
- local P_tmp="${FLAGS_chroot}/build/${FLAGS_board}/tmp/portage/" |
+ local P_tmp="/build/${FLAGS_board}/tmp/portage/" |
local E_dir="${E%%/*}/${E_only%.*}" |
- sudo cp "${P_tmp}/${E_dir}/temp/environment" "${BUILD_DIR}" |
+ export BUILD_ENV="${P_tmp}/${E_dir}/temp/environment" |
} |
function autodetect_build() { |
if [ ${FLAGS_use_emerged} -eq ${FLAGS_TRUE} ]; then |
- info \ |
-"As requested, using emerged autotests already installed in your sysroot." |
+ 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 ${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." |
+ |
+ if [ ${FLAGS_build} -eq ${FLAGS_FALSE} ] && |
+ $(dirname $0)/cros_workon --board=${FLAGS_board} list | |
+ grep -q autotest; then |
+ AUTOTEST_DIR="${SRC_ROOT}/third_party/autotest/files" |
FLAGS_build=${FLAGS_TRUE} |
- else |
+ if [ ! -d "${AUTOTEST_DIR}" ]; then |
+ die \ |
+"Detected cros_workon autotest but ${AUTOTEST_DIR} does not exist. Run \ |
+repo sync autotest." |
+ fi |
info \ |
-"Using emerged autotests already installed in your sysroot. To build \ |
-autotests directly from your source directory instead, pass --build." |
- FLAGS_build=${FLAGS_FALSE} |
+"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 |
} |
@@ -160,24 +171,7 @@ function main() { |
remote_access_init |
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 |
+ autodetect_build |
local control_files_to_run="" |
local chrome_autotests="${CHROME_ROOT}/src/chrome/test/chromeos/autotest/files" |
@@ -187,7 +181,8 @@ function main() { |
if [ -n "${CHROME_ROOT}" ]; then |
search_path="${search_path} ${chrome_autotests}/client/site_tests" |
fi |
- pushd ${autotest_dir} > /dev/null |
+ |
+ 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 \ |
@@ -208,7 +203,6 @@ function main() { |
control_files_to_run="${control_files_to_run} '${finds}'" |
done |
done |
- popd > /dev/null |
echo "" |
@@ -216,29 +210,29 @@ function main() { |
die "Found no control files" |
fi |
- [ ${FLAGS_build} -eq ${FLAGS_TRUE} ] && prepare_build_dir "${autotest_dir}" |
+ [ ${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}" |
+ 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 type=$(read_test_type "${autotest_dir}/${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 |
- type=$(read_test_type "${control_file}") |
+ test_type=$(read_test_type "${control_file}") |
fi |
local option |
- if [[ "${type}" == "client" ]]; then |
+ if [[ "${test_type}" == "client" ]]; then |
option="-c" |
else |
option="-s" |
fi |
echo "" |
- info "Running ${type} test ${control_file}" |
+ info "Running ${test_type} test ${control_file}" |
local control_file_name=$(basename "${control_file}") |
local short_name=$(basename $(dirname "${control_file}")) |
@@ -255,7 +249,7 @@ function main() { |
fi |
local results_dir_name="${short_name}" |
- local results_dir="${TMP_INSIDE_CHROOT}/${results_dir_name}" |
+ local results_dir="${TMP}/${results_dir_name}" |
rm -rf "${results_dir}" |
local verbose="" |
if [[ ${FLAGS_verbose} -eq $FLAGS_TRUE ]]; then |
@@ -271,39 +265,24 @@ function main() { |
info "Running chrome autotest ${control_file}" |
fi |
- local autoserv_test_args="${FLAGS_args}" |
- if [ -n "${autoserv_test_args}" ]; then |
- autoserv_test_args="-a \"${autoserv_test_args}\"" |
- fi |
local 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 |
-cd /build/${FLAGS_board}/usr/local/autotest |
-sudo chmod a+w ./server/{tests,site_tests} |
-echo ./server/autoserv ${autoserv_args} ${autoserv_test_args} |
-./server/autoserv ${autoserv_args} ${autoserv_test_args} |
-EOF |
- chmod a+rx "${TMP}/run_test.sh" |
- ${ENTER_CHROOT} ${TMP_INSIDE_CHROOT}/run_test.sh >&2 |
+ if [ -n "${FLAGS_args}" ]; then |
+ autoserv_args="${autoserv_args} -a \""${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 |
- cp "${BUILD_DIR}/environment" "${TMP}/run_test.sh" |
- GRAPHICS_BACKEND=${GRAPHICS_BACKEND:-OPENGL} |
- 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} |
-echo ./server/autoserv ${autoserv_args} ${autoserv_test_args} |
-./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 |
+ ./server/autoserv ${autoserv_args} |
fi |
done |
+ popd > /dev/null |
echo "" |
info "Test results:" |
@@ -312,4 +291,5 @@ EOF |
print_time_elapsed |
} |
+restart_in_chroot_if_needed $* |
main "$@" |