// 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
