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


BT_FILE_DEPS=(
  "scripts/fx"
  "tools/devshell/contrib/ffx"
  "tools/devshell/contrib/lib/symbol-index.sh"
  "tools/devshell/lib/fx-cmd-locator.sh"
  "tools/devshell/lib/fx-optional-features.sh"
  "tools/devshell/lib/updates.sh"
  "tools/devshell/lib/vars.sh"
  "tools/devshell/lib/platform.sh"
  "tools/devshell/symbolize"
  "tools/devshell/log"
)

BT_MOCKED_TOOLS=(
  "tools/devshell/wait"
  "tools/devshell/shell"
  "tools/devshell/ssh"
)

declare fx symbolize symbol_index

BT_SET_UP() {
  source "${BT_TEMP_DIR}/tools/devshell/tests/lib/fuchsia-mock.sh"
  fx="$(btf::setup_fx)"
  symbolizer="$(btf::make_hosttools_mock symbolizer)"
  symbol_index="$(btf::make_hosttools_mock symbol-index)"
  ffx="$(btf::make_hosttools_mock ffx)"
}

TEST_log_raw() {
  BT_EXPECT ${fx} log --raw
  BT_EXPECT_FILE_DOES_NOT_EXIST "${symbolizer}.mock_state" \
    "symbolizer should not have been called when using fx log --raw"
}

TEST_log_local() {
  BT_EXPECT ${fx} log
  source "${symbolizer}.mock_state"
  local symbol_args="$(count_symbol_server_args)"
  BT_EXPECT_EQ "${symbol_args}" "0" "symbolizer should not get any -symbol-server arguments: ${symbol_args}"
}

TEST_log_remote() {
  mkdir -p "${BT_TEMP_DIR}/.home/.fuchsia/debug"
  touch "${BT_TEMP_DIR}/.home/.fuchsia/debug/googleapi_auth"
  BT_EXPECT HOME="${BT_TEMP_DIR}/.home" ${fx} log -r
  source "${symbolizer}.mock_state"
  local symbol_args="$(count_symbol_server_args)"
  BT_EXPECT_EQ $((symbol_args>0)) "1" "symbolizer should get at least one --symbol-server argument: ${symbol_args}"
}

count_symbol_server_args() {
  local symbol_server_args=0
  for i in "${!BT_MOCK_ARGS[@]}"; do
    if [[ "${BT_MOCK_ARGS[$i]}" == "--symbol-server" ]]; then
      ((symbol_server_args++))
    fi
  done
  echo ${symbol_server_args}
}

BT_RUN_TESTS "$@"
