Chromium Code Reviews| Index: base/trace_event/trace_config_unittest.cc |
| diff --git a/base/trace_event/trace_config_unittest.cc b/base/trace_event/trace_config_unittest.cc |
| index b6503f5e907e2c539cf487205801046e661f8e66..85da73d850021f97a333f98d4a3e173538f5921a 100644 |
| --- a/base/trace_event/trace_config_unittest.cc |
| +++ b/base/trace_event/trace_config_unittest.cc |
| @@ -21,7 +21,6 @@ const char kDefaultTraceConfigString[] = |
| "\"enable_argument_filter\":false," |
| "\"enable_sampling\":false," |
| "\"enable_systrace\":false," |
| - "\"excluded_categories\":[\"*Debug\",\"*Test\"]," |
| "\"record_mode\":\"record-until-full\"" |
| "}"; |
| @@ -48,6 +47,24 @@ const char kCustomTraceConfigString[] = |
| "\"synthetic_delays\":[\"test.Delay1;16\",\"test.Delay2;32\"]" |
| "}"; |
| +void CheckDefaultTraceConfigBehavior(const TraceConfig& tc) { |
| + EXPECT_EQ(RECORD_UNTIL_FULL, tc.GetTraceRecordMode()); |
| + EXPECT_FALSE(tc.IsSamplingEnabled()); |
| + EXPECT_FALSE(tc.IsSystraceEnabled()); |
| + EXPECT_FALSE(tc.IsArgumentFilterEnabled()); |
| + |
| + // Default trace config enables every category filter except the |
| + // disabled-by-default-* ones. |
| + EXPECT_TRUE(tc.IsCategoryGroupEnabled("Category1")); |
| + EXPECT_TRUE(tc.IsCategoryGroupEnabled("not-excluded-category")); |
| + EXPECT_FALSE(tc.IsCategoryGroupEnabled("disabled-by-default-cc")); |
| + |
| + EXPECT_TRUE(tc.IsCategoryGroupEnabled("Category1,not-excluded-category")); |
| + EXPECT_TRUE(tc.IsCategoryGroupEnabled("Category1,disabled-by-default-cc")); |
| + EXPECT_FALSE(tc.IsCategoryGroupEnabled( |
| + "disabled-by-default-cc,disabled-by-default-cc2")); |
| +} |
| + |
| } // namespace |
| TEST(TraceConfigTest, TraceConfigFromValidLegacyFormat) { |
| @@ -155,9 +172,6 @@ TEST(TraceConfigTest, TraceConfigFromValidLegacyFormat) { |
| config.ToTraceOptionsString().c_str()); |
| // From category filter strings |
| - config = TraceConfig("-*Debug,-*Test", ""); |
| - EXPECT_STREQ("-*Debug,-*Test", config.ToCategoryFilterString().c_str()); |
| - |
| config = TraceConfig("included,-excluded,inc_pattern*,-exc_pattern*", ""); |
| EXPECT_STREQ("included,inc_pattern*,-excluded,-exc_pattern*", |
| config.ToCategoryFilterString().c_str()); |
| @@ -257,38 +271,79 @@ TEST(TraceConfigTest, TraceConfigFromInvalidLegacyStrings) { |
| } |
| TEST(TraceConfigTest, ConstructDefaultTraceConfig) { |
| - // Make sure that upon an empty string, we fall back to the default config. |
| TraceConfig tc; |
| + EXPECT_STREQ("", tc.ToCategoryFilterString().c_str()); |
| EXPECT_STREQ(kDefaultTraceConfigString, tc.ToString().c_str()); |
| - EXPECT_EQ(RECORD_UNTIL_FULL, tc.GetTraceRecordMode()); |
| - EXPECT_FALSE(tc.IsSamplingEnabled()); |
| - EXPECT_FALSE(tc.IsSystraceEnabled()); |
| - EXPECT_FALSE(tc.IsArgumentFilterEnabled()); |
| - EXPECT_STREQ("-*Debug,-*Test", tc.ToCategoryFilterString().c_str()); |
| + CheckDefaultTraceConfigBehavior(tc); |
| + |
| + // Constructors from category filter string and trace option string. |
| + TraceConfig tc_asterisk("*", ""); |
| + EXPECT_STREQ("*", tc_asterisk.ToCategoryFilterString().c_str()); |
| + CheckDefaultTraceConfigBehavior(tc_asterisk); |
| + |
| + TraceConfig tc_empty_category_filter("", ""); |
| + EXPECT_STREQ("", tc_empty_category_filter.ToCategoryFilterString().c_str()); |
| + EXPECT_STREQ(kDefaultTraceConfigString, |
| + tc_empty_category_filter.ToString().c_str()); |
| + CheckDefaultTraceConfigBehavior(tc_empty_category_filter); |
| + |
| + // Constructor from JSON formated config string. |
| + TraceConfig tc_empty_json_string(""); |
| + EXPECT_STREQ("", tc_empty_json_string.ToCategoryFilterString().c_str()); |
| + EXPECT_STREQ(kDefaultTraceConfigString, |
| + tc_empty_json_string.ToString().c_str()); |
| + CheckDefaultTraceConfigBehavior(tc_empty_json_string); |
| + |
| + // Constructor from dictionary value. |
| + DictionaryValue dict; |
| + TraceConfig tc_dict(dict); |
| + EXPECT_STREQ("", tc_dict.ToCategoryFilterString().c_str()); |
| + EXPECT_STREQ(kDefaultTraceConfigString, tc_dict.ToString().c_str()); |
| + CheckDefaultTraceConfigBehavior(tc_dict); |
| +} |
| - EXPECT_FALSE(tc.IsCategoryEnabled("Category1")); |
| - EXPECT_FALSE(tc.IsCategoryEnabled("not-excluded-category")); |
| - EXPECT_FALSE(tc.IsCategoryEnabled("CategoryTest")); |
| - EXPECT_FALSE(tc.IsCategoryEnabled("CategoryDebug")); |
| - EXPECT_FALSE(tc.IsCategoryEnabled("disabled-by-default-cc")); |
| +TEST(TraceConfigTest, EmptyAndAsteriskCategoryFilterString) { |
| + TraceConfig tc_empty("", ""); |
| + TraceConfig tc_asterisk("*", ""); |
| - EXPECT_TRUE(tc.IsCategoryGroupEnabled("Category1")); |
| - EXPECT_TRUE(tc.IsCategoryGroupEnabled("not-excluded-category")); |
| - EXPECT_FALSE(tc.IsCategoryGroupEnabled("CategoryTest")); |
| - EXPECT_FALSE(tc.IsCategoryGroupEnabled("CategoryDebug")); |
| - EXPECT_FALSE(tc.IsCategoryGroupEnabled("disabled-by-default-cc")); |
| + EXPECT_STREQ("", tc_empty.ToCategoryFilterString().c_str()); |
| + EXPECT_STREQ("*", tc_asterisk.ToCategoryFilterString().c_str()); |
| - EXPECT_TRUE(tc.IsCategoryGroupEnabled("Category1,CategoryDebug")); |
| - EXPECT_TRUE(tc.IsCategoryGroupEnabled("CategoryDebug,Category1")); |
| - EXPECT_TRUE(tc.IsCategoryGroupEnabled("CategoryTest,not-excluded-category")); |
| - EXPECT_FALSE(tc.IsCategoryGroupEnabled("CategoryDebug,CategoryTest")); |
| + // Both fall back to default config. |
| + CheckDefaultTraceConfigBehavior(tc_empty); |
| + CheckDefaultTraceConfigBehavior(tc_asterisk); |
| + |
| + // They differ only for internal checking. |
| + EXPECT_FALSE(tc_empty.IsCategoryEnabled("Category1")); |
| + EXPECT_FALSE(tc_empty.IsCategoryEnabled("not-excluded-category")); |
| + EXPECT_TRUE(tc_asterisk.IsCategoryEnabled("Category1")); |
| + EXPECT_TRUE(tc_asterisk.IsCategoryEnabled("not-excluded-category")); |
| +} |
| + |
| +TEST(TraceConfigTest, DisabledByDefaultCategoryFilterString) { |
| + TraceConfig tc("foo,disabled-by-default-foo", ""); |
| + EXPECT_STREQ("foo,disabled-by-default-foo", |
| + tc.ToCategoryFilterString().c_str()); |
| + EXPECT_TRUE(tc.IsCategoryGroupEnabled("foo")); |
| + EXPECT_TRUE(tc.IsCategoryGroupEnabled("disabled-by-default-foo")); |
| + EXPECT_FALSE(tc.IsCategoryGroupEnabled("bar")); |
| + EXPECT_FALSE(tc.IsCategoryGroupEnabled("disabled-by-default-bar")); |
| + |
| + // Enabling only the disabled-by-default-* category means the default ones |
| + // are also enabled. |
|
Zhen Wang
2016/06/15 18:00:24
This is surprising to me. I thought only the disab
|
| + tc = TraceConfig("disabled-by-default-foo", ""); |
| + EXPECT_STREQ("disabled-by-default-foo", tc.ToCategoryFilterString().c_str()); |
| + EXPECT_TRUE(tc.IsCategoryGroupEnabled("disabled-by-default-foo")); |
| + EXPECT_TRUE(tc.IsCategoryGroupEnabled("foo")); |
| + EXPECT_TRUE(tc.IsCategoryGroupEnabled("bar")); |
| + EXPECT_FALSE(tc.IsCategoryGroupEnabled("disabled-by-default-bar")); |
| } |
| TEST(TraceConfigTest, TraceConfigFromDict) { |
| - // Passing in empty dictionary will not result in default trace config. |
| + // Passing in empty dictionary will result in default trace config. |
| DictionaryValue dict; |
| TraceConfig tc(dict); |
| - EXPECT_STRNE(kDefaultTraceConfigString, tc.ToString().c_str()); |
| + EXPECT_STREQ(kDefaultTraceConfigString, tc.ToString().c_str()); |
| EXPECT_EQ(RECORD_UNTIL_FULL, tc.GetTraceRecordMode()); |
| EXPECT_FALSE(tc.IsSamplingEnabled()); |
| EXPECT_FALSE(tc.IsSystraceEnabled()); |
| @@ -307,7 +362,7 @@ TEST(TraceConfigTest, TraceConfigFromDict) { |
| EXPECT_FALSE(default_tc.IsSamplingEnabled()); |
| EXPECT_FALSE(default_tc.IsSystraceEnabled()); |
| EXPECT_FALSE(default_tc.IsArgumentFilterEnabled()); |
| - EXPECT_STREQ("-*Debug,-*Test", default_tc.ToCategoryFilterString().c_str()); |
| + EXPECT_STREQ("", default_tc.ToCategoryFilterString().c_str()); |
| std::unique_ptr<Value> custom_value( |
| JSONReader::Read(kCustomTraceConfigString)); |
| @@ -405,7 +460,8 @@ TEST(TraceConfigTest, TraceConfigFromInvalidString) { |
| EXPECT_FALSE(tc.IsSamplingEnabled()); |
| EXPECT_FALSE(tc.IsSystraceEnabled()); |
| EXPECT_FALSE(tc.IsArgumentFilterEnabled()); |
| - EXPECT_STREQ("-*Debug,-*Test", tc.ToCategoryFilterString().c_str()); |
| + EXPECT_STREQ("", tc.ToCategoryFilterString().c_str()); |
| + CheckDefaultTraceConfigBehavior(tc); |
| tc = TraceConfig("This is an invalid config string."); |
| EXPECT_STREQ(kDefaultTraceConfigString, tc.ToString().c_str()); |
| @@ -413,7 +469,8 @@ TEST(TraceConfigTest, TraceConfigFromInvalidString) { |
| EXPECT_FALSE(tc.IsSamplingEnabled()); |
| EXPECT_FALSE(tc.IsSystraceEnabled()); |
| EXPECT_FALSE(tc.IsArgumentFilterEnabled()); |
| - EXPECT_STREQ("-*Debug,-*Test", tc.ToCategoryFilterString().c_str()); |
| + EXPECT_STREQ("", tc.ToCategoryFilterString().c_str()); |
| + CheckDefaultTraceConfigBehavior(tc); |
| tc = TraceConfig("[\"This\", \"is\", \"not\", \"a\", \"dictionary\"]"); |
| EXPECT_STREQ(kDefaultTraceConfigString, tc.ToString().c_str()); |
| @@ -421,7 +478,8 @@ TEST(TraceConfigTest, TraceConfigFromInvalidString) { |
| EXPECT_FALSE(tc.IsSamplingEnabled()); |
| EXPECT_FALSE(tc.IsSystraceEnabled()); |
| EXPECT_FALSE(tc.IsArgumentFilterEnabled()); |
| - EXPECT_STREQ("-*Debug,-*Test", tc.ToCategoryFilterString().c_str()); |
| + EXPECT_STREQ("", tc.ToCategoryFilterString().c_str()); |
| + CheckDefaultTraceConfigBehavior(tc); |
| tc = TraceConfig("{\"record_mode\": invalid-value-needs-double-quote}"); |
| EXPECT_STREQ(kDefaultTraceConfigString, tc.ToString().c_str()); |
| @@ -429,7 +487,8 @@ TEST(TraceConfigTest, TraceConfigFromInvalidString) { |
| EXPECT_FALSE(tc.IsSamplingEnabled()); |
| EXPECT_FALSE(tc.IsSystraceEnabled()); |
| EXPECT_FALSE(tc.IsArgumentFilterEnabled()); |
| - EXPECT_STREQ("-*Debug,-*Test", tc.ToCategoryFilterString().c_str()); |
| + EXPECT_STREQ("", tc.ToCategoryFilterString().c_str()); |
| + CheckDefaultTraceConfigBehavior(tc); |
| // If the config string a dictionary formatted as a JSON string, it will |
| // initialize TraceConfig with best effort. |
| @@ -439,6 +498,7 @@ TEST(TraceConfigTest, TraceConfigFromInvalidString) { |
| EXPECT_FALSE(tc.IsSystraceEnabled()); |
| EXPECT_FALSE(tc.IsArgumentFilterEnabled()); |
| EXPECT_STREQ("", tc.ToCategoryFilterString().c_str()); |
| + CheckDefaultTraceConfigBehavior(tc); |
| tc = TraceConfig("{\"arbitrary-key\":\"arbitrary-value\"}"); |
| EXPECT_EQ(RECORD_UNTIL_FULL, tc.GetTraceRecordMode()); |
| @@ -446,6 +506,7 @@ TEST(TraceConfigTest, TraceConfigFromInvalidString) { |
| EXPECT_FALSE(tc.IsSystraceEnabled()); |
| EXPECT_FALSE(tc.IsArgumentFilterEnabled()); |
| EXPECT_STREQ("", tc.ToCategoryFilterString().c_str()); |
| + CheckDefaultTraceConfigBehavior(tc); |
| const char invalid_config_string[] = |
| "{" |
| @@ -487,9 +548,7 @@ TEST(TraceConfigTest, MergingTraceConfigs) { |
| "\"enable_argument_filter\":false," |
| "\"enable_sampling\":false," |
| "\"enable_systrace\":false," |
| - "\"excluded_categories\":[" |
| - "\"*Debug\",\"*Test\",\"excluded\",\"exc_pattern*\"" |
| - "]," |
| + "\"excluded_categories\":[\"excluded\",\"exc_pattern*\"]," |
| "\"record_mode\":\"record-until-full\"" |
| "}", |
| tc.ToString().c_str()); |