#!/usr/bin/env bash
# Copyright 2014 The Flutter 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 has been adapted from:
# https://github.com/flutter/engine/blob/master/testing/fuchsia/run_tests.sh
# Any modifications made to this file might be applicable there as well.

# This expects the device to be in zedboot mode, with a zedboot that is
# is compatible with the Fuchsia system image provided.
#
# The first and only parameter should be the path to the Fuchsia system image
# tarball, e.g. `./run_fuchsia_tests.sh generic-x64.tgz`.
#
# This script expects `pm`, `device-finder`, and `fuchsia_ctl` to all be in the
# same directory as the script.
#
# This script also expects a private key available at:
# "/etc/botanist/keys/id_rsa_infra".

set -Eex

script_dir=$(dirname "$(readlink -f "$0")")

# Bot key to pave and ssh the device.
pkey="/etc/botanist/keys/id_rsa_infra"

# This is longer than the test timeout as dumping the
# logs can sometimes take longer.
ssh_timeout_seconds=360

# The nodes are named blah-blah--four-word-fuchsia-id
device_name=${SWARMING_BOT_ID#*--}

if [ -z "$device_name" ]
then
  echo "No device found. Aborting."
  exit 1
else
  echo "Connecting to device $device_name"
fi

# Wrapper function to pass common args to fuchsia_ctl.
fuchsia_ctl() {
  $script_dir/fuchsia_ctl -d $device_name \
      --device-finder-path $script_dir/device-finder "$@"
}

reboot() {
  echo "$(date) START:DEVICE_LOGS ------------------------------------------"
  fuchsia_ctl ssh \
      --timeout-seconds $ssh_timeout_seconds \
      --identity-file $pkey \
      -c "log_listener --dump_logs yes --file /tmp/log.txt"
  # As we are not using recipes we don't have a way to know the location
  # to upload the log to isolated. We are saving the log to a file to avoid dart
  # hanging when running the process and then just using printing the content to
  # the console.
  fuchsia_ctl ssh \
       --timeout-seconds $ssh_timeout_seconds \
       --identity-file $pkey \
       -c "cat /tmp/log.txt"
  echo "$(date) END:DEVICE_LOGS ------------------------------------------"
  echo "$(date) START:REBOOT ------------------------------------------"
  # note: this will set an exit code of 255, which we can ignore.
  fuchsia_ctl ssh \
      --identity-file $pkey \
      -c "dm reboot-recovery" || true
  echo "$(date) END:REBOOT --------------------------------------------"
}

trap reboot EXIT

echo "$(date) START:PAVING ------------------------------------------"
ssh-keygen -y -f $pkey > key.pub
fuchsia_ctl pave -i $1 --public-key "key.pub"
echo "$(date) END:PAVING --------------------------------------------"


echo "$(date) START:PUSH_PACKAGES -------------------------------"
fuchsia_ctl push-packages \
    --identity-file $pkey \
    --repoArchive generic-x64.tar.gz \
    -p tiles -p tiles_ctl
echo "$(date) END:PUSH_PACKAGES ---------------------------------"

# set fuchsia ssh config
cat > $script_dir/fuchsia_ssh_config << EOF
Host *
  CheckHostIP no
  StrictHostKeyChecking no
  ForwardAgent no
  ForwardX11 no
  GSSAPIDelegateCredentials no
  UserKnownHostsFile /dev/null
  User fuchsia
  IdentitiesOnly yes
  IdentityFile $pkey
  ControlPersist yes
  ControlMaster auto
  ControlPath /tmp/fuchsia--%r@%h:%p
  ConnectTimeout 10
  ServerAliveInterval 1
  ServerAliveCountMax 10
  LogLevel ERROR
EOF

export FUCHSIA_SSH_CONFIG=$script_dir/fuchsia_ssh_config

# Run the driver test
echo "$(date) START:DRIVER_TEST -------------------------------------"
flutter_dir=$script_dir/flutter
flutter_bin=$flutter_dir/bin/flutter

# remove all out dated .packages references
find $flutter_dir -name ".packages" | xargs rm
cd $flutter_dir/dev/benchmarks/test_apps/stocks/
$flutter_bin pub get
$flutter_bin drive -v -d $device_name --target=test_driver/stock_view.dart
echo "$(date) END:DRIVER_TEST ---------------------------------------"
