#!/bin/bash
set -eux

PYTORCH_DIR="$(cd $(dirname $0)/..; pwd -P)"
PYTORCH_ANDROID_DIR=$PYTORCH_DIR/android

source "$PYTORCH_ANDROID_DIR/common.sh"

check_android_sdk
check_gradle

# Run android instrumented tests on x86 emulator

ADB_PATH=$ANDROID_HOME/platform-tools/adb

echo "Expecting running emulator"
$ADB_PATH devices

DEVICES_COUNT=$($ADB_PATH devices | awk 'NF' | wc -l)
echo "DEVICES_COUNT:$DEVICES_COUNT"

if [ "$DEVICES_COUNT" -eq 1 ]; then
  echo "Unable to found connected android emulators"
cat <<- EOF
  To start android emulator:
  1. Install android sdkmanager packages
  $ANDROID_HOME/tools/bin/sdkmanager "system-images;android-25;google_apis;x86"

  to specify proxy add params: --proxy=http --proxy_host=fwdproxy --proxy_port=8080

  2. Create android virtual device
  $ANDROID_HOME/tools/bin/avdmanager create avd --name "x86_android25" --package "system-images;android-25;google_apis;x86"

  3. Start emulator in headless mode without audio
  $ANDROID_HOME/tools/emulator -avd x86_android25 -no-audio -no-window

  4. Check that emulator is running
  $ANDROID_HOME/platform-tools/adb devices

  If everything is ok the output will be:

  List of devices attached
  emulator-5554   device
EOF
  exit 1
fi

echo "Waiting for emulator boot completed"
$ADB_PATH wait-for-device shell 'while [[ -z $(getprop sys.boot_completed) ]]; do sleep 1; done;'

{
  # The test currently takes about 10 minutes
  retry $GRADLE_PATH -PABI_FILTERS=x86 -p $PYTORCH_ANDROID_DIR connectedAndroidTest
} || {
  echo "::error::Check https://github.com/pytorch/pytorch/tree/master/test/mobile/model_test to see how to fix the failed mobile test"
  exit 1
}
