OLD | NEW |
1 // Copyright (c) 2010 The Chromium Authors. All rights reserved. | 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 | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 // | 4 // |
5 // Unit tests for event trace consumer_ base class. | 5 // Unit tests for event trace consumer_ base class. |
6 #include "base/win/event_trace_consumer.h" | 6 #include "base/win/event_trace_consumer.h" |
| 7 |
7 #include <list> | 8 #include <list> |
| 9 |
8 #include "base/basictypes.h" | 10 #include "base/basictypes.h" |
9 #include "base/win/event_trace_controller.h" | |
10 #include "base/win/event_trace_provider.h" | |
11 #include "base/file_path.h" | 11 #include "base/file_path.h" |
12 #include "base/file_util.h" | 12 #include "base/file_util.h" |
13 #include "base/logging.h" | 13 #include "base/logging.h" |
14 #include "base/scoped_handle.h" | 14 #include "base/win/event_trace_controller.h" |
| 15 #include "base/win/event_trace_provider.h" |
| 16 #include "base/win/scoped_handle.h" |
15 #include "testing/gtest/include/gtest/gtest.h" | 17 #include "testing/gtest/include/gtest/gtest.h" |
16 | 18 |
17 #include <initguid.h> // NOLINT - has to be last | 19 #include <initguid.h> // NOLINT - has to be last |
18 | 20 |
19 namespace { | 21 namespace { |
20 | 22 |
21 using base::win::EtwMofEvent; | 23 using base::win::EtwMofEvent; |
22 using base::win::EtwTraceController; | 24 using base::win::EtwTraceController; |
23 using base::win::EtwTraceConsumerBase; | 25 using base::win::EtwTraceConsumerBase; |
24 using base::win::EtwTraceProperties; | 26 using base::win::EtwTraceProperties; |
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
56 back.MofData = new char[event->MofLength]; | 58 back.MofData = new char[event->MofLength]; |
57 memcpy(back.MofData, event->MofData, event->MofLength); | 59 memcpy(back.MofData, event->MofData, event->MofLength); |
58 } | 60 } |
59 } | 61 } |
60 | 62 |
61 static void ProcessEvent(EVENT_TRACE* event) { | 63 static void ProcessEvent(EVENT_TRACE* event) { |
62 EnqueueEvent(event); | 64 EnqueueEvent(event); |
63 ::SetEvent(sank_event_.Get()); | 65 ::SetEvent(sank_event_.Get()); |
64 } | 66 } |
65 | 67 |
66 static ScopedHandle sank_event_; | 68 static base::win::ScopedHandle sank_event_; |
67 static EventQueue events_; | 69 static EventQueue events_; |
68 | 70 |
69 private: | 71 private: |
70 DISALLOW_COPY_AND_ASSIGN(TestConsumer); | 72 DISALLOW_COPY_AND_ASSIGN(TestConsumer); |
71 }; | 73 }; |
72 | 74 |
73 ScopedHandle TestConsumer::sank_event_; | 75 base::win::ScopedHandle TestConsumer::sank_event_; |
74 EventQueue TestConsumer::events_; | 76 EventQueue TestConsumer::events_; |
75 | 77 |
76 const wchar_t* const kTestSessionName = L"TestLogSession"; | 78 const wchar_t* const kTestSessionName = L"TestLogSession"; |
77 | 79 |
78 class EtwTraceConsumerBaseTest: public testing::Test { | 80 class EtwTraceConsumerBaseTest: public testing::Test { |
79 public: | 81 public: |
80 virtual void SetUp() { | 82 virtual void SetUp() { |
81 EtwTraceProperties ignore; | 83 EtwTraceProperties ignore; |
82 EtwTraceController::Stop(kTestSessionName, &ignore); | 84 EtwTraceController::Stop(kTestSessionName, &ignore); |
83 } | 85 } |
(...skipping 84 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
168 return HRESULT_FROM_WIN32(::GetLastError()); | 170 return HRESULT_FROM_WIN32(::GetLastError()); |
169 | 171 |
170 DWORD exit_code = 0; | 172 DWORD exit_code = 0; |
171 if (::GetExitCodeThread(consumer_thread_, &exit_code)) | 173 if (::GetExitCodeThread(consumer_thread_, &exit_code)) |
172 return exit_code; | 174 return exit_code; |
173 | 175 |
174 return HRESULT_FROM_WIN32(::GetLastError()); | 176 return HRESULT_FROM_WIN32(::GetLastError()); |
175 } | 177 } |
176 | 178 |
177 TestConsumer consumer_; | 179 TestConsumer consumer_; |
178 ScopedHandle consumer_ready_; | 180 base::win::ScopedHandle consumer_ready_; |
179 ScopedHandle consumer_thread_; | 181 base::win::ScopedHandle consumer_thread_; |
180 }; | 182 }; |
181 } // namespace | 183 } // namespace |
182 | 184 |
183 TEST_F(EtwTraceConsumerRealtimeTest, ConsumerReturnsWhenSessionClosed) { | 185 TEST_F(EtwTraceConsumerRealtimeTest, ConsumerReturnsWhenSessionClosed) { |
184 EtwTraceController controller; | 186 EtwTraceController controller; |
185 | 187 |
186 HRESULT hr = controller.StartRealtimeSession(kTestSessionName, 100 * 1024); | 188 HRESULT hr = controller.StartRealtimeSession(kTestSessionName, 100 * 1024); |
187 if (hr == E_ACCESSDENIED) { | 189 if (hr == E_ACCESSDENIED) { |
188 VLOG(1) << "You must be an administrator to run this test on Vista"; | 190 VLOG(1) << "You must be an administrator to run this test on Vista"; |
189 return; | 191 return; |
(...skipping 147 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
337 PEVENT_TRACE trace = NULL; | 339 PEVENT_TRACE trace = NULL; |
338 HRESULT hr = RoundTripEvent(&event.header, &trace); | 340 HRESULT hr = RoundTripEvent(&event.header, &trace); |
339 if (hr == E_ACCESSDENIED) { | 341 if (hr == E_ACCESSDENIED) { |
340 VLOG(1) << "You must be an administrator to run this test on Vista"; | 342 VLOG(1) << "You must be an administrator to run this test on Vista"; |
341 return; | 343 return; |
342 } | 344 } |
343 ASSERT_TRUE(NULL != trace); | 345 ASSERT_TRUE(NULL != trace); |
344 ASSERT_EQ(sizeof(kData), trace->MofLength); | 346 ASSERT_EQ(sizeof(kData), trace->MofLength); |
345 ASSERT_STREQ(kData, reinterpret_cast<const char*>(trace->MofData)); | 347 ASSERT_STREQ(kData, reinterpret_cast<const char*>(trace->MofData)); |
346 } | 348 } |
OLD | NEW |