#!/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/lib/symbol-index.sh"
  "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/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)"
}

TEST_log_raw() {
  BT_EXPECT ${fx} log --experimental --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 --experimental
  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 --experimental -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 "$@"
