Bash程序  |  137行  |  3.52 KB

#!/bin/sh

# Copyright 2017 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.

# This script probes the readiness of the DUTs and chameleon boards in
# the wifi-cells in the test lab.

BT_HOSTS="chromeos15-row1-rack4-host1
          chromeos15-row1-rack4-host2
          chromeos15-row1-rack4-host3
          chromeos15-row1-rack5-host1
          chromeos15-row1-rack5-host2
          chromeos15-row1-rack5-host3
          chromeos15-row1-rack5-host4"

SSH_OPTIONS="-q -i ~/.ssh/.test_rsa \
             -o UserKnownHostsFile=/dev/null \
             -o StrictHostKeyChecking=no"

PROBE_RESULT_DIR="/tmp/bt_probe_result"

SEP_LINE="------------------------------------------------------------------"


function disp_result {
  test "$1" -eq "0" && echo ok || echo "-"
}

function probe_dut {
  dut="$1.cros"

  # ping test
  ping -q -w 10 -c1 "${dut}" > /dev/null 2>&1
  ping_result="$(disp_result $?)"

  # Check board
  board=$(ssh ${SSH_OPTIONS} root@"$dut" cat /etc/lsb-release | \
          awk -F'=' '/CHROMEOS_RELEASE_BUILDER_PATH/ {print $2}')

  # Print the result
  printf "$1            %5s  %s\n" "${ping_result}" "${board}" \
    > "${PROBE_RESULT_DIR}/${dut}"
}

function probe_chameleon {
  RN42_MODULE="/usr/lib/python2.7/site-packages/chameleond-0.0.2-py2.7.egg/chameleond/utils/bluetooth_rn42.py"

  chameleon="$1-chameleon.cros"

  # ping test
  ping -q -w 10 -c1 "${chameleon}" > /dev/null 2>&1
  ping_result="$(disp_result $?)"

  # .usb_host_mode label test
  ssh $SSH_OPTIONS root@"$chameleon" "test -f /etc/default/.usb_host_mode"
  label_result="$(disp_result $?)"

  # Check if chameleond is running.
  test $(ssh ${SSH_OPTIONS} root@"$chameleon" \
         ps | awk '$5~"run_chameleond"' | wc -l) -gt "0"
  chameleond_result="$(disp_result $?)"

  # RN42 self-test status
  ssh ${SSH_OPTIONS} root@"$chameleon" \
      "python ${RN42_MODULE} > /dev/null 2>&1"
      # "find / -name *bluetooth_rn42.py | xargs python > /dev/null 2>&1"
  RN42_result="$(disp_result $?)"

  # TODO: add self test for bluefruit too.

  # Print the result
  printf "$1-chameleon  %5s %6s %10s %4s\n" "${ping_result}" \
      "${label_result}" "${chameleond_result}" "${RN42_result}" \
    > "${PROBE_RESULT_DIR}/${chameleon}"
}

function probe_duts {
  # Fork parallel processes to probe the DUTs.
  for host in $BT_HOSTS; do
    probe_dut $host &
    dut_pids="${dut_pids} $!"
  done
}

function probe_chameleons {
  # Fork parallel processes to probe the chameleon boards.
  for host in $BT_HOSTS; do
    probe_chameleon $host &
    chameleon_pids="${chameleon_pids} $!"
  done
}

function create_ping_result_dir {
  dut_pids=""
  chameleon_pids=""

  mkdir -p "${PROBE_RESULT_DIR}"
  rm -fr "${PROBE_RESULT_DIR}"/*
}

function print_dut_status {
  echo
  echo "Dut                                    ping                  board"
  echo "${SEP_LINE}"

  # Wait for all probing children processes to terminate.
  for pid in ${dut_pids}; do
    wait ${pid}
  done

  # Sort and print the results.
  cat "${PROBE_RESULT_DIR}"/*-host?.cros | sort
  echo; echo
}

function print_chameleon_status {
  echo "Chameleon                              ping  label chameleond rn42"
  echo "${SEP_LINE}"

  # Wait for all probing children processes to terminate.
  for pid in ${chameleon_pids}; do
    wait ${pid}
  done

  # Sort and print the results.
  cat "${PROBE_RESULT_DIR}"/*-chameleon.cros | sort
  echo; echo
}

create_ping_result_dir
probe_duts
probe_chameleons
print_dut_status
print_chameleon_status