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

Unified Diff: content/browser/tracing/background_tracing_config_unittest.cc

Issue 1162623002: Implement FromDict/IntoDict for BackgroundTracingConfig. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Rename file to fix mac gclient error. 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 side-by-side diff with in-line comments
Download patch
Index: content/browser/tracing/background_tracing_config_unittest.cc
diff --git a/content/browser/tracing/background_tracing_config_unittest.cc b/content/browser/tracing/background_tracing_config_unittest.cc
new file mode 100644
index 0000000000000000000000000000000000000000..13fe0a05aa4366cf04b659ed800406142d52cd72
--- /dev/null
+++ b/content/browser/tracing/background_tracing_config_unittest.cc
@@ -0,0 +1,381 @@
+// Copyright 2015 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "base/json/json_reader.h"
+#include "base/json/json_writer.h"
+#include "base/memory/scoped_ptr.h"
+#include "base/values.h"
+#include "content/public/browser/background_tracing_preemptive_config.h"
+#include "content/public/browser/background_tracing_reactive_config.h"
+#include "testing/gtest/include/gtest/gtest.h"
+
+namespace content {
+
+class BackgroundTracingConfigTest : public testing::Test {};
+
+scoped_ptr<BackgroundTracingConfig> ReadFromJSONString(
+ const std::string& json_text) {
+ scoped_ptr<base::Value> json_value(base::JSONReader::Read(json_text));
+
+ base::DictionaryValue* dict = NULL;
+ if (json_value)
+ json_value->GetAsDictionary(&dict);
+
+ return content::BackgroundTracingConfig::FromDict(dict);
+}
+
+scoped_ptr<BackgroundTracingPreemptiveConfig> ReadPreemptiveFromJSONString(
+ const std::string& json_text) {
+ return make_scoped_ptr(static_cast<BackgroundTracingPreemptiveConfig*>(
+ ReadFromJSONString(json_text).release()));
+}
+
+scoped_ptr<BackgroundTracingReactiveConfig> ReadReactiveFromJSONString(
+ const std::string& json_text) {
+ return make_scoped_ptr(static_cast<BackgroundTracingReactiveConfig*>(
+ ReadFromJSONString(json_text).release()));
+}
+
+std::string ConfigToString(const BackgroundTracingConfig* config) {
+ scoped_ptr<base::DictionaryValue> dict(new base::DictionaryValue());
+
+ BackgroundTracingConfig::IntoDict(config, dict.get());
+
+ std::string results;
+ if (base::JSONWriter::Write(*dict.get(), &results))
+ return results;
+ return "";
+}
+
+TEST_F(BackgroundTracingConfigTest, ConfigFromInvalidString) {
+ // Missing or invalid mode
+ EXPECT_FALSE(ReadFromJSONString("{}"));
+ EXPECT_FALSE(ReadFromJSONString("{\"mode\":\"invalid\"}"));
+}
+
+TEST_F(BackgroundTracingConfigTest, PreemptiveConfigFromInvalidString) {
+ // Missing or invalid category
+ EXPECT_FALSE(ReadFromJSONString("{\"mode\":\"preemptive\"}"));
+ EXPECT_FALSE(ReadFromJSONString(
+ "{\"mode\":\"preemptive\", \"category\": \"invalid\"}"));
+
+ // Missing or invalid configs
+ EXPECT_FALSE(ReadFromJSONString(
+ "{\"mode\":\"preemptive\", \"category\": \"benchmark\"}"));
+ EXPECT_FALSE(ReadFromJSONString(
+ "{\"mode\":\"preemptive\", \"category\": \"benchmark\","
+ "\"configs\": \"\"}"));
+ EXPECT_FALSE(ReadFromJSONString(
+ "{\"mode\":\"preemptive\", \"category\": \"benchmark\","
+ "\"configs\": {}}"));
+
+ // Invalid config entries
+ EXPECT_FALSE(ReadFromJSONString(
+ "{\"mode\":\"preemptive\", \"category\": \"benchmark\","
+ "\"configs\": [{}]}"));
+ EXPECT_FALSE(ReadFromJSONString(
+ "{\"mode\":\"preemptive\", \"category\": \"benchmark\","
+ "\"configs\": [\"invalid\"]}"));
+ EXPECT_FALSE(ReadFromJSONString(
+ "{\"mode\":\"preemptive\", \"category\": \"benchmark\","
+ "\"configs\": [[]]}"));
+ EXPECT_FALSE(ReadFromJSONString(
+ "{\"mode\":\"preemptive\", \"category\": \"benchmark\","
+ "\"configs\": [{\"rule\": \"invalid\"}]}"));
+
+ // Missing or invalid keys for a named trigger.
+ EXPECT_FALSE(ReadFromJSONString(
+ "{\"mode\":\"preemptive\", \"category\": \"benchmark\","
+ "\"configs\": [{\"rule\": \"MONITOR_AND_DUMP_WHEN_TRIGGER_NAMED\"}]}"));
+}
+
+TEST_F(BackgroundTracingConfigTest, ReactiveConfigFromInvalidString) {
+ // Missing or invalid configs
+ EXPECT_FALSE(ReadFromJSONString("{\"mode\":\"reactive\"}"));
+ EXPECT_FALSE(
+ ReadFromJSONString("{\"mode\":\"reactive\", \"configs\": \"invalid\"}"));
+ EXPECT_FALSE(ReadFromJSONString("{\"mode\":\"reactive\", \"configs\": {}}"));
+
+ // Invalid config entries
+ EXPECT_FALSE(
+ ReadFromJSONString("{\"mode\":\"reactive\", \"configs\": [{}]}"));
+ EXPECT_FALSE(ReadFromJSONString(
+ "{\"mode\":\"reactive\", \"configs\": [\"invalid\"]}"));
+
+ // Invalid tracing rule type
+ EXPECT_FALSE(ReadFromJSONString(
+ "{\"mode\":\"reactive\","
+ "\"configs\": [{\"rule\": []}]}"));
+ EXPECT_FALSE(ReadFromJSONString(
+ "{\"mode\":\"reactive\","
+ "\"configs\": [{\"rule\": \"\"}]}"));
+ EXPECT_FALSE(ReadFromJSONString(
+ "{\"mode\":\"reactive\","
+ "\"configs\": [{\"rule\": "
+ "\"trace_on_trigger_until_10s_or_trigger_or_full\"}]}"));
+
+ EXPECT_FALSE(ReadFromJSONString(
+ "{\"mode\":\"reactive\","
+ "\"configs\": [{\"rule\": "
+ "\"trace_on_trigger_until_10s_or_trigger_or_full\", \"category\": "
+ "[]}]}"));
+ EXPECT_FALSE(ReadFromJSONString(
+ "{\"mode\":\"reactive\","
+ "\"configs\": [{\"rule\": "
+ "\"trace_on_trigger_until_10s_or_trigger_or_full\", \"category\": "
+ "\"\"}]}"));
+ EXPECT_FALSE(ReadFromJSONString(
+ "{\"mode\":\"reactive\","
+ "\"configs\": [{\"rule\": "
+ "\"trace_on_trigger_until_10s_or_trigger_or_full\", \"category\": "
+ "\"benchmark\"}]}"));
+
+ EXPECT_FALSE(ReadFromJSONString(
+ "{\"mode\":\"reactive\","
+ "\"configs\": [{\"rule\": "
+ "\"trace_on_trigger_until_10s_or_trigger_or_full\", \"category\": "
+ "\"benchmark\", \"trigger_name\": []}]}"));
+ EXPECT_FALSE(ReadFromJSONString(
+ "{\"mode\":\"reactive\","
+ "\"configs\": [{\"rule\": "
+ "\"trace_on_trigger_until_10s_or_trigger_or_full\", \"category\": "
+ "\"benchmark\", \"trigger_name\": 0}]}"));
+}
+
+TEST_F(BackgroundTracingConfigTest, PreemptiveConfigFromValidString) {
+ scoped_ptr<BackgroundTracingPreemptiveConfig> config;
+
+ config = ReadPreemptiveFromJSONString(
+ "{\"mode\":\"PREEMPTIVE_TRACING_MODE\", \"category\": "
+ "\"BENCHMARK\",\"configs\": []}");
+ EXPECT_TRUE(config);
+ EXPECT_EQ(config->mode, BackgroundTracingConfig::PREEMPTIVE_TRACING_MODE);
+ EXPECT_EQ(config->category_preset, BackgroundTracingConfig::BENCHMARK);
+ EXPECT_EQ(config->configs.size(), 0u);
+
+ config = ReadPreemptiveFromJSONString(
+ "{\"mode\":\"PREEMPTIVE_TRACING_MODE\", \"category\": "
+ "\"BENCHMARK_DEEP\",\"configs\": []}");
+ EXPECT_TRUE(config);
+ EXPECT_EQ(config->mode, BackgroundTracingConfig::PREEMPTIVE_TRACING_MODE);
+ EXPECT_EQ(config->category_preset, BackgroundTracingConfig::BENCHMARK_DEEP);
+ EXPECT_EQ(config->configs.size(), 0u);
+
+ config = ReadPreemptiveFromJSONString(
+ "{\"mode\":\"PREEMPTIVE_TRACING_MODE\", \"category\": "
+ "\"BENCHMARK\",\"configs\": [{\"rule\": "
+ "\"MONITOR_AND_DUMP_WHEN_TRIGGER_NAMED\", \"trigger_name\":\"foo\"}]}");
+ EXPECT_TRUE(config);
+ EXPECT_EQ(config->mode, BackgroundTracingConfig::PREEMPTIVE_TRACING_MODE);
+ EXPECT_EQ(config->category_preset, BackgroundTracingConfig::BENCHMARK);
+ EXPECT_EQ(config->configs.size(), 1u);
+ EXPECT_EQ(
+ config->configs[0].type,
+ BackgroundTracingPreemptiveConfig::MONITOR_AND_DUMP_WHEN_TRIGGER_NAMED);
+ EXPECT_EQ(config->configs[0].named_trigger_info.trigger_name, "foo");
+
+ config = ReadPreemptiveFromJSONString(
+ "{\"mode\":\"PREEMPTIVE_TRACING_MODE\", \"category\": "
+ "\"BENCHMARK\",\"configs\": [{\"rule\": "
+ "\"MONITOR_AND_DUMP_WHEN_TRIGGER_NAMED\", \"trigger_name\":\"foo1\"}, "
+ "{\"rule\": \"MONITOR_AND_DUMP_WHEN_TRIGGER_NAMED\", "
+ "\"trigger_name\":\"foo2\"}]}");
+ EXPECT_TRUE(config);
+ EXPECT_EQ(config->mode, BackgroundTracingConfig::PREEMPTIVE_TRACING_MODE);
+ EXPECT_EQ(config->category_preset, BackgroundTracingConfig::BENCHMARK);
+ EXPECT_EQ(config->configs.size(), 2u);
+ EXPECT_EQ(
+ config->configs[0].type,
+ BackgroundTracingPreemptiveConfig::MONITOR_AND_DUMP_WHEN_TRIGGER_NAMED);
+ EXPECT_EQ(config->configs[0].named_trigger_info.trigger_name, "foo1");
+ EXPECT_EQ(
+ config->configs[1].type,
+ BackgroundTracingPreemptiveConfig::MONITOR_AND_DUMP_WHEN_TRIGGER_NAMED);
+ EXPECT_EQ(config->configs[1].named_trigger_info.trigger_name, "foo2");
+}
+
+TEST_F(BackgroundTracingConfigTest, ReactiveConfigFromValidString) {
+ scoped_ptr<BackgroundTracingReactiveConfig> config;
+
+ config = ReadReactiveFromJSONString(
+ "{\"mode\":\"REACTIVE_TRACING_MODE\", \"configs\": []}");
+ EXPECT_TRUE(config);
+ EXPECT_EQ(config->mode, BackgroundTracingConfig::REACTIVE_TRACING_MODE);
+ EXPECT_EQ(config->configs.size(), 0u);
+
+ config = ReadReactiveFromJSONString(
+ "{\"mode\":\"REACTIVE_TRACING_MODE\",\"configs\": [{\"rule\": "
+ "\"TRACE_ON_MANUAL_TRIGGER_UNTIL_10S_OR_NEXT_TRIGGER_OR_FULL\", "
+ "\"category\": \"BENCHMARK\", \"trigger_name\": \"foo\"}]}");
+ EXPECT_TRUE(config);
+ EXPECT_EQ(config->mode, BackgroundTracingConfig::REACTIVE_TRACING_MODE);
+ EXPECT_EQ(config->configs.size(), 1u);
+ EXPECT_EQ(config->configs[0].type,
+ BackgroundTracingReactiveConfig::
+ TRACE_ON_MANUAL_TRIGGER_UNTIL_10S_OR_NEXT_TRIGGER_OR_FULL);
+ EXPECT_EQ(config->configs[0].trigger_name, "foo");
+ EXPECT_EQ(config->configs[0].category_preset,
+ BackgroundTracingConfig::BENCHMARK);
+
+ config = ReadReactiveFromJSONString(
+ "{\"mode\":\"REACTIVE_TRACING_MODE\",\"configs\": [{\"rule\": "
+ "\"TRACE_ON_MANUAL_TRIGGER_UNTIL_10S_OR_NEXT_TRIGGER_OR_FULL\", "
+ "\"category\": \"BENCHMARK_DEEP\", \"trigger_name\": \"foo\"}]}");
+ EXPECT_TRUE(config);
+ EXPECT_EQ(config->mode, BackgroundTracingConfig::REACTIVE_TRACING_MODE);
+ EXPECT_EQ(config->configs.size(), 1u);
+ EXPECT_EQ(config->configs[0].type,
+ BackgroundTracingReactiveConfig::
+ TRACE_ON_MANUAL_TRIGGER_UNTIL_10S_OR_NEXT_TRIGGER_OR_FULL);
+ EXPECT_EQ(config->configs[0].trigger_name, "foo");
+ EXPECT_EQ(config->configs[0].category_preset,
+ BackgroundTracingConfig::BENCHMARK_DEEP);
+
+ config = ReadReactiveFromJSONString(
+ "{\"mode\":\"REACTIVE_TRACING_MODE\",\"configs\": [{\"rule\": "
+ "\"TRACE_ON_MANUAL_TRIGGER_UNTIL_10S_OR_NEXT_TRIGGER_OR_FULL\", "
+ "\"category\": \"BENCHMARK_DEEP\", \"trigger_name\": "
+ "\"foo1\"},{\"rule\": "
+ "\"TRACE_ON_MANUAL_TRIGGER_UNTIL_10S_OR_NEXT_TRIGGER_OR_FULL\", "
+ "\"category\": \"BENCHMARK_DEEP\", \"trigger_name\": \"foo2\"}]}");
+ EXPECT_TRUE(config);
+ EXPECT_EQ(config->mode, BackgroundTracingConfig::REACTIVE_TRACING_MODE);
+ EXPECT_EQ(config->configs.size(), 2u);
+ EXPECT_EQ(config->configs[0].type,
+ BackgroundTracingReactiveConfig::
+ TRACE_ON_MANUAL_TRIGGER_UNTIL_10S_OR_NEXT_TRIGGER_OR_FULL);
+ EXPECT_EQ(config->configs[0].trigger_name, "foo1");
+ EXPECT_EQ(config->configs[0].category_preset,
+ BackgroundTracingConfig::BENCHMARK_DEEP);
+ EXPECT_EQ(config->configs[1].type,
+ BackgroundTracingReactiveConfig::
+ TRACE_ON_MANUAL_TRIGGER_UNTIL_10S_OR_NEXT_TRIGGER_OR_FULL);
+ EXPECT_EQ(config->configs[1].trigger_name, "foo2");
+ EXPECT_EQ(config->configs[1].category_preset,
+ BackgroundTracingConfig::BENCHMARK_DEEP);
+}
+
+TEST_F(BackgroundTracingConfigTest, ValidPreemptiveConfigToString) {
+ scoped_ptr<BackgroundTracingPreemptiveConfig> config(
+ new BackgroundTracingPreemptiveConfig());
+
+ // Default values
+ EXPECT_EQ(ConfigToString(config.get()),
+ "{\"category\":\"BENCHMARK\",\"configs\":[],\"mode\":\"PREEMPTIVE_"
+ "TRACING_MODE\"}");
+
+ // Change category_preset
+ config->category_preset = BackgroundTracingConfig::BENCHMARK_DEEP;
+ EXPECT_EQ(ConfigToString(config.get()),
+ "{\"category\":\"BENCHMARK_DEEP\",\"configs\":[],\"mode\":"
+ "\"PREEMPTIVE_TRACING_MODE\"}");
+
+ {
+ config.reset(new BackgroundTracingPreemptiveConfig());
+ config->category_preset = BackgroundTracingConfig::BENCHMARK_DEEP;
+
+ BackgroundTracingPreemptiveConfig::MonitoringRule rule;
+ rule.type =
+ BackgroundTracingPreemptiveConfig::MONITOR_AND_DUMP_WHEN_TRIGGER_NAMED;
+ rule.named_trigger_info.trigger_name = "foo";
+ config->configs.push_back(rule);
+ EXPECT_EQ(ConfigToString(config.get()),
+ "{\"category\":\"BENCHMARK_DEEP\",\"configs\":[{\"rule\":"
+ "\"MONITOR_AND_DUMP_WHEN_TRIGGER_NAMED\",\"trigger_name\":"
+ "\"foo\"}],\"mode\":\"PREEMPTIVE_TRACING_MODE\"}");
+ }
+
+ {
+ config.reset(new BackgroundTracingPreemptiveConfig());
+ config->category_preset = BackgroundTracingConfig::BENCHMARK_DEEP;
+
+ BackgroundTracingPreemptiveConfig::MonitoringRule rule;
+ rule.type =
+ BackgroundTracingPreemptiveConfig::MONITOR_AND_DUMP_WHEN_TRIGGER_NAMED;
+ rule.named_trigger_info.trigger_name = "foo1";
+ config->configs.push_back(rule);
+ rule.named_trigger_info.trigger_name = "foo2";
+ config->configs.push_back(rule);
+ EXPECT_EQ(ConfigToString(config.get()),
+ "{\"category\":\"BENCHMARK_DEEP\",\"configs\":[{\"rule\":"
+ "\"MONITOR_AND_DUMP_WHEN_TRIGGER_NAMED\",\"trigger_name\":"
+ "\"foo1\"},{\"rule\":\"MONITOR_AND_DUMP_WHEN_TRIGGER_NAMED\","
+ "\"trigger_name\":\"foo2\"}],\"mode\":\"PREEMPTIVE_TRACING_"
+ "MODE\"}");
+ }
+}
+
+TEST_F(BackgroundTracingConfigTest, InvalidPreemptiveConfigToString) {
+ scoped_ptr<BackgroundTracingPreemptiveConfig> config;
+
+ {
+ config.reset(new BackgroundTracingPreemptiveConfig());
+
+ BackgroundTracingPreemptiveConfig::MonitoringRule rule;
+ rule.type = BackgroundTracingPreemptiveConfig::
+ MONITOR_AND_DUMP_WHEN_SPECIFIC_HISTOGRAM_AND_VALUE;
+ config->configs.push_back(rule);
+ EXPECT_EQ(ConfigToString(config.get()),
+ "{\"category\":\"BENCHMARK\",\"configs\":[],\"mode\":"
+ "\"PREEMPTIVE_TRACING_MODE\"}");
+ }
+
+ {
+ config.reset(new BackgroundTracingPreemptiveConfig());
+
+ BackgroundTracingPreemptiveConfig::MonitoringRule rule;
+ rule.type = BackgroundTracingPreemptiveConfig::
+ MONITOR_AND_DUMP_WHEN_BROWSER_STARTUP_COMPLETE;
+ config->configs.push_back(rule);
+ EXPECT_EQ(ConfigToString(config.get()),
+ "{\"category\":\"BENCHMARK\",\"configs\":[],\"mode\":"
+ "\"PREEMPTIVE_TRACING_MODE\"}");
+ }
+}
+
+TEST_F(BackgroundTracingConfigTest, ValidReactiveConfigToString) {
+ scoped_ptr<BackgroundTracingReactiveConfig> config(
+ new BackgroundTracingReactiveConfig());
+
+ // Default values
+ EXPECT_EQ(ConfigToString(config.get()),
+ "{\"configs\":[],\"mode\":\"REACTIVE_TRACING_MODE\"}");
+
+ {
+ config.reset(new BackgroundTracingReactiveConfig());
+
+ BackgroundTracingReactiveConfig::TracingRule rule;
+ rule.type = BackgroundTracingReactiveConfig::
+ TRACE_ON_MANUAL_TRIGGER_UNTIL_10S_OR_NEXT_TRIGGER_OR_FULL;
+ rule.trigger_name = "foo";
+ rule.category_preset = BackgroundTracingConfig::BENCHMARK_DEEP;
+ config->configs.push_back(rule);
+ EXPECT_EQ(ConfigToString(config.get()),
+ "{\"configs\":[{\"category\":\"BENCHMARK_DEEP\",\"rule\":\"TRACE_"
+ "ON_MANUAL_TRIGGER_UNTIL_10S_OR_NEXT_TRIGGER_OR_FULL\",\"trigger_"
+ "name\":\"foo\"}],\"mode\":\"REACTIVE_TRACING_MODE\"}");
+ }
+
+ {
+ config.reset(new BackgroundTracingReactiveConfig());
+
+ BackgroundTracingReactiveConfig::TracingRule rule;
+ rule.type = BackgroundTracingReactiveConfig::
+ TRACE_ON_MANUAL_TRIGGER_UNTIL_10S_OR_NEXT_TRIGGER_OR_FULL;
+ rule.trigger_name = "foo1";
+ rule.category_preset = BackgroundTracingConfig::BENCHMARK_DEEP;
+ config->configs.push_back(rule);
+ rule.trigger_name = "foo2";
+ config->configs.push_back(rule);
+ EXPECT_EQ(ConfigToString(config.get()),
+ "{\"configs\":[{\"category\":\"BENCHMARK_DEEP\",\"rule\":\"TRACE_"
+ "ON_MANUAL_TRIGGER_UNTIL_10S_OR_NEXT_TRIGGER_OR_FULL\",\"trigger_"
+ "name\":\"foo1\"},{\"category\":\"BENCHMARK_DEEP\",\"rule\":"
+ "\"TRACE_ON_MANUAL_TRIGGER_UNTIL_10S_OR_NEXT_TRIGGER_OR_FULL\","
+ "\"trigger_name\":\"foo2\"}],\"mode\":\"REACTIVE_TRACING_"
+ "MODE\"}");
+ }
+}
+
+} // namspace content
« no previous file with comments | « content/browser/tracing/background_tracing_config_dict.cc ('k') | content/browser/tracing/background_tracing_manager_impl.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698