147be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org/* 247be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org * Copyright 2010 The WebRTC Project Authors. All rights reserved. 347be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org * 447be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org * Use of this source code is governed by a BSD-style license 547be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org * that can be found in the LICENSE file in the root of the source 647be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org * tree. An additional intellectual property rights grant can be found 747be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org * in the file PATENTS. All contributing project authors may 847be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org * be found in the AUTHORS file in the root of the source tree. 947be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org */ 1047be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org 1147be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org#include "webrtc/base/gunit.h" 1247be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org#include "webrtc/base/pathutils.h" 1347be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org#include "webrtc/base/scoped_ptr.h" 1447be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org#include "webrtc/base/win32toolhelp.h" 1547be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org 1647be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.orgnamespace rtc { 1747be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org 1847be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.orgtypedef struct { 1947be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org // Required to match the toolhelp api struct 'design'. 2047be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org DWORD dwSize; 2147be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org int a; 2247be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org uint32 b; 2347be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org} TestData; 2447be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org 2547be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.orgclass Win32ToolhelpTest : public testing::Test { 2647be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org public: 2747be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org Win32ToolhelpTest() { 2847be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org } 2947be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org 3047be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org HANDLE AsHandle() { 3147be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org return reinterpret_cast<HANDLE>(this); 3247be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org } 3347be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org 3447be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org static Win32ToolhelpTest* AsFixture(HANDLE handle) { 3547be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org return reinterpret_cast<Win32ToolhelpTest*>(handle); 3647be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org } 3747be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org 3847be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org static bool First(HANDLE handle, TestData* d) { 3947be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org Win32ToolhelpTest* tst = Win32ToolhelpTest::AsFixture(handle); 4047be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org // This method should be called only once for every test. 4147be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org // If it is called more than once it return false which 4247be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org // should break the test. 4347be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org EXPECT_EQ(0, tst->first_called_); // Just to be safe. 4447be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org if (tst->first_called_ > 0) { 4547be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org return false; 4647be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org } 4747be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org 4847be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org *d = kTestData[0]; 4947be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org tst->index_ = 1; 5047be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org ++(tst->first_called_); 5147be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org return true; 5247be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org } 5347be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org 5447be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org static bool Next(HANDLE handle, TestData* d) { 5547be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org Win32ToolhelpTest* tst = Win32ToolhelpTest::AsFixture(handle); 5647be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org ++(tst->next_called_); 5747be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org 5847be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org if (tst->index_ >= kTestDataSize) { 5947be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org return FALSE; 6047be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org } 6147be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org 6247be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org *d = kTestData[tst->index_]; 6347be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org ++(tst->index_); 6447be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org return true; 6547be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org } 6647be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org 6747be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org static bool Fail(HANDLE handle, TestData* d) { 6847be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org Win32ToolhelpTest* tst = Win32ToolhelpTest::AsFixture(handle); 6947be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org ++(tst->fail_called_); 7047be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org return false; 7147be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org } 7247be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org 7347be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org static bool CloseHandle(HANDLE handle) { 7447be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org Win32ToolhelpTest* tst = Win32ToolhelpTest::AsFixture(handle); 7547be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org ++(tst->close_handle_called_); 7647be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org return true; 7747be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org } 7847be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org 7947be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org protected: 8047be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org virtual void SetUp() { 8147be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org fail_called_ = 0; 8247be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org first_called_ = 0; 8347be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org next_called_ = 0; 8447be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org close_handle_called_ = 0; 8547be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org index_ = 0; 8647be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org } 8747be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org 8847be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org static bool AllZero(const TestData& data) { 8947be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org return data.dwSize == 0 && data.a == 0 && data.b == 0; 9047be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org } 9147be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org 9247be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org static bool Equals(const TestData& expected, const TestData& actual) { 9347be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org return expected.dwSize == actual.dwSize 9447be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org && expected.a == actual.a 9547be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org && expected.b == actual.b; 9647be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org } 9747be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org 9847be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org bool CheckCallCounters(int first, int next, int fail, int close) { 9947be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org bool match = first_called_ == first && next_called_ == next 10047be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org && fail_called_ == fail && close_handle_called_ == close; 10147be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org 10247be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org if (!match) { 10347be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org LOG(LS_ERROR) << "Expected: (" 10447be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org << first << ", " 10547be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org << next << ", " 10647be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org << fail << ", " 10747be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org << close << ")"; 10847be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org 10947be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org LOG(LS_ERROR) << "Actual: (" 11047be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org << first_called_ << ", " 11147be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org << next_called_ << ", " 11247be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org << fail_called_ << ", " 11347be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org << close_handle_called_ << ")"; 11447be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org } 11547be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org return match; 11647be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org } 11747be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org 11847be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org static const int kTestDataSize = 3; 11947be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org static const TestData kTestData[]; 12047be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org int index_; 12147be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org int first_called_; 12247be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org int fail_called_; 12347be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org int next_called_; 12447be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org int close_handle_called_; 12547be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org}; 12647be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org 12747be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.orgconst TestData Win32ToolhelpTest::kTestData[] = { 12847be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org {1, 1, 1}, {2, 2, 2}, {3, 3, 3} 12947be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org}; 13047be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org 13147be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org 13247be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.orgclass TestTraits { 13347be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org public: 13447be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org typedef TestData Type; 13547be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org 13647be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org static bool First(HANDLE handle, Type* t) { 13747be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org return Win32ToolhelpTest::First(handle, t); 13847be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org } 13947be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org 14047be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org static bool Next(HANDLE handle, Type* t) { 14147be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org return Win32ToolhelpTest::Next(handle, t); 14247be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org } 14347be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org 14447be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org static bool CloseHandle(HANDLE handle) { 14547be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org return Win32ToolhelpTest::CloseHandle(handle); 14647be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org } 14747be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org}; 14847be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org 14947be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.orgclass BadFirstTraits { 15047be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org public: 15147be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org typedef TestData Type; 15247be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org 15347be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org static bool First(HANDLE handle, Type* t) { 15447be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org return Win32ToolhelpTest::Fail(handle, t); 15547be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org } 15647be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org 15747be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org static bool Next(HANDLE handle, Type* t) { 15847be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org // This should never be called. 15947be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org ADD_FAILURE(); 16047be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org return false; 16147be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org } 16247be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org 16347be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org static bool CloseHandle(HANDLE handle) { 16447be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org return Win32ToolhelpTest::CloseHandle(handle); 16547be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org } 16647be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org}; 16747be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org 16847be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.orgclass BadNextTraits { 16947be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org public: 17047be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org typedef TestData Type; 17147be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org 17247be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org static bool First(HANDLE handle, Type* t) { 17347be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org return Win32ToolhelpTest::First(handle, t); 17447be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org } 17547be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org 17647be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org static bool Next(HANDLE handle, Type* t) { 17747be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org return Win32ToolhelpTest::Fail(handle, t); 17847be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org } 17947be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org 18047be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org static bool CloseHandle(HANDLE handle) { 18147be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org return Win32ToolhelpTest::CloseHandle(handle); 18247be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org } 18347be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org}; 18447be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org 18547be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org// The toolhelp in normally inherited but most of 18647be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org// these tests only excercise the methods from the 18747be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org// traits therefore I use a typedef to make the 18847be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org// test code easier to read. 18947be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.orgtypedef rtc::ToolhelpEnumeratorBase<TestTraits> EnumeratorForTest; 19047be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org 19147be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.orgTEST_F(Win32ToolhelpTest, TestNextWithInvalidCtorHandle) { 19247be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org EnumeratorForTest t(INVALID_HANDLE_VALUE); 19347be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org 19447be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org EXPECT_FALSE(t.Next()); 19547be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org EXPECT_TRUE(CheckCallCounters(0, 0, 0, 0)); 19647be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org} 19747be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org 19847be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org// Tests that Next() returns false if the first-pointer 19947be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org// function fails. 20047be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.orgTEST_F(Win32ToolhelpTest, TestNextFirstFails) { 20147be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org typedef rtc::ToolhelpEnumeratorBase<BadFirstTraits> BadEnumerator; 20247be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org rtc::scoped_ptr<BadEnumerator> t(new BadEnumerator(AsHandle())); 20347be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org 20447be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org // If next ever fails it shall always fail. 20547be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org EXPECT_FALSE(t->Next()); 20647be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org EXPECT_FALSE(t->Next()); 20747be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org EXPECT_FALSE(t->Next()); 20847be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org t.reset(); 20947be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org EXPECT_TRUE(CheckCallCounters(0, 0, 1, 1)); 21047be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org} 21147be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org 21247be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org// Tests that Next() returns false if the next-pointer 21347be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org// function fails. 21447be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.orgTEST_F(Win32ToolhelpTest, TestNextNextFails) { 21547be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org typedef rtc::ToolhelpEnumeratorBase<BadNextTraits> BadEnumerator; 21647be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org rtc::scoped_ptr<BadEnumerator> t(new BadEnumerator(AsHandle())); 21747be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org 21847be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org // If next ever fails it shall always fail. No more calls 21947be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org // shall be dispatched to Next(...). 22047be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org EXPECT_TRUE(t->Next()); 22147be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org EXPECT_FALSE(t->Next()); 22247be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org EXPECT_FALSE(t->Next()); 22347be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org t.reset(); 22447be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org EXPECT_TRUE(CheckCallCounters(1, 0, 1, 1)); 22547be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org} 22647be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org 22747be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org 22847be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org// Tests that current returns an object is all zero's 22947be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org// if Next() hasn't been called. 23047be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.orgTEST_F(Win32ToolhelpTest, TestCurrentNextNotCalled) { 23147be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org rtc::scoped_ptr<EnumeratorForTest> t(new EnumeratorForTest(AsHandle())); 23247be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org EXPECT_TRUE(AllZero(t->current())); 23347be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org t.reset(); 23447be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org EXPECT_TRUE(CheckCallCounters(0, 0, 0, 1)); 23547be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org} 23647be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org 23747be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org// Tests the simple everything works path through the code. 23847be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.orgTEST_F(Win32ToolhelpTest, TestCurrentNextCalled) { 23947be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org rtc::scoped_ptr<EnumeratorForTest> t(new EnumeratorForTest(AsHandle())); 24047be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org 24147be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org EXPECT_TRUE(t->Next()); 24247be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org EXPECT_TRUE(Equals(t->current(), kTestData[0])); 24347be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org EXPECT_TRUE(t->Next()); 24447be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org EXPECT_TRUE(Equals(t->current(), kTestData[1])); 24547be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org EXPECT_TRUE(t->Next()); 24647be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org EXPECT_TRUE(Equals(t->current(), kTestData[2])); 24747be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org EXPECT_FALSE(t->Next()); 24847be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org t.reset(); 24947be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org EXPECT_TRUE(CheckCallCounters(1, 3, 0, 1)); 25047be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org} 25147be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org 25247be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.orgTEST_F(Win32ToolhelpTest, TestCurrentProcess) { 25347be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org WCHAR buf[MAX_PATH]; 25447be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org GetModuleFileName(NULL, buf, ARRAY_SIZE(buf)); 25547be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org std::wstring name = ToUtf16(Pathname(ToUtf8(buf)).filename()); 25647be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org 25747be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org rtc::ProcessEnumerator processes; 25847be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org bool found = false; 25947be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org while (processes.Next()) { 26047be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org if (!name.compare(processes.current().szExeFile)) { 26147be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org found = true; 26247be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org break; 26347be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org } 26447be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org } 26547be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org EXPECT_TRUE(found); 26647be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org 26747be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org rtc::ModuleEnumerator modules(processes.current().th32ProcessID); 26847be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org found = false; 26947be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org while (modules.Next()) { 27047be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org if (!name.compare(modules.current().szModule)) { 27147be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org found = true; 27247be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org break; 27347be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org } 27447be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org } 27547be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org EXPECT_TRUE(found); 27647be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org} 27747be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org 27847be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org} // namespace rtc 279