#!/bin/bash
# Copyright 2017 The Fuchsia Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.

### build a test package and run on target.
### PKG_TARGET is fully qualified or under fuchsia-pkg://fuchsia.com/

## usage: fx run-test [-t|--test <test_name>] PKG_TARGET -- [-args -to -test]
## Builds the specified test package (e.g., appmgr_integration_tests), copies it to the
## target, and executes it.
##
## If using this command, please run 'fx build' again before paving your device
## because 'fx build updates' used by this script does not build images so it
## can leave paver in weird state.
## Arguments:
##   -t|--test    Test to run. If not specified, it will run all tests in PKG_TARGET.
##                Only pass this flag when your test is a component.

set -e

source "$(cd "$(dirname "${BASH_SOURCE[0]}")" >/dev/null 2>&1 && pwd)"/lib/vars.sh || exit $?
fx-config-read

function usage {
  fx-command-help run-test
}


function main {

  fx-standard-switches "$@"
  set -- "${FX_ARGV[@]}"

  test=""
  target=""
  test_args=""

  while (($#)); do
    case $1 in
      -t|--test)
        shift  # name
        if [[ -z "$1" ]]; then
          echo "Missing parameter: <test_name>" >&2
          usage
          exit 1
        fi
        test="$1"
        ;;
      --)
        shift  # value
        test_args="$@"
        break
        ;;
      *)
        if [[ "$target" == "" ]]; then
          target="$1"
        else
          usage
          exit 1
        fi
        ;;
    esac
    shift  # value
  done

  if [[ $target == "" ]]; then
    usage
    return 1
  fi

  if [[ -z "$(pgrep -f "amber-files/repository")" ]]; then
    echo "WARNING: It looks like amber-srv is not running."
    echo "WARNING: You probably need to start \"fx serve-updates\""
    exit 1
  fi

  echo -e "Building ${target}"
  # build all packages as there is no way to only build one and push it to
  # update repository.
  fx-command-run build updates
  echo -e "\nPush package to device"
  fx-command-run push-package "${target}"

  if [[ "${test}" == "" ]]; then
    echo -e "\nRun all tests in ${target}"
    fx-command-run shell runtests "pkgfs/packages/${target}/0/test" -- "$test_args"
  else
    url="fuchsia-pkg://fuchsia.com/${target}#meta/${test}.cmx"
    echo -e "\nRunning ${url}"
    fx-command-run shell run_test_component "${url}" "$test_args"
  fi
}


main "$@"
