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

Side by Side Diff: components/tracing/browser/trace_config_file_unittest.cc

Issue 2683913002: Enable startup tracing from command line flags in components/tracing (Closed)
Patch Set: Rebase. Created 3 years, 10 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/at_exit.h"
6 #include "base/command_line.h"
7 #include "base/files/file_util.h"
8 #include "base/files/scoped_temp_dir.h"
9 #include "components/tracing/browser/trace_config_file.h"
10 #include "components/tracing/common/tracing_switches.h"
11 #include "testing/gtest/include/gtest/gtest.h"
12
13 namespace tracing {
14
15 namespace {
16
17 const char kTraceConfig[] =
18 "{"
19 "\"enable_argument_filter\":true,"
20 "\"enable_systrace\":true,"
21 "\"excluded_categories\":[\"excluded\",\"exc_pattern*\"],"
22 "\"included_categories\":[\"included\","
23 "\"inc_pattern*\","
24 "\"disabled-by-default-cc\"],"
25 "\"record_mode\":\"record-continuously\","
26 "\"synthetic_delays\":[\"test.Delay1;16\",\"test.Delay2;32\"]"
27 "}";
28
29 std::string GetTraceConfigFileContent(std::string trace_config,
30 std::string startup_duration,
31 std::string result_file) {
32 std::string content = "{";
33 if (!trace_config.empty())
34 content += "\"trace_config\":" + trace_config;
35
36 if (!startup_duration.empty()) {
37 if (content != "{")
38 content += ",";
39 content += "\"startup_duration\":" + startup_duration;
40 }
41
42 if (!result_file.empty()) {
43 if (content != "{")
44 content += ",";
45 content += "\"result_file\":\"" + result_file + "\"";
46 }
47
48 content += "}";
49 return content;
50 }
51
52 } // namespace
53
54 TEST(TraceConfigFileTest, TraceStartupEnabled) {
55 base::ShadowingAtExitManager sem;
56 base::CommandLine::ForCurrentProcess()->AppendSwitch(
57 switches::kTraceStartup);
58 base::CommandLine::ForCurrentProcess()->AppendSwitch(
59 switches::kTraceConfigFile);
60
61 EXPECT_FALSE(TraceConfigFile::GetInstance()->IsEnabled());
62 }
63
64 TEST(TraceConfigFileTest, TraceShutdownEnabled) {
65 base::ShadowingAtExitManager sem;
66 base::CommandLine::ForCurrentProcess()->AppendSwitch(
67 switches::kTraceShutdown);
68 base::CommandLine::ForCurrentProcess()->AppendSwitch(
69 switches::kTraceConfigFile);
70
71 EXPECT_FALSE(TraceConfigFile::GetInstance()->IsEnabled());
72 }
73
74 TEST(TraceConfigFileTest, TraceConfigFileNotEnabled) {
75 base::ShadowingAtExitManager sem;
76 EXPECT_FALSE(TraceConfigFile::GetInstance()->IsEnabled());
77 }
78
79 TEST(TraceConfigFileTest, TraceConfigFileEnabledWithoutPath) {
80 base::ShadowingAtExitManager sem;
81 base::CommandLine::ForCurrentProcess()->AppendSwitch(
82 switches::kTraceConfigFile);
83
84 ASSERT_TRUE(TraceConfigFile::GetInstance()->IsEnabled());
85 EXPECT_EQ(base::trace_event::TraceConfig().ToString(),
86 TraceConfigFile::GetInstance()->GetTraceConfig().ToString());
87 EXPECT_EQ(5, TraceConfigFile::GetInstance()->GetStartupDuration());
88 EXPECT_EQ(base::FilePath(FILE_PATH_LITERAL("chrometrace.log")),
89 TraceConfigFile::GetInstance()->GetResultFile());
90 }
91
92 TEST(TraceConfigFileTest, TraceConfigFileEnabledWithInvalidPath) {
93 base::ShadowingAtExitManager sem;
94 base::CommandLine::ForCurrentProcess()->AppendSwitchPath(
95 switches::kTraceConfigFile,
96 base::FilePath(FILE_PATH_LITERAL("invalid-trace-config-file-path")));
97
98 EXPECT_FALSE(TraceConfigFile::GetInstance()->IsEnabled());
99 }
100
101 TEST(TraceConfigFileTest, ValidContent) {
102 base::ShadowingAtExitManager sem;
103 std::string content = GetTraceConfigFileContent(
104 kTraceConfig, "10", "trace_result_file.log");
105
106 base::FilePath trace_config_file;
107 base::ScopedTempDir temp_dir;
108 ASSERT_TRUE(temp_dir.CreateUniqueTempDir());
109 ASSERT_TRUE(
110 base::CreateTemporaryFileInDir(temp_dir.GetPath(), &trace_config_file));
111 ASSERT_NE(-1, base::WriteFile(
112 trace_config_file, content.c_str(), (int)content.length()));
113 base::CommandLine::ForCurrentProcess()->AppendSwitchPath(
114 switches::kTraceConfigFile, trace_config_file);
115
116 ASSERT_TRUE(TraceConfigFile::GetInstance()->IsEnabled());
117 EXPECT_STREQ(
118 kTraceConfig,
119 TraceConfigFile::GetInstance()->GetTraceConfig().ToString().c_str());
120 EXPECT_EQ(10, TraceConfigFile::GetInstance()->GetStartupDuration());
121 EXPECT_EQ(base::FilePath(FILE_PATH_LITERAL("trace_result_file.log")),
122 TraceConfigFile::GetInstance()->GetResultFile());
123 }
124
125 TEST(TraceConfigFileTest, ValidContentWithOnlyTraceConfig) {
126 base::ShadowingAtExitManager sem;
127 std::string content = GetTraceConfigFileContent(kTraceConfig, "", "");
128
129 base::FilePath trace_config_file;
130 base::ScopedTempDir temp_dir;
131 ASSERT_TRUE(temp_dir.CreateUniqueTempDir());
132 ASSERT_TRUE(
133 base::CreateTemporaryFileInDir(temp_dir.GetPath(), &trace_config_file));
134 ASSERT_NE(-1, base::WriteFile(
135 trace_config_file, content.c_str(), (int)content.length()));
136 base::CommandLine::ForCurrentProcess()->AppendSwitchPath(
137 switches::kTraceConfigFile, trace_config_file);
138
139 ASSERT_TRUE(TraceConfigFile::GetInstance()->IsEnabled());
140 EXPECT_STREQ(
141 kTraceConfig,
142 TraceConfigFile::GetInstance()->GetTraceConfig().ToString().c_str());
143 EXPECT_EQ(0, TraceConfigFile::GetInstance()->GetStartupDuration());
144 EXPECT_EQ(base::FilePath(FILE_PATH_LITERAL("chrometrace.log")),
145 TraceConfigFile::GetInstance()->GetResultFile());
146 }
147
148 TEST(TraceConfigFileTest, ContentWithAbsoluteResultFilePath) {
149 base::ShadowingAtExitManager sem;
150 base::ScopedTempDir temp_dir;
151 ASSERT_TRUE(temp_dir.CreateUniqueTempDir());
152
153 const base::FilePath result_file_path =
154 temp_dir.GetPath().Append(FILE_PATH_LITERAL("trace_result_file.log"));
155 ASSERT_TRUE(result_file_path.IsAbsolute());
156
157 std::string result_file_path_str = result_file_path.AsUTF8Unsafe();
158 auto it = std::find(
159 result_file_path_str.begin(), result_file_path_str.end(), '\\');
160 while (it != result_file_path_str.end()) {
161 auto it2 = result_file_path_str.insert(it, '\\');
162 it = std::find(it2+2, result_file_path_str.end(), '\\');
163 }
164 std::string content = GetTraceConfigFileContent(
165 kTraceConfig, "10", result_file_path_str);
166
167 base::FilePath trace_config_file;
168 ASSERT_TRUE(
169 base::CreateTemporaryFileInDir(temp_dir.GetPath(), &trace_config_file));
170 ASSERT_NE(-1, base::WriteFile(
171 trace_config_file, content.c_str(), (int)content.length()));
172 base::CommandLine::ForCurrentProcess()->AppendSwitchPath(
173 switches::kTraceConfigFile, trace_config_file);
174
175 ASSERT_TRUE(TraceConfigFile::GetInstance()->IsEnabled());
176 EXPECT_EQ(result_file_path, TraceConfigFile::GetInstance()->GetResultFile());
177 }
178
179 TEST(TraceConfigFileTest, ContentWithNegtiveDuration) {
180 base::ShadowingAtExitManager sem;
181 std::string content = GetTraceConfigFileContent(kTraceConfig, "-1", "");
182
183 base::FilePath trace_config_file;
184 base::ScopedTempDir temp_dir;
185 ASSERT_TRUE(temp_dir.CreateUniqueTempDir());
186 ASSERT_TRUE(
187 base::CreateTemporaryFileInDir(temp_dir.GetPath(), &trace_config_file));
188 ASSERT_NE(-1, base::WriteFile(
189 trace_config_file, content.c_str(), (int)content.length()));
190 base::CommandLine::ForCurrentProcess()->AppendSwitchPath(
191 switches::kTraceConfigFile, trace_config_file);
192
193 ASSERT_TRUE(TraceConfigFile::GetInstance()->IsEnabled());
194 EXPECT_STREQ(
195 kTraceConfig,
196 TraceConfigFile::GetInstance()->GetTraceConfig().ToString().c_str());
197 EXPECT_EQ(0, TraceConfigFile::GetInstance()->GetStartupDuration());
198 EXPECT_EQ(base::FilePath(FILE_PATH_LITERAL("chrometrace.log")),
199 TraceConfigFile::GetInstance()->GetResultFile());
200 }
201
202 TEST(TraceConfigFileTest, ContentWithoutTraceConfig) {
203 base::ShadowingAtExitManager sem;
204 std::string content = GetTraceConfigFileContent(
205 "", "10", "trace_result_file.log");
206
207 base::FilePath trace_config_file;
208 base::ScopedTempDir temp_dir;
209 ASSERT_TRUE(temp_dir.CreateUniqueTempDir());
210 ASSERT_TRUE(
211 base::CreateTemporaryFileInDir(temp_dir.GetPath(), &trace_config_file));
212 ASSERT_NE(-1, base::WriteFile(
213 trace_config_file, content.c_str(), (int)content.length()));
214 base::CommandLine::ForCurrentProcess()->AppendSwitchPath(
215 switches::kTraceConfigFile, trace_config_file);
216
217 EXPECT_FALSE(TraceConfigFile::GetInstance()->IsEnabled());
218 }
219
220 TEST(TraceConfigFileTest, InvalidContent) {
221 base::ShadowingAtExitManager sem;
222 std::string content = "invalid trace config file content";
223
224 base::FilePath trace_config_file;
225 base::ScopedTempDir temp_dir;
226 ASSERT_TRUE(temp_dir.CreateUniqueTempDir());
227 ASSERT_TRUE(
228 base::CreateTemporaryFileInDir(temp_dir.GetPath(), &trace_config_file));
229 ASSERT_NE(-1, base::WriteFile(
230 trace_config_file, content.c_str(), (int)content.length()));
231 base::CommandLine::ForCurrentProcess()->AppendSwitchPath(
232 switches::kTraceConfigFile, trace_config_file);
233
234 EXPECT_FALSE(TraceConfigFile::GetInstance()->IsEnabled());
235 }
236
237 TEST(TraceConfigFileTest, EmptyContent) {
238 base::ShadowingAtExitManager sem;
239 base::FilePath trace_config_file;
240 base::ScopedTempDir temp_dir;
241 ASSERT_TRUE(temp_dir.CreateUniqueTempDir());
242 ASSERT_TRUE(
243 base::CreateTemporaryFileInDir(temp_dir.GetPath(), &trace_config_file));
244 base::CommandLine::ForCurrentProcess()->AppendSwitchPath(
245 switches::kTraceConfigFile, trace_config_file);
246
247 EXPECT_FALSE(TraceConfigFile::GetInstance()->IsEnabled());
248 }
249
250 } // namespace tracing
OLDNEW
« no previous file with comments | « components/tracing/browser/trace_config_file.cc ('k') | components/tracing/common/trace_config_file.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698