// Copyright 2017 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.

#include "garnet/lib/measure/duration.h"

#include <string>
#include <vector>

#include "garnet/lib/measure/test_events.h"
#include "gtest/gtest.h"

namespace tracing {
namespace measure {
namespace {

TEST(MeasureDurationTest, DurationBeginEnd) {
  std::vector<DurationSpec> specs = {
      DurationSpec({42u, {"event_foo", "category_bar"}})};

  MeasureDuration measure(std::move(specs));
  // Add a matching begin event.
  measure.Process(test::DurationBegin("event_foo", "category_bar", 10u));

  // Add a not-matching begin event that should be ignored.
  measure.Process(test::DurationBegin("something_else", "category_bar", 12u));

  // Add a not-matching end event that should be ignored.
  measure.Process(test::DurationEnd("something_else", "category_bar", 14u));

  // Add a matching end event.
  measure.Process(test::DurationEnd("event_foo", "category_bar", 16u));

  auto results = measure.results();
  EXPECT_EQ(1u, results.size());
  EXPECT_EQ(std::vector<uint64_t>({6u}), results[42u]);
}

TEST(MeasureDurationTest, DurationComplete) {
  std::vector<DurationSpec> specs = {
      DurationSpec({42u, {"event_foo", "category_bar"}})};

  MeasureDuration measure(std::move(specs));

  // Add nested complete events.
  measure.Process(
      test::DurationComplete("something_else", "category_bar", 12u, 14u));
  measure.Process(
      test::DurationComplete("event_foo", "category_bar", 10u, 16u));

  auto results = measure.results();
  EXPECT_EQ(1u, results.size());
  EXPECT_EQ(std::vector<uint64_t>({6u}), results[42u]);
}

TEST(MeasureDurationTest, DurationEmpty) {
  std::vector<DurationSpec> specs = {
      DurationSpec({42u, {"event_foo", "category_bar"}})};

  MeasureDuration measure(std::move(specs));
  auto results = measure.results();
  EXPECT_EQ(0u, results.size());
}

// Verifies that two measurements can target the same trace event.
TEST(MeasureDurationTest, DurationTwoMeasurements) {
  std::vector<DurationSpec> specs = {
      DurationSpec({42u, {"event_foo", "category_bar"}}),
      DurationSpec({43u, {"event_foo", "category_bar"}})};

  MeasureDuration measure(std::move(specs));
  measure.Process(test::DurationBegin("event_foo", "category_bar", 10u));
  measure.Process(test::DurationEnd("event_foo", "category_bar", 16u));

  auto results = measure.results();
  EXPECT_EQ(2u, results.size());
  EXPECT_EQ(std::vector<uint64_t>({6u}), results[42u]);
  EXPECT_EQ(std::vector<uint64_t>({6u}), results[43u]);
}

TEST(MeasureDurationTest, DurationNestedBeginEnd) {
  std::vector<DurationSpec> specs = {
      DurationSpec({42u, {"event_foo", "category_bar"}})};

  MeasureDuration measure(std::move(specs));
  // Add a matching begin event.
  measure.Process(test::DurationBegin("event_foo", "category_bar", 10u));

  // Add another matching begin event.
  measure.Process(test::DurationBegin("event_foo", "category_bar", 12u));

  // Add a matching end event.
  measure.Process(test::DurationEnd("event_foo", "category_bar", 14u));

  // Add a matching end event.
  measure.Process(test::DurationEnd("event_foo", "category_bar", 16u));

  auto results = measure.results();
  EXPECT_EQ(1u, results.size());
  EXPECT_EQ(std::vector<uint64_t>({2u, 6u}), results[42u]);
}

TEST(MeasureDurationTest, DurationNestedComplete) {
  std::vector<DurationSpec> specs = {
      DurationSpec({42u, {"event_foo", "category_bar"}})};

  MeasureDuration measure(std::move(specs));

  measure.Process(
      test::DurationComplete("event_foo", "category_bar", 12u, 14u));
  measure.Process(
      test::DurationComplete("event_foo", "category_bar", 10u, 16u));

  auto results = measure.results();
  EXPECT_EQ(1u, results.size());
  EXPECT_EQ(std::vector<uint64_t>({2u, 6u}), results[42u]);
}

TEST(MeasureDurationTest, Async) {
  std::vector<DurationSpec> specs = {
      DurationSpec({42u, {"event_foo", "category_bar"}})};

  MeasureDuration measure(std::move(specs));
  // Add a begin event of id 1u.
  measure.Process(test::AsyncBegin(1u, "event_foo", "category_bar", 10u));

  // Add a begin event of id 2u.
  measure.Process(test::AsyncBegin(2u, "event_foo", "category_bar", 12u));

  // Add an end event for id 1u.
  measure.Process(test::AsyncEnd(1u, "event_foo", "category_bar", 14u));

  // Add an end event for id 2u.
  measure.Process(test::AsyncEnd(2u, "event_foo", "category_bar", 16u));

  auto results = measure.results();
  EXPECT_EQ(1u, results.size());
  EXPECT_EQ(std::vector<uint64_t>({4u, 4u}), results[42u]);
}

TEST(MeasureDurationTest, Flow) {
  std::vector<DurationSpec> specs = {
      DurationSpec({42u, {"event_foo", "category_bar"}})};

  MeasureDuration measure(std::move(specs));
  // Add a begin event of id 1u.
  measure.Process(test::FlowBegin(1u, "event_foo", "category_bar", 10u));

  // Add a begin event of id 2u.
  measure.Process(test::FlowBegin(2u, "event_foo", "category_bar", 12u));

  // Add an end event for id 1u.
  measure.Process(test::FlowEnd(1u, "event_foo", "category_bar", 14u));

  // Add an end event for id 2u.
  measure.Process(test::FlowEnd(2u, "event_foo", "category_bar", 16u));

  auto results = measure.results();
  EXPECT_EQ(1u, results.size());
  EXPECT_EQ(std::vector<uint64_t>({4u, 4u}), results[42u]);
}

TEST(MeasureDurationTest, DurationAsyncTwoMeasurements) {
  std::vector<DurationSpec> specs = {
      DurationSpec({42u, {"event_foo", "category_bar"}}),
      DurationSpec({43u, {"event_foo", "category_bar"}})};

  MeasureDuration measure(std::move(specs));
  // Add a begin event of id 1u.
  measure.Process(test::AsyncBegin(1u, "event_foo", "category_bar", 10u));

  // Add an end event for id 1u.
  measure.Process(test::AsyncEnd(1u, "event_foo", "category_bar", 14u));

  auto results = measure.results();
  EXPECT_EQ(2u, results.size());
  EXPECT_EQ(std::vector<uint64_t>({4u}), results[42u]);
  EXPECT_EQ(std::vector<uint64_t>({4u}), results[43u]);
}

TEST(MeasureDurationTest, EventMatchingByNameAndCategory) {
  std::vector<DurationSpec> specs = {
      DurationSpec({40u, {"event_foo", "category_bar"}}),
      DurationSpec({41u, {"event_foo", "category_bazinga"}}),
      DurationSpec({42u, {"event_abc", "category_bazinga"}}),
      DurationSpec({43u, {"event_abc", "category_bar"}})};

  MeasureDuration measure(std::move(specs));
  measure.Process(test::DurationComplete("event_foo", "category_bar", 0u, 1u));
  measure.Process(
      test::DurationComplete("event_foo", "category_bazinga", 0u, 2u));
  measure.Process(
      test::DurationComplete("event_abc", "category_bazinga", 0u, 3u));
  measure.Process(test::DurationComplete("event_abc", "category_bar", 0u, 4u));

  auto results = measure.results();
  EXPECT_EQ(4u, results.size());
  EXPECT_EQ(std::vector<uint64_t>({1u}), results[40u]);
  EXPECT_EQ(std::vector<uint64_t>({2u}), results[41u]);
  EXPECT_EQ(std::vector<uint64_t>({3u}), results[42u]);
  EXPECT_EQ(std::vector<uint64_t>({4u}), results[43u]);
}

TEST(MeasureDurationTest, AsyncNested) {
  std::vector<DurationSpec> specs = {
      DurationSpec({42u, {"event_foo", "category_bar"}}),
      DurationSpec({43u, {"event_baz", "category_bar"}})};

  MeasureDuration measure(std::move(specs));
  // Add a begin event for event_foo of id 0u.
  measure.Process(test::AsyncBegin(0u, "event_foo", "category_bar", 10u));

  // Add a begin event for event_baz of id 0u.
  measure.Process(test::AsyncBegin(0u, "event_baz", "category_bar", 12u));

  // Add an end event for id 1u.
  measure.Process(test::AsyncEnd(0u, "event_foo", "category_bar", 14u));

  // Add an end event for id 2u.
  measure.Process(test::AsyncEnd(0u, "event_baz", "category_bar", 16u));

  auto results = measure.results();
  EXPECT_EQ(2u, results.size());
  EXPECT_EQ(std::vector<uint64_t>({4u}), results[42u]);
  EXPECT_EQ(std::vector<uint64_t>({4u}), results[43u]);
}

}  // namespace

}  // namespace measure
}  // namespace tracing
