Another take on menu's. This uses the hosting menu scroll view container as a menuba...
[chromium-blink-merge.git] / base / event_trace_controller_win_unittest.cc
blob06170de51ebc46df94da55297db1d2d50bb637ac
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.
16 namespace {
18 const wchar_t kTestSessionName[] = L"TestLogSession";
20 // {0D236A42-CD18-4e3d-9975-DCEEA2106E05}
21 DEFINE_GUID(kTestProvider,
22 0xd236a42, 0xcd18, 0x4e3d, 0x99, 0x75, 0xdc, 0xee, 0xa2, 0x10, 0x6e, 0x5);
24 DEFINE_GUID(kGuidNull,
25 0x0000000, 0x0000, 0x0000, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0);
27 const ULONG kTestProviderFlags = 0xCAFEBABE;
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));
36 void WaitForCallback() {
37 ::WaitForSingleObject(callback_event_.Get(), INFINITE);
38 ::ResetEvent(callback_event_.Get());
41 private:
42 virtual void OnEventsEnabled() {
43 ::SetEvent(callback_event_.Get());
45 virtual void OnEventsDisabled() {
46 ::SetEvent(callback_event_.Get());
49 ScopedHandle callback_event_;
51 DISALLOW_COPY_AND_ASSIGN(TestingProvider);
54 } // namespace
56 TEST(EtwTraceTest, Cleanup) {
57 // Clean up potential leftover sessions from previous unsuccessful runs.
58 EtwTraceController::Stop(kTestSessionName, NULL);
61 TEST(EtwTracePropertiesTest, Initialization) {
62 EtwTraceProperties prop;
64 EVENT_TRACE_PROPERTIES* p = prop.get();
65 EXPECT_NE(0u, p->Wnode.BufferSize);
66 EXPECT_EQ(0u, p->Wnode.ProviderId);
67 EXPECT_EQ(0u, p->Wnode.HistoricalContext);
69 EXPECT_TRUE(kGuidNull == p->Wnode.Guid);
70 EXPECT_EQ(0, p->Wnode.ClientContext);
71 EXPECT_EQ(WNODE_FLAG_TRACED_GUID, p->Wnode.Flags);
73 EXPECT_EQ(0, p->BufferSize);
74 EXPECT_EQ(0, p->MinimumBuffers);
75 EXPECT_EQ(0, p->MaximumBuffers);
76 EXPECT_EQ(0, p->MaximumFileSize);
77 EXPECT_EQ(0, p->LogFileMode);
78 EXPECT_EQ(0, p->FlushTimer);
79 EXPECT_EQ(0, p->EnableFlags);
80 EXPECT_EQ(0, p->AgeLimit);
82 EXPECT_EQ(0, p->NumberOfBuffers);
83 EXPECT_EQ(0, p->FreeBuffers);
84 EXPECT_EQ(0, p->EventsLost);
85 EXPECT_EQ(0, p->BuffersWritten);
86 EXPECT_EQ(0, p->LogBuffersLost);
87 EXPECT_EQ(0, p->RealTimeBuffersLost);
88 EXPECT_EQ(0, p->LoggerThreadId);
89 EXPECT_NE(0u, p->LogFileNameOffset);
90 EXPECT_NE(0u, p->LoggerNameOffset);
93 TEST(EtwTracePropertiesTest, Strings) {
94 EtwTraceProperties prop;
96 ASSERT_STREQ(L"", prop.GetLoggerFileName());
97 ASSERT_STREQ(L"", prop.GetLoggerName());
99 std::wstring name(1023, L'A');
100 ASSERT_HRESULT_SUCCEEDED(prop.SetLoggerFileName(name.c_str()));
101 ASSERT_HRESULT_SUCCEEDED(prop.SetLoggerName(name.c_str()));
102 ASSERT_STREQ(name.c_str(), prop.GetLoggerFileName());
103 ASSERT_STREQ(name.c_str(), prop.GetLoggerName());
105 std::wstring name2(1024, L'A');
106 ASSERT_HRESULT_FAILED(prop.SetLoggerFileName(name2.c_str()));
107 ASSERT_HRESULT_FAILED(prop.SetLoggerName(name2.c_str()));
110 TEST(EtwTraceControllerTest, Initialize) {
111 EtwTraceController controller;
113 EXPECT_EQ(NULL, controller.session());
114 EXPECT_STREQ(L"", controller.session_name());
117 TEST(EtwTraceControllerTest, StartRealTimeSession) {
118 EtwTraceController controller;
120 HRESULT hr = controller.StartRealtimeSession(kTestSessionName, 100 * 1024);
121 if (hr == E_ACCESSDENIED) {
122 LOG(INFO) << "You must be an administrator to run this test on Vista";
123 return;
126 EXPECT_TRUE(NULL != controller.session());
127 EXPECT_STREQ(kTestSessionName, controller.session_name());
129 EXPECT_HRESULT_SUCCEEDED(controller.Stop(NULL));
130 EXPECT_EQ(NULL, controller.session());
131 EXPECT_STREQ(L"", controller.session_name());
134 TEST(EtwTraceControllerTest, StartFileSession) {
135 FilePath temp;
137 ASSERT_HRESULT_SUCCEEDED(file_util::CreateTemporaryFile(&temp));
139 EtwTraceController controller;
140 HRESULT hr = controller.StartFileSession(kTestSessionName,
141 temp.value().c_str());
142 if (hr == E_ACCESSDENIED) {
143 LOG(INFO) << "You must be an administrator to run this test on Vista";
144 return;
147 EXPECT_TRUE(NULL != controller.session());
148 EXPECT_STREQ(kTestSessionName, controller.session_name());
150 EXPECT_HRESULT_SUCCEEDED(controller.Stop(NULL));
151 EXPECT_EQ(NULL, controller.session());
152 EXPECT_STREQ(L"", controller.session_name());
155 TEST(EtwTraceControllerTest, EnableDisable) {
156 TestingProvider provider(kTestProvider);
158 EXPECT_EQ(ERROR_SUCCESS, provider.Register());
159 EXPECT_EQ(NULL, provider.session_handle());
161 EtwTraceController controller;
162 HRESULT hr = controller.StartRealtimeSession(kTestSessionName, 100 * 1024);
163 if (hr == E_ACCESSDENIED) {
164 LOG(INFO) << "You must be an administrator to run this test on Vista";
165 return;
168 EXPECT_HRESULT_SUCCEEDED(controller.EnableProvider(kTestProvider,
169 TRACE_LEVEL_VERBOSE, kTestProviderFlags));
171 provider.WaitForCallback();
173 EXPECT_EQ(TRACE_LEVEL_VERBOSE, provider.enable_level());
174 EXPECT_EQ(kTestProviderFlags, provider.enable_flags());
176 EXPECT_HRESULT_SUCCEEDED(controller.DisableProvider(kTestProvider));
178 provider.WaitForCallback();
180 EXPECT_EQ(0, provider.enable_level());
181 EXPECT_EQ(0, provider.enable_flags());
183 EXPECT_EQ(ERROR_SUCCESS, provider.Unregister());
185 // Enable the provider again, before registering.
186 EXPECT_HRESULT_SUCCEEDED(controller.EnableProvider(kTestProvider,
187 TRACE_LEVEL_VERBOSE, kTestProviderFlags));
189 // Register the provider again, the settings above
190 // should take immediate effect.
191 EXPECT_EQ(ERROR_SUCCESS, provider.Register());
193 EXPECT_EQ(TRACE_LEVEL_VERBOSE, provider.enable_level());
194 EXPECT_EQ(kTestProviderFlags, provider.enable_flags());
196 EXPECT_HRESULT_SUCCEEDED(controller.Stop(NULL));
198 provider.WaitForCallback();
200 // Session should have wound down.
201 EXPECT_EQ(0, provider.enable_level());
202 EXPECT_EQ(0, provider.enable_flags());