Chromium Code Reviews| Index: util/win/process_info_test.cc |
| diff --git a/util/win/process_info_test.cc b/util/win/process_info_test.cc |
| index 02b99f734140c60247f18289453eb1139cd13658..d3d674dd875ad10131145d151731abde57776915 100644 |
| --- a/util/win/process_info_test.cc |
| +++ b/util/win/process_info_test.cc |
| @@ -199,6 +199,180 @@ TEST(ProcessInfo, OtherProcessWOW64) { |
| } |
| #endif // ARCH_CPU_64_BITS |
| +TEST(ProcessInfo, AccessibleRangesNone) { |
| + std::vector<ProcessInfo::MemoryInfo> memory_info; |
| + MEMORY_BASIC_INFORMATION mbi = {0}; |
| + |
| + mbi.BaseAddress = 0; |
| + mbi.RegionSize = 10; |
| + mbi.State = MEM_FREE; |
| + memory_info.push_back(ProcessInfo::MemoryInfo(mbi)); |
| + |
| + std::vector<CheckedRange<WinVMAddress, WinVMSize>> result = |
| + GetReadableRangesOfMemoryMap(CheckedRange<WinVMAddress, WinVMSize>(2, 4), |
| + memory_info); |
| + |
| + EXPECT_TRUE(result.empty()); |
| +} |
| + |
| +TEST(ProcessInfo, AccessibleRangesOneInside) { |
| + std::vector<ProcessInfo::MemoryInfo> memory_info; |
| + MEMORY_BASIC_INFORMATION mbi = {0}; |
| + |
| + mbi.BaseAddress = 0; |
| + mbi.RegionSize = 10; |
| + mbi.State = MEM_COMMIT; |
| + memory_info.push_back(ProcessInfo::MemoryInfo(mbi)); |
| + |
| + std::vector<CheckedRange<WinVMAddress, WinVMSize>> result = |
| + GetReadableRangesOfMemoryMap(CheckedRange<WinVMAddress, WinVMSize>(2, 4), |
| + memory_info); |
| + |
| + ASSERT_EQ(result.size(), 1u); |
| + EXPECT_EQ(2, result[0].base()); |
| + EXPECT_EQ(4, result[0].size()); |
| +} |
| + |
| +TEST(ProcessInfo, AccessibleRangesOneTruncatedSize) { |
| + std::vector<ProcessInfo::MemoryInfo> memory_info; |
| + MEMORY_BASIC_INFORMATION mbi = {0}; |
| + |
| + mbi.BaseAddress = 0; |
| + mbi.RegionSize = 10; |
| + mbi.State = MEM_COMMIT; |
| + memory_info.push_back(ProcessInfo::MemoryInfo(mbi)); |
| + |
| + mbi.BaseAddress = reinterpret_cast<void*>(10); |
| + mbi.RegionSize = 20; |
| + mbi.State = MEM_FREE; |
| + memory_info.push_back(ProcessInfo::MemoryInfo(mbi)); |
| + |
| + std::vector<CheckedRange<WinVMAddress, WinVMSize>> result = |
| + GetReadableRangesOfMemoryMap(CheckedRange<WinVMAddress, WinVMSize>(5, 10), |
| + memory_info); |
| + |
| + ASSERT_EQ(result.size(), 1u); |
| + EXPECT_EQ(5, result[0].base()); |
| + EXPECT_EQ(5, result[0].size()); |
| +} |
| + |
| +TEST(ProcessInfo, AccessibleRangesOneMovedStart) { |
| + std::vector<ProcessInfo::MemoryInfo> memory_info; |
| + MEMORY_BASIC_INFORMATION mbi = {0}; |
| + |
| + mbi.BaseAddress = 0; |
| + mbi.RegionSize = 10; |
| + mbi.State = MEM_FREE; |
| + memory_info.push_back(ProcessInfo::MemoryInfo(mbi)); |
| + |
| + mbi.BaseAddress = reinterpret_cast<void*>(10); |
| + mbi.RegionSize = 20; |
| + mbi.State = MEM_COMMIT; |
| + memory_info.push_back(ProcessInfo::MemoryInfo(mbi)); |
| + |
| + std::vector<CheckedRange<WinVMAddress, WinVMSize>> result = |
| + GetReadableRangesOfMemoryMap(CheckedRange<WinVMAddress, WinVMSize>(5, 10), |
| + memory_info); |
| + |
| + ASSERT_EQ(result.size(), 1u); |
| + EXPECT_EQ(10, result[0].base()); |
| + EXPECT_EQ(5, result[0].size()); |
| +} |
| + |
| +TEST(ProcessInfo, AccessibleRangesCoalesced) { |
| + std::vector<ProcessInfo::MemoryInfo> memory_info; |
| + MEMORY_BASIC_INFORMATION mbi = {0}; |
| + |
| + mbi.BaseAddress = 0; |
| + mbi.RegionSize = 10; |
| + mbi.State = MEM_FREE; |
| + memory_info.push_back(ProcessInfo::MemoryInfo(mbi)); |
| + |
| + mbi.BaseAddress = reinterpret_cast<void*>(10); |
| + mbi.RegionSize = 2; |
| + mbi.State = MEM_COMMIT; |
| + memory_info.push_back(ProcessInfo::MemoryInfo(mbi)); |
| + |
| + mbi.BaseAddress = reinterpret_cast<void*>(12); |
| + mbi.RegionSize = 5; |
| + mbi.State = MEM_RESERVE; |
| + memory_info.push_back(ProcessInfo::MemoryInfo(mbi)); |
| + |
| + std::vector<CheckedRange<WinVMAddress, WinVMSize>> result = |
| + GetReadableRangesOfMemoryMap(CheckedRange<WinVMAddress, WinVMSize>(11, 4), |
| + memory_info); |
| + |
| + ASSERT_EQ(result.size(), 1u); |
| + EXPECT_EQ(11, result[0].base()); |
| + EXPECT_EQ(4, result[0].size()); |
| +} |
| + |
| +TEST(ProcessInfo, AccessibleRangesMiddleUnavailable) { |
| + std::vector<ProcessInfo::MemoryInfo> memory_info; |
| + MEMORY_BASIC_INFORMATION mbi = {0}; |
| + |
| + mbi.BaseAddress = 0; |
| + mbi.RegionSize = 10; |
| + mbi.State = MEM_COMMIT; |
| + memory_info.push_back(ProcessInfo::MemoryInfo(mbi)); |
| + |
| + mbi.BaseAddress = reinterpret_cast<void*>(10); |
| + mbi.RegionSize = 5; |
| + mbi.State = MEM_FREE; |
| + memory_info.push_back(ProcessInfo::MemoryInfo(mbi)); |
| + |
| + mbi.BaseAddress = reinterpret_cast<void*>(15); |
| + mbi.RegionSize = 100; |
| + mbi.State = MEM_COMMIT; |
| + memory_info.push_back(ProcessInfo::MemoryInfo(mbi)); |
| + |
| + std::vector<CheckedRange<WinVMAddress, WinVMSize>> result = |
| + GetReadableRangesOfMemoryMap(CheckedRange<WinVMAddress, WinVMSize>(5, 45), |
| + memory_info); |
| + |
| + ASSERT_EQ(result.size(), 2u); |
| + EXPECT_EQ(5, result[0].base()); |
| + EXPECT_EQ(5, result[0].size()); |
| + EXPECT_EQ(15, result[1].base()); |
| + EXPECT_EQ(35, result[1].size()); |
| +} |
| + |
| +TEST(ProcessInfo, RequestedBeforeMap) { |
|
Mark Mentovai
2015/10/01 18:29:12
Awesome.
|
| + std::vector<ProcessInfo::MemoryInfo> memory_info; |
| + MEMORY_BASIC_INFORMATION mbi = {0}; |
| + |
| + mbi.BaseAddress = reinterpret_cast<void*>(10); |
| + mbi.RegionSize = 10; |
| + mbi.State = MEM_COMMIT; |
| + memory_info.push_back(ProcessInfo::MemoryInfo(mbi)); |
| + |
| + std::vector<CheckedRange<WinVMAddress, WinVMSize>> result = |
| + GetReadableRangesOfMemoryMap(CheckedRange<WinVMAddress, WinVMSize>(5, 10), |
| + memory_info); |
| + |
| + ASSERT_EQ(result.size(), 1u); |
| + EXPECT_EQ(10, result[0].base()); |
| + EXPECT_EQ(5, result[0].size()); |
| +} |
| + |
| +TEST(ProcessInfo, RequestedAfterMap) { |
| + std::vector<ProcessInfo::MemoryInfo> memory_info; |
| + MEMORY_BASIC_INFORMATION mbi = {0}; |
| + |
| + mbi.BaseAddress = reinterpret_cast<void*>(10); |
| + mbi.RegionSize = 10; |
| + mbi.State = MEM_COMMIT; |
| + memory_info.push_back(ProcessInfo::MemoryInfo(mbi)); |
| + |
| + std::vector<CheckedRange<WinVMAddress, WinVMSize>> result = |
| + GetReadableRangesOfMemoryMap( |
| + CheckedRange<WinVMAddress, WinVMSize>(15, 100), memory_info); |
| + |
| + ASSERT_EQ(result.size(), 1u); |
| + EXPECT_EQ(15, result[0].base()); |
| + EXPECT_EQ(5, result[0].size()); |
| +} |
| + |
| } // namespace |
| } // namespace test |
| } // namespace crashpad |