#!/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)"
  symbolize="$(btf::make_hosttools_mock symbolize)"
  symbol_index="$(btf::make_hosttools_mock symbol-index)"
}

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

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

TEST_log_remote() {
  BT_EXPECT ${fx} log --legacy -r
  source "${symbolize}.mock_state"
  local symbol_args="$(count_symbol_server_args)"
  BT_EXPECT_EQ $((symbol_args>0)) "1" "symbolize should get at least one -symbol-server argument: ${symbol_args}"
}

TEST_log_remote_long() {
  BT_EXPECT ${fx} log --legacy --remote-symbols
  source "${symbolize}.mock_state"
  local symbol_args="$(count_symbol_server_args)"
  BT_EXPECT_EQ $((symbol_args>0)) "1" "symbolize 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 "$@"
