Script to run missing arc-cts packages

BUG=b:68749021
TEST=None

Change-Id: Ib2cafb24fbf6dc74f1a2ea79210624dd1a68cca1
Reviewed-on: https://chromium-review.googlesource.com/748745
Reviewed-by: danny chan <dchan@chromium.org>
Reviewed-by: Prabu Manavalan <pmanavalan@chromium.org>
Commit-Queue: Prabu Manavalan <pmanavalan@chromium.org>
Tested-by: Prabu Manavalan <pmanavalan@chromium.org>
Trybot-Ready: Prabu Manavalan <pmanavalan@chromium.org>
diff --git a/provingground/cts/run_missing_pkg.sh b/provingground/cts/run_missing_pkg.sh
new file mode 100755
index 0000000..47847f2
--- /dev/null
+++ b/provingground/cts/run_missing_pkg.sh
@@ -0,0 +1,79 @@
+#!/bin/bash
+# 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 with "build id" and "cts version" passed as an argument will
+# fetch all .csv files in the current directory to schedule missing package
+# of respective boards identified using individual .csv file name (i.e rename
+# each .csv file to reflect its exact borad name by which the framework can
+# identify specific board after downloading from plx dashboard)
+# Copying run_missing_pck.sh at ~/chromiumos/src/scripts makes the script
+# available in chroot. The chroot env is required to schedule missing test runs
+# using test_that.
+
+# Usage information
+usage_info() {
+  cat <<EOF
+Usage:
+./run_missing_pkg.sh [OPTION] <build_id> <cts_version>
+Sample usage:
+./run_missing_pkg.sh R64-10075.0.0 7.1_r10
+EOF
+}
+
+main() {
+  # Checking if mandatory arguments are provided.
+  if [ $# -ne 2 ]; then
+    usage_info
+    exit 0
+  fi
+
+  # Reading the build number.
+  BUILD=$1
+
+  # Reading the CTS version.
+  CTS_VERSION=$2
+
+  # Extracting ANDROID_VERSION from CTS_VERSION.
+  ANDROID_VERSION="${CTS_VERSION%.*}"
+
+  # Adding PREFIX for ANDROID_VERSION
+  if [ $ANDROID_VERSION == 7 ]; then
+    PREFIX="cheets_CTS_N"
+  else
+    echo "CTS version should not be other than 7"
+    exit 1
+  fi
+
+  # Iterating all csv files from the current directory.
+  for file in *.csv
+    do
+      #Extracting BOARD name from each csv file.
+      BOARD=$(echo $file | cut -d. -f1)
+      echo $BOARD
+      # Initialize to NULL before each csv iteration.
+      PACKAGE_SYNTAX=""
+      LIST_OF_PACKAGES=""
+      # This skips the header of each csv file and blank lines if available.
+      PROCESSED_CSV=$(cut -d, -f1,2 $file | sed 1d | sed /^$/d)
+      for i in $PROCESSED_CSV
+      do
+        # Extracting PACKAGE name from each line from the csv file.
+        PACKAGE=$(echo $i | cut -d, -f1)
+        # Extracting ARCHITECTURE name from each line from the csv file.
+        ARCHITECTURE=$(echo $i | cut -d, -f2 | cut -c 1-3)
+        # Building PACKAGE_SYNTAX.
+        PACKAGE_SYNTAX="$PREFIX.$CTS_VERSION.$ARCHITECTURE.$PACKAGE"
+        LIST_OF_PACKAGES="$LIST_OF_PACKAGES $PACKAGE_SYNTAX"
+      done
+      test_that :lab: --max_runtime_mins 600 -b $BOARD -i \
+        $BOARD-release/$BUILD -p cts $LIST_OF_PACKAGES &
+      # This sleep time will make sure test_that to produce the job id during
+      # exectuion followed by the former board name(echo $BORAD) one by one
+      # properly on the console for respective boards.
+      sleep 15
+  done
+}
+
+main "$@"