1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102
|
// Copyright 2022 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "components/segmentation_platform/internal/signals/ukm_config.h"
#include "testing/gmock/include/gmock/gmock.h"
#include "testing/gtest/include/gtest/gtest.h"
namespace segmentation_platform {
namespace {
using ::testing::IsEmpty;
UkmMetricHash TestMetric(uint64_t val) {
return UkmMetricHash::FromUnsafeValue(val);
}
} // namespace
TEST(UkmConfigTest, AddEvents) {
auto generator = UkmEventHash::Generator();
const UkmEventHash kEvent1 = generator.GenerateNextId();
const UkmEventHash kEvent2 = generator.GenerateNextId();
const UkmEventHash kEvent3 = generator.GenerateNextId();
UkmConfig config;
EXPECT_EQ(config.metrics_for_event_for_testing(),
UkmConfig::EventsToMetricsMap());
EXPECT_EQ(config.GetObservedMetrics(kEvent1), nullptr);
EXPECT_EQ(config.GetRawObservedEvents(), base::flat_set<uint64_t>());
config.AddEvent(kEvent1, {TestMetric(100), TestMetric(101), TestMetric(102)});
EXPECT_EQ(
config.metrics_for_event_for_testing(),
UkmConfig::EventsToMetricsMap(
{{kEvent1, {TestMetric(100), TestMetric(101), TestMetric(102)}}}));
EXPECT_EQ(*config.GetObservedMetrics(kEvent1),
base::flat_set<UkmMetricHash>(
{TestMetric(100), TestMetric(101), TestMetric(102)}));
EXPECT_EQ(config.GetObservedMetrics(kEvent3), nullptr);
EXPECT_EQ(config.GetRawObservedEvents(),
base::flat_set<uint64_t>({kEvent1.GetUnsafeValue()}));
config.AddEvent(kEvent2, {TestMetric(100)});
EXPECT_EQ(config.metrics_for_event_for_testing(),
UkmConfig::EventsToMetricsMap(
{{kEvent1, {TestMetric(100), TestMetric(101), TestMetric(102)}},
{kEvent2, {TestMetric(100)}}}));
config.AddEvent(kEvent2, {TestMetric(100), TestMetric(102), TestMetric(103)});
EXPECT_EQ(*config.GetObservedMetrics(kEvent1),
base::flat_set<UkmMetricHash>(
{TestMetric(100), TestMetric(101), TestMetric(102)}));
EXPECT_EQ(*config.GetObservedMetrics(kEvent2),
base::flat_set<UkmMetricHash>(
{TestMetric(100), TestMetric(102), TestMetric(103)}));
EXPECT_EQ(config.GetRawObservedEvents(),
base::flat_set<uint64_t>(
{kEvent1.GetUnsafeValue(), kEvent2.GetUnsafeValue()}));
}
TEST(UkmConfigTest, MergeConfig) {
auto generator = UkmEventHash::Generator();
const UkmEventHash kEvent1 = generator.GenerateNextId();
const UkmEventHash kEvent2 = generator.GenerateNextId();
const UkmEventHash kEvent3 = generator.GenerateNextId();
UkmConfig config1;
config1.AddEvent(kEvent1,
{TestMetric(100), TestMetric(101), TestMetric(102)});
config1.AddEvent(kEvent2, {TestMetric(100)});
EXPECT_EQ(config1.metrics_for_event_for_testing(),
UkmConfig::EventsToMetricsMap(
{{kEvent1, {TestMetric(100), TestMetric(101), TestMetric(102)}},
{kEvent2, {TestMetric(100)}}}));
UkmConfig config2;
config2.AddEvent(kEvent1, {TestMetric(102)});
config2.AddEvent(kEvent2, {TestMetric(100), TestMetric(102)});
config2.AddEvent(kEvent3, {TestMetric(120), TestMetric(121)});
EXPECT_EQ(config2.metrics_for_event_for_testing(),
UkmConfig::EventsToMetricsMap(
{{kEvent1, {TestMetric(102)}},
{kEvent2, {TestMetric(100), TestMetric(102)}},
{kEvent3, {TestMetric(120), TestMetric(121)}}}));
EXPECT_EQ(config1.Merge(config2), UkmConfig::NEW_EVENT_ADDED);
EXPECT_EQ(config1.metrics_for_event_for_testing(),
UkmConfig::EventsToMetricsMap(
{{kEvent1, {TestMetric(100), TestMetric(101), TestMetric(102)}},
{kEvent2, {TestMetric(100), TestMetric(102)}},
{kEvent3, {TestMetric(120), TestMetric(121)}}}));
UkmConfig config3;
config2.AddEvent(kEvent1, {TestMetric(150), TestMetric(151)});
EXPECT_EQ(config1.Merge(config3), UkmConfig::NO_NEW_EVENT);
}
} // namespace segmentation_platform
|