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