#!/bin/bash
# Copyright 2018 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.

### run Fuchsia on QEMU in background and runs SSH command after netstack runs

## Run Fuchsia on QEMU (using standard fx setup) in background and pings the
## target until netstack is up running. If successful, issues the given SSH
## command. Always kills QEMU before exiting. Redirects kernel logs to out/ and
## by default runs:
##
## `fx run -- -N -u "${FUCHSIA_DIR}"/scripts/start-dhcp-server.sh`
##
## These options can be overridden with the FX_NET_RUN_OPTIONS environment
## variable.
##
## usage: fx net-run [--target TARGET] SSH_COMMAND
##
##    --target      IP address to connect to on launching. Defaults to the
##                  value of the FX_NET_RUN_TARGET environment variable.
##
##    SSH_COMMAND   Any argument will be passed directly to "fx ssh".
##                  If not specified, it will open an interactive SSH session.

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

# make sure to terminate qemu and any other children when this script exits!
trap 'kill 0 &>/dev/null' INT EXIT TERM

klog="$FUCHSIA_DIR/out/qemu-klog"

# Defaults
# If --run is set, it will overwrite this value
run_options="${FX_NET_RUN_OPTIONS}"
if [[ -z "${run_options}" ]]; then
  # NOTE: this script could tell us about the hostname this qemu instance
  # is assigned using dnsmasq's leasefile, rather than using --target/envvars
  run_options="-N -u ${FUCHSIA_DIR}/scripts/start-dhcp-server.sh"
fi
target="${FX_NET_RUN_TARGET}"

# Flag parsing
while [[ "$1" =~ ^- ]]; do
  case "$1" in
    -h|--help)
      fx-command-help
      exit 0
      ;;
    --target)
      shift
      target="$1"
      ;;
    *)
      break
  esac
  shift
done

# Error check
if [[ -z "${target}" ]]; then
  echo -e "No target found. Use --target or export \$FX_NET_RUN_TARGET."
  exit 1
fi

# Run fx run in background. If successful, it will be sent to background.
echo "Running sudo now in case the DHCP server asks for it..."
sudo echo "sudo successful."

echo "Using \"${run_options}\" to boot Fuchsia."
echo
echo "To see live kernel logs, run \`tail -f $klog\`."
echo
fx-command-run "run" ${run_options} &> "$klog" &

ping_count=1
ping_max=120
ping_wait=1
max_wait=$((ping_wait * ping_max))

echo "Waiting for device (started at $(date +%X), timeout in ${max_wait}s)."
while ((ping_count <= ping_max)); do
  # check for network first, then for ssh-ability
  if ping -c1 -W1 "$target" &>/dev/null
    then
    if fx-command-run ssh "$target" echo &>/dev/null
    then
      break
    fi
  fi

  ping_count=$((ping_count + 1))
  sleep $ping_wait
done

echo "Running \`$*\`:"
echo
fx-command-run "ssh" "${target}" "$@"
