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

Side by Side Diff: base/win/event_trace_controller_unittest.cc

Issue 1446363003: Deleted OS_WIN and all Windows specific files from base. (Closed) Base URL: https://github.com/domokit/mojo.git@base_tests
Patch Set: Created 5 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
« no previous file with comments | « base/win/event_trace_controller.cc ('k') | base/win/event_trace_provider.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) 2012 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
7 #include <objbase.h>
8 #include <initguid.h>
9
10 #include "base/files/file_path.h"
11 #include "base/files/file_util.h"
12 #include "base/files/scoped_temp_dir.h"
13 #include "base/logging.h"
14 #include "base/process/process_handle.h"
15 #include "base/strings/stringprintf.h"
16 #include "base/sys_info.h"
17 #include "base/win/event_trace_controller.h"
18 #include "base/win/event_trace_provider.h"
19 #include "base/win/scoped_handle.h"
20 #include "testing/gtest/include/gtest/gtest.h"
21
22 namespace base {
23 namespace win {
24
25 namespace {
26
27 DEFINE_GUID(kGuidNull,
28 0x0000000, 0x0000, 0x0000, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0);
29
30 const ULONG kTestProviderFlags = 0xCAFEBABE;
31
32 class TestingProvider: public EtwTraceProvider {
33 public:
34 explicit TestingProvider(const GUID& provider_name)
35 : EtwTraceProvider(provider_name) {
36 callback_event_.Set(::CreateEvent(NULL, TRUE, FALSE, NULL));
37 }
38
39 void WaitForCallback() {
40 ::WaitForSingleObject(callback_event_.Get(), INFINITE);
41 ::ResetEvent(callback_event_.Get());
42 }
43
44 private:
45 void OnEventsEnabled() override { ::SetEvent(callback_event_.Get()); }
46 void PostEventsDisabled() override { ::SetEvent(callback_event_.Get()); }
47
48 ScopedHandle callback_event_;
49
50 DISALLOW_COPY_AND_ASSIGN(TestingProvider);
51 };
52
53 } // namespace
54
55 TEST(EtwTracePropertiesTest, Initialization) {
56 EtwTraceProperties prop;
57
58 EVENT_TRACE_PROPERTIES* p = prop.get();
59 EXPECT_NE(0u, p->Wnode.BufferSize);
60 EXPECT_EQ(0u, p->Wnode.ProviderId);
61 EXPECT_EQ(0u, p->Wnode.HistoricalContext);
62
63 EXPECT_TRUE(kGuidNull == p->Wnode.Guid);
64 EXPECT_EQ(0, p->Wnode.ClientContext);
65 EXPECT_EQ(WNODE_FLAG_TRACED_GUID, p->Wnode.Flags);
66
67 EXPECT_EQ(0, p->BufferSize);
68 EXPECT_EQ(0, p->MinimumBuffers);
69 EXPECT_EQ(0, p->MaximumBuffers);
70 EXPECT_EQ(0, p->MaximumFileSize);
71 EXPECT_EQ(0, p->LogFileMode);
72 EXPECT_EQ(0, p->FlushTimer);
73 EXPECT_EQ(0, p->EnableFlags);
74 EXPECT_EQ(0, p->AgeLimit);
75
76 EXPECT_EQ(0, p->NumberOfBuffers);
77 EXPECT_EQ(0, p->FreeBuffers);
78 EXPECT_EQ(0, p->EventsLost);
79 EXPECT_EQ(0, p->BuffersWritten);
80 EXPECT_EQ(0, p->LogBuffersLost);
81 EXPECT_EQ(0, p->RealTimeBuffersLost);
82 EXPECT_EQ(0, p->LoggerThreadId);
83 EXPECT_NE(0u, p->LogFileNameOffset);
84 EXPECT_NE(0u, p->LoggerNameOffset);
85 }
86
87 TEST(EtwTracePropertiesTest, Strings) {
88 EtwTraceProperties prop;
89
90 ASSERT_STREQ(L"", prop.GetLoggerFileName());
91 ASSERT_STREQ(L"", prop.GetLoggerName());
92
93 std::wstring name(1023, L'A');
94 ASSERT_HRESULT_SUCCEEDED(prop.SetLoggerFileName(name.c_str()));
95 ASSERT_HRESULT_SUCCEEDED(prop.SetLoggerName(name.c_str()));
96 ASSERT_STREQ(name.c_str(), prop.GetLoggerFileName());
97 ASSERT_STREQ(name.c_str(), prop.GetLoggerName());
98
99 std::wstring name2(1024, L'A');
100 ASSERT_HRESULT_FAILED(prop.SetLoggerFileName(name2.c_str()));
101 ASSERT_HRESULT_FAILED(prop.SetLoggerName(name2.c_str()));
102 }
103
104 namespace {
105
106 class EtwTraceControllerTest : public testing::Test {
107 public:
108 EtwTraceControllerTest()
109 : session_name_(StringPrintf(L"TestSession-%d", GetCurrentProcId())) {
110 }
111
112 void SetUp() override {
113 EtwTraceProperties ignore;
114 EtwTraceController::Stop(session_name_.c_str(), &ignore);
115
116 // Allocate a new provider name GUID for each test.
117 ASSERT_HRESULT_SUCCEEDED(::CoCreateGuid(&test_provider_));
118 }
119
120 void TearDown() override {
121 EtwTraceProperties prop;
122 EtwTraceController::Stop(session_name_.c_str(), &prop);
123 }
124
125 protected:
126 GUID test_provider_;
127 std::wstring session_name_;
128 };
129
130 } // namespace
131
132 TEST_F(EtwTraceControllerTest, Initialize) {
133 EtwTraceController controller;
134
135 EXPECT_EQ(NULL, controller.session());
136 EXPECT_STREQ(L"", controller.session_name());
137 }
138
139
140 TEST_F(EtwTraceControllerTest, StartRealTimeSession) {
141 EtwTraceController controller;
142
143 HRESULT hr = controller.StartRealtimeSession(session_name_.c_str(),
144 100 * 1024);
145 if (hr == E_ACCESSDENIED) {
146 VLOG(1) << "You must be an administrator to run this test on Vista";
147 return;
148 }
149
150 EXPECT_TRUE(NULL != controller.session());
151 EXPECT_STREQ(session_name_.c_str(), controller.session_name());
152
153 EXPECT_HRESULT_SUCCEEDED(controller.Stop(NULL));
154 EXPECT_EQ(NULL, controller.session());
155 EXPECT_STREQ(L"", controller.session_name());
156 }
157
158 TEST_F(EtwTraceControllerTest, StartFileSession) {
159 ScopedTempDir temp_dir;
160 ASSERT_TRUE(temp_dir.CreateUniqueTempDir());
161 FilePath temp;
162 ASSERT_TRUE(base::CreateTemporaryFileInDir(temp_dir.path(), &temp));
163
164 EtwTraceController controller;
165 HRESULT hr = controller.StartFileSession(session_name_.c_str(),
166 temp.value().c_str());
167 if (hr == E_ACCESSDENIED) {
168 VLOG(1) << "You must be an administrator to run this test on Vista";
169 base::DeleteFile(temp, false);
170 return;
171 }
172
173 EXPECT_TRUE(NULL != controller.session());
174 EXPECT_STREQ(session_name_.c_str(), controller.session_name());
175
176 EXPECT_HRESULT_SUCCEEDED(controller.Stop(NULL));
177 EXPECT_EQ(NULL, controller.session());
178 EXPECT_STREQ(L"", controller.session_name());
179 base::DeleteFile(temp, false);
180 }
181
182 TEST_F(EtwTraceControllerTest, EnableDisable) {
183 TestingProvider provider(test_provider_);
184
185 EXPECT_EQ(ERROR_SUCCESS, provider.Register());
186 EXPECT_EQ(NULL, provider.session_handle());
187
188 EtwTraceController controller;
189 HRESULT hr = controller.StartRealtimeSession(session_name_.c_str(),
190 100 * 1024);
191 if (hr == E_ACCESSDENIED) {
192 VLOG(1) << "You must be an administrator to run this test on Vista";
193 return;
194 }
195
196 EXPECT_HRESULT_SUCCEEDED(controller.EnableProvider(test_provider_,
197 TRACE_LEVEL_VERBOSE, kTestProviderFlags));
198
199 provider.WaitForCallback();
200
201 EXPECT_EQ(TRACE_LEVEL_VERBOSE, provider.enable_level());
202 EXPECT_EQ(kTestProviderFlags, provider.enable_flags());
203
204 EXPECT_HRESULT_SUCCEEDED(controller.DisableProvider(test_provider_));
205
206 provider.WaitForCallback();
207
208 EXPECT_EQ(0, provider.enable_level());
209 EXPECT_EQ(0, provider.enable_flags());
210
211 EXPECT_EQ(ERROR_SUCCESS, provider.Unregister());
212
213 // Enable the provider again, before registering.
214 EXPECT_HRESULT_SUCCEEDED(controller.EnableProvider(test_provider_,
215 TRACE_LEVEL_VERBOSE, kTestProviderFlags));
216
217 // Register the provider again, the settings above
218 // should take immediate effect.
219 EXPECT_EQ(ERROR_SUCCESS, provider.Register());
220
221 EXPECT_EQ(TRACE_LEVEL_VERBOSE, provider.enable_level());
222 EXPECT_EQ(kTestProviderFlags, provider.enable_flags());
223
224 EXPECT_HRESULT_SUCCEEDED(controller.Stop(NULL));
225
226 provider.WaitForCallback();
227
228 // Session should have wound down.
229 EXPECT_EQ(0, provider.enable_level());
230 EXPECT_EQ(0, provider.enable_flags());
231 }
232
233 } // namespace win
234 } // namespace base
OLDNEW
« no previous file with comments | « base/win/event_trace_controller.cc ('k') | base/win/event_trace_provider.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698