#!/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 device-finder 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, "device-finder" 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 "$@"
