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

# Unit tests for //tools/devshell/lib/metrics.sh
#
# Usage: metrics-tests

set -o errexit
source "$(cd "$(dirname "${BASH_SOURCE[0]}")"/../../tools/devshell/lib >/dev/null 2>&1 && pwd)"/vars.sh || exit $?

set -o nounset
# Read in the test framework and the library to test
source "$(cd "$(dirname "${BASH_SOURCE[0]}")"/lib >/dev/null 2>&1 && pwd)"/common.sh || exit $?
source "$(cd "$(dirname "${BASH_SOURCE[0]}")"/../../tools/devshell/lib >/dev/null 2>&1 && pwd)"/metrics.sh || exit $?

function test::run_command_with_metrics_disabled {
  _config_file="$(mktemp)"
  _debug_file="$(mktemp)"
  _enable_testing "${_debug_file}" 0 "${_config_file}"
  metrics-write-config 0 "TEST"
  metrics-read-config
  track-command-execution "shell" "ls /"

  # debug file is expected to be empty because debug is disabled
  if [[ ! -s "$_debug_file" ]]; then
    return 0
  else
    return 1
  fi
}

function test::run_command_with_metrics_enabled {
  _config_file="$(mktemp)"
  _debug_file="$(mktemp)"
  _enable_testing "${_debug_file}" 0 "${_config_file}"
  metrics-write-config 1 "TEST"
  metrics-read-config
  track-command-execution "shell" "ls /"

  # debug file is expected to be non-empty because debug is enabled
  if [[ -s "$_debug_file" ]]; then
    return 0
  else
    return 1
  fi
}

function test::enable_metrics {
  _config_file="$(mktemp)"
  _debug_file="$(mktemp)"
  _enable_testing "${_debug_file}" 0 "${_config_file}"
  local enable=1
  local test_uuid="__TEST__"
  metrics-write-config $enable "$test_uuid"
  metrics-read-config

  track-command-execution "shell" "ls /"

  # debug file is expected to contain the test UUID
  if [[ -s "$_debug_file" && $(grep "$test_uuid" "$_debug_file") ]]; then
    return 0
  else
    return 1
  fi
}

function test::fx_set_with_packages {
  _config_file="$(mktemp)"
  _debug_file="$(mktemp)"
  _enable_testing "${_debug_file}" 0 "${_config_file}"
  local enable=1
  local test_uuid="__TEST__"
  metrics-write-config $enable "$test_uuid"
  metrics-read-config

  foo="foo"
  bar="bar"
  baz="baz"
  # exercise --with and --with-base flags, as well as comma-separated package labels
  track-command-execution "set" "core.x64" \
    "--with-base" "$foo" "--with" "$bar,$baz"

  # debug file should not be empty
  if [[ ! -s "$_debug_file" ]]; then
    return 1
  fi

  expected=(
    # debug file should have a line for the set subcommand
    "t=event ec=fx ea=set el=core.x64 --with-base $foo --with $bar,$baz" \
    # debug file should have a separate line for each package label
    "t=event ec=fx-with-base ea=$foo el=core.x64" \
    "t=event ec=fx-with ea=$bar el=core.x64" \
    "t=event ec=fx-with ea=$baz el=core.x64" \
    )
  for i in "${expected[@]}"; do
    if [[ ! $(grep "$i" "$_debug_file") ]]; then
      return 1
    fi
  done
  return 0
}

function test::ok_exit_status {
  _config_file="$(mktemp)"
  _debug_file="$(mktemp)"
  _enable_testing "${_debug_file}" 0 "${_config_file}"
  local enable=1
  local test_uuid="__TEST__"
  metrics-write-config $enable "$test_uuid"
  metrics-read-config

  # exercise track-command-finished
  track-command-finished "1234" "0" "set"
  track-command-finished "1234" "128" "build"

  # debug file should not be empty
  if [[ ! -s "$_debug_file" ]]; then
    return 1
  fi

  debug_result="202"
  expected=(
    # first command (set) ended succesfully, so it generated a timing event
    "t=timing utc=fx utv=set utt=1234 utl= RESULT=${debug_result}" \
    # the second command (build) failed with exit code 128
    "t=event ec=fx_exception ea=build el= cd1=128 RESULT=${debug_result}" \
    )
  local c=0
  for expected_line in "${expected[@]}"; do
    c=$(( c+1 ))
    local actual="$(sed "${c}q;d" "${_debug_file}")"
    if [[ ! ${actual} = *${expected_line} ]]; then
      echo "TEST FAILURE: '${actual}' does not end with '${expected_line}'"
      return 1
    fi
  done
  return 0
}

test_main "$@"

