Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(23)

Side by Side Diff: base/trace_event/trace_config_unittest.cc

Issue 1115023003: [Startup Tracing] The TraceConfig class [STALE] (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: rebase Created 5 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
(Empty)
1 // Copyright (c) 2015 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 #include "base/trace_event/trace_config.h"
6 #include "base/trace_event/trace_event.h"
7 #include "testing/gtest/include/gtest/gtest.h"
8
9 namespace base {
10 namespace trace_event {
11
12 namespace {
13
14 const char kDefaultTraceConfigString[] =
15 "{"
16 "\"enable_sampling\":false,"
17 "\"enable_systrace\":false,"
18 "\"excluded_categories\":[\"*Debug\",\"*Test\"],"
19 "\"record_mode\":\"record-until-full\""
20 "}";
21
22 } // namespace
23
24 TEST(TraceConfigTest, TraceConfigFromValidLegacyStrings) {
25 // From trace options strings
26 TraceConfig config("", "record-until-full");
27 EXPECT_EQ(RECORD_UNTIL_FULL, config.record_mode_);
28 EXPECT_FALSE(config.enable_sampling_);
29 EXPECT_FALSE(config.enable_systrace_);
30 EXPECT_STREQ("record-until-full", config.ToTraceOptionsString().c_str());
31
32 config = TraceConfig("", "record-continuously");
33 EXPECT_EQ(RECORD_CONTINUOUSLY, config.record_mode_);
34 EXPECT_FALSE(config.enable_sampling_);
35 EXPECT_FALSE(config.enable_systrace_);
36 EXPECT_STREQ("record-continuously", config.ToTraceOptionsString().c_str());
37
38 config = TraceConfig("", "trace-to-console");
39 EXPECT_EQ(ECHO_TO_CONSOLE, config.record_mode_);
40 EXPECT_FALSE(config.enable_sampling_);
41 EXPECT_FALSE(config.enable_systrace_);
42 EXPECT_STREQ("trace-to-console", config.ToTraceOptionsString().c_str());
43
44 config = TraceConfig("", "record-as-much-as-possible");
45 EXPECT_EQ(RECORD_AS_MUCH_AS_POSSIBLE, config.record_mode_);
46 EXPECT_FALSE(config.enable_sampling_);
47 EXPECT_FALSE(config.enable_systrace_);
48 EXPECT_STREQ("record-as-much-as-possible",
49 config.ToTraceOptionsString().c_str());
50
51 config = TraceConfig("", "record-until-full, enable-sampling");
52 EXPECT_EQ(RECORD_UNTIL_FULL, config.record_mode_);
53 EXPECT_TRUE(config.enable_sampling_);
54 EXPECT_FALSE(config.enable_systrace_);
55 EXPECT_STREQ("record-until-full,enable-sampling",
56 config.ToTraceOptionsString().c_str());
57
58 config = TraceConfig("", "enable-systrace, record-continuously");
59 EXPECT_EQ(RECORD_CONTINUOUSLY, config.record_mode_);
60 EXPECT_FALSE(config.enable_sampling_);
61 EXPECT_TRUE(config.enable_systrace_);
62 EXPECT_STREQ("record-continuously,enable-systrace",
63 config.ToTraceOptionsString().c_str());
64
65 config = TraceConfig("",
66 "enable-systrace, trace-to-console, enable-sampling");
67 EXPECT_EQ(ECHO_TO_CONSOLE, config.record_mode_);
68 EXPECT_TRUE(config.enable_sampling_);
69 EXPECT_TRUE(config.enable_systrace_);
70 EXPECT_STREQ("trace-to-console,enable-sampling,enable-systrace",
71 config.ToTraceOptionsString().c_str());
72
73 config = TraceConfig(
74 "", "record-continuously, record-until-full, trace-to-console");
75 EXPECT_EQ(ECHO_TO_CONSOLE, config.record_mode_);
76 EXPECT_FALSE(config.enable_systrace_);
77 EXPECT_FALSE(config.enable_sampling_);
78 EXPECT_STREQ("trace-to-console", config.ToTraceOptionsString().c_str());
79
80 // From category filter strings
81 config = TraceConfig("-*Debug,-*Test", "");
82 EXPECT_STREQ("-*Debug,-*Test", config.ToCategoryFilterString().c_str());
83
84 config = TraceConfig("included,-excluded,inc_pattern*,-exc_pattern*", "");
85 EXPECT_STREQ("included,inc_pattern*,-excluded,-exc_pattern*",
86 config.ToCategoryFilterString().c_str());
87
88 config = TraceConfig("only_inc_cat", "");
89 EXPECT_STREQ("only_inc_cat", config.ToCategoryFilterString().c_str());
90
91 config = TraceConfig("-only_exc_cat", "");
92 EXPECT_STREQ("-only_exc_cat", config.ToCategoryFilterString().c_str());
93
94 config = TraceConfig("disabled-by-default-cc,-excluded", "");
95 EXPECT_STREQ("disabled-by-default-cc,-excluded",
96 config.ToCategoryFilterString().c_str());
97
98 config = TraceConfig("disabled-by-default-cc,included", "");
99 EXPECT_STREQ("included,disabled-by-default-cc",
100 config.ToCategoryFilterString().c_str());
101
102 config = TraceConfig("DELAY(test.Delay1;16),included", "");
103 EXPECT_STREQ("included,DELAY(test.Delay1;16)",
104 config.ToCategoryFilterString().c_str());
105
106 // From both trace options and category filter strings
107 config = TraceConfig("", "");
108 EXPECT_EQ(RECORD_UNTIL_FULL, config.record_mode_);
109 EXPECT_FALSE(config.enable_systrace_);
110 EXPECT_FALSE(config.enable_sampling_);
111 EXPECT_STREQ("", config.ToCategoryFilterString().c_str());
112 EXPECT_STREQ("record-until-full", config.ToTraceOptionsString().c_str());
113
114 config = TraceConfig("included,-excluded,inc_pattern*,-exc_pattern*",
115 "enable-systrace, trace-to-console, enable-sampling");
116 EXPECT_STREQ("included,inc_pattern*,-excluded,-exc_pattern*",
117 config.ToCategoryFilterString().c_str());
118 EXPECT_STREQ("trace-to-console,enable-sampling,enable-systrace",
119 config.ToTraceOptionsString().c_str());
120
121 // From both trace options and category filter strings with spaces.
122 config = TraceConfig(" included , -excluded, inc_pattern*, ,-exc_pattern* ",
123 "enable-systrace, ,trace-to-console, enable-sampling ");
124 EXPECT_STREQ("included,inc_pattern*,-excluded,-exc_pattern*",
125 config.ToCategoryFilterString().c_str());
126 EXPECT_STREQ("trace-to-console,enable-sampling,enable-systrace",
127 config.ToTraceOptionsString().c_str());
128 }
129
130 TEST(TraceConfigTest, TraceConfigFromInvalidLegacyStrings) {
131 TraceConfig config("", "foo-bar-baz");
132 EXPECT_EQ(RECORD_UNTIL_FULL, config.record_mode_);
133 EXPECT_FALSE(config.enable_systrace_);
134 EXPECT_FALSE(config.enable_sampling_);
135 EXPECT_STREQ("", config.ToCategoryFilterString().c_str());
136 EXPECT_STREQ("record-until-full", config.ToTraceOptionsString().c_str());
137
138 config = TraceConfig("arbitrary-category", "foo-bar-baz, enable-systrace");
139 EXPECT_EQ(RECORD_UNTIL_FULL, config.record_mode_);
140 EXPECT_TRUE(config.enable_systrace_);
141 EXPECT_FALSE(config.enable_sampling_);
142 EXPECT_STREQ("arbitrary-category", config.ToCategoryFilterString().c_str());
143 EXPECT_STREQ("record-until-full,enable-systrace",
144 config.ToTraceOptionsString().c_str());
145
146 const char* const configs[] = {
147 "",
148 "DELAY(",
149 "DELAY(;",
150 "DELAY(;)",
151 "DELAY(test.Delay)",
152 "DELAY(test.Delay;)"
153 };
154 for (size_t i = 0; i < arraysize(configs); i++) {
155 TraceConfig tc(configs[i], "");
156 EXPECT_EQ(0u, tc.GetSyntheticDelayValues().size());
157 }
158 }
159
160 TEST(TraceConfigTest, ConstructDefaultTraceConfig) {
161 // Make sure that upon an empty string, we fall back to the default config.
162 TraceConfig tc;
163 EXPECT_STREQ(kDefaultTraceConfigString, tc.ToString().c_str());
164 EXPECT_TRUE(tc.record_mode_ == RECORD_UNTIL_FULL);
165 EXPECT_FALSE(tc.enable_sampling_);
166 EXPECT_FALSE(tc.enable_systrace_);
167 EXPECT_STREQ("-*Debug,-*Test", tc.ToCategoryFilterString().c_str());
168 EXPECT_FALSE(tc.IsCategoryGroupEnabled("CategoryDebug"));
169 EXPECT_FALSE(tc.IsCategoryGroupEnabled("CategoryTest"));
170 EXPECT_FALSE(tc.IsCategoryGroupEnabled("CategoryDebug,CategoryTest"));
171 EXPECT_TRUE(tc.IsCategoryGroupEnabled("Category1,CategoryDebug"));
172 EXPECT_TRUE(tc.IsCategoryGroupEnabled("CategoryDebug,Category1"));
173 EXPECT_TRUE(tc.IsCategoryGroupEnabled("CategoryTest,Category2"));
174 EXPECT_TRUE(tc.IsCategoryGroupEnabled("not-excluded-category"));
175 EXPECT_FALSE(tc.IsCategoryGroupEnabled("disabled-by-default-cc"));
176 }
177
178 TEST(TraceConfigTest, TraceConfigFromValidString) {
179 // Using some non-empty config string.
180 const char config_string[] =
181 "{"
182 "\"enable_sampling\":true,"
183 "\"enable_systrace\":true,"
184 "\"excluded_categories\":[\"excluded\",\"exc_pattern*\"],"
185 "\"included_categories\":[\"included\",\"inc_pattern*\"],"
186 "\"record_mode\":\"record-continuously\","
187 "\"synthetic_delays\":[\"test.Delay1;16\",\"test.Delay2;32\"]"
188 "}";
189 TraceConfig tc(config_string);
190 EXPECT_STREQ(config_string, tc.ToString().c_str());
191 EXPECT_TRUE(tc.record_mode_ == RECORD_CONTINUOUSLY);
192 EXPECT_TRUE(tc.enable_sampling_);
193 EXPECT_TRUE(tc.enable_systrace_);
194 EXPECT_STREQ("included,inc_pattern*,-excluded,-exc_pattern*,"
195 "DELAY(test.Delay1;16),DELAY(test.Delay2;32)",
196 tc.ToCategoryFilterString().c_str());
197 EXPECT_TRUE(tc.IsCategoryGroupEnabled("included"));
198 EXPECT_TRUE(tc.IsCategoryGroupEnabled("included,excluded"));
199 EXPECT_TRUE(tc.IsCategoryGroupEnabled("inc_pattern_category"));
200 EXPECT_FALSE(tc.IsCategoryGroupEnabled("exc_pattern_category"));
201 EXPECT_FALSE(tc.IsCategoryGroupEnabled("excluded"));
202 EXPECT_FALSE(tc.IsCategoryGroupEnabled("not-excluded-nor-included"));
203 EXPECT_FALSE(tc.IsCategoryGroupEnabled("Category1,CategoryDebug"));
204 EXPECT_FALSE(tc.IsCategoryGroupEnabled("CategoryDebug,Category1"));
205 EXPECT_FALSE(tc.IsCategoryGroupEnabled("CategoryTest,Category2"));
206 EXPECT_TRUE(tc.IsCategoryGroupEnabled("included,DELAY(test.Delay1;16)"));
207 EXPECT_FALSE(tc.IsCategoryGroupEnabled("DELAY(test.Delay1;16)"));
208 EXPECT_EQ(2u, tc.GetSyntheticDelayValues().size());
209 EXPECT_STREQ("test.Delay1;16", tc.GetSyntheticDelayValues()[0].c_str());
210 EXPECT_STREQ("test.Delay2;32", tc.GetSyntheticDelayValues()[1].c_str());
211
212 // Clear
213 tc.Clear();
214 EXPECT_STREQ(tc.ToString().c_str(),
215 "{"
216 "\"enable_sampling\":false,"
217 "\"enable_systrace\":false,"
218 "\"record_mode\":\"record-until-full\""
219 "}");
220 }
221
222 TEST(TraceConfigTest, TraceConfigFromInvalidString) {
223 // The config string needs to be a dictionary correctly formatted as a JSON
224 // string. Otherwise, it will fall back to the default initialization.
225 TraceConfig tc("");
226 EXPECT_STREQ(kDefaultTraceConfigString, tc.ToString().c_str());
227 EXPECT_TRUE(tc.record_mode_ == RECORD_UNTIL_FULL);
228 EXPECT_FALSE(tc.enable_sampling_);
229 EXPECT_FALSE(tc.enable_systrace_);
230 EXPECT_STREQ("-*Debug,-*Test", tc.ToCategoryFilterString().c_str());
231
232 tc = TraceConfig("This is an invalid config string.");
233 EXPECT_STREQ(kDefaultTraceConfigString, tc.ToString().c_str());
234 EXPECT_TRUE(tc.record_mode_ == RECORD_UNTIL_FULL);
235 EXPECT_FALSE(tc.enable_sampling_);
236 EXPECT_FALSE(tc.enable_systrace_);
237 EXPECT_STREQ("-*Debug,-*Test", tc.ToCategoryFilterString().c_str());
238
239 tc = TraceConfig("[\"This\", \"is\", \"not\", \"a\", \"dictionary\"]");
240 EXPECT_STREQ(kDefaultTraceConfigString, tc.ToString().c_str());
241 EXPECT_TRUE(tc.record_mode_ == RECORD_UNTIL_FULL);
242 EXPECT_FALSE(tc.enable_sampling_);
243 EXPECT_FALSE(tc.enable_systrace_);
244 EXPECT_STREQ("-*Debug,-*Test", tc.ToCategoryFilterString().c_str());
245
246 tc = TraceConfig("{\"record_mode\": invalid-value-needs-double-quote}");
247 EXPECT_STREQ(kDefaultTraceConfigString, tc.ToString().c_str());
248 EXPECT_TRUE(tc.record_mode_ == RECORD_UNTIL_FULL);
249 EXPECT_FALSE(tc.enable_sampling_);
250 EXPECT_FALSE(tc.enable_systrace_);
251 EXPECT_STREQ("-*Debug,-*Test", tc.ToCategoryFilterString().c_str());
252
253 // If the config string a dictionary formatted as a JSON string, it will
254 // initialize TraceConfig with best effort.
255 tc = TraceConfig("{}");
256 EXPECT_TRUE(tc.record_mode_ == RECORD_UNTIL_FULL);
257 EXPECT_FALSE(tc.enable_sampling_);
258 EXPECT_FALSE(tc.enable_systrace_);
259 EXPECT_STREQ("", tc.ToCategoryFilterString().c_str());
260
261 tc = TraceConfig("{\"arbitrary-key\":\"arbitrary-value\"}");
262 EXPECT_TRUE(tc.record_mode_ == RECORD_UNTIL_FULL);
263 EXPECT_FALSE(tc.enable_sampling_);
264 EXPECT_FALSE(tc.enable_systrace_);
265 EXPECT_STREQ("", tc.ToCategoryFilterString().c_str());
266
267 const char invalid_config_string[] =
268 "{"
269 "\"enable_sampling\":\"true\","
270 "\"enable_systrace\":1,"
271 "\"excluded_categories\":[\"excluded\"],"
272 "\"included_categories\":\"not a list\","
273 "\"record_mode\":\"arbitrary-mode\","
274 "\"synthetic_delays\":[\"test.Delay1;16\","
275 "\"invalid-delay\","
276 "\"test.Delay2;32\"]"
277 "}";
278 tc = TraceConfig(invalid_config_string);
279 EXPECT_TRUE(tc.record_mode_ == RECORD_UNTIL_FULL);
280 EXPECT_FALSE(tc.enable_sampling_);
281 EXPECT_FALSE(tc.enable_systrace_);
282 EXPECT_STREQ("-excluded,DELAY(test.Delay1;16),DELAY(test.Delay2;32)",
283 tc.ToCategoryFilterString().c_str());
284 }
285
286 TEST(TraceConfigTest, MergingTraceConfigs) {
287 // Merge
288 TraceConfig tc;
289 TraceConfig tc2("included,-excluded,inc_pattern*,-exc_pattern*", "");
290 tc.Merge(tc2);
291 EXPECT_STREQ("{"
292 "\"enable_sampling\":false,"
293 "\"enable_systrace\":false,"
294 "\"excluded_categories\":["
295 "\"*Debug\",\"*Test\",\"excluded\",\"exc_pattern*\""
296 "],"
297 "\"record_mode\":\"record-until-full\""
298 "}",
299 tc.ToString().c_str());
300
301 tc = TraceConfig("DELAY(test.Delay1;16)", "");
302 tc2 = TraceConfig("DELAY(test.Delay2;32)", "");
303 tc.Merge(tc2);
304 EXPECT_EQ(2u, tc.GetSyntheticDelayValues().size());
305 EXPECT_STREQ("test.Delay1;16", tc.GetSyntheticDelayValues()[0].c_str());
306 EXPECT_STREQ("test.Delay2;32", tc.GetSyntheticDelayValues()[1].c_str());
307 }
308
309 TEST(TraceConfigTest, IsCategoryGroupEnabled) {
310 // Enabling a disabled- category does not require all categories to be traced
311 // to be included.
312 TraceConfig tc("disabled-by-default-cc,-excluded", "");
313 EXPECT_STREQ("disabled-by-default-cc,-excluded",
314 tc.ToCategoryFilterString().c_str());
315 EXPECT_TRUE(tc.IsCategoryGroupEnabled("disabled-by-default-cc"));
316 EXPECT_TRUE(tc.IsCategoryGroupEnabled("some_other_group"));
317 EXPECT_FALSE(tc.IsCategoryGroupEnabled("excluded"));
318
319 // Enabled a disabled- category and also including makes all categories to
320 // be traced require including.
321 tc = TraceConfig("disabled-by-default-cc,included", "");
322 EXPECT_STREQ("included,disabled-by-default-cc",
323 tc.ToCategoryFilterString().c_str());
324 EXPECT_TRUE(tc.IsCategoryGroupEnabled("disabled-by-default-cc"));
325 EXPECT_TRUE(tc.IsCategoryGroupEnabled("included"));
326 EXPECT_FALSE(tc.IsCategoryGroupEnabled("other_included"));
327 }
328
329 TEST(TraceConfigTest, IsEmptyOrContainsLeadingOrTrailingWhitespace) {
330 // Test that IsEmptyOrContainsLeadingOrTrailingWhitespace actually catches
331 // categories that are explicitly forbidden.
332 // This method is called in a DCHECK to assert that we don't have these types
333 // of strings as categories.
334 EXPECT_TRUE(TraceConfig::IsEmptyOrContainsLeadingOrTrailingWhitespace(
335 " bad_category "));
336 EXPECT_TRUE(TraceConfig::IsEmptyOrContainsLeadingOrTrailingWhitespace(
337 " bad_category"));
338 EXPECT_TRUE(TraceConfig::IsEmptyOrContainsLeadingOrTrailingWhitespace(
339 "bad_category "));
340 EXPECT_TRUE(TraceConfig::IsEmptyOrContainsLeadingOrTrailingWhitespace(
341 " bad_category"));
342 EXPECT_TRUE(TraceConfig::IsEmptyOrContainsLeadingOrTrailingWhitespace(
343 "bad_category "));
344 EXPECT_TRUE(TraceConfig::IsEmptyOrContainsLeadingOrTrailingWhitespace(
345 " bad_category "));
346 EXPECT_TRUE(TraceConfig::IsEmptyOrContainsLeadingOrTrailingWhitespace(
347 ""));
348 EXPECT_FALSE(TraceConfig::IsEmptyOrContainsLeadingOrTrailingWhitespace(
349 "good_category"));
350 }
351
352 TEST(TraceOptionsTest, TraceOptionsFromString) {
353 TraceOptions options;
354 EXPECT_TRUE(options.SetFromString("record-until-full"));
355 EXPECT_EQ(RECORD_UNTIL_FULL, options.record_mode);
356 EXPECT_FALSE(options.enable_sampling);
357 EXPECT_FALSE(options.enable_systrace);
358
359 EXPECT_TRUE(options.SetFromString("record-continuously"));
360 EXPECT_EQ(RECORD_CONTINUOUSLY, options.record_mode);
361 EXPECT_FALSE(options.enable_sampling);
362 EXPECT_FALSE(options.enable_systrace);
363
364 EXPECT_TRUE(options.SetFromString("trace-to-console"));
365 EXPECT_EQ(ECHO_TO_CONSOLE, options.record_mode);
366 EXPECT_FALSE(options.enable_sampling);
367 EXPECT_FALSE(options.enable_systrace);
368
369 EXPECT_TRUE(options.SetFromString("record-as-much-as-possible"));
370 EXPECT_EQ(RECORD_AS_MUCH_AS_POSSIBLE, options.record_mode);
371 EXPECT_FALSE(options.enable_sampling);
372 EXPECT_FALSE(options.enable_systrace);
373
374 EXPECT_TRUE(options.SetFromString("record-until-full, enable-sampling"));
375 EXPECT_EQ(RECORD_UNTIL_FULL, options.record_mode);
376 EXPECT_TRUE(options.enable_sampling);
377 EXPECT_FALSE(options.enable_systrace);
378
379 EXPECT_TRUE(options.SetFromString("enable-systrace,record-continuously"));
380 EXPECT_EQ(RECORD_CONTINUOUSLY, options.record_mode);
381 EXPECT_FALSE(options.enable_sampling);
382 EXPECT_TRUE(options.enable_systrace);
383
384 EXPECT_TRUE(options.SetFromString(
385 "enable-systrace, trace-to-console,enable-sampling"));
386 EXPECT_EQ(ECHO_TO_CONSOLE, options.record_mode);
387 EXPECT_TRUE(options.enable_sampling);
388 EXPECT_TRUE(options.enable_systrace);
389
390 EXPECT_TRUE(options.SetFromString(
391 "record-continuously,record-until-full,trace-to-console"));
392 EXPECT_EQ(ECHO_TO_CONSOLE, options.record_mode);
393 EXPECT_FALSE(options.enable_systrace);
394 EXPECT_FALSE(options.enable_sampling);
395
396 EXPECT_TRUE(options.SetFromString(""));
397 EXPECT_EQ(RECORD_UNTIL_FULL, options.record_mode);
398 EXPECT_FALSE(options.enable_systrace);
399 EXPECT_FALSE(options.enable_sampling);
400
401 EXPECT_FALSE(options.SetFromString("foo-bar-baz"));
402 }
403
404 TEST(TraceOptionsTest, TraceOptionsToString) {
405 // Test that we can intialize TraceOptions from a string got from
406 // TraceOptions.ToString() method to get a same TraceOptions.
407 TraceRecordMode modes[] = {RECORD_UNTIL_FULL,
408 RECORD_CONTINUOUSLY,
409 ECHO_TO_CONSOLE,
410 RECORD_AS_MUCH_AS_POSSIBLE};
411 bool enable_sampling_options[] = {true, false};
412 bool enable_systrace_options[] = {true, false};
413
414 for (int i = 0; i < 4; ++i) {
415 for (int j = 0; j < 2; ++j) {
416 for (int k = 0; k < 2; ++k) {
417 TraceOptions original_option = TraceOptions(modes[i]);
418 original_option.enable_sampling = enable_sampling_options[j];
419 original_option.enable_systrace = enable_systrace_options[k];
420 TraceOptions new_options;
421 EXPECT_TRUE(new_options.SetFromString(original_option.ToString()));
422 EXPECT_EQ(original_option.record_mode, new_options.record_mode);
423 EXPECT_EQ(original_option.enable_sampling, new_options.enable_sampling);
424 EXPECT_EQ(original_option.enable_systrace, new_options.enable_systrace);
425 }
426 }
427 }
428 }
429
430 // Test the category filter.
431 TEST(CategoryFilterTest, CategoryFilter) {
432 // Using the default filter.
433 CategoryFilter default_cf = CategoryFilter(
434 CategoryFilter::kDefaultCategoryFilterString);
435 std::string category_filter_str = default_cf.ToString();
436 EXPECT_STREQ("-*Debug,-*Test", category_filter_str.c_str());
437 EXPECT_TRUE(default_cf.IsCategoryGroupEnabled("not-excluded-category"));
438 EXPECT_FALSE(
439 default_cf.IsCategoryGroupEnabled("disabled-by-default-category"));
440 EXPECT_TRUE(default_cf.IsCategoryGroupEnabled("Category1,CategoryDebug"));
441 EXPECT_TRUE(default_cf.IsCategoryGroupEnabled("CategoryDebug,Category1"));
442 EXPECT_TRUE(default_cf.IsCategoryGroupEnabled("CategoryTest,Category2"));
443
444 // Make sure that upon an empty string, we fall back to the default filter.
445 default_cf = CategoryFilter();
446 category_filter_str = default_cf.ToString();
447 EXPECT_STREQ("-*Debug,-*Test", category_filter_str.c_str());
448 EXPECT_TRUE(default_cf.IsCategoryGroupEnabled("not-excluded-category"));
449 EXPECT_TRUE(default_cf.IsCategoryGroupEnabled("Category1,CategoryDebug"));
450 EXPECT_TRUE(default_cf.IsCategoryGroupEnabled("CategoryDebug,Category1"));
451 EXPECT_TRUE(default_cf.IsCategoryGroupEnabled("CategoryTest,Category2"));
452
453 // Using an arbitrary non-empty filter.
454 CategoryFilter cf("included,-excluded,inc_pattern*,-exc_pattern*");
455 category_filter_str = cf.ToString();
456 EXPECT_STREQ("included,inc_pattern*,-excluded,-exc_pattern*",
457 category_filter_str.c_str());
458 EXPECT_TRUE(cf.IsCategoryGroupEnabled("included"));
459 EXPECT_TRUE(cf.IsCategoryGroupEnabled("inc_pattern_category"));
460 EXPECT_FALSE(cf.IsCategoryGroupEnabled("exc_pattern_category"));
461 EXPECT_FALSE(cf.IsCategoryGroupEnabled("excluded"));
462 EXPECT_FALSE(cf.IsCategoryGroupEnabled("not-excluded-nor-included"));
463 EXPECT_FALSE(cf.IsCategoryGroupEnabled("Category1,CategoryDebug"));
464 EXPECT_FALSE(cf.IsCategoryGroupEnabled("CategoryDebug,Category1"));
465 EXPECT_FALSE(cf.IsCategoryGroupEnabled("CategoryTest,Category2"));
466
467 cf.Merge(default_cf);
468 category_filter_str = cf.ToString();
469 EXPECT_STREQ("-excluded,-exc_pattern*,-*Debug,-*Test",
470 category_filter_str.c_str());
471 cf.Clear();
472
473 CategoryFilter reconstructed_cf(category_filter_str);
474 category_filter_str = reconstructed_cf.ToString();
475 EXPECT_STREQ("-excluded,-exc_pattern*,-*Debug,-*Test",
476 category_filter_str.c_str());
477
478 // One included category.
479 CategoryFilter one_inc_cf("only_inc_cat");
480 category_filter_str = one_inc_cf.ToString();
481 EXPECT_STREQ("only_inc_cat", category_filter_str.c_str());
482
483 // One excluded category.
484 CategoryFilter one_exc_cf("-only_exc_cat");
485 category_filter_str = one_exc_cf.ToString();
486 EXPECT_STREQ("-only_exc_cat", category_filter_str.c_str());
487
488 // Enabling a disabled- category does not require all categories to be traced
489 // to be included.
490 CategoryFilter disabled_cat("disabled-by-default-cc,-excluded");
491 EXPECT_STREQ("disabled-by-default-cc,-excluded",
492 disabled_cat.ToString().c_str());
493 EXPECT_TRUE(disabled_cat.IsCategoryGroupEnabled("disabled-by-default-cc"));
494 EXPECT_TRUE(disabled_cat.IsCategoryGroupEnabled("some_other_group"));
495 EXPECT_FALSE(disabled_cat.IsCategoryGroupEnabled("excluded"));
496
497 // Enabled a disabled- category and also including makes all categories to
498 // be traced require including.
499 CategoryFilter disabled_inc_cat("disabled-by-default-cc,included");
500 EXPECT_STREQ("included,disabled-by-default-cc",
501 disabled_inc_cat.ToString().c_str());
502 EXPECT_TRUE(
503 disabled_inc_cat.IsCategoryGroupEnabled("disabled-by-default-cc"));
504 EXPECT_TRUE(disabled_inc_cat.IsCategoryGroupEnabled("included"));
505 EXPECT_FALSE(disabled_inc_cat.IsCategoryGroupEnabled("other_included"));
506
507 // Test that IsEmptyOrContainsLeadingOrTrailingWhitespace actually catches
508 // categories that are explicitly forbiden.
509 // This method is called in a DCHECK to assert that we don't have these types
510 // of strings as categories.
511 EXPECT_TRUE(CategoryFilter::IsEmptyOrContainsLeadingOrTrailingWhitespace(
512 " bad_category "));
513 EXPECT_TRUE(CategoryFilter::IsEmptyOrContainsLeadingOrTrailingWhitespace(
514 " bad_category"));
515 EXPECT_TRUE(CategoryFilter::IsEmptyOrContainsLeadingOrTrailingWhitespace(
516 "bad_category "));
517 EXPECT_TRUE(CategoryFilter::IsEmptyOrContainsLeadingOrTrailingWhitespace(
518 " bad_category"));
519 EXPECT_TRUE(CategoryFilter::IsEmptyOrContainsLeadingOrTrailingWhitespace(
520 "bad_category "));
521 EXPECT_TRUE(CategoryFilter::IsEmptyOrContainsLeadingOrTrailingWhitespace(
522 " bad_category "));
523 EXPECT_TRUE(CategoryFilter::IsEmptyOrContainsLeadingOrTrailingWhitespace(
524 ""));
525 EXPECT_FALSE(CategoryFilter::IsEmptyOrContainsLeadingOrTrailingWhitespace(
526 "good_category"));
527 }
528
529 } // namespace trace_event
530 } // namespace base
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698