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

### Test fx remote scripts

BT_FILE_DEPS=(
  "scripts/fx"
  "tools/devshell/flash-remote"
  "tools/devshell/serve-remote"
  "tools/devshell/pave-remote"
  "tools/devshell/lib/fvm.sh"
  "tools/devshell/lib/fx-cmd-locator.sh"
  "tools/devshell/lib/fx-flash.sh"
  "tools/devshell/lib/fx-optional-features.sh"
  "tools/devshell/lib/fx-remote.sh"
  "tools/devshell/lib/image_build_vars.sh"
  "tools/devshell/lib/platform.sh"
  "tools/devshell/lib/vars.sh"
  "tools/devshell/lib/verify-default-keys.sh"
)

declare fx ssh_mock scp_mock local_gensshkeys_mock remote_gensshkeys_mock compare_remote_and_local_mock

BT_SET_UP() {
  source "${BT_TEMP_DIR}/tools/devshell/lib/vars.sh"
  source "${BT_TEMP_DIR}/tools/devshell/tests/lib/fuchsia-mock.sh"
  fx="$(btf::setup_fx)"
  ssh_mock=$(btf::make_mock_binary "ssh")
  btf::add_binary_to_path "$ssh_mock"

  scp_mock=$(btf::make_mock_binary "scp")
  btf::add_binary_to_path "$scp_mock"

  local_gensshkeys_mock="${BT_TEMP_DIR}/tools/ssh-keys/gen-ssh-keys.sh"
  remote_gensshkeys_mock="${BT_TEMP_DIR}/tools/ssh-keys/remote-gen-ssh-keys.sh"
  compare_remote_and_local_mock="${BT_TEMP_DIR}/tools/ssh-keys/compare_remote_and_local.sh"
  btf::make_mock "${local_gensshkeys_mock}"
  btf::make_mock "${remote_gensshkeys_mock}"
  btf::make_mock "${compare_remote_and_local_mock}"
  {
    echo "function run_remote_gen_ssh_keys { ${remote_gensshkeys_mock} --description \"\$@\"; }"
    echo "function run_remote_gen_ssh_keys_no_new_key { ${remote_gensshkeys_mock} --no-new-key; }"
    echo "function compare_remote_and_local { ${compare_remote_and_local_mock} \"\$@\"; }"
  } >> "${BT_TEMP_DIR}/tools/devshell/lib/verify-default-keys.sh"

  ffx="$(btf::make_installed_hosttools_mock ffx)"
  echo "127.0.0.1" > "${ffx}.mock_stdout"
}

# test if the host/dir info is correctly stored in the cache file
TEST_fx-remote-config-file() {
  local testhost=myhostname.my.server.com
  local testdir=~/myfuchsia/directory
  local out="${BT_TEMP_DIR}/output.log"

  BT_EXPECT ${fx} serve-remote "$testhost" "$testdir" >>${out} 2>&1
  BT_EXPECT_FILE_CONTAINS "${BT_TEMP_DIR}/.fx-remote-config" "${testhost}:${testdir}"
}

# test if the cache file is used when no argument is given
TEST_fx-remote-default-args() {
  local testhost=myhostname.my.server.com
  local testdir=~/myfuchsia/directory
  local out="${BT_TEMP_DIR}/output.log"

  echo "${testhost}:${testdir}" > "${BT_TEMP_DIR}/.fx-remote-config"
  BT_EXPECT ${fx} serve-remote >>${out} 2>&1
  btf::does-mock-args-contain "${ssh_mock}.mock_state.1" "$testhost"
}

# test if the given host is used even when there's a cache file, and that the
# cache file is updated with the given host
TEST_fx-remote-args-given() {
  local testhost=myhostname.my.server.com
  local testdir=~/myfuchsia/directory
  local anotherhost=myhostname.my.server.com
  local out="${BT_TEMP_DIR}/output.log"

  echo "${testhost}:${testdir}" > "${BT_TEMP_DIR}/.fx-remote-config"
  BT_EXPECT ${fx} serve-remote "$anotherhost" "${testdir}" >>${out} 2>&1
  BT_EXPECT_FILE_CONTAINS "${BT_TEMP_DIR}/.fx-remote-config" "${anotherhost}:${testdir}"
  btf::does-mock-args-contain "${ssh_mock}.mock_state.1" "$anotherhost"
}

# keep in sync with //tools/ssh-keys/gen-ssh-keys.sh
readonly _ERROR_NO_KEY=112
readonly _ERROR_MISMATCHED_KEYS=113
# // keep in sync with //tools/ssh-keys/gen-ssh-keys.sh

# test pave-remote if the given host is used even when there's a cache file,
# and that the cache file is updated with the given host
TEST_fx-pave-remote-args-given() {
  local testhost=myhostname.my.server.com
  local testdir=~/myfuchsia/directory
  local anotherhost=myhostname.my.server.com
  local out="${BT_TEMP_DIR}/output.log"

  {
    echo "function fetch_remote_build_artifacts { :; }"
    echo "function fetch_or_build_tool { :; }"
  } >> "${BT_TEMP_DIR}/tools/devshell/lib/fx-remote.sh"

  echo "${testhost}:${testdir}" > "${BT_TEMP_DIR}/.fx-remote-config"
  BT_EXPECT ${fx} pave-remote --no-pave "$anotherhost" "${testdir}" >>${out} 2>&1
  BT_EXPECT_FILE_CONTAINS "${BT_TEMP_DIR}/.fx-remote-config" "${anotherhost}:${testdir}"
  btf::does-mock-args-contain "${ssh_mock}.mock_state" "$anotherhost"
}

# test flash-remote if the fetched manifest from fx-remote is properly
# forwarded to the fx-flash layer
TEST_fx-flash-remote-manifest() {
  local testhost=myhostname.my.server.com
  local testdir=~/myfuchsia/directory
  local out="${BT_TEMP_DIR}/output.log"
  local artifact_dir="${BT_TEMP_DIR}/out/fetched"
  local args_file="${BT_TEMP_DIR}/flash.args"

  {
    echo "function find_remote_build_artifact { echo flash.json; }"
    echo "function fetch_remote_build_artifacts { :; }"
    echo "function fetch_remote_artifacts { :; }"
    echo "function fetch_or_build_tool { :; }"
  } >> "${BT_TEMP_DIR}/tools/devshell/lib/fx-remote.sh"

  {
    echo "function fx-flash { echo "\$3" > ${args_file} ; }"
  } >> "${BT_TEMP_DIR}/tools/devshell/lib/fx-flash.sh"

  mkdir -p "${artifact_dir}"
  BT_EXPECT ${fx} flash-remote "$testhost" "${testdir}" >>${out} 2>&1
  BT_EXPECT_FILE_CONTAINS "$args_file" "${artifact_dir}/flash.json"
}

BT_RUN_TESTS "$@"
