xref: /aosp_15_r20/external/abseil-cpp/absl/log/vlog_is_on_test.cc (revision 9356374a3709195abf420251b3e825997ff56c0f)
1 // Copyright 2023 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 
15 #include "absl/log/vlog_is_on.h"
16 
17 #include "gmock/gmock.h"
18 #include "gtest/gtest.h"
19 #include "absl/base/log_severity.h"
20 #include "absl/flags/flag.h"
21 #include "absl/log/flags.h"
22 #include "absl/log/globals.h"
23 #include "absl/log/log.h"
24 #include "absl/log/scoped_mock_log.h"
25 #include "absl/types/optional.h"
26 
27 namespace {
28 
29 using ::testing::_;
30 
MaxLogVerbosity()31 absl::optional<int> MaxLogVerbosity() {
32 #ifdef ABSL_MAX_VLOG_VERBOSITY
33   return ABSL_MAX_VLOG_VERBOSITY;
34 #else
35   return absl::nullopt;
36 #endif
37 }
38 
MinLogLevel()39 absl::optional<int> MinLogLevel() {
40 #ifdef ABSL_MIN_LOG_LEVEL
41   return static_cast<int>(ABSL_MIN_LOG_LEVEL);
42 #else
43   return absl::nullopt;
44 #endif
45 }
46 
TEST(VLogIsOn,GlobalWorksWithoutMaxVerbosityAndMinLogLevel)47 TEST(VLogIsOn, GlobalWorksWithoutMaxVerbosityAndMinLogLevel) {
48   if (MaxLogVerbosity().has_value() || MinLogLevel().has_value()) {
49     GTEST_SKIP();
50   }
51 
52   absl::SetGlobalVLogLevel(3);
53   absl::ScopedMockLog log(absl::MockLogDefault::kDisallowUnexpected);
54 
55   EXPECT_CALL(log, Log(absl::LogSeverity::kInfo, _, "important"));
56 
57   log.StartCapturingLogs();
58   VLOG(3) << "important";
59   VLOG(4) << "spam";
60 }
61 
TEST(VLogIsOn,FileWorksWithoutMaxVerbosityAndMinLogLevel)62 TEST(VLogIsOn, FileWorksWithoutMaxVerbosityAndMinLogLevel) {
63   if (MaxLogVerbosity().has_value() || MinLogLevel().has_value()) {
64     GTEST_SKIP();
65   }
66 
67   absl::SetVLogLevel("vlog_is_on_test", 3);
68   absl::ScopedMockLog log(absl::MockLogDefault::kDisallowUnexpected);
69 
70   EXPECT_CALL(log, Log(absl::LogSeverity::kInfo, _, "important"));
71 
72   log.StartCapturingLogs();
73   VLOG(3) << "important";
74   VLOG(4) << "spam";
75 }
76 
TEST(VLogIsOn,PatternWorksWithoutMaxVerbosityAndMinLogLevel)77 TEST(VLogIsOn, PatternWorksWithoutMaxVerbosityAndMinLogLevel) {
78   if (MaxLogVerbosity().has_value() || MinLogLevel().has_value()) {
79     GTEST_SKIP();
80   }
81 
82   absl::SetVLogLevel("vlog_is_on*", 3);
83   absl::ScopedMockLog log(absl::MockLogDefault::kDisallowUnexpected);
84 
85   EXPECT_CALL(log, Log(absl::LogSeverity::kInfo, _, "important"));
86 
87   log.StartCapturingLogs();
88   VLOG(3) << "important";
89   VLOG(4) << "spam";
90 }
91 
TEST(VLogIsOn,GlobalDoesNotFilterBelowMaxVerbosity)92 TEST(VLogIsOn, GlobalDoesNotFilterBelowMaxVerbosity) {
93   if (!MaxLogVerbosity().has_value() || *MaxLogVerbosity() < 2) {
94     GTEST_SKIP();
95   }
96 
97   // Set an arbitrary high value to avoid filtering VLOGs in tests by default.
98   absl::SetGlobalVLogLevel(1000);
99   absl::ScopedMockLog log(absl::MockLogDefault::kDisallowUnexpected);
100 
101   EXPECT_CALL(log, Log(absl::LogSeverity::kInfo, _, "asdf"));
102 
103   log.StartCapturingLogs();
104   VLOG(2) << "asdf";
105 }
106 
TEST(VLogIsOn,FileDoesNotFilterBelowMaxVerbosity)107 TEST(VLogIsOn, FileDoesNotFilterBelowMaxVerbosity) {
108   if (!MaxLogVerbosity().has_value() || *MaxLogVerbosity() < 2) {
109     GTEST_SKIP();
110   }
111 
112   // Set an arbitrary high value to avoid filtering VLOGs in tests by default.
113   absl::SetVLogLevel("vlog_is_on_test", 1000);
114   absl::ScopedMockLog log(absl::MockLogDefault::kDisallowUnexpected);
115 
116   EXPECT_CALL(log, Log(absl::LogSeverity::kInfo, _, "asdf"));
117 
118   log.StartCapturingLogs();
119   VLOG(2) << "asdf";
120 }
121 
TEST(VLogIsOn,PatternDoesNotFilterBelowMaxVerbosity)122 TEST(VLogIsOn, PatternDoesNotFilterBelowMaxVerbosity) {
123   if (!MaxLogVerbosity().has_value() || *MaxLogVerbosity() < 2) {
124     GTEST_SKIP();
125   }
126 
127   // Set an arbitrary high value to avoid filtering VLOGs in tests by default.
128   absl::SetVLogLevel("vlog_is_on*", 1000);
129   absl::ScopedMockLog log(absl::MockLogDefault::kDisallowUnexpected);
130 
131   EXPECT_CALL(log, Log(absl::LogSeverity::kInfo, _, "asdf"));
132 
133   log.StartCapturingLogs();
134   VLOG(2) << "asdf";
135 }
136 
TEST(VLogIsOn,GlobalFiltersAboveMaxVerbosity)137 TEST(VLogIsOn, GlobalFiltersAboveMaxVerbosity) {
138   if (!MaxLogVerbosity().has_value() || *MaxLogVerbosity() >= 4) {
139     GTEST_SKIP();
140   }
141 
142   // Set an arbitrary high value to avoid filtering VLOGs in tests by default.
143   absl::SetGlobalVLogLevel(1000);
144   absl::ScopedMockLog log(absl::MockLogDefault::kDisallowUnexpected);
145 
146   log.StartCapturingLogs();
147   VLOG(4) << "dfgh";
148 }
149 
TEST(VLogIsOn,FileFiltersAboveMaxVerbosity)150 TEST(VLogIsOn, FileFiltersAboveMaxVerbosity) {
151   if (!MaxLogVerbosity().has_value() || *MaxLogVerbosity() >= 4) {
152     GTEST_SKIP();
153   }
154 
155   // Set an arbitrary high value to avoid filtering VLOGs in tests by default.
156   absl::SetVLogLevel("vlog_is_on_test", 1000);
157   absl::ScopedMockLog log(absl::MockLogDefault::kDisallowUnexpected);
158 
159   log.StartCapturingLogs();
160   VLOG(4) << "dfgh";
161 }
162 
TEST(VLogIsOn,PatternFiltersAboveMaxVerbosity)163 TEST(VLogIsOn, PatternFiltersAboveMaxVerbosity) {
164   if (!MaxLogVerbosity().has_value() || *MaxLogVerbosity() >= 4) {
165     GTEST_SKIP();
166   }
167 
168   // Set an arbitrary high value to avoid filtering VLOGs in tests by default.
169   absl::SetVLogLevel("vlog_is_on*", 1000);
170   absl::ScopedMockLog log(absl::MockLogDefault::kDisallowUnexpected);
171 
172   log.StartCapturingLogs();
173   VLOG(4) << "dfgh";
174 }
175 
176 }  // namespace
177