| OLD | NEW |
| 1 // Copyright (c) 2006-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 // This file contains unit tests for InterceptionManager. | 5 // This file contains unit tests for InterceptionManager. |
| 6 // The tests require private information so the whole interception.cc file is | 6 // The tests require private information so the whole interception.cc file is |
| 7 // included from this file. | 7 // included from this file. |
| 8 | 8 |
| 9 #include <windows.h> | 9 #include <windows.h> |
| 10 | 10 |
| 11 #include "base/scoped_ptr.h" | 11 #include "base/scoped_ptr.h" |
| (...skipping 18 matching lines...) Expand all Loading... |
| 30 ASSERT_TRUE(NULL != buffer); | 30 ASSERT_TRUE(NULL != buffer); |
| 31 ASSERT_TRUE(NULL != num_functions); | 31 ASSERT_TRUE(NULL != num_functions); |
| 32 ASSERT_TRUE(NULL != num_names); | 32 ASSERT_TRUE(NULL != num_names); |
| 33 *num_dlls = *num_functions = *num_names = 0; | 33 *num_dlls = *num_functions = *num_names = 0; |
| 34 SharedMemory *memory = reinterpret_cast<SharedMemory*>(buffer); | 34 SharedMemory *memory = reinterpret_cast<SharedMemory*>(buffer); |
| 35 | 35 |
| 36 ASSERT_GT(size, sizeof(SharedMemory)); | 36 ASSERT_GT(size, sizeof(SharedMemory)); |
| 37 DllPatchInfo *dll = &memory->dll_list[0]; | 37 DllPatchInfo *dll = &memory->dll_list[0]; |
| 38 | 38 |
| 39 for (int i = 0; i < memory->num_intercepted_dlls; i++) { | 39 for (int i = 0; i < memory->num_intercepted_dlls; i++) { |
| 40 ASSERT_NE(0, wcslen(dll->dll_name)); | 40 ASSERT_NE(0u, wcslen(dll->dll_name)); |
| 41 ASSERT_EQ(0, dll->record_bytes % sizeof(size_t)); | 41 ASSERT_EQ(0u, dll->record_bytes % sizeof(size_t)); |
| 42 ASSERT_EQ(0, dll->offset_to_functions % sizeof(size_t)); | 42 ASSERT_EQ(0u, dll->offset_to_functions % sizeof(size_t)); |
| 43 ASSERT_NE(0, dll->num_functions); | 43 ASSERT_NE(0, dll->num_functions); |
| 44 | 44 |
| 45 FunctionInfo *function = reinterpret_cast<FunctionInfo*>( | 45 FunctionInfo *function = reinterpret_cast<FunctionInfo*>( |
| 46 reinterpret_cast<char*>(dll) + dll->offset_to_functions); | 46 reinterpret_cast<char*>(dll) + dll->offset_to_functions); |
| 47 | 47 |
| 48 for (int j = 0; j < dll->num_functions; j++) { | 48 for (int j = 0; j < dll->num_functions; j++) { |
| 49 ASSERT_EQ(0, function->record_bytes % sizeof(size_t)); | 49 ASSERT_EQ(0u, function->record_bytes % sizeof(size_t)); |
| 50 | 50 |
| 51 char* name = function->function; | 51 char* name = function->function; |
| 52 size_t length = strlen(name); | 52 size_t length = strlen(name); |
| 53 ASSERT_NE(0, length); | 53 ASSERT_NE(0u, length); |
| 54 name += length + 1; | 54 name += length + 1; |
| 55 | 55 |
| 56 // look for overflows | 56 // look for overflows |
| 57 ASSERT_GT(reinterpret_cast<char*>(buffer) + size, name + strlen(name)); | 57 ASSERT_GT(reinterpret_cast<char*>(buffer) + size, name + strlen(name)); |
| 58 | 58 |
| 59 // look for a named interceptor | 59 // look for a named interceptor |
| 60 if (strlen(name)) { | 60 if (strlen(name)) { |
| 61 (*num_names)++; | 61 (*num_names)++; |
| 62 EXPECT_TRUE(NULL == function->interceptor_address); | 62 EXPECT_TRUE(NULL == function->interceptor_address); |
| 63 } else { | 63 } else { |
| 64 EXPECT_TRUE(NULL != function->interceptor_address); | 64 EXPECT_TRUE(NULL != function->interceptor_address); |
| 65 } | 65 } |
| 66 | 66 |
| 67 (*num_functions)++; | 67 (*num_functions)++; |
| 68 function = reinterpret_cast<FunctionInfo*>( | 68 function = reinterpret_cast<FunctionInfo*>( |
| 69 reinterpret_cast<char*>(function) + function->record_bytes); | 69 reinterpret_cast<char*>(function) + function->record_bytes); |
| 70 } | 70 } |
| 71 | 71 |
| 72 (*num_dlls)++; | 72 (*num_dlls)++; |
| 73 dll = reinterpret_cast<DllPatchInfo*>(reinterpret_cast<char*>(dll) + | 73 dll = reinterpret_cast<DllPatchInfo*>(reinterpret_cast<char*>(dll) + |
| 74 dll->record_bytes); | 74 dll->record_bytes); |
| 75 } | 75 } |
| 76 } | 76 } |
| 77 | 77 |
| 78 TEST(InterceptionManagerTest, BufferLayout1) { | 78 TEST(InterceptionManagerTest, BufferLayout1) { |
| 79 wchar_t exe_name[MAX_PATH]; | 79 wchar_t exe_name[MAX_PATH]; |
| 80 ASSERT_NE(0, GetModuleFileName(NULL, exe_name, MAX_PATH - 1)); | 80 ASSERT_NE(0u, GetModuleFileName(NULL, exe_name, MAX_PATH - 1)); |
| 81 | 81 |
| 82 TargetProcess *target = MakeTestTargetProcess(::GetCurrentProcess(), | 82 TargetProcess *target = MakeTestTargetProcess(::GetCurrentProcess(), |
| 83 ::GetModuleHandle(exe_name)); | 83 ::GetModuleHandle(exe_name)); |
| 84 | 84 |
| 85 InterceptionManager interceptions(target, true); | 85 InterceptionManager interceptions(target, true); |
| 86 | 86 |
| 87 // Any pointer will do for a function pointer. | 87 // Any pointer will do for a function pointer. |
| 88 void* function = &interceptions; | 88 void* function = &interceptions; |
| 89 | 89 |
| 90 // We don't care about the interceptor id. | 90 // We don't care about the interceptor id. |
| (...skipping 66 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 157 // The 15 interceptions on the buffer (to the child) should be grouped on 6 | 157 // The 15 interceptions on the buffer (to the child) should be grouped on 6 |
| 158 // dlls. Only four interceptions are using an explicit name for the | 158 // dlls. Only four interceptions are using an explicit name for the |
| 159 // interceptor function. | 159 // interceptor function. |
| 160 EXPECT_EQ(6, num_dlls); | 160 EXPECT_EQ(6, num_dlls); |
| 161 EXPECT_EQ(15, num_functions); | 161 EXPECT_EQ(15, num_functions); |
| 162 EXPECT_EQ(4, num_names); | 162 EXPECT_EQ(4, num_names); |
| 163 } | 163 } |
| 164 | 164 |
| 165 TEST(InterceptionManagerTest, BufferLayout2) { | 165 TEST(InterceptionManagerTest, BufferLayout2) { |
| 166 wchar_t exe_name[MAX_PATH]; | 166 wchar_t exe_name[MAX_PATH]; |
| 167 ASSERT_NE(0, GetModuleFileName(NULL, exe_name, MAX_PATH - 1)); | 167 ASSERT_NE(0u, GetModuleFileName(NULL, exe_name, MAX_PATH - 1)); |
| 168 | 168 |
| 169 TargetProcess *target = MakeTestTargetProcess(::GetCurrentProcess(), | 169 TargetProcess *target = MakeTestTargetProcess(::GetCurrentProcess(), |
| 170 ::GetModuleHandle(exe_name)); | 170 ::GetModuleHandle(exe_name)); |
| 171 | 171 |
| 172 InterceptionManager interceptions(target, true); | 172 InterceptionManager interceptions(target, true); |
| 173 | 173 |
| 174 // Any pointer will do for a function pointer. | 174 // Any pointer will do for a function pointer. |
| 175 void* function = &interceptions; | 175 void* function = &interceptions; |
| 176 interceptions.AddToUnloadModules(L"some01.dll"); | 176 interceptions.AddToUnloadModules(L"some01.dll"); |
| 177 // We don't care about the interceptor id. | 177 // We don't care about the interceptor id. |
| (...skipping 25 matching lines...) Expand all Loading... |
| 203 int num_dlls, num_functions, num_names; | 203 int num_dlls, num_functions, num_names; |
| 204 WalkBuffer(local_buffer.get(), buffer_size, &num_dlls, &num_functions, | 204 WalkBuffer(local_buffer.get(), buffer_size, &num_dlls, &num_functions, |
| 205 &num_names); | 205 &num_names); |
| 206 | 206 |
| 207 EXPECT_EQ(3, num_dlls); | 207 EXPECT_EQ(3, num_dlls); |
| 208 EXPECT_EQ(4, num_functions); | 208 EXPECT_EQ(4, num_functions); |
| 209 EXPECT_EQ(0, num_names); | 209 EXPECT_EQ(0, num_names); |
| 210 } | 210 } |
| 211 | 211 |
| 212 } // namespace sandbox | 212 } // namespace sandbox |
| OLD | NEW |