blob: d7bf27b1a28104a615e5a07c94f7f256552e3794 [file] [log] [blame]
// Copyright 2024 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/gwp_asan/client/sampling_helpers.h"
#include "base/test/metrics/histogram_tester.h"
#include "testing/gmock/include/gmock/gmock.h"
#include "testing/gtest/include/gtest/gtest.h"
namespace gwp_asan::internal {
namespace {
constexpr size_t kSamplingFrequency = 10;
constexpr size_t kAllocationsBeforeOom = 15;
TEST(SamplingHelpers, DontRecordUnknownProcesses) {
base::HistogramTester histogram_tester;
CreateOomCallback("Foo", "UNKNOWN", kSamplingFrequency)
.Run(kAllocationsBeforeOom);
EXPECT_THAT(
histogram_tester.GetTotalCountsForPrefix("Security.GwpAsan.AllocatorOom"),
testing::IsEmpty());
}
TEST(SamplingHelpers, BasicFunctionality) {
base::HistogramTester histogram_tester;
CreateOomCallback("Foo", "", kSamplingFrequency).Run(kAllocationsBeforeOom);
CreateOomCallback("Bar", "utility", kSamplingFrequency)
.Run(kAllocationsBeforeOom);
const base::HistogramTester::CountsMap expected_counts = {
{"Security.GwpAsan.AllocatorOom.Foo.Browser", 1},
{"Security.GwpAsan.AllocatorOom.Bar.Utility", 1},
};
EXPECT_THAT(
histogram_tester.GetTotalCountsForPrefix("Security.GwpAsan.AllocatorOom"),
testing::ContainerEq(expected_counts));
histogram_tester.ExpectUniqueSample(
"Security.GwpAsan.AllocatorOom.Foo.Browser",
kSamplingFrequency * kAllocationsBeforeOom, 1);
histogram_tester.ExpectUniqueSample(
"Security.GwpAsan.AllocatorOom.Bar.Utility",
kSamplingFrequency * kAllocationsBeforeOom, 1);
}
TEST(SamplingHelpers, RecordClampedMax) {
base::HistogramTester histogram_tester;
CreateOomCallback("Foo", "", kSamplingFrequency).Run(size_t{-1u});
EXPECT_THAT(
histogram_tester.GetTotalCountsForPrefix("Security.GwpAsan.AllocatorOom"),
testing::SizeIs(1));
// The sample is too big to log and saturates to the histogram max.
histogram_tester.ExpectUniqueSample(
"Security.GwpAsan.AllocatorOom.Foo.Browser", 1'000'000'000u - 1, 1);
}
TEST(SamplingHelpers, RecordNonActivated) {
base::HistogramTester histogram_tester;
ReportGwpAsanActivated("Foo", "", false);
EXPECT_THAT(
histogram_tester.GetTotalCountsForPrefix("Security.GwpAsan.Activated"),
testing::SizeIs(1));
histogram_tester.ExpectUniqueSample("Security.GwpAsan.Activated.Foo.Browser",
false, 1);
}
TEST(SamplingHelpers, RecordActivated) {
base::HistogramTester histogram_tester;
ReportGwpAsanActivated("Foo", "", true);
EXPECT_THAT(
histogram_tester.GetTotalCountsForPrefix("Security.GwpAsan.Activated"),
testing::SizeIs(1));
histogram_tester.ExpectUniqueSample("Security.GwpAsan.Activated.Foo.Browser",
true, 1);
}
} // namespace
} // namespace gwp_asan::internal