Re-applying reverted changes plus fix. ConfidenceScore now takes flat
[chromium-blink-merge.git] / base / win / event_trace_controller_unittest.cc
blobbe11128d009971c5493b20473b179c6267ff7e43
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.
7 #include <objbase.h>
8 #include <initguid.h>
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"
22 namespace base {
23 namespace win {
25 namespace {
27 DEFINE_GUID(kGuidNull,
28 0x0000000, 0x0000, 0x0000, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0);
30 const ULONG kTestProviderFlags = 0xCAFEBABE;
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));
39 void WaitForCallback() {
40 ::WaitForSingleObject(callback_event_.Get(), INFINITE);
41 ::ResetEvent(callback_event_.Get());
44 private:
45 virtual void OnEventsEnabled() {
46 ::SetEvent(callback_event_.Get());
48 virtual void PostEventsDisabled() {
49 ::SetEvent(callback_event_.Get());
52 ScopedHandle callback_event_;
54 DISALLOW_COPY_AND_ASSIGN(TestingProvider);
57 } // namespace
59 TEST(EtwTracePropertiesTest, Initialization) {
60 EtwTraceProperties prop;
62 EVENT_TRACE_PROPERTIES* p = prop.get();
63 EXPECT_NE(0u, p->Wnode.BufferSize);
64 EXPECT_EQ(0u, p->Wnode.ProviderId);
65 EXPECT_EQ(0u, p->Wnode.HistoricalContext);
67 EXPECT_TRUE(kGuidNull == p->Wnode.Guid);
68 EXPECT_EQ(0, p->Wnode.ClientContext);
69 EXPECT_EQ(WNODE_FLAG_TRACED_GUID, p->Wnode.Flags);
71 EXPECT_EQ(0, p->BufferSize);
72 EXPECT_EQ(0, p->MinimumBuffers);
73 EXPECT_EQ(0, p->MaximumBuffers);
74 EXPECT_EQ(0, p->MaximumFileSize);
75 EXPECT_EQ(0, p->LogFileMode);
76 EXPECT_EQ(0, p->FlushTimer);
77 EXPECT_EQ(0, p->EnableFlags);
78 EXPECT_EQ(0, p->AgeLimit);
80 EXPECT_EQ(0, p->NumberOfBuffers);
81 EXPECT_EQ(0, p->FreeBuffers);
82 EXPECT_EQ(0, p->EventsLost);
83 EXPECT_EQ(0, p->BuffersWritten);
84 EXPECT_EQ(0, p->LogBuffersLost);
85 EXPECT_EQ(0, p->RealTimeBuffersLost);
86 EXPECT_EQ(0, p->LoggerThreadId);
87 EXPECT_NE(0u, p->LogFileNameOffset);
88 EXPECT_NE(0u, p->LoggerNameOffset);
91 TEST(EtwTracePropertiesTest, Strings) {
92 EtwTraceProperties prop;
94 ASSERT_STREQ(L"", prop.GetLoggerFileName());
95 ASSERT_STREQ(L"", prop.GetLoggerName());
97 std::wstring name(1023, L'A');
98 ASSERT_HRESULT_SUCCEEDED(prop.SetLoggerFileName(name.c_str()));
99 ASSERT_HRESULT_SUCCEEDED(prop.SetLoggerName(name.c_str()));
100 ASSERT_STREQ(name.c_str(), prop.GetLoggerFileName());
101 ASSERT_STREQ(name.c_str(), prop.GetLoggerName());
103 std::wstring name2(1024, L'A');
104 ASSERT_HRESULT_FAILED(prop.SetLoggerFileName(name2.c_str()));
105 ASSERT_HRESULT_FAILED(prop.SetLoggerName(name2.c_str()));
108 namespace {
110 class EtwTraceControllerTest : public testing::Test {
111 public:
112 EtwTraceControllerTest()
113 : session_name_(StringPrintf(L"TestSession-%d", GetCurrentProcId())) {
116 virtual void SetUp() {
117 EtwTraceProperties ignore;
118 EtwTraceController::Stop(session_name_.c_str(), &ignore);
120 // Allocate a new provider name GUID for each test.
121 ASSERT_HRESULT_SUCCEEDED(::CoCreateGuid(&test_provider_));
124 virtual void TearDown() {
125 EtwTraceProperties prop;
126 EtwTraceController::Stop(session_name_.c_str(), &prop);
129 protected:
130 GUID test_provider_;
131 std::wstring session_name_;
134 } // namespace
136 TEST_F(EtwTraceControllerTest, Initialize) {
137 EtwTraceController controller;
139 EXPECT_EQ(NULL, controller.session());
140 EXPECT_STREQ(L"", controller.session_name());
144 TEST_F(EtwTraceControllerTest, StartRealTimeSession) {
145 EtwTraceController controller;
147 HRESULT hr = controller.StartRealtimeSession(session_name_.c_str(),
148 100 * 1024);
149 if (hr == E_ACCESSDENIED) {
150 VLOG(1) << "You must be an administrator to run this test on Vista";
151 return;
154 EXPECT_TRUE(NULL != controller.session());
155 EXPECT_STREQ(session_name_.c_str(), controller.session_name());
157 EXPECT_HRESULT_SUCCEEDED(controller.Stop(NULL));
158 EXPECT_EQ(NULL, controller.session());
159 EXPECT_STREQ(L"", controller.session_name());
162 TEST_F(EtwTraceControllerTest, StartFileSession) {
163 ScopedTempDir temp_dir;
164 ASSERT_TRUE(temp_dir.CreateUniqueTempDir());
165 FilePath temp;
166 ASSERT_TRUE(base::CreateTemporaryFileInDir(temp_dir.path(), &temp));
168 EtwTraceController controller;
169 HRESULT hr = controller.StartFileSession(session_name_.c_str(),
170 temp.value().c_str());
171 if (hr == E_ACCESSDENIED) {
172 VLOG(1) << "You must be an administrator to run this test on Vista";
173 base::DeleteFile(temp, false);
174 return;
177 EXPECT_TRUE(NULL != controller.session());
178 EXPECT_STREQ(session_name_.c_str(), controller.session_name());
180 EXPECT_HRESULT_SUCCEEDED(controller.Stop(NULL));
181 EXPECT_EQ(NULL, controller.session());
182 EXPECT_STREQ(L"", controller.session_name());
183 base::DeleteFile(temp, false);
186 TEST_F(EtwTraceControllerTest, EnableDisable) {
187 TestingProvider provider(test_provider_);
189 EXPECT_EQ(ERROR_SUCCESS, provider.Register());
190 EXPECT_EQ(NULL, provider.session_handle());
192 EtwTraceController controller;
193 HRESULT hr = controller.StartRealtimeSession(session_name_.c_str(),
194 100 * 1024);
195 if (hr == E_ACCESSDENIED) {
196 VLOG(1) << "You must be an administrator to run this test on Vista";
197 return;
200 EXPECT_HRESULT_SUCCEEDED(controller.EnableProvider(test_provider_,
201 TRACE_LEVEL_VERBOSE, kTestProviderFlags));
203 provider.WaitForCallback();
205 EXPECT_EQ(TRACE_LEVEL_VERBOSE, provider.enable_level());
206 EXPECT_EQ(kTestProviderFlags, provider.enable_flags());
208 EXPECT_HRESULT_SUCCEEDED(controller.DisableProvider(test_provider_));
210 provider.WaitForCallback();
212 EXPECT_EQ(0, provider.enable_level());
213 EXPECT_EQ(0, provider.enable_flags());
215 EXPECT_EQ(ERROR_SUCCESS, provider.Unregister());
217 // Enable the provider again, before registering.
218 EXPECT_HRESULT_SUCCEEDED(controller.EnableProvider(test_provider_,
219 TRACE_LEVEL_VERBOSE, kTestProviderFlags));
221 // Register the provider again, the settings above
222 // should take immediate effect.
223 EXPECT_EQ(ERROR_SUCCESS, provider.Register());
225 EXPECT_EQ(TRACE_LEVEL_VERBOSE, provider.enable_level());
226 EXPECT_EQ(kTestProviderFlags, provider.enable_flags());
228 EXPECT_HRESULT_SUCCEEDED(controller.Stop(NULL));
230 provider.WaitForCallback();
232 // Session should have wound down.
233 EXPECT_EQ(0, provider.enable_level());
234 EXPECT_EQ(0, provider.enable_flags());
237 } // namespace win
238 } // namespace base