Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(593)

Unified Diff: util/win/process_info_test.cc

Issue 1372183002: win: Add memory map range intersection helper (Closed) Base URL: https://chromium.googlesource.com/crashpad/crashpad@master
Patch Set: . Created 5 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« util/win/process_info.cc ('K') | « util/win/process_info.cc ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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..d3b0b9d635c9a2799529bfae3f9e62bc4abf5669 100644
--- a/util/win/process_info_test.cc
+++ b/util/win/process_info_test.cc
@@ -199,6 +199,139 @@ TEST(ProcessInfo, OtherProcessWOW64) {
}
#endif // ARCH_CPU_64_BITS
+TEST(ProcessInfo, AccessibleRangesNone) {
+ std::vector<ProcessInfo::MemoryInfo> memory_info;
+ ProcessInfo::MemoryInfo mi;
+
+ mi.base_address = 0;
+ mi.region_size = 10;
+ mi.state = MEM_FREE;
+ memory_info.push_back(mi);
+
+ std::vector<CheckedRange<WinVMAddress, WinVMSize>> result =
+ GetAccessibleRangesInMemoryMap(2, 4, memory_info);
+
+ EXPECT_EQ(0u, result.size());
Mark Mentovai 2015/09/29 21:35:50 For the zeroes, EXPECT_TRUE(result.empty()) reads
scottmg 2015/09/30 17:40:26 Done.
+}
+
+TEST(ProcessInfo, AccessibleRangesOneInside) {
+ std::vector<ProcessInfo::MemoryInfo> memory_info;
+ ProcessInfo::MemoryInfo mi;
+
+ mi.base_address = 0;
+ mi.region_size = 10;
+ mi.state = MEM_COMMIT;
+ memory_info.push_back(mi);
+
+ std::vector<CheckedRange<WinVMAddress, WinVMSize>> result =
+ GetAccessibleRangesInMemoryMap(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;
+ ProcessInfo::MemoryInfo mi;
+
+ mi.base_address = 0;
+ mi.region_size = 10;
+ mi.state = MEM_COMMIT;
+ memory_info.push_back(mi);
+
+ mi.base_address = 10;
+ mi.region_size = 20;
+ mi.state = MEM_FREE;
+ memory_info.push_back(mi);
+
+ std::vector<CheckedRange<WinVMAddress, WinVMSize>> result =
+ GetAccessibleRangesInMemoryMap(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;
+ ProcessInfo::MemoryInfo mi;
+
+ mi.base_address = 0;
+ mi.region_size = 10;
+ mi.state = MEM_FREE;
+ memory_info.push_back(mi);
+
+ mi.base_address = 10;
+ mi.region_size = 20;
+ mi.state = MEM_COMMIT;
+ memory_info.push_back(mi);
+
+ std::vector<CheckedRange<WinVMAddress, WinVMSize>> result =
+ GetAccessibleRangesInMemoryMap(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;
+ ProcessInfo::MemoryInfo mi;
+
+ mi.base_address = 0;
+ mi.region_size = 10;
+ mi.state = MEM_FREE;
+ memory_info.push_back(mi);
+
+ mi.base_address = 10;
+ mi.region_size = 2;
+ mi.state = MEM_COMMIT;
+ memory_info.push_back(mi);
+
+ mi.base_address = 12;
+ mi.region_size = 5;
+ mi.state = MEM_RESERVE;
+ memory_info.push_back(mi);
+
+ std::vector<CheckedRange<WinVMAddress, WinVMSize>> result =
+ GetAccessibleRangesInMemoryMap(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;
+ ProcessInfo::MemoryInfo mi;
+
+ mi.base_address = 0;
+ mi.region_size = 10;
+ mi.state = MEM_COMMIT;
+ memory_info.push_back(mi);
+
+ mi.base_address = 10;
+ mi.region_size = 5;
+ mi.state = MEM_FREE;
+ memory_info.push_back(mi);
+
+ mi.base_address = 15;
+ mi.region_size = 100;
+ mi.state = MEM_COMMIT;
+ memory_info.push_back(mi);
+
+ std::vector<CheckedRange<WinVMAddress, WinVMSize>> result =
+ GetAccessibleRangesInMemoryMap(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());
+}
+
} // namespace
} // namespace test
} // namespace crashpad
« util/win/process_info.cc ('K') | « util/win/process_info.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698