summaryrefslogtreecommitdiffstats
path: root/base/pe_image_unittest.cc
diff options
context:
space:
mode:
authorbrettw@chromium.org <brettw@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2010-10-17 04:41:54 +0000
committerbrettw@chromium.org <brettw@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2010-10-17 04:41:54 +0000
commit2d650398a9afa1fc3c168aed736daa13901809a8 (patch)
tree6dc4a48b54cdca7f0946ac097353b5c1ca733b40 /base/pe_image_unittest.cc
parentdf0ca6c858762b101bf424ff6c0522409fa195fc (diff)
downloadchromium_src-2d650398a9afa1fc3c168aed736daa13901809a8.zip
chromium_src-2d650398a9afa1fc3c168aed736daa13901809a8.tar.gz
chromium_src-2d650398a9afa1fc3c168aed736daa13901809a8.tar.bz2
Move pe_image and registry from base to base/win and use the namespace. It removes windows_message_list which isn't used.
This keeps a stub for registry in the old location until we can update that. TEST=it compiles BUG=none Review URL: http://codereview.chromium.org/3836005 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@62888 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'base/pe_image_unittest.cc')
-rw-r--r--base/pe_image_unittest.cc213
1 files changed, 0 insertions, 213 deletions
diff --git a/base/pe_image_unittest.cc b/base/pe_image_unittest.cc
deleted file mode 100644
index 6d8875e..0000000
--- a/base/pe_image_unittest.cc
+++ /dev/null
@@ -1,213 +0,0 @@
-// Copyright (c) 2010 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-// This file contains unit tests for PEImage.
-
-#include "testing/gtest/include/gtest/gtest.h"
-#include "base/pe_image.h"
-#include "base/win/windows_version.h"
-
-// Just counts the number of invocations.
-bool ExportsCallback(const PEImage &image,
- DWORD ordinal,
- DWORD hint,
- LPCSTR name,
- PVOID function,
- LPCSTR forward,
- PVOID cookie) {
- int* count = reinterpret_cast<int*>(cookie);
- (*count)++;
- return true;
-}
-
-// Just counts the number of invocations.
-bool ImportsCallback(const PEImage &image,
- LPCSTR module,
- DWORD ordinal,
- LPCSTR name,
- DWORD hint,
- PIMAGE_THUNK_DATA iat,
- PVOID cookie) {
- int* count = reinterpret_cast<int*>(cookie);
- (*count)++;
- return true;
-}
-
-// Just counts the number of invocations.
-bool SectionsCallback(const PEImage &image,
- PIMAGE_SECTION_HEADER header,
- PVOID section_start,
- DWORD section_size,
- PVOID cookie) {
- int* count = reinterpret_cast<int*>(cookie);
- (*count)++;
- return true;
-}
-
-// Just counts the number of invocations.
-bool RelocsCallback(const PEImage &image,
- WORD type,
- PVOID address,
- PVOID cookie) {
- int* count = reinterpret_cast<int*>(cookie);
- (*count)++;
- return true;
-}
-
-// Just counts the number of invocations.
-bool ImportChunksCallback(const PEImage &image,
- LPCSTR module,
- PIMAGE_THUNK_DATA name_table,
- PIMAGE_THUNK_DATA iat,
- PVOID cookie) {
- int* count = reinterpret_cast<int*>(cookie);
- (*count)++;
- return true;
-}
-
-// Just counts the number of invocations.
-bool DelayImportChunksCallback(const PEImage &image,
- PImgDelayDescr delay_descriptor,
- LPCSTR module,
- PIMAGE_THUNK_DATA name_table,
- PIMAGE_THUNK_DATA iat,
- PIMAGE_THUNK_DATA bound_iat,
- PIMAGE_THUNK_DATA unload_iat,
- PVOID cookie) {
- int* count = reinterpret_cast<int*>(cookie);
- (*count)++;
- return true;
-}
-
-// We'll be using some known values for the tests.
-enum Value {
- sections = 0,
- imports_dlls,
- delay_dlls,
- exports,
- imports,
- delay_imports,
- relocs
-};
-
-// Retrieves the expected value from advapi32.dll based on the OS.
-int GetExpectedValue(Value value, DWORD os) {
- const int xp_delay_dlls = 2;
- const int xp_exports = 675;
- const int xp_imports = 422;
- const int xp_delay_imports = 8;
- const int xp_relocs = 9180;
- const int vista_delay_dlls = 4;
- const int vista_exports = 799;
- const int vista_imports = 476;
- const int vista_delay_imports = 24;
- const int vista_relocs = 10188;
- const int w2k_delay_dlls = 0;
- const int w2k_exports = 566;
- const int w2k_imports = 357;
- const int w2k_delay_imports = 0;
- const int w2k_relocs = 7388;
- const int win7_delay_dlls = 7;
- const int win7_exports = 806;
- const int win7_imports = 568;
- const int win7_delay_imports = 71;
- const int win7_relocs = 7812;
-
- // Contains the expected value, for each enumerated property (Value), and the
- // OS version: [Value][os_version]
- const int expected[][4] = {
- {4, 4, 4, 4},
- {3, 3, 3, 13},
- {w2k_delay_dlls, xp_delay_dlls, vista_delay_dlls, win7_delay_dlls},
- {w2k_exports, xp_exports, vista_exports, win7_exports},
- {w2k_imports, xp_imports, vista_imports, win7_imports},
- {w2k_delay_imports, xp_delay_imports,
- vista_delay_imports, win7_delay_imports},
- {w2k_relocs, xp_relocs, vista_relocs, win7_relocs}
- };
-
- if (value > relocs)
- return 0;
- if (50 == os)
- os = 0; // 5.0
- else if (51 == os || 52 == os)
- os = 1;
- else if (os == 60)
- os = 2; // 6.x
- else if (os >= 61)
- os = 3;
- else
- return 0;
-
- return expected[value][os];
-}
-
-// Tests that we are able to enumerate stuff from a PE file, and that
-// the actual number of items found is within the expected range.
-TEST(PEImageTest, EnumeratesPE) {
- // Windows Server 2003 is not supported as a test environment for this test.
- if (base::win::GetVersion() == base::win::VERSION_SERVER_2003)
- return;
- HMODULE module = LoadLibrary(L"advapi32.dll");
- ASSERT_TRUE(NULL != module);
-
- PEImage pe(module);
- int count = 0;
- EXPECT_TRUE(pe.VerifyMagic());
-
- DWORD os = pe.GetNTHeaders()->OptionalHeader.MajorOperatingSystemVersion;
- os = os * 10 + pe.GetNTHeaders()->OptionalHeader.MinorOperatingSystemVersion;
-
- pe.EnumSections(SectionsCallback, &count);
- EXPECT_EQ(GetExpectedValue(sections, os), count);
-
- count = 0;
- pe.EnumImportChunks(ImportChunksCallback, &count);
- EXPECT_EQ(GetExpectedValue(imports_dlls, os), count);
-
- count = 0;
- pe.EnumDelayImportChunks(DelayImportChunksCallback, &count);
- EXPECT_EQ(GetExpectedValue(delay_dlls, os), count);
-
- count = 0;
- pe.EnumExports(ExportsCallback, &count);
- EXPECT_GT(count, GetExpectedValue(exports, os) - 20);
- EXPECT_LT(count, GetExpectedValue(exports, os) + 100);
-
- count = 0;
- pe.EnumAllImports(ImportsCallback, &count);
- EXPECT_GT(count, GetExpectedValue(imports, os) - 20);
- EXPECT_LT(count, GetExpectedValue(imports, os) + 100);
-
- count = 0;
- pe.EnumAllDelayImports(ImportsCallback, &count);
- EXPECT_GT(count, GetExpectedValue(delay_imports, os) - 2);
- EXPECT_LT(count, GetExpectedValue(delay_imports, os) + 8);
-
- count = 0;
- pe.EnumRelocs(RelocsCallback, &count);
- EXPECT_GT(count, GetExpectedValue(relocs, os) - 150);
- EXPECT_LT(count, GetExpectedValue(relocs, os) + 1500);
-
- FreeLibrary(module);
-}
-
-// Tests that we can locate an specific exported symbol, by name and by ordinal.
-TEST(PEImageTest, RetrievesExports) {
- HMODULE module = LoadLibrary(L"advapi32.dll");
- ASSERT_TRUE(NULL != module);
-
- PEImage pe(module);
- WORD ordinal;
-
- EXPECT_TRUE(pe.GetProcOrdinal("RegEnumKeyExW", &ordinal));
-
- FARPROC address1 = pe.GetProcAddress("RegEnumKeyExW");
- FARPROC address2 = pe.GetProcAddress(reinterpret_cast<char*>(ordinal));
- EXPECT_TRUE(address1 != NULL);
- EXPECT_TRUE(address2 != NULL);
- EXPECT_TRUE(address1 == address2);
-
- FreeLibrary(module);
-}