#!/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="chromeos9-row4-rack7-host1
          chromeos9-row4-rack7-host2
          chromeos9-row4-rack7-host3
          chromeos9-row4-rack7-host4
          chromeos9-row4-rack8-host1
          chromeos9-row4-rack8-host2
          chromeos9-row4-rack8-host3"

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
