1*9c5db199SXin Li#!/bin/sh 2*9c5db199SXin Li 3*9c5db199SXin Li# Copyright 2017 The Chromium OS Authors. All rights reserved. 4*9c5db199SXin Li# Use of this source code is governed by a BSD-style license that can be 5*9c5db199SXin Li# found in the LICENSE file. 6*9c5db199SXin Li 7*9c5db199SXin Li# This script probes the readiness of the DUTs and chameleon boards in 8*9c5db199SXin Li# the wifi-cells in the test lab. 9*9c5db199SXin Li 10*9c5db199SXin LiBT_HOSTS="chromeos15-row1-rack4-host1 11*9c5db199SXin Li chromeos15-row1-rack4-host2 12*9c5db199SXin Li chromeos15-row1-rack4-host3 13*9c5db199SXin Li chromeos15-row1-rack5-host1 14*9c5db199SXin Li chromeos15-row1-rack5-host2 15*9c5db199SXin Li chromeos15-row1-rack5-host3 16*9c5db199SXin Li chromeos15-row1-rack5-host4" 17*9c5db199SXin Li 18*9c5db199SXin LiSSH_OPTIONS="-q -i ~/.ssh/.test_rsa \ 19*9c5db199SXin Li -o UserKnownHostsFile=/dev/null \ 20*9c5db199SXin Li -o StrictHostKeyChecking=no" 21*9c5db199SXin Li 22*9c5db199SXin LiPROBE_RESULT_DIR="/tmp/bt_probe_result" 23*9c5db199SXin Li 24*9c5db199SXin LiSEP_LINE="------------------------------------------------------------------" 25*9c5db199SXin Li 26*9c5db199SXin Li 27*9c5db199SXin Lifunction disp_result { 28*9c5db199SXin Li test "$1" -eq "0" && echo ok || echo "-" 29*9c5db199SXin Li} 30*9c5db199SXin Li 31*9c5db199SXin Lifunction probe_dut { 32*9c5db199SXin Li dut="$1.cros" 33*9c5db199SXin Li 34*9c5db199SXin Li # ping test 35*9c5db199SXin Li ping -q -w 10 -c1 "${dut}" > /dev/null 2>&1 36*9c5db199SXin Li ping_result="$(disp_result $?)" 37*9c5db199SXin Li 38*9c5db199SXin Li # Check board 39*9c5db199SXin Li board=$(ssh ${SSH_OPTIONS} root@"$dut" cat /etc/lsb-release | \ 40*9c5db199SXin Li awk -F'=' '/CHROMEOS_RELEASE_BUILDER_PATH/ {print $2}') 41*9c5db199SXin Li 42*9c5db199SXin Li # Print the result 43*9c5db199SXin Li printf "$1 %5s %s\n" "${ping_result}" "${board}" \ 44*9c5db199SXin Li > "${PROBE_RESULT_DIR}/${dut}" 45*9c5db199SXin Li} 46*9c5db199SXin Li 47*9c5db199SXin Lifunction probe_chameleon { 48*9c5db199SXin Li RN42_MODULE="/usr/lib/python2.7/site-packages/chameleond-0.0.2-py2.7.egg/chameleond/utils/bluetooth_rn42.py" 49*9c5db199SXin Li 50*9c5db199SXin Li chameleon="$1-chameleon.cros" 51*9c5db199SXin Li 52*9c5db199SXin Li # ping test 53*9c5db199SXin Li ping -q -w 10 -c1 "${chameleon}" > /dev/null 2>&1 54*9c5db199SXin Li ping_result="$(disp_result $?)" 55*9c5db199SXin Li 56*9c5db199SXin Li # .usb_host_mode label test 57*9c5db199SXin Li ssh $SSH_OPTIONS root@"$chameleon" "test -f /etc/default/.usb_host_mode" 58*9c5db199SXin Li label_result="$(disp_result $?)" 59*9c5db199SXin Li 60*9c5db199SXin Li # Check if chameleond is running. 61*9c5db199SXin Li test $(ssh ${SSH_OPTIONS} root@"$chameleon" \ 62*9c5db199SXin Li ps | awk '$5~"run_chameleond"' | wc -l) -gt "0" 63*9c5db199SXin Li chameleond_result="$(disp_result $?)" 64*9c5db199SXin Li 65*9c5db199SXin Li # RN42 self-test status 66*9c5db199SXin Li ssh ${SSH_OPTIONS} root@"$chameleon" \ 67*9c5db199SXin Li "python ${RN42_MODULE} > /dev/null 2>&1" 68*9c5db199SXin Li # "find / -name *bluetooth_rn42.py | xargs python > /dev/null 2>&1" 69*9c5db199SXin Li RN42_result="$(disp_result $?)" 70*9c5db199SXin Li 71*9c5db199SXin Li # TODO: add self test for bluefruit too. 72*9c5db199SXin Li 73*9c5db199SXin Li # Print the result 74*9c5db199SXin Li printf "$1-chameleon %5s %6s %10s %4s\n" "${ping_result}" \ 75*9c5db199SXin Li "${label_result}" "${chameleond_result}" "${RN42_result}" \ 76*9c5db199SXin Li > "${PROBE_RESULT_DIR}/${chameleon}" 77*9c5db199SXin Li} 78*9c5db199SXin Li 79*9c5db199SXin Lifunction probe_duts { 80*9c5db199SXin Li # Fork parallel processes to probe the DUTs. 81*9c5db199SXin Li for host in $BT_HOSTS; do 82*9c5db199SXin Li probe_dut $host & 83*9c5db199SXin Li dut_pids="${dut_pids} $!" 84*9c5db199SXin Li done 85*9c5db199SXin Li} 86*9c5db199SXin Li 87*9c5db199SXin Lifunction probe_chameleons { 88*9c5db199SXin Li # Fork parallel processes to probe the chameleon boards. 89*9c5db199SXin Li for host in $BT_HOSTS; do 90*9c5db199SXin Li probe_chameleon $host & 91*9c5db199SXin Li chameleon_pids="${chameleon_pids} $!" 92*9c5db199SXin Li done 93*9c5db199SXin Li} 94*9c5db199SXin Li 95*9c5db199SXin Lifunction create_ping_result_dir { 96*9c5db199SXin Li dut_pids="" 97*9c5db199SXin Li chameleon_pids="" 98*9c5db199SXin Li 99*9c5db199SXin Li mkdir -p "${PROBE_RESULT_DIR}" 100*9c5db199SXin Li rm -fr "${PROBE_RESULT_DIR}"/* 101*9c5db199SXin Li} 102*9c5db199SXin Li 103*9c5db199SXin Lifunction print_dut_status { 104*9c5db199SXin Li echo 105*9c5db199SXin Li echo "Dut ping board" 106*9c5db199SXin Li echo "${SEP_LINE}" 107*9c5db199SXin Li 108*9c5db199SXin Li # Wait for all probing children processes to terminate. 109*9c5db199SXin Li for pid in ${dut_pids}; do 110*9c5db199SXin Li wait ${pid} 111*9c5db199SXin Li done 112*9c5db199SXin Li 113*9c5db199SXin Li # Sort and print the results. 114*9c5db199SXin Li cat "${PROBE_RESULT_DIR}"/*-host?.cros | sort 115*9c5db199SXin Li echo; echo 116*9c5db199SXin Li} 117*9c5db199SXin Li 118*9c5db199SXin Lifunction print_chameleon_status { 119*9c5db199SXin Li echo "Chameleon ping label chameleond rn42" 120*9c5db199SXin Li echo "${SEP_LINE}" 121*9c5db199SXin Li 122*9c5db199SXin Li # Wait for all probing children processes to terminate. 123*9c5db199SXin Li for pid in ${chameleon_pids}; do 124*9c5db199SXin Li wait ${pid} 125*9c5db199SXin Li done 126*9c5db199SXin Li 127*9c5db199SXin Li # Sort and print the results. 128*9c5db199SXin Li cat "${PROBE_RESULT_DIR}"/*-chameleon.cros | sort 129*9c5db199SXin Li echo; echo 130*9c5db199SXin Li} 131*9c5db199SXin Li 132*9c5db199SXin Licreate_ping_result_dir 133*9c5db199SXin Liprobe_duts 134*9c5db199SXin Liprobe_chameleons 135*9c5db199SXin Liprint_dut_status 136*9c5db199SXin Liprint_chameleon_status 137