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


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/klog"
)

declare fx symbolizer loglistener 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)"
  loglistener="$(btf::make_installed_hosttools_mock loglistener)"
  symbol_index="$(btf::make_hosttools_mock symbol-index)"
}

TEST_klog_local() {
  BT_EXPECT ${fx} klog --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_klog_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} klog --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 "$@"
