blob: 699be4c346dbcf46090edae3f494a36e1b2c93ee [file] [log] [blame]
// Copyright 2022 The Chromium 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 "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