#!/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 usage of ssh in fx scripts

# Source platform.sh so that we can point to jq and include it as a runtime dependency.
source "$(cd "$(dirname "${BASH_SOURCE[0]}")" >/dev/null 2>&1 && pwd)/../../lib/platform.sh" || exit $?

BT_FILE_DEPS=(
  "prebuilt/third_party/jq/${HOST_PLATFORM}/bin/jq"
  "scripts/fx"
  "tools/devshell/jq.fx"
  "tools/devshell/lib/fx-cmd-locator.sh"
  "tools/devshell/lib/fx-optional-features.sh"
  "tools/devshell/lib/generate-ssh-config.sh"
  "tools/devshell/lib/vars.sh"
  "tools/devshell/lib/platform.sh"
  "tools/devshell/set-device"
  "tools/devshell/shell"
)

BT_MOCKED_TOOLS=(
  "tools/devshell/ssh"
)

declare fx ffx ssh

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

# ensure that "fx -t ipv4:port shell" calls ssh with expected address and port number
TEST_ssh_ipv4_port() {
  addr="127.0.0.1:8022"
  cat >> "${ffx}.mock_side_effects" << EOF
  if [ "\$3" == "target" ] || [ "\$1" == "target" ]; then
     echo \$FUCHSIA_NODENAME
  else
     echo "/path/to/ssh.priv"
  fi
EOF
  BT_EXPECT ${fx} -t "127.0.0.1:8022" shell
  BT_EXPECT btf::does-mock-args-contain "${ssh}.mock_state" "-p" "8022" "127.0.0.1"
}

# ensure that "fx -t [ipv6]:port shell" calls ssh with expected address and port number
TEST_ssh_ipv6_port() {
    addr="[fe80::7:8%eth0]:222"
    cat >> "${ffx}.mock_side_effects" << EOF
  if [ "\$3" == "target" ] || [ "\$1" == "target" ]; then
     echo \$FUCHSIA_NODENAME
  else
     echo "/path/to/ssh.priv"
  fi
EOF
  BT_EXPECT ${fx} -t "[fe80::7:8%eth0]:222" shell
  BT_EXPECT btf::does-mock-args-contain "${ssh}.mock_state" "-p" "222" "fe80::7:8%eth0"
}

# ensure that fx shell fails because hostname has invalid character (_)
TEST_ssh_invalid_hostname_port() {
  BT_EXPECT_FAIL ${fx} -t "invalid_hostname" shell 2> /dev/null
  BT_EXPECT_FAIL ${fx} -t "invalid_hostname:22" shell 2> /dev/null
}

# ensure that "fx -t ipv6:port shell" fails because of invalid formats
TEST_ssh_invalid_ipv6_port() {
  # no brackets
  BT_EXPECT_FAIL ${fx} -t "fe80::7:8%eth0:222" shell 2> /dev/null
  # more than 7 colons
  BT_EXPECT_FAIL ${fx} -t "[2001:db8:aaaa:bbbb:cccc:dddd:0:1:0]" shell 2> /dev/null
  BT_EXPECT_FAIL ${fx} -t "[2001:db8:aaaa:bbbb:cccc:dddd:0:1:44f%enx44070ba0044e]" shell 2> /dev/null
}

# ensure that "fx -t addr shell" calls ssh with expected address and no port number
TEST_ssh_addr() {
  addr="127.0.0.1"
    cat >> "${ffx}.mock_side_effects" << EOF
  if [ "\$3" == "target" ] || [ "\$1" == "target" ]; then
     echo \$FUCHSIA_NODENAME
  else
     echo "/path/to/ssh.priv"
  fi
EOF
  BT_EXPECT ${fx} -t "127.0.0.1" shell
  BT_EXPECT btf::does-mock-args-contain "${ssh}.mock_state" "127.0.0.1"
  BT_EXPECT btf::does-mock-args-not-contain "${ssh}.mock_state" "-p"
}

# ensure that "fx shell" calls ssh with address returned by ffx and the proper port number
TEST_ssh_resolve_addr_port() {
  local ipv6="fe80::4607:bff:fea0:44f%enx44070ba0044e"

  cat >> "${ffx}.mock_side_effects" << EOF

  if [ "\$*" == *"target list --format addresses"* ]; then
     echo $ipv6
  elif [ "\$4" == "default" ]; then
     echo $ipv6
  else
     echo "/path/to/ssh.priv"
  fi

EOF

  BT_EXPECT ${fx} shell
  BT_EXPECT btf::does-mock-args-contain "${ssh}.mock_state" "${ipv6}"
  BT_EXPECT btf::does-mock-args-not-contain "${ssh}.mock_state" "-p"
}

BT_RUN_TESTS "$@"
