From bfe72ce8429a139a91ec9646bf1d8afd4cfb7c65 Mon Sep 17 00:00:00 2001 From: Paul Stewart Date: Thu, 15 Jul 2010 15:32:46 -0700 Subject: [PATCH] Wrapper script around run_remote_tests that knows about test cells This is a first pass. I'll review this code myself and do more testing, but I wanted to get folks a look at it to make sure I was going in the right direction. BUG=none TEST=ran using both cell and hostname scenarios Review URL: http://codereview.chromium.org/3007002 --- bin/cros_run_wifi_tests.sh | 149 +++++++++++++++++++++++++++++++++++++ 1 file changed, 149 insertions(+) create mode 100755 bin/cros_run_wifi_tests.sh diff --git a/bin/cros_run_wifi_tests.sh b/bin/cros_run_wifi_tests.sh new file mode 100755 index 0000000000..c11f3134ee --- /dev/null +++ b/bin/cros_run_wifi_tests.sh @@ -0,0 +1,149 @@ +#!/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. + +# Wrapper script around run_remote_tests.sh that knows how to find +# device test cells. + + +# TODO(pstew): Apparently the script files are in transition from +# src/scripts to src/scripts/bin. However this state has existed +# for months now, therefore we need to look for the common libs in +# both places +script_root=$(dirname $0) +if [ -f ${script_root}/../common.sh ] ; then + script_root=${script_root}/.. +fi + +. "${script_root}/common.sh" + +# Figure out the default chromelab server name. In order for this to +# work correctly, you have to: +# +# - Put the hostname into "scripts/.default_wifi_test_lab" +# - Create an /etc/hosts entry in your chroot for that hostname +# (if it isn't findable via DNS) +# - Make sure you have created a wifi_testbed_${lab} file in the +# ${autotest}/files/client/config/ directory +if [ -f "$GCLIENT_ROOT/src/scripts/.default_wifi_test_lab" ] ; then + DEFAULT_LAB=`cat "$GCLIENT_ROOT/src/scripts/.default_wifi_test_lab"` +fi + +# TODO(pstew) Since this is a wrapper script, we need to accept all +# arguments run_remote_tests does, plus a few more of our own. This +# can lead to version skew issues + +DEFINE_string args "" "Command line arguments for test, separated with comma" a +DEFINE_string board "" "The board for which you are building autotest" +DEFINE_string chroot "" "alternate chroot location" c +DEFINE_boolean cleanup ${FLAGS_FALSE} "Clean up temp directory" +DEFINE_string iterations "" "Iterations to run every top level test" i +DEFINE_string prepackaged_autotest "" "Use this prepackaged autotest dir" +DEFINE_string results_dir_root "" "alternate root results directory" +DEFINE_boolean verbose ${FLAGS_FALSE} "Show verbose autoserv output" v + +# These flags are specific to run_wifi_tests +DEFINE_string cell "" "Cell number to perform test on" +DEFINE_string client "" "Host name or IP of device to perform test" +DEFINE_string lab "${DEFAULT_LAB}" "Lab machine to perform test on" +DEFINE_string url "" "URL to lab server config server" + +FLAGS "$@" || exit 1 + +run_remote_flags="" +run_remote_args=${FLAGS_args} + +append_flag () { + local delim='' + [ -n "${run_remote_flags}" ] && delim=' ' + run_remote_flags="${run_remote_flags}${delim}$*" +} + +append_arg () { + local delim='' + [ -n "${run_remote_args}" ] && delim=',' + run_remote_args="${run_remote_args}${delim}$*" +} + +if [ -n "${FLAGS_board}" ]; then + append_flag --board "'${FLAGS_board}'" +fi + +if [ -n "${FLAGS_chroot}" ]; then + append_flag --chroot "'${FLAGS_chroot}'" +fi + +if [ "${FLAGS_cleanup}" -eq ${FLAGS_TRUE} ]; then + append_flag --cleanup +fi + +if [ -n "${FLAGS_iterations}" ]; then + append_flag --iterations ${FLAGS_iterations} +fi + +if [ -n "${FLAGS_prepackaged_autotest}" ]; then + append_flag --prepackaged_autotest "'${FLAGS_prepackaged_autotest}'" +fi + +if [ -n "${FLAGS_results_dir_root}" ]; then + append_flag --results_dir_root "'${FLAGS_results_dir_root}'" +fi + +if [ "${FLAGS_verbose}" -eq ${FLAGS_TRUE} ]; then + append_flag --verbose +fi + +# Parse our local args +if [ -n "${FLAGS_lab}" ] ; then + # Add a config file for the lab if one isn't already set + if ! expr "${run_remote_args}" : '.*config_file=' >/dev/null; then + append_arg "config_file=wifi_testbed_${FLAGS_lab}" + fi +fi + +if [ -n "${FLAGS_url}" ] ; then + lab_url=${FLAGS_url} +elif [ -n "${FLAGS_lab}" ] ; then + lab_url="http://${FLAGS_lab}:8080/cells" +else + echo ">>> No lab server specified. Please use --lab or --url options" + exit 1 +fi + +cell_no=0 + +# Retrieve the testbed config from the server and match either the client +# or the cell number to one of the entries +ret=$(curl -s $lab_url | \ +while read line; do + # Each line from the server is made up of: + # client_name router_name server_name client_addr router_addr server_addr + set $line + if [ "${FLAGS_cell}" = "$cell_no" -o "${FLAGS_client}" = "$1" -o \ + "${FLAGS_client}" = "$4" ] ; then + echo "$4" + echo "router_addr=$5" + if [ "$6" != "0.0.0.0" ] ; then + echo "server_addr=$6" + fi + break + fi + cell_no=$[cell_no + 1] +done) + +if [ -z "$ret" ] ; then + echo ">>> Cell or host not found at $lab_url" + exit 1 +fi + +set $ret +remote=$1 +shift +for arg in $*; do + append_arg $arg +done + +eval "exec "${script_root}/run_remote_tests.sh" \ + -a "${run_remote_args}" --remote=${remote} $run_remote_flags $FLAGS_ARGV"