1*598139dcSAndroid Build Coastguard Worker /*
2*598139dcSAndroid Build Coastguard Worker * Copyright (C) 2020 The Android Open Source Project
3*598139dcSAndroid Build Coastguard Worker *
4*598139dcSAndroid Build Coastguard Worker * Licensed under the Apache License, Version 2.0 (the "License");
5*598139dcSAndroid Build Coastguard Worker * you may not use this file except in compliance with the License.
6*598139dcSAndroid Build Coastguard Worker * You may obtain a copy of the License at
7*598139dcSAndroid Build Coastguard Worker *
8*598139dcSAndroid Build Coastguard Worker * http://www.apache.org/licenses/LICENSE-2.0
9*598139dcSAndroid Build Coastguard Worker *
10*598139dcSAndroid Build Coastguard Worker * Unless required by applicable law or agreed to in writing, software
11*598139dcSAndroid Build Coastguard Worker * distributed under the License is distributed on an "AS IS" BASIS,
12*598139dcSAndroid Build Coastguard Worker * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13*598139dcSAndroid Build Coastguard Worker * See the License for the specific language governing permissions and
14*598139dcSAndroid Build Coastguard Worker * limitations under the License.
15*598139dcSAndroid Build Coastguard Worker */
16*598139dcSAndroid Build Coastguard Worker
17*598139dcSAndroid Build Coastguard Worker #define LOG_TAG "global_state_test_tag"
18*598139dcSAndroid Build Coastguard Worker
19*598139dcSAndroid Build Coastguard Worker #include <android-base/file.h>
20*598139dcSAndroid Build Coastguard Worker #include <android-base/logging.h>
21*598139dcSAndroid Build Coastguard Worker #include <android-base/properties.h>
22*598139dcSAndroid Build Coastguard Worker #include <android/log.h>
23*598139dcSAndroid Build Coastguard Worker
24*598139dcSAndroid Build Coastguard Worker #include <gtest/gtest.h>
25*598139dcSAndroid Build Coastguard Worker
TEST(liblog_global_state,libbase_logs_with_libbase_SetLogger)26*598139dcSAndroid Build Coastguard Worker TEST(liblog_global_state, libbase_logs_with_libbase_SetLogger) {
27*598139dcSAndroid Build Coastguard Worker using namespace android::base;
28*598139dcSAndroid Build Coastguard Worker bool message_seen = false;
29*598139dcSAndroid Build Coastguard Worker LogSeverity expected_severity = WARNING;
30*598139dcSAndroid Build Coastguard Worker std::string expected_file = Basename(__FILE__);
31*598139dcSAndroid Build Coastguard Worker unsigned int expected_line;
32*598139dcSAndroid Build Coastguard Worker std::string expected_message = "libbase test message";
33*598139dcSAndroid Build Coastguard Worker
34*598139dcSAndroid Build Coastguard Worker auto LoggerFunction = [&](LogId log_id, LogSeverity severity, const char* tag, const char* file,
35*598139dcSAndroid Build Coastguard Worker unsigned int line, const char* message) {
36*598139dcSAndroid Build Coastguard Worker message_seen = true;
37*598139dcSAndroid Build Coastguard Worker EXPECT_EQ(DEFAULT, log_id);
38*598139dcSAndroid Build Coastguard Worker EXPECT_EQ(expected_severity, severity);
39*598139dcSAndroid Build Coastguard Worker EXPECT_STREQ(LOG_TAG, tag);
40*598139dcSAndroid Build Coastguard Worker EXPECT_EQ(expected_file, file);
41*598139dcSAndroid Build Coastguard Worker EXPECT_EQ(expected_line, line);
42*598139dcSAndroid Build Coastguard Worker EXPECT_EQ(expected_message, message);
43*598139dcSAndroid Build Coastguard Worker };
44*598139dcSAndroid Build Coastguard Worker
45*598139dcSAndroid Build Coastguard Worker SetLogger(LoggerFunction);
46*598139dcSAndroid Build Coastguard Worker
47*598139dcSAndroid Build Coastguard Worker expected_line = __LINE__ + 1;
48*598139dcSAndroid Build Coastguard Worker LOG(expected_severity) << expected_message;
49*598139dcSAndroid Build Coastguard Worker EXPECT_TRUE(message_seen);
50*598139dcSAndroid Build Coastguard Worker }
51*598139dcSAndroid Build Coastguard Worker
TEST(liblog_global_state,libbase_logs_with_liblog_set_logger)52*598139dcSAndroid Build Coastguard Worker TEST(liblog_global_state, libbase_logs_with_liblog_set_logger) {
53*598139dcSAndroid Build Coastguard Worker using namespace android::base;
54*598139dcSAndroid Build Coastguard Worker // These must be static since they're used by the liblog logger function, which only accepts
55*598139dcSAndroid Build Coastguard Worker // lambdas without captures. The items used by the libbase logger are explicitly not static, to
56*598139dcSAndroid Build Coastguard Worker // ensure that lambdas with captures do work there.
57*598139dcSAndroid Build Coastguard Worker static bool message_seen = false;
58*598139dcSAndroid Build Coastguard Worker static std::string expected_file = Basename(__FILE__);
59*598139dcSAndroid Build Coastguard Worker static unsigned int expected_line;
60*598139dcSAndroid Build Coastguard Worker static std::string expected_message = "libbase test message";
61*598139dcSAndroid Build Coastguard Worker
62*598139dcSAndroid Build Coastguard Worker auto liblog_logger_function = [](const struct __android_log_message* log_message) {
63*598139dcSAndroid Build Coastguard Worker message_seen = true;
64*598139dcSAndroid Build Coastguard Worker EXPECT_EQ(sizeof(__android_log_message), log_message->struct_size);
65*598139dcSAndroid Build Coastguard Worker EXPECT_EQ(LOG_ID_DEFAULT, log_message->buffer_id);
66*598139dcSAndroid Build Coastguard Worker EXPECT_EQ(ANDROID_LOG_WARN, log_message->priority);
67*598139dcSAndroid Build Coastguard Worker EXPECT_STREQ(LOG_TAG, log_message->tag);
68*598139dcSAndroid Build Coastguard Worker EXPECT_EQ(expected_file, log_message->file);
69*598139dcSAndroid Build Coastguard Worker EXPECT_EQ(expected_line, log_message->line);
70*598139dcSAndroid Build Coastguard Worker EXPECT_EQ(expected_message, log_message->message);
71*598139dcSAndroid Build Coastguard Worker };
72*598139dcSAndroid Build Coastguard Worker
73*598139dcSAndroid Build Coastguard Worker __android_log_set_logger(liblog_logger_function);
74*598139dcSAndroid Build Coastguard Worker
75*598139dcSAndroid Build Coastguard Worker expected_line = __LINE__ + 1;
76*598139dcSAndroid Build Coastguard Worker LOG(WARNING) << expected_message;
77*598139dcSAndroid Build Coastguard Worker EXPECT_TRUE(message_seen);
78*598139dcSAndroid Build Coastguard Worker }
79*598139dcSAndroid Build Coastguard Worker
TEST(liblog_global_state,liblog_logs_with_libbase_SetLogger)80*598139dcSAndroid Build Coastguard Worker TEST(liblog_global_state, liblog_logs_with_libbase_SetLogger) {
81*598139dcSAndroid Build Coastguard Worker using namespace android::base;
82*598139dcSAndroid Build Coastguard Worker bool message_seen = false;
83*598139dcSAndroid Build Coastguard Worker std::string expected_message = "libbase test message";
84*598139dcSAndroid Build Coastguard Worker
85*598139dcSAndroid Build Coastguard Worker auto LoggerFunction = [&](LogId log_id, LogSeverity severity, const char* tag, const char* file,
86*598139dcSAndroid Build Coastguard Worker unsigned int line, const char* message) {
87*598139dcSAndroid Build Coastguard Worker message_seen = true;
88*598139dcSAndroid Build Coastguard Worker EXPECT_EQ(MAIN, log_id);
89*598139dcSAndroid Build Coastguard Worker EXPECT_EQ(WARNING, severity);
90*598139dcSAndroid Build Coastguard Worker EXPECT_STREQ(LOG_TAG, tag);
91*598139dcSAndroid Build Coastguard Worker EXPECT_EQ(nullptr, file);
92*598139dcSAndroid Build Coastguard Worker EXPECT_EQ(0U, line);
93*598139dcSAndroid Build Coastguard Worker EXPECT_EQ(expected_message, message);
94*598139dcSAndroid Build Coastguard Worker };
95*598139dcSAndroid Build Coastguard Worker
96*598139dcSAndroid Build Coastguard Worker SetLogger(LoggerFunction);
97*598139dcSAndroid Build Coastguard Worker
98*598139dcSAndroid Build Coastguard Worker __android_log_buf_write(LOG_ID_MAIN, ANDROID_LOG_WARN, LOG_TAG, expected_message.c_str());
99*598139dcSAndroid Build Coastguard Worker EXPECT_TRUE(message_seen);
100*598139dcSAndroid Build Coastguard Worker message_seen = false;
101*598139dcSAndroid Build Coastguard Worker }
102*598139dcSAndroid Build Coastguard Worker
TEST(liblog_global_state,liblog_logs_with_liblog_set_logger)103*598139dcSAndroid Build Coastguard Worker TEST(liblog_global_state, liblog_logs_with_liblog_set_logger) {
104*598139dcSAndroid Build Coastguard Worker using namespace android::base;
105*598139dcSAndroid Build Coastguard Worker // These must be static since they're used by the liblog logger function, which only accepts
106*598139dcSAndroid Build Coastguard Worker // lambdas without captures. The items used by the libbase logger are explicitly not static, to
107*598139dcSAndroid Build Coastguard Worker // ensure that lambdas with captures do work there.
108*598139dcSAndroid Build Coastguard Worker static bool message_seen = false;
109*598139dcSAndroid Build Coastguard Worker static int expected_buffer_id = LOG_ID_MAIN;
110*598139dcSAndroid Build Coastguard Worker static int expected_priority = ANDROID_LOG_WARN;
111*598139dcSAndroid Build Coastguard Worker static std::string expected_message = "libbase test message";
112*598139dcSAndroid Build Coastguard Worker
113*598139dcSAndroid Build Coastguard Worker auto liblog_logger_function = [](const struct __android_log_message* log_message) {
114*598139dcSAndroid Build Coastguard Worker message_seen = true;
115*598139dcSAndroid Build Coastguard Worker EXPECT_EQ(sizeof(__android_log_message), log_message->struct_size);
116*598139dcSAndroid Build Coastguard Worker EXPECT_EQ(expected_buffer_id, log_message->buffer_id);
117*598139dcSAndroid Build Coastguard Worker EXPECT_EQ(expected_priority, log_message->priority);
118*598139dcSAndroid Build Coastguard Worker EXPECT_STREQ(LOG_TAG, log_message->tag);
119*598139dcSAndroid Build Coastguard Worker EXPECT_STREQ(nullptr, log_message->file);
120*598139dcSAndroid Build Coastguard Worker EXPECT_EQ(0U, log_message->line);
121*598139dcSAndroid Build Coastguard Worker EXPECT_EQ(expected_message, log_message->message);
122*598139dcSAndroid Build Coastguard Worker };
123*598139dcSAndroid Build Coastguard Worker
124*598139dcSAndroid Build Coastguard Worker __android_log_set_logger(liblog_logger_function);
125*598139dcSAndroid Build Coastguard Worker
126*598139dcSAndroid Build Coastguard Worker __android_log_buf_write(expected_buffer_id, expected_priority, LOG_TAG, expected_message.c_str());
127*598139dcSAndroid Build Coastguard Worker EXPECT_TRUE(message_seen);
128*598139dcSAndroid Build Coastguard Worker }
129*598139dcSAndroid Build Coastguard Worker
TEST(liblog_global_state,SetAborter_with_liblog)130*598139dcSAndroid Build Coastguard Worker TEST(liblog_global_state, SetAborter_with_liblog) {
131*598139dcSAndroid Build Coastguard Worker using namespace android::base;
132*598139dcSAndroid Build Coastguard Worker
133*598139dcSAndroid Build Coastguard Worker std::string expected_message = "libbase test message";
134*598139dcSAndroid Build Coastguard Worker static bool message_seen = false;
135*598139dcSAndroid Build Coastguard Worker auto aborter_function = [&](const char* message) {
136*598139dcSAndroid Build Coastguard Worker message_seen = true;
137*598139dcSAndroid Build Coastguard Worker EXPECT_EQ(expected_message, message);
138*598139dcSAndroid Build Coastguard Worker };
139*598139dcSAndroid Build Coastguard Worker
140*598139dcSAndroid Build Coastguard Worker SetAborter(aborter_function);
141*598139dcSAndroid Build Coastguard Worker LOG(FATAL) << expected_message;
142*598139dcSAndroid Build Coastguard Worker EXPECT_TRUE(message_seen);
143*598139dcSAndroid Build Coastguard Worker message_seen = false;
144*598139dcSAndroid Build Coastguard Worker
145*598139dcSAndroid Build Coastguard Worker static std::string expected_message_static = "libbase test message";
146*598139dcSAndroid Build Coastguard Worker auto liblog_aborter_function = [](const char* message) {
147*598139dcSAndroid Build Coastguard Worker message_seen = true;
148*598139dcSAndroid Build Coastguard Worker EXPECT_EQ(expected_message_static, message);
149*598139dcSAndroid Build Coastguard Worker };
150*598139dcSAndroid Build Coastguard Worker __android_log_set_aborter(liblog_aborter_function);
151*598139dcSAndroid Build Coastguard Worker LOG(FATAL) << expected_message_static;
152*598139dcSAndroid Build Coastguard Worker EXPECT_TRUE(message_seen);
153*598139dcSAndroid Build Coastguard Worker message_seen = false;
154*598139dcSAndroid Build Coastguard Worker }
155*598139dcSAndroid Build Coastguard Worker
UniqueLogTag()156*598139dcSAndroid Build Coastguard Worker static std::string UniqueLogTag() {
157*598139dcSAndroid Build Coastguard Worker std::string tag = LOG_TAG;
158*598139dcSAndroid Build Coastguard Worker tag += "-" + std::to_string(getpid());
159*598139dcSAndroid Build Coastguard Worker return tag;
160*598139dcSAndroid Build Coastguard Worker }
161*598139dcSAndroid Build Coastguard Worker
TEST(liblog_global_state,is_loggable_both_default)162*598139dcSAndroid Build Coastguard Worker TEST(liblog_global_state, is_loggable_both_default) {
163*598139dcSAndroid Build Coastguard Worker auto tag = UniqueLogTag();
164*598139dcSAndroid Build Coastguard Worker EXPECT_EQ(0, __android_log_is_loggable(ANDROID_LOG_DEBUG, tag.c_str(), ANDROID_LOG_INFO));
165*598139dcSAndroid Build Coastguard Worker EXPECT_EQ(1, __android_log_is_loggable(ANDROID_LOG_INFO, tag.c_str(), ANDROID_LOG_INFO));
166*598139dcSAndroid Build Coastguard Worker EXPECT_EQ(1, __android_log_is_loggable(ANDROID_LOG_WARN, tag.c_str(), ANDROID_LOG_INFO));
167*598139dcSAndroid Build Coastguard Worker }
168*598139dcSAndroid Build Coastguard Worker
TEST(liblog_global_state,is_loggable_minimum_log_priority_only)169*598139dcSAndroid Build Coastguard Worker TEST(liblog_global_state, is_loggable_minimum_log_priority_only) {
170*598139dcSAndroid Build Coastguard Worker auto tag = UniqueLogTag();
171*598139dcSAndroid Build Coastguard Worker EXPECT_EQ(0, __android_log_is_loggable(ANDROID_LOG_DEBUG, tag.c_str(), ANDROID_LOG_INFO));
172*598139dcSAndroid Build Coastguard Worker EXPECT_EQ(1, __android_log_is_loggable(ANDROID_LOG_INFO, tag.c_str(), ANDROID_LOG_INFO));
173*598139dcSAndroid Build Coastguard Worker EXPECT_EQ(1, __android_log_is_loggable(ANDROID_LOG_WARN, tag.c_str(), ANDROID_LOG_INFO));
174*598139dcSAndroid Build Coastguard Worker
175*598139dcSAndroid Build Coastguard Worker EXPECT_EQ(ANDROID_LOG_DEFAULT, __android_log_set_minimum_priority(ANDROID_LOG_DEBUG));
176*598139dcSAndroid Build Coastguard Worker EXPECT_EQ(1, __android_log_is_loggable(ANDROID_LOG_DEBUG, tag.c_str(), ANDROID_LOG_INFO));
177*598139dcSAndroid Build Coastguard Worker EXPECT_EQ(1, __android_log_is_loggable(ANDROID_LOG_INFO, tag.c_str(), ANDROID_LOG_INFO));
178*598139dcSAndroid Build Coastguard Worker EXPECT_EQ(1, __android_log_is_loggable(ANDROID_LOG_WARN, tag.c_str(), ANDROID_LOG_INFO));
179*598139dcSAndroid Build Coastguard Worker
180*598139dcSAndroid Build Coastguard Worker EXPECT_EQ(ANDROID_LOG_DEBUG, __android_log_set_minimum_priority(ANDROID_LOG_WARN));
181*598139dcSAndroid Build Coastguard Worker EXPECT_EQ(0, __android_log_is_loggable(ANDROID_LOG_DEBUG, tag.c_str(), ANDROID_LOG_INFO));
182*598139dcSAndroid Build Coastguard Worker EXPECT_EQ(0, __android_log_is_loggable(ANDROID_LOG_INFO, tag.c_str(), ANDROID_LOG_INFO));
183*598139dcSAndroid Build Coastguard Worker EXPECT_EQ(1, __android_log_is_loggable(ANDROID_LOG_WARN, tag.c_str(), ANDROID_LOG_INFO));
184*598139dcSAndroid Build Coastguard Worker
185*598139dcSAndroid Build Coastguard Worker EXPECT_EQ(android::base::WARNING, android::base::SetMinimumLogSeverity(android::base::DEBUG));
186*598139dcSAndroid Build Coastguard Worker EXPECT_EQ(1, __android_log_is_loggable(ANDROID_LOG_DEBUG, tag.c_str(), ANDROID_LOG_INFO));
187*598139dcSAndroid Build Coastguard Worker EXPECT_EQ(1, __android_log_is_loggable(ANDROID_LOG_INFO, tag.c_str(), ANDROID_LOG_INFO));
188*598139dcSAndroid Build Coastguard Worker EXPECT_EQ(1, __android_log_is_loggable(ANDROID_LOG_WARN, tag.c_str(), ANDROID_LOG_INFO));
189*598139dcSAndroid Build Coastguard Worker
190*598139dcSAndroid Build Coastguard Worker EXPECT_EQ(android::base::DEBUG, android::base::SetMinimumLogSeverity(android::base::WARNING));
191*598139dcSAndroid Build Coastguard Worker EXPECT_EQ(0, __android_log_is_loggable(ANDROID_LOG_DEBUG, tag.c_str(), ANDROID_LOG_INFO));
192*598139dcSAndroid Build Coastguard Worker EXPECT_EQ(0, __android_log_is_loggable(ANDROID_LOG_INFO, tag.c_str(), ANDROID_LOG_INFO));
193*598139dcSAndroid Build Coastguard Worker EXPECT_EQ(1, __android_log_is_loggable(ANDROID_LOG_WARN, tag.c_str(), ANDROID_LOG_INFO));
194*598139dcSAndroid Build Coastguard Worker }
195*598139dcSAndroid Build Coastguard Worker
TEST(liblog_global_state,is_loggable_tag_log_priority_only)196*598139dcSAndroid Build Coastguard Worker TEST(liblog_global_state, is_loggable_tag_log_priority_only) {
197*598139dcSAndroid Build Coastguard Worker #ifdef __ANDROID__
198*598139dcSAndroid Build Coastguard Worker auto tag = UniqueLogTag();
199*598139dcSAndroid Build Coastguard Worker EXPECT_EQ(0, __android_log_is_loggable(ANDROID_LOG_DEBUG, tag.c_str(), ANDROID_LOG_INFO));
200*598139dcSAndroid Build Coastguard Worker EXPECT_EQ(1, __android_log_is_loggable(ANDROID_LOG_INFO, tag.c_str(), ANDROID_LOG_INFO));
201*598139dcSAndroid Build Coastguard Worker EXPECT_EQ(1, __android_log_is_loggable(ANDROID_LOG_WARN, tag.c_str(), ANDROID_LOG_INFO));
202*598139dcSAndroid Build Coastguard Worker
203*598139dcSAndroid Build Coastguard Worker auto log_tag_property = std::string("log.tag.") + tag;
204*598139dcSAndroid Build Coastguard Worker ASSERT_TRUE(android::base::SetProperty(log_tag_property, "d"));
205*598139dcSAndroid Build Coastguard Worker EXPECT_EQ(1, __android_log_is_loggable(ANDROID_LOG_DEBUG, tag.c_str(), ANDROID_LOG_INFO));
206*598139dcSAndroid Build Coastguard Worker EXPECT_EQ(1, __android_log_is_loggable(ANDROID_LOG_INFO, tag.c_str(), ANDROID_LOG_INFO));
207*598139dcSAndroid Build Coastguard Worker EXPECT_EQ(1, __android_log_is_loggable(ANDROID_LOG_WARN, tag.c_str(), ANDROID_LOG_INFO));
208*598139dcSAndroid Build Coastguard Worker
209*598139dcSAndroid Build Coastguard Worker ASSERT_TRUE(android::base::SetProperty(log_tag_property, "w"));
210*598139dcSAndroid Build Coastguard Worker EXPECT_EQ(0, __android_log_is_loggable(ANDROID_LOG_DEBUG, tag.c_str(), ANDROID_LOG_INFO));
211*598139dcSAndroid Build Coastguard Worker EXPECT_EQ(0, __android_log_is_loggable(ANDROID_LOG_INFO, tag.c_str(), ANDROID_LOG_INFO));
212*598139dcSAndroid Build Coastguard Worker EXPECT_EQ(1, __android_log_is_loggable(ANDROID_LOG_WARN, tag.c_str(), ANDROID_LOG_INFO));
213*598139dcSAndroid Build Coastguard Worker
214*598139dcSAndroid Build Coastguard Worker ASSERT_TRUE(android::base::SetProperty(log_tag_property, ""));
215*598139dcSAndroid Build Coastguard Worker #else
216*598139dcSAndroid Build Coastguard Worker GTEST_SKIP() << "No log tag properties on host";
217*598139dcSAndroid Build Coastguard Worker #endif
218*598139dcSAndroid Build Coastguard Worker }
219*598139dcSAndroid Build Coastguard Worker
TEST(liblog_global_state,is_loggable_both_set)220*598139dcSAndroid Build Coastguard Worker TEST(liblog_global_state, is_loggable_both_set) {
221*598139dcSAndroid Build Coastguard Worker #ifdef __ANDROID__
222*598139dcSAndroid Build Coastguard Worker auto tag = UniqueLogTag();
223*598139dcSAndroid Build Coastguard Worker EXPECT_EQ(0, __android_log_is_loggable(ANDROID_LOG_DEBUG, tag.c_str(), ANDROID_LOG_INFO));
224*598139dcSAndroid Build Coastguard Worker EXPECT_EQ(1, __android_log_is_loggable(ANDROID_LOG_INFO, tag.c_str(), ANDROID_LOG_INFO));
225*598139dcSAndroid Build Coastguard Worker EXPECT_EQ(1, __android_log_is_loggable(ANDROID_LOG_WARN, tag.c_str(), ANDROID_LOG_INFO));
226*598139dcSAndroid Build Coastguard Worker
227*598139dcSAndroid Build Coastguard Worker // When both a tag and a minimum priority are set, we use the lower value of the two.
228*598139dcSAndroid Build Coastguard Worker
229*598139dcSAndroid Build Coastguard Worker // tag = warning, minimum_priority = debug, expect 'debug'
230*598139dcSAndroid Build Coastguard Worker auto log_tag_property = std::string("log.tag.") + tag;
231*598139dcSAndroid Build Coastguard Worker ASSERT_TRUE(android::base::SetProperty(log_tag_property, "w"));
232*598139dcSAndroid Build Coastguard Worker EXPECT_EQ(ANDROID_LOG_DEFAULT, __android_log_set_minimum_priority(ANDROID_LOG_DEBUG));
233*598139dcSAndroid Build Coastguard Worker EXPECT_EQ(1, __android_log_is_loggable(ANDROID_LOG_DEBUG, tag.c_str(), ANDROID_LOG_INFO));
234*598139dcSAndroid Build Coastguard Worker EXPECT_EQ(1, __android_log_is_loggable(ANDROID_LOG_INFO, tag.c_str(), ANDROID_LOG_INFO));
235*598139dcSAndroid Build Coastguard Worker EXPECT_EQ(1, __android_log_is_loggable(ANDROID_LOG_WARN, tag.c_str(), ANDROID_LOG_INFO));
236*598139dcSAndroid Build Coastguard Worker
237*598139dcSAndroid Build Coastguard Worker // tag = warning, minimum_priority = warning, expect 'warning'
238*598139dcSAndroid Build Coastguard Worker EXPECT_EQ(ANDROID_LOG_DEBUG, __android_log_set_minimum_priority(ANDROID_LOG_WARN));
239*598139dcSAndroid Build Coastguard Worker EXPECT_EQ(0, __android_log_is_loggable(ANDROID_LOG_DEBUG, tag.c_str(), ANDROID_LOG_INFO));
240*598139dcSAndroid Build Coastguard Worker EXPECT_EQ(0, __android_log_is_loggable(ANDROID_LOG_INFO, tag.c_str(), ANDROID_LOG_INFO));
241*598139dcSAndroid Build Coastguard Worker EXPECT_EQ(1, __android_log_is_loggable(ANDROID_LOG_WARN, tag.c_str(), ANDROID_LOG_INFO));
242*598139dcSAndroid Build Coastguard Worker
243*598139dcSAndroid Build Coastguard Worker // tag = debug, minimum_priority = warning, expect 'debug'
244*598139dcSAndroid Build Coastguard Worker ASSERT_TRUE(android::base::SetProperty(log_tag_property, "d"));
245*598139dcSAndroid Build Coastguard Worker EXPECT_EQ(1, __android_log_is_loggable(ANDROID_LOG_DEBUG, tag.c_str(), ANDROID_LOG_INFO));
246*598139dcSAndroid Build Coastguard Worker EXPECT_EQ(1, __android_log_is_loggable(ANDROID_LOG_INFO, tag.c_str(), ANDROID_LOG_INFO));
247*598139dcSAndroid Build Coastguard Worker EXPECT_EQ(1, __android_log_is_loggable(ANDROID_LOG_WARN, tag.c_str(), ANDROID_LOG_INFO));
248*598139dcSAndroid Build Coastguard Worker
249*598139dcSAndroid Build Coastguard Worker // tag = debug, minimum_priority = debug, expect 'debug'
250*598139dcSAndroid Build Coastguard Worker EXPECT_EQ(ANDROID_LOG_WARN, __android_log_set_minimum_priority(ANDROID_LOG_DEBUG));
251*598139dcSAndroid Build Coastguard Worker EXPECT_EQ(1, __android_log_is_loggable(ANDROID_LOG_DEBUG, tag.c_str(), ANDROID_LOG_INFO));
252*598139dcSAndroid Build Coastguard Worker EXPECT_EQ(1, __android_log_is_loggable(ANDROID_LOG_INFO, tag.c_str(), ANDROID_LOG_INFO));
253*598139dcSAndroid Build Coastguard Worker EXPECT_EQ(1, __android_log_is_loggable(ANDROID_LOG_WARN, tag.c_str(), ANDROID_LOG_INFO));
254*598139dcSAndroid Build Coastguard Worker
255*598139dcSAndroid Build Coastguard Worker ASSERT_TRUE(android::base::SetProperty(log_tag_property, ""));
256*598139dcSAndroid Build Coastguard Worker #else
257*598139dcSAndroid Build Coastguard Worker GTEST_SKIP() << "No log tag properties on host";
258*598139dcSAndroid Build Coastguard Worker #endif
259*598139dcSAndroid Build Coastguard Worker }
260