#!/bin/bash

# Copyright (c) 2014 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.

set -e

BRANCH=$1
BUILD=$2

ATEST='../../../third_party/autotest/files/cli/atest'
RUN_SUITE='../../../third_party/autotest/files/site_utils/run_suite.py'

USAGE_STRING='Usage: ./run_wifi_release_suite.sh <branch number> <build number>'

if [[ $# -eq 0  ||  -z $2 ]] ; then
  echo $USAGE_STRING
  exit
fi

# atheros_ar9300 on kernel 3.4
list_1=(alex lumpy stumpy)

# atheros_ar9462 on kernel 3.4
list_2=(parrot butterfly)

# atheros_ar9462 on kernel 3.8
list_3=(link stout peppy falco)

# marvell_88w8797_2x2 on kernel 3.8
list_4=(snow spring)

# marvell_88w8897_2x2 on kernel 3.8
list_5=(peach_pi peach_pit)

# intel wilkins peak 2 on kernel 3.10
# TODO (krisr) add rambi when installed
list_6=(squawks)

DESIRED_BOARDS=(list_1 list_2 list_3 list_4 list_5 list_6)

return_available_hosts() {
  OIFS='$IFS'
  IFS=$'\n'

  boards=("${!1}")

  #TODO: Filter out stderr so the user doesn't see it.
  for host in `$ATEST host list | grep wificell` ; do
    IFS=$' '
    local host_info=($host)
    for board in ${boards[@]}; do
      if [[ $board == ${host_info[3]} && (${host_info[1]} != 'Repairing' &&
          ${host_info[1]} != 'Repair Failed') ]] ; then
        boards_to_run+=($board)
      fi
    done;
    IFS=$'\n'
  done;
  IFS=$OIFS
}

boards_to_run=()

for sub_list in ${DESIRED_BOARDS[@]} ; do
  previous_count=${#boards_to_run[@]}

  subst="$sub_list[@]"
  list_items=(`echo "${!subst}"`)
  return_available_hosts list_items[@]

  current_count=${#boards_to_run[@]}
  if [ $current_count -eq $previous_count ] ; then
    echo 'No devices from '$sub_list' were available!'
  fi

done;

#TODO: Remove duplicates from the list of boards_to_run

results_folder='/tmp/wifi_release_R'$BRANCH'-'$BUILD'-'`date +%Y-%m-%d-%H-%M-%S`
if [ -e $results_folder ] ; then
  rm -rf $results_folder
fi

#TODO: Create a wifi_release_Rx-x.latest symn link
mkdir $results_folder

for board in ${boards_to_run[@]}; do
  # Perform the conversion from autotest platform names to board build names
  if [ $board == 'spring' ] ; then
    board='daisy_spring'
  elif [ $board == 'snow' ] ; then
    board='daisy'
  elif [ $board == 'alex' ] ; then
    board='x86-alex'
  fi

  run_command=$RUN_SUITE' --build='$board'-release/R'$BRANCH'-'$BUILD
  run_command+=' --pool=wificell --board='$board' --suite_name=wifi_release'

  results_file=$results_folder'/'$board'.txt'

  echo 'Running: '$board
  eval $run_command &> $results_file &
  disown %1

done;

echo 'Results can be seen in: '$results_folder
