| #!/bin/bash | |
| # Copyright 2018 The Fuchsia Authors. All rights reserved. | |
| # Use of this source code is governed by a BSD-style license that can be | |
| # found in the LICENSE file. | |
| ### Performs WLAN smoke tests by reaching out the Internet | |
| TEST_TIMEOUT_SEC=80 | |
| readonly LOG_DIR="/tmp" | |
| readonly LOG_FILE="wlan-doctor.log" | |
| readonly SOURCE="garnet/bin/wlan/wlan-smoke.sh" | |
| readonly SCRIPT="$(basename ${SOURCE})" | |
| readonly ETH_IFACE_PREFIX="en" | |
| readonly SHELL_CMD="fx-command-run shell" | |
| source "$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"/lib/vars.sh | |
| fx-config-read | |
| function usage { | |
| cat <<END | |
| usage: fx test-wlan [timeout] | |
| Copies the test script to target and runs from it. Examine results after {timeout} seconds. | |
| END | |
| } | |
| if [[ $# -gt 1 ]]; then | |
| usage | |
| exit 1 | |
| fi | |
| if [[ $# -eq 1 ]]; then | |
| re='^[0-9]+$' | |
| if [[ $1 =~ $re ]]; then | |
| TEST_TIMEOUT_SEC="$1" | |
| else | |
| usage | |
| exit 1 | |
| fi | |
| fi | |
| function setup { | |
| "${ZIRCON_TOOLS_DIR}"/netruncmd : ifconfig en2 up | |
| } | |
| function get_eth_iface_list { | |
| local iface_list=$(${SHELL_CMD} ifconfig | grep "^${ETH_IFACE_PREFIX}" | tr '[:blank:]' ' ' | cut -f1 -d ' ') | |
| echo "${iface_list}" | |
| } | |
| function run { | |
| fx-command-run cp "${FUCHSIA_DIR}/${SOURCE}" "${LOG_DIR}/${SCRIPT}" > /dev/null 2>&1 | |
| local suppres_output=$(${SHELL_CMD} "${LOG_DIR}/${SCRIPT}" "${LOG_DIR}/${LOG_FILE}" &) | |
| } | |
| function wait_for_result { | |
| local timeout="$1" | |
| local target_iface="$2" | |
| echo "Wait ${timeout} seconds for wlan-smoke to complete" | |
| for i in $( seq 1 "$timeout" ); do | |
| if [ "$i" -lt 3 ]; then | |
| sleep 1 | |
| else | |
| local ssh_output=$(${SHELL_CMD} -o ConnectTimeout=1 ifconfig "${target_iface}" 2>&1) | |
| if echo "${ssh_output}" | grep -q UP ; then | |
| printf "\nDone in %d seconds" "$i" | |
| break | |
| fi | |
| fi | |
| printf "." | |
| if ! ((i % 10)); then | |
| printf " " | |
| fi | |
| if ! ((i % 60)); then | |
| echo "" | |
| fi | |
| done | |
| echo "" | |
| } | |
| function recover_eth { | |
| echo "$@" | while read -r eth_iface ; do | |
| "${ZIRCON_TOOLS_DIR}"/netruncmd : ifconfig "${eth_iface}" up | |
| done | |
| } | |
| function display_cleanup { | |
| fx-command-run cp --to-host "${LOG_DIR}/${LOG_FILE}" "${LOG_DIR}" > /dev/null 2>&1 | |
| if [ -f "${LOG_DIR}/${LOG_FILE}" ]; then | |
| cat "${LOG_DIR}/${LOG_FILE}" | |
| if ! grep -qe "wlan smoke: End$" "${LOG_DIR}/${LOG_FILE}"; then | |
| echo "WLAN test result incomplete. Please try again." | |
| fi | |
| rm "${LOG_DIR}/${LOG_FILE}" | |
| else | |
| echo "WLAN test result not found. Please try agian." | |
| fi | |
| } | |
| setup | |
| eth_iface_list=$(get_eth_iface_list) | |
| if [ -z "$eth_iface_list" ]; then | |
| echo "No ethernet interface found on target. Please try again." | |
| exit 1 | |
| fi | |
| run | |
| wait_for_result "${TEST_TIMEOUT_SEC}" "${eth_iface_list[0]}" | |
| recover_eth "${eth_iface_list[@]}" | |
| display_cleanup |