#!/bin/bash
# Copyright 2019 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 expected behavior of 'fx cp'

BT_FILE_DEPS=(
  "scripts/fx"
  "tools/devshell/lib/fx-cmd-locator.sh"
  "tools/devshell/lib/fx-optional-features.sh"
  "tools/devshell/lib/vars.sh"
  "tools/devshell/lib/platform.sh"
  "tools/devshell/lib/generate-ssh-config.sh"
  "tools/devshell/cp"
)

BT_MOCKED_TOOLS=(
  "tools/devshell/sftp"
)

declare fx ffx sftp

init_fake_ffx() {
  echo > "${ffx}_mock_errors"
  cat >"${ffx}.mock_side_effects" <<INPUT
if [[ \${@: -1} == "get" || "\$*" == *"target list --format addresses"* ]]; then
  if [[ -n "\$FUCHSIA_DEVICE_ADDR" ]]; then
    echo "\$FUCHSIA_DEVICE_ADDR"
  elif [[ -n "\$FUCHSIA_NODENAME" ]]; then
    echo "\$FUCHSIA_NODENAME"
  else
    echo "No default target." >&2
    echo "If exactly one target is connected, ffx will use that." >&2
  fi
else
  echo "Disallowed command: \$*" >> "${ffx}_mock_errors"
fi
INPUT
}

BT_SET_UP() {
  source "${BT_TEMP_DIR}/tools/devshell/tests/lib/fuchsia-mock.sh"
  fx="$(btf::setup_fx)"
  sftp="${BT_TEMP_DIR}/tools/devshell/sftp"
  ffx="$(btf::make_installed_hosttools_mock ffx)"
  init_fake_ffx
  btf::make_mock "${BT_TEMP_DIR}/tools/devshell/host-tool"
  cat > "${BT_TEMP_DIR}/tools/devshell/host-tool.mock_side_effects" <<EOF
    if [[ "\$2" == "ffx" ]]; then
      shift
      "${ffx}" "\$@"
    fi
EOF
}

# ensure that "fx -t ipv4:port cp" calls sftp with expected address and port number
TEST_cp_ipv4_port() {
  BT_EXPECT ${fx} -t "127.0.0.1:8022" cp --to-host /tmp/file_in_fuchsia_target /tmp/file_in_host
  BT_EXPECT btf::does-mock-args-contain "${sftp}.mock_state" "-P" "8022"
  BT_EXPECT btf::does-mock-args-contain "${sftp}.mock_state" "[127.0.0.1]"
  BT_EXPECT_FILE_CONTAINS "${ffx}_mock_errors" ""
}

# ensure that "fx -t [ipv6]:port cp" calls sftp with expected address and port number
TEST_cp_ipv6_port() {
  BT_EXPECT ${fx} -t "[fe80::7:8%eth0]:222" cp --to-host /tmp/file_in_fuchsia_target /tmp/file_in_host
  BT_EXPECT btf::does-mock-args-contain "${sftp}.mock_state" "-P" "222"
  BT_EXPECT btf::does-mock-args-contain "${sftp}.mock_state" "[fe80::7:8%eth0]"
  BT_EXPECT_FILE_CONTAINS "${ffx}_mock_errors" ""
}

# ensure that "fx -t addr cp" calls sftp with expected address and no port number
TEST_cp_addr() {
  BT_EXPECT ${fx} -t "127.0.0.1" cp --to-host /tmp/file_in_fuchsia_target /tmp/file_in_host
  BT_EXPECT btf::does-mock-args-contain "${sftp}.mock_state" "[127.0.0.1]"
  BT_EXPECT btf::does-mock-args-not-contain "${sftp}.mock_state" "-P"
  BT_EXPECT_FILE_CONTAINS "${ffx}_mock_errors" ""
}

BT_RUN_TESTS "$@"
