#!/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


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/set-device"
  "tools/devshell/shell"
)

BT_MOCKED_TOOLS=(
  "tools/ssh-keys/gen-ssh-keys.sh"
  "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 -d ipv4:port shell" calls ssh with expected address and port number
TEST_ssh_ipv4_port() {
  BT_EXPECT ${fx} -d "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 -d [ipv6]:port shell" calls ssh with expected address and port number
TEST_ssh_ipv6_port() {
  BT_EXPECT ${fx} -d "[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} -d "invalid_hostname" shell 2> /dev/null
  BT_EXPECT_FAIL ${fx} -d "invalid_hostname:22" shell 2> /dev/null
}

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

# ensure that "fx -d addr shell" calls ssh with expected address and no port number
TEST_ssh_addr() {
  BT_EXPECT ${fx} -d "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"
  echo "${ipv6}" > "${ffx}.mock_stdout"
  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"
}

# ensure that "fx -d :port shell" calls ssh with address returned by ffx and the proper port number
TEST_ssh_only_port() {
  local ipv6="fe80::4607:bff:fea0:44f%enx44070ba0044e"
  echo "${ipv6}" > "${ffx}.mock_stdout"
  BT_EXPECT ${fx} -d :8123 shell
  BT_EXPECT btf::does-mock-args-contain "${ssh}.mock_state" "-p" "8123" "${ipv6}"
}

# ensure that "fx set-device ipv6; fx -d :port shell" does not use the device
# specified in set-device, since "-d" takes precedence even when it only
# specifies a port. The expected behavior is if "-d :port" is specified without
# host name or address, "ffx" will be used to find a device, even if
# "fx set-device" was executed before.
TEST_ssh_only_port_and_setdevice() {
  local addr_from_setdevice="fe80::4607:bff:fea0:44f%enx44070ba0044e"
  local addr_from_ffx="127.0.0.1"
  echo "${addr_from_ffx}" > "${ffx}.mock_stdout"
  BT_EXPECT ${fx} set-device "[${addr_from_setdevice}]" >/dev/null
  BT_EXPECT ${fx} -d :8123 shell
  BT_EXPECT btf::does-mock-args-contain "${ssh}.mock_state" "-p" "8123" "${addr_from_ffx}"
}

BT_RUN_TESTS "$@"
