Index: components/tracing/trace_config_file_unittest.cc |
diff --git a/components/tracing/trace_config_file_unittest.cc b/components/tracing/trace_config_file_unittest.cc |
new file mode 100644 |
index 0000000000000000000000000000000000000000..3cb32af41df132111399df9474f4ad204b157aff |
--- /dev/null |
+++ b/components/tracing/trace_config_file_unittest.cc |
@@ -0,0 +1,225 @@ |
+// Copyright (c) 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/at_exit.h" |
+#include "base/command_line.h" |
+#include "base/files/file_util.h" |
+#include "base/files/scoped_temp_dir.h" |
+#include "components/tracing/trace_config_file.h" |
+#include "components/tracing/tracing_switches.h" |
+#include "testing/gtest/include/gtest/gtest.h" |
+ |
+namespace tracing { |
+ |
+namespace { |
+ |
+const char kTraceConfig[] = |
+ "{" |
+ "\"enable_argument_filter\":true," |
+ "\"enable_sampling\":true," |
+ "\"enable_systrace\":true," |
+ "\"excluded_categories\":[\"excluded\",\"exc_pattern*\"]," |
+ "\"included_categories\":[\"included\"," |
+ "\"inc_pattern*\"," |
+ "\"disabled-by-default-cc\"]," |
+ "\"record_mode\":\"record-continuously\"," |
+ "\"synthetic_delays\":[\"test.Delay1;16\",\"test.Delay2;32\"]" |
+ "}"; |
+ |
+std::string GetTraceConfigFileContent(std::string trace_config, |
+ std::string startup_duration, |
+ std::string result_file) { |
+ std::string content = "{"; |
+ if (!trace_config.empty()) |
+ content += "\"trace_config\":" + trace_config; |
+ |
+ if (!startup_duration.empty()) { |
+ if (content != "{") |
+ content += ","; |
+ content += "\"startup_duration\":" + startup_duration; |
+ } |
+ |
+ if (!result_file.empty()) { |
+ if (content != "{") |
+ content += ","; |
+ content += "\"result_file\":\"" + result_file + "\""; |
+ } |
+ |
+ content += "}"; |
+ return content; |
+} |
+ |
+} // namespace |
+ |
+TEST(TraceConfigFileTest, TraceStartupEnabled) { |
+ base::ShadowingAtExitManager sem; |
+ base::CommandLine::ForCurrentProcess()->AppendSwitch( |
+ switches::kTraceStartup); |
+ base::CommandLine::ForCurrentProcess()->AppendSwitch( |
+ switches::kTraceConfigFile); |
+ |
+ EXPECT_FALSE(TraceConfigFile::GetInstance()->IsEnabled()); |
+} |
+ |
+TEST(TraceConfigFileTest, TraceShutdownEnabled) { |
+ base::ShadowingAtExitManager sem; |
+ base::CommandLine::ForCurrentProcess()->AppendSwitch( |
+ switches::kTraceShutdown); |
+ base::CommandLine::ForCurrentProcess()->AppendSwitch( |
+ switches::kTraceConfigFile); |
+ |
+ EXPECT_FALSE(TraceConfigFile::GetInstance()->IsEnabled()); |
+} |
+ |
+TEST(TraceConfigFileTest, TraceConfigFileNotEnabled) { |
+ base::ShadowingAtExitManager sem; |
+ EXPECT_FALSE(TraceConfigFile::GetInstance()->IsEnabled()); |
+} |
+ |
+TEST(TraceConfigFileTest, TraceConfigFileEnabledWithoutPath) { |
+ base::ShadowingAtExitManager sem; |
+ base::CommandLine::ForCurrentProcess()->AppendSwitch( |
+ switches::kTraceConfigFile); |
+ |
+ ASSERT_TRUE(TraceConfigFile::GetInstance()->IsEnabled()); |
+ EXPECT_EQ(base::trace_event::TraceConfig().ToString(), |
+ TraceConfigFile::GetInstance()->GetTraceConfig().ToString()); |
+ EXPECT_EQ(5, TraceConfigFile::GetInstance()->GetStartupDuration()); |
+ EXPECT_EQ(base::FilePath(FILE_PATH_LITERAL("chrometrace.log")), |
+ TraceConfigFile::GetInstance()->GetResultFile()); |
+} |
+ |
+TEST(TraceConfigFileTest, TraceConfigFileEnabledWithInvalidPath) { |
+ base::ShadowingAtExitManager sem; |
+ base::CommandLine::ForCurrentProcess()->AppendSwitchPath( |
+ switches::kTraceConfigFile, |
+ base::FilePath(FILE_PATH_LITERAL("invalid-trace-config-file-path"))); |
+ |
+ EXPECT_FALSE(TraceConfigFile::GetInstance()->IsEnabled()); |
+} |
+ |
+TEST(TraceConfigFileTest, ValidContent) { |
+ base::ShadowingAtExitManager sem; |
+ std::string content = GetTraceConfigFileContent( |
+ kTraceConfig, "10", "trace_result_file.log"); |
+ |
+ base::FilePath trace_config_file; |
+ base::ScopedTempDir temp_dir; |
+ ASSERT_TRUE(temp_dir.CreateUniqueTempDir()); |
+ ASSERT_TRUE( |
+ base::CreateTemporaryFileInDir(temp_dir.path(), &trace_config_file)); |
+ ASSERT_NE( |
+ -1, |
+ base::WriteFile(trace_config_file, content.c_str(), content.length())); |
+ base::CommandLine::ForCurrentProcess()->AppendSwitchPath( |
+ switches::kTraceConfigFile, trace_config_file); |
+ |
+ ASSERT_TRUE(TraceConfigFile::GetInstance()->IsEnabled()); |
+ EXPECT_STREQ( |
+ kTraceConfig, |
+ TraceConfigFile::GetInstance()->GetTraceConfig().ToString().c_str()); |
+ EXPECT_EQ(10, TraceConfigFile::GetInstance()->GetStartupDuration()); |
+ EXPECT_EQ(base::FilePath(FILE_PATH_LITERAL("trace_result_file.log")), |
+ TraceConfigFile::GetInstance()->GetResultFile()); |
+} |
+ |
+TEST(TraceConfigFileTest, ValidContentWithOnlyTraceConfig) { |
+ base::ShadowingAtExitManager sem; |
+ std::string content = GetTraceConfigFileContent(kTraceConfig, "", ""); |
+ |
+ base::FilePath trace_config_file; |
+ base::ScopedTempDir temp_dir; |
+ ASSERT_TRUE(temp_dir.CreateUniqueTempDir()); |
+ ASSERT_TRUE( |
+ base::CreateTemporaryFileInDir(temp_dir.path(), &trace_config_file)); |
+ ASSERT_NE( |
+ -1, |
+ base::WriteFile(trace_config_file, content.c_str(), content.length())); |
+ base::CommandLine::ForCurrentProcess()->AppendSwitchPath( |
+ switches::kTraceConfigFile, trace_config_file); |
+ |
+ ASSERT_TRUE(TraceConfigFile::GetInstance()->IsEnabled()); |
+ EXPECT_STREQ( |
+ kTraceConfig, |
+ TraceConfigFile::GetInstance()->GetTraceConfig().ToString().c_str()); |
+ EXPECT_EQ(0, TraceConfigFile::GetInstance()->GetStartupDuration()); |
+ EXPECT_EQ(base::FilePath(FILE_PATH_LITERAL("chrometrace.log")), |
+ TraceConfigFile::GetInstance()->GetResultFile()); |
+} |
+ |
+TEST(TraceConfigFileTest, ContentWithNegtiveDuration) { |
+ base::ShadowingAtExitManager sem; |
+ std::string content = GetTraceConfigFileContent(kTraceConfig, "-1", ""); |
+ |
+ base::FilePath trace_config_file; |
+ base::ScopedTempDir temp_dir; |
+ ASSERT_TRUE(temp_dir.CreateUniqueTempDir()); |
+ ASSERT_TRUE( |
+ base::CreateTemporaryFileInDir(temp_dir.path(), &trace_config_file)); |
+ ASSERT_NE( |
+ -1, |
+ base::WriteFile(trace_config_file, content.c_str(), content.length())); |
+ base::CommandLine::ForCurrentProcess()->AppendSwitchPath( |
+ switches::kTraceConfigFile, trace_config_file); |
+ |
+ ASSERT_TRUE(TraceConfigFile::GetInstance()->IsEnabled()); |
+ EXPECT_STREQ( |
+ kTraceConfig, |
+ TraceConfigFile::GetInstance()->GetTraceConfig().ToString().c_str()); |
+ EXPECT_EQ(0, TraceConfigFile::GetInstance()->GetStartupDuration()); |
+ EXPECT_EQ(base::FilePath(FILE_PATH_LITERAL("chrometrace.log")), |
+ TraceConfigFile::GetInstance()->GetResultFile()); |
+} |
+ |
+TEST(TraceConfigFileTest, ContentWithoutTraceConfig) { |
+ base::ShadowingAtExitManager sem; |
+ std::string content = GetTraceConfigFileContent( |
+ "", "10", "trace_result_file.log"); |
+ |
+ base::FilePath trace_config_file; |
+ base::ScopedTempDir temp_dir; |
+ ASSERT_TRUE(temp_dir.CreateUniqueTempDir()); |
+ ASSERT_TRUE( |
+ base::CreateTemporaryFileInDir(temp_dir.path(), &trace_config_file)); |
+ ASSERT_NE( |
+ -1, |
+ base::WriteFile(trace_config_file, content.c_str(), content.length())); |
+ base::CommandLine::ForCurrentProcess()->AppendSwitchPath( |
+ switches::kTraceConfigFile, trace_config_file); |
+ |
+ EXPECT_FALSE(TraceConfigFile::GetInstance()->IsEnabled()); |
+} |
+ |
+TEST(TraceConfigFileTest, InvalidContent) { |
+ base::ShadowingAtExitManager sem; |
+ std::string content = "invalid trace config file content"; |
+ |
+ base::FilePath trace_config_file; |
+ base::ScopedTempDir temp_dir; |
+ ASSERT_TRUE(temp_dir.CreateUniqueTempDir()); |
+ ASSERT_TRUE( |
+ base::CreateTemporaryFileInDir(temp_dir.path(), &trace_config_file)); |
+ ASSERT_NE( |
+ -1, |
+ base::WriteFile(trace_config_file, content.c_str(), content.length())); |
+ base::CommandLine::ForCurrentProcess()->AppendSwitchPath( |
+ switches::kTraceConfigFile, trace_config_file); |
+ |
+ EXPECT_FALSE(TraceConfigFile::GetInstance()->IsEnabled()); |
+} |
+ |
+TEST(TraceConfigFileTest, EmptyContent) { |
+ base::ShadowingAtExitManager sem; |
+ base::FilePath trace_config_file; |
+ base::ScopedTempDir temp_dir; |
+ ASSERT_TRUE(temp_dir.CreateUniqueTempDir()); |
+ ASSERT_TRUE( |
+ base::CreateTemporaryFileInDir(temp_dir.path(), &trace_config_file)); |
+ base::CommandLine::ForCurrentProcess()->AppendSwitchPath( |
+ switches::kTraceConfigFile, trace_config_file); |
+ |
+ EXPECT_FALSE(TraceConfigFile::GetInstance()->IsEnabled()); |
+} |
+ |
+} // namespace tracing |