blob: 69933e93e33f7b4950b9eff4858778f799f96e4d [file] [log] [blame]
#!/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