86 lines
3.3 KiB
C++
86 lines
3.3 KiB
C++
|
|
// Copyright 2021 The Chromium Authors
|
||
|
|
// Use of this source code is governed by a BSD-style license that can be
|
||
|
|
// found in the LICENSE file.
|
||
|
|
|
||
|
|
#include <string>
|
||
|
|
|
||
|
|
#include "base/values.h"
|
||
|
|
#include "components/metrics/structured/event.h"
|
||
|
|
#include "components/metrics/structured/mojom/event.mojom.h"
|
||
|
|
#include "components/metrics/structured/mojom/event_mojom_traits.h"
|
||
|
|
#include "mojo/public/cpp/test_support/test_utils.h"
|
||
|
|
#include "testing/gmock/include/gmock/gmock.h"
|
||
|
|
#include "testing/gtest/include/gtest/gtest.h"
|
||
|
|
|
||
|
|
using testing::AllOf;
|
||
|
|
using testing::ContainerEq;
|
||
|
|
using testing::Eq;
|
||
|
|
using testing::Property;
|
||
|
|
|
||
|
|
namespace metrics::structured {
|
||
|
|
|
||
|
|
namespace {
|
||
|
|
void ExpectEventsEqual(const Event& expected, const Event& actual) {
|
||
|
|
EXPECT_THAT(expected,
|
||
|
|
AllOf(Property(&Event::project_name, Eq(actual.project_name())),
|
||
|
|
Property(&Event::event_name, Eq(actual.event_name())),
|
||
|
|
Property(&Event::IsEventSequenceType,
|
||
|
|
Eq(actual.IsEventSequenceType()))));
|
||
|
|
|
||
|
|
for (const auto& expected_pair : expected.metric_values()) {
|
||
|
|
auto actual_pair = actual.metric_values().find(expected_pair.first);
|
||
|
|
ASSERT_FALSE(actual_pair == actual.metric_values().end());
|
||
|
|
EXPECT_EQ(expected_pair.second, actual_pair->second);
|
||
|
|
}
|
||
|
|
|
||
|
|
// Check uptimes only if event is part of a sequence.
|
||
|
|
if (expected.IsEventSequenceType() && actual.IsEventSequenceType()) {
|
||
|
|
EXPECT_EQ(expected.recorded_time_since_boot(),
|
||
|
|
actual.recorded_time_since_boot());
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
} // namespace
|
||
|
|
|
||
|
|
TEST(EventStructTraitsTest, ValidEvent) {
|
||
|
|
const std::string kProjectName = "project_name";
|
||
|
|
const std::string kEventName = "event_name";
|
||
|
|
|
||
|
|
Event test_event(kProjectName, kEventName);
|
||
|
|
|
||
|
|
ASSERT_TRUE(test_event.AddMetric("hmac", Event::MetricType::kHmac,
|
||
|
|
base::Value("1234")));
|
||
|
|
ASSERT_TRUE(test_event.AddMetric("long", Event::MetricType::kLong,
|
||
|
|
base::Value("123456789")));
|
||
|
|
ASSERT_TRUE(
|
||
|
|
test_event.AddMetric("int", Event::MetricType::kInt, base::Value(123)));
|
||
|
|
ASSERT_TRUE(test_event.AddMetric("double", Event::MetricType::kDouble,
|
||
|
|
base::Value(123.4)));
|
||
|
|
ASSERT_TRUE(test_event.AddMetric("string", Event::MetricType::kRawString,
|
||
|
|
base::Value("string")));
|
||
|
|
ASSERT_TRUE(test_event.AddMetric("boolean", Event::MetricType::kBoolean,
|
||
|
|
base::Value(false)));
|
||
|
|
|
||
|
|
// Doesn't matter what the values of the string are.
|
||
|
|
Event output("", "");
|
||
|
|
ASSERT_TRUE(
|
||
|
|
mojo::test::SerializeAndDeserialize<mojom::Event>(test_event, output));
|
||
|
|
ExpectEventsEqual(test_event, output);
|
||
|
|
}
|
||
|
|
|
||
|
|
TEST(EventStructTraitsTest, EventWithUptime) {
|
||
|
|
Event sequence_event("project_name", "event_name", true);
|
||
|
|
sequence_event.SetRecordedTimeSinceBoot(base::Microseconds(500));
|
||
|
|
|
||
|
|
ASSERT_TRUE(sequence_event.AddMetric("double", Event::MetricType::kDouble,
|
||
|
|
base::Value(1.0)));
|
||
|
|
|
||
|
|
// Doesn't matter what the values of the string are.
|
||
|
|
Event test_output("", "");
|
||
|
|
ASSERT_TRUE(mojo::test::SerializeAndDeserialize<mojom::Event>(sequence_event,
|
||
|
|
test_output));
|
||
|
|
ExpectEventsEqual(sequence_event, test_output);
|
||
|
|
}
|
||
|
|
|
||
|
|
} // namespace metrics::structured
|