abseil-cpp/absl/profiling/internal/periodic_sampler_test.cc
Go to the documentation of this file.
1 // Copyright 2019 The Abseil Authors.
2 //
3 // Licensed under the Apache License, Version 2.0 (the "License");
4 // you may not use this file except in compliance with the License.
5 // You may obtain a copy of the License at
6 //
7 // https://www.apache.org/licenses/LICENSE-2.0
8 //
9 // Unless required by applicable law or agreed to in writing, software
10 // distributed under the License is distributed on an "AS IS" BASIS,
11 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 // See the License for the specific language governing permissions and
13 // limitations under the License.
14 
16 
17 #include <thread> // NOLINT(build/c++11)
18 
19 #include "gmock/gmock.h"
20 #include "gtest/gtest.h"
21 #include "absl/base/attributes.h"
22 #include "absl/base/macros.h"
23 
24 namespace absl {
26 namespace profiling_internal {
27 namespace {
28 
29 using testing::Eq;
30 using testing::Return;
32 
33 class MockPeriodicSampler : public PeriodicSamplerBase {
34  public:
35  virtual ~MockPeriodicSampler() = default;
36 
37  MOCK_METHOD(int, period, (), (const, noexcept));
38  MOCK_METHOD(int64_t, GetExponentialBiased, (int), (noexcept));
39 };
40 
41 TEST(PeriodicSamplerBaseTest, Sample) {
42  StrictMock<MockPeriodicSampler> sampler;
43 
44  EXPECT_CALL(sampler, period()).Times(3).WillRepeatedly(Return(16));
45  EXPECT_CALL(sampler, GetExponentialBiased(16))
46  .WillOnce(Return(2))
47  .WillOnce(Return(3))
48  .WillOnce(Return(4));
49 
50  EXPECT_FALSE(sampler.Sample());
51  EXPECT_TRUE(sampler.Sample());
52 
53  EXPECT_FALSE(sampler.Sample());
54  EXPECT_FALSE(sampler.Sample());
55  EXPECT_TRUE(sampler.Sample());
56 
57  EXPECT_FALSE(sampler.Sample());
58  EXPECT_FALSE(sampler.Sample());
59  EXPECT_FALSE(sampler.Sample());
60 }
61 
62 TEST(PeriodicSamplerBaseTest, ImmediatelySample) {
63  StrictMock<MockPeriodicSampler> sampler;
64 
65  EXPECT_CALL(sampler, period()).Times(2).WillRepeatedly(Return(16));
66  EXPECT_CALL(sampler, GetExponentialBiased(16))
67  .WillOnce(Return(1))
68  .WillOnce(Return(2))
69  .WillOnce(Return(3));
70 
71  EXPECT_TRUE(sampler.Sample());
72 
73  EXPECT_FALSE(sampler.Sample());
74  EXPECT_TRUE(sampler.Sample());
75 
76  EXPECT_FALSE(sampler.Sample());
77  EXPECT_FALSE(sampler.Sample());
78 }
79 
80 TEST(PeriodicSamplerBaseTest, Disabled) {
81  StrictMock<MockPeriodicSampler> sampler;
82 
83  EXPECT_CALL(sampler, period()).Times(3).WillRepeatedly(Return(0));
84 
85  EXPECT_FALSE(sampler.Sample());
86  EXPECT_FALSE(sampler.Sample());
87  EXPECT_FALSE(sampler.Sample());
88 }
89 
90 TEST(PeriodicSamplerBaseTest, AlwaysOn) {
91  StrictMock<MockPeriodicSampler> sampler;
92 
93  EXPECT_CALL(sampler, period()).Times(3).WillRepeatedly(Return(1));
94 
95  EXPECT_TRUE(sampler.Sample());
96  EXPECT_TRUE(sampler.Sample());
97  EXPECT_TRUE(sampler.Sample());
98 }
99 
100 TEST(PeriodicSamplerBaseTest, Disable) {
101  StrictMock<MockPeriodicSampler> sampler;
102 
103  EXPECT_CALL(sampler, period()).WillOnce(Return(16));
104  EXPECT_CALL(sampler, GetExponentialBiased(16)).WillOnce(Return(3));
105  EXPECT_FALSE(sampler.Sample());
106  EXPECT_FALSE(sampler.Sample());
107 
108  EXPECT_CALL(sampler, period()).Times(2).WillRepeatedly(Return(0));
109 
110  EXPECT_FALSE(sampler.Sample());
111  EXPECT_FALSE(sampler.Sample());
112 }
113 
114 TEST(PeriodicSamplerBaseTest, Enable) {
115  StrictMock<MockPeriodicSampler> sampler;
116 
117  EXPECT_CALL(sampler, period()).WillOnce(Return(0));
118  EXPECT_FALSE(sampler.Sample());
119 
120  EXPECT_CALL(sampler, period()).Times(2).WillRepeatedly(Return(16));
121  EXPECT_CALL(sampler, GetExponentialBiased(16))
122  .Times(2)
123  .WillRepeatedly(Return(3));
124 
125  EXPECT_FALSE(sampler.Sample());
126  EXPECT_FALSE(sampler.Sample());
127  EXPECT_TRUE(sampler.Sample());
128 
129  EXPECT_FALSE(sampler.Sample());
130  EXPECT_FALSE(sampler.Sample());
131 }
132 
133 TEST(PeriodicSamplerTest, ConstructConstInit) {
134  struct Tag {};
135  ABSL_CONST_INIT static PeriodicSampler<Tag> sampler;
136  (void)sampler;
137 }
138 
139 TEST(PeriodicSamplerTest, DefaultPeriod0) {
140  struct Tag {};
141  PeriodicSampler<Tag> sampler;
142  EXPECT_THAT(sampler.period(), Eq(0));
143 }
144 
145 TEST(PeriodicSamplerTest, DefaultPeriod) {
146  struct Tag {};
147  PeriodicSampler<Tag, 100> sampler;
148  EXPECT_THAT(sampler.period(), Eq(100));
149 }
150 
151 TEST(PeriodicSamplerTest, SetGlobalPeriod) {
152  struct Tag1 {};
153  struct Tag2 {};
154  PeriodicSampler<Tag1, 25> sampler1;
155  PeriodicSampler<Tag2, 50> sampler2;
156 
157  EXPECT_THAT(sampler1.period(), Eq(25));
158  EXPECT_THAT(sampler2.period(), Eq(50));
159 
160  std::thread thread([] {
161  PeriodicSampler<Tag1, 25> sampler1;
162  PeriodicSampler<Tag2, 50> sampler2;
163  EXPECT_THAT(sampler1.period(), Eq(25));
164  EXPECT_THAT(sampler2.period(), Eq(50));
165  sampler1.SetGlobalPeriod(10);
166  sampler2.SetGlobalPeriod(20);
167  });
168  thread.join();
169 
170  EXPECT_THAT(sampler1.period(), Eq(10));
171  EXPECT_THAT(sampler2.period(), Eq(20));
172 }
173 
174 } // namespace
175 } // namespace profiling_internal
177 } // namespace absl
EXPECT_FALSE
#define EXPECT_FALSE(condition)
Definition: bloaty/third_party/googletest/googletest/include/gtest/gtest.h:1970
testing::StrictMock
Definition: bloaty/third_party/googletest/googlemock/include/gmock/gmock-nice-strict.h:148
ABSL_CONST_INIT
#define ABSL_CONST_INIT
Definition: abseil-cpp/absl/base/attributes.h:716
EXPECT_THAT
#define EXPECT_THAT(value, matcher)
testing::Return
internal::ReturnAction< R > Return(R value)
Definition: bloaty/third_party/googletest/googlemock/include/gmock/gmock-actions.h:1004
absl::TEST
TEST(NotificationTest, SanityTest)
Definition: abseil-cpp/absl/synchronization/notification_test.cc:126
ABSL_NAMESPACE_END
#define ABSL_NAMESPACE_END
Definition: third_party/abseil-cpp/absl/base/config.h:171
ABSL_NAMESPACE_BEGIN
#define ABSL_NAMESPACE_BEGIN
Definition: third_party/abseil-cpp/absl/base/config.h:170
int64_t
signed __int64 int64_t
Definition: stdint-msvc2008.h:89
testing::Eq
internal::EqMatcher< T > Eq(T x)
Definition: cares/cares/test/gmock-1.8.0/gmock/gmock.h:8561
opencensus.proto.stats.v1.stats_pb2.Tag
Tag
Definition: stats_pb2.py:431
periodic_sampler.h
EXPECT_CALL
#define EXPECT_CALL(obj, call)
absl::container_internal::Sample
HashtablezInfoHandle Sample(size_t inline_element_size ABSL_ATTRIBUTE_UNUSED)
Definition: abseil-cpp/absl/container/internal/hashtablez_sampler.h:251
MOCK_METHOD
#define MOCK_METHOD(...)
Definition: bloaty/third_party/googletest/googlemock/include/gmock/gmock-function-mocker.h:42
EXPECT_TRUE
#define EXPECT_TRUE(condition)
Definition: bloaty/third_party/googletest/googletest/include/gtest/gtest.h:1967
absl
Definition: abseil-cpp/absl/algorithm/algorithm.h:31
thread
static uv_thread_t thread
Definition: test-async-null-cb.c:29


grpc
Author(s):
autogenerated on Fri May 16 2025 02:59:42