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

Side by Side Diff: base/event_trace_controller_win_unittest.cc

Issue 4517004: Move Windows-specific Event Tracing for Windows implementation to base/win. ... (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: Fixed another ETW user in Chrome Frame Created 10 years, 1 month 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 | Annotate | Revision Log
« no previous file with comments | « base/event_trace_controller_win.cc ('k') | base/event_trace_provider_win.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
(Empty)
1 // Copyright (c) 2010 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 // Unit tests for event trace controller.
6 #include "base/event_trace_controller_win.h"
7 #include "base/event_trace_provider_win.h"
8 #include "base/file_path.h"
9 #include "base/file_util.h"
10 #include "base/logging.h"
11 #include "base/scoped_handle.h"
12 #include "base/sys_info.h"
13 #include "testing/gtest/include/gtest/gtest.h"
14 #include <initguid.h> // NOLINT - must be last.
15
16 namespace {
17
18 const wchar_t kTestSessionName[] = L"TestLogSession";
19
20 // {0D236A42-CD18-4e3d-9975-DCEEA2106E05}
21 DEFINE_GUID(kTestProvider,
22 0xd236a42, 0xcd18, 0x4e3d, 0x99, 0x75, 0xdc, 0xee, 0xa2, 0x10, 0x6e, 0x5);
23
24 DEFINE_GUID(kGuidNull,
25 0x0000000, 0x0000, 0x0000, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0);
26
27 const ULONG kTestProviderFlags = 0xCAFEBABE;
28
29 class TestingProvider: public EtwTraceProvider {
30 public:
31 explicit TestingProvider(const GUID& provider_name)
32 : EtwTraceProvider(provider_name) {
33 callback_event_.Set(::CreateEvent(NULL, TRUE, FALSE, NULL));
34 }
35
36 void WaitForCallback() {
37 ::WaitForSingleObject(callback_event_.Get(), INFINITE);
38 ::ResetEvent(callback_event_.Get());
39 }
40
41 private:
42 virtual void OnEventsEnabled() {
43 ::SetEvent(callback_event_.Get());
44 }
45 virtual void PostEventsDisabled() {
46 ::SetEvent(callback_event_.Get());
47 }
48
49 ScopedHandle callback_event_;
50
51 DISALLOW_COPY_AND_ASSIGN(TestingProvider);
52 };
53
54 } // namespace
55
56 TEST(EtwTraceTest, Cleanup) {
57 // Clean up potential leftover sessions from previous unsuccessful runs.
58 EtwTraceProperties ignore;
59 EtwTraceController::Stop(kTestSessionName, &ignore);
60 }
61
62 TEST(EtwTracePropertiesTest, Initialization) {
63 EtwTraceProperties prop;
64
65 EVENT_TRACE_PROPERTIES* p = prop.get();
66 EXPECT_NE(0u, p->Wnode.BufferSize);
67 EXPECT_EQ(0u, p->Wnode.ProviderId);
68 EXPECT_EQ(0u, p->Wnode.HistoricalContext);
69
70 EXPECT_TRUE(kGuidNull == p->Wnode.Guid);
71 EXPECT_EQ(0, p->Wnode.ClientContext);
72 EXPECT_EQ(WNODE_FLAG_TRACED_GUID, p->Wnode.Flags);
73
74 EXPECT_EQ(0, p->BufferSize);
75 EXPECT_EQ(0, p->MinimumBuffers);
76 EXPECT_EQ(0, p->MaximumBuffers);
77 EXPECT_EQ(0, p->MaximumFileSize);
78 EXPECT_EQ(0, p->LogFileMode);
79 EXPECT_EQ(0, p->FlushTimer);
80 EXPECT_EQ(0, p->EnableFlags);
81 EXPECT_EQ(0, p->AgeLimit);
82
83 EXPECT_EQ(0, p->NumberOfBuffers);
84 EXPECT_EQ(0, p->FreeBuffers);
85 EXPECT_EQ(0, p->EventsLost);
86 EXPECT_EQ(0, p->BuffersWritten);
87 EXPECT_EQ(0, p->LogBuffersLost);
88 EXPECT_EQ(0, p->RealTimeBuffersLost);
89 EXPECT_EQ(0, p->LoggerThreadId);
90 EXPECT_NE(0u, p->LogFileNameOffset);
91 EXPECT_NE(0u, p->LoggerNameOffset);
92 }
93
94 TEST(EtwTracePropertiesTest, Strings) {
95 EtwTraceProperties prop;
96
97 ASSERT_STREQ(L"", prop.GetLoggerFileName());
98 ASSERT_STREQ(L"", prop.GetLoggerName());
99
100 std::wstring name(1023, L'A');
101 ASSERT_HRESULT_SUCCEEDED(prop.SetLoggerFileName(name.c_str()));
102 ASSERT_HRESULT_SUCCEEDED(prop.SetLoggerName(name.c_str()));
103 ASSERT_STREQ(name.c_str(), prop.GetLoggerFileName());
104 ASSERT_STREQ(name.c_str(), prop.GetLoggerName());
105
106 std::wstring name2(1024, L'A');
107 ASSERT_HRESULT_FAILED(prop.SetLoggerFileName(name2.c_str()));
108 ASSERT_HRESULT_FAILED(prop.SetLoggerName(name2.c_str()));
109 }
110
111 TEST(EtwTraceControllerTest, Initialize) {
112 EtwTraceController controller;
113
114 EXPECT_EQ(NULL, controller.session());
115 EXPECT_STREQ(L"", controller.session_name());
116 }
117
118 TEST(EtwTraceControllerTest, StartRealTimeSession) {
119 EtwTraceController controller;
120
121 HRESULT hr = controller.StartRealtimeSession(kTestSessionName, 100 * 1024);
122 if (hr == E_ACCESSDENIED) {
123 VLOG(1) << "You must be an administrator to run this test on Vista";
124 return;
125 }
126
127 EXPECT_TRUE(NULL != controller.session());
128 EXPECT_STREQ(kTestSessionName, controller.session_name());
129
130 EXPECT_HRESULT_SUCCEEDED(controller.Stop(NULL));
131 EXPECT_EQ(NULL, controller.session());
132 EXPECT_STREQ(L"", controller.session_name());
133 }
134
135 TEST(EtwTraceControllerTest, StartFileSession) {
136 FilePath temp;
137
138 ASSERT_HRESULT_SUCCEEDED(file_util::CreateTemporaryFile(&temp));
139
140 EtwTraceController controller;
141 HRESULT hr = controller.StartFileSession(kTestSessionName,
142 temp.value().c_str());
143 if (hr == E_ACCESSDENIED) {
144 VLOG(1) << "You must be an administrator to run this test on Vista";
145 return;
146 }
147
148 EXPECT_TRUE(NULL != controller.session());
149 EXPECT_STREQ(kTestSessionName, controller.session_name());
150
151 EXPECT_HRESULT_SUCCEEDED(controller.Stop(NULL));
152 EXPECT_EQ(NULL, controller.session());
153 EXPECT_STREQ(L"", controller.session_name());
154 }
155
156 TEST(EtwTraceControllerTest, EnableDisable) {
157 TestingProvider provider(kTestProvider);
158
159 EXPECT_EQ(ERROR_SUCCESS, provider.Register());
160 EXPECT_EQ(NULL, provider.session_handle());
161
162 EtwTraceController controller;
163 HRESULT hr = controller.StartRealtimeSession(kTestSessionName, 100 * 1024);
164 if (hr == E_ACCESSDENIED) {
165 VLOG(1) << "You must be an administrator to run this test on Vista";
166 return;
167 }
168
169 EXPECT_HRESULT_SUCCEEDED(controller.EnableProvider(kTestProvider,
170 TRACE_LEVEL_VERBOSE, kTestProviderFlags));
171
172 provider.WaitForCallback();
173
174 EXPECT_EQ(TRACE_LEVEL_VERBOSE, provider.enable_level());
175 EXPECT_EQ(kTestProviderFlags, provider.enable_flags());
176
177 EXPECT_HRESULT_SUCCEEDED(controller.DisableProvider(kTestProvider));
178
179 provider.WaitForCallback();
180
181 EXPECT_EQ(0, provider.enable_level());
182 EXPECT_EQ(0, provider.enable_flags());
183
184 EXPECT_EQ(ERROR_SUCCESS, provider.Unregister());
185
186 // Enable the provider again, before registering.
187 EXPECT_HRESULT_SUCCEEDED(controller.EnableProvider(kTestProvider,
188 TRACE_LEVEL_VERBOSE, kTestProviderFlags));
189
190 // Register the provider again, the settings above
191 // should take immediate effect.
192 EXPECT_EQ(ERROR_SUCCESS, provider.Register());
193
194 EXPECT_EQ(TRACE_LEVEL_VERBOSE, provider.enable_level());
195 EXPECT_EQ(kTestProviderFlags, provider.enable_flags());
196
197 EXPECT_HRESULT_SUCCEEDED(controller.Stop(NULL));
198
199 provider.WaitForCallback();
200
201 // Session should have wound down.
202 EXPECT_EQ(0, provider.enable_level());
203 EXPECT_EQ(0, provider.enable_flags());
204 }
OLDNEW
« no previous file with comments | « base/event_trace_controller_win.cc ('k') | base/event_trace_provider_win.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698