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

Unified Diff: minidump/minidump_memory_info_writer_test.cc

Issue 1379873005: win: Write memory map info as MINIDUMP_MEMORY_INFO[_LIST] (Closed) Base URL: https://chromium.googlesource.com/crashpad/crashpad@save-peb-more-2
Patch Set: headers Created 5 years, 2 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
« no previous file with comments | « minidump/minidump_memory_info_writer.cc ('k') | minidump/minidump_test.gyp » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: minidump/minidump_memory_info_writer_test.cc
diff --git a/minidump/minidump_memory_info_writer_test.cc b/minidump/minidump_memory_info_writer_test.cc
new file mode 100644
index 0000000000000000000000000000000000000000..21081d53d876c1c1fd909059661b4fc967db39a5
--- /dev/null
+++ b/minidump/minidump_memory_info_writer_test.cc
@@ -0,0 +1,126 @@
+// Copyright 2015 The Crashpad Authors. All rights reserved.
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+#include "minidump/minidump_memory_info_writer.h"
+
+#include <string>
+
+#include "gtest/gtest.h"
+#include "minidump/minidump_file_writer.h"
+#include "minidump/test/minidump_file_writer_test_util.h"
+#include "minidump/test/minidump_writable_test_util.h"
+#include "snapshot/test/test_memory_map_region_snapshot.h"
+#include "util/file/string_file.h"
+
+namespace crashpad {
+namespace test {
+namespace {
+
+// The memory info list is expected to be the only stream.
+void GetMemoryInfoListStream(
+ const std::string& file_contents,
+ const MINIDUMP_MEMORY_INFO_LIST** memory_info_list) {
+ const size_t kDirectoryOffset = sizeof(MINIDUMP_HEADER);
+ const size_t kMemoryInfoListStreamOffset =
+ kDirectoryOffset + sizeof(MINIDUMP_DIRECTORY);
+
+ const MINIDUMP_DIRECTORY* directory;
+ const MINIDUMP_HEADER* header =
+ MinidumpHeaderAtStart(file_contents, &directory);
+ ASSERT_NO_FATAL_FAILURE(VerifyMinidumpHeader(header, 1, 0));
+ ASSERT_TRUE(directory);
+
+ const size_t kDirectoryIndex = 0;
+
+ ASSERT_EQ(kMinidumpStreamTypeMemoryInfoList,
+ directory[kDirectoryIndex].StreamType);
+ EXPECT_EQ(kMemoryInfoListStreamOffset,
+ directory[kDirectoryIndex].Location.Rva);
+
+ *memory_info_list =
+ MinidumpWritableAtLocationDescriptor<MINIDUMP_MEMORY_INFO_LIST>(
+ file_contents, directory[kDirectoryIndex].Location);
+ ASSERT_TRUE(memory_info_list);
+}
+
+TEST(MinidumpMemoryInfoWriter, Empty) {
+ MinidumpFileWriter minidump_file_writer;
+ auto memory_info_list_writer =
+ make_scoped_ptr(new MinidumpMemoryInfoListWriter());
+ minidump_file_writer.AddStream(memory_info_list_writer.Pass());
+
+ StringFile string_file;
+ ASSERT_TRUE(minidump_file_writer.WriteEverything(&string_file));
+
+ ASSERT_EQ(sizeof(MINIDUMP_HEADER) + sizeof(MINIDUMP_DIRECTORY) +
+ sizeof(MINIDUMP_MEMORY_INFO_LIST),
+ string_file.string().size());
+
+ const MINIDUMP_MEMORY_INFO_LIST* memory_info_list = nullptr;
+ ASSERT_NO_FATAL_FAILURE(
+ GetMemoryInfoListStream(string_file.string(), &memory_info_list));
+
+ EXPECT_EQ(0u, memory_info_list->NumberOfEntries);
+}
+
+TEST(MinidumpMemoryInfoWriter, OneRegion) {
+ MinidumpFileWriter minidump_file_writer;
+ auto memory_info_list_writer =
+ make_scoped_ptr(new MinidumpMemoryInfoListWriter());
+
+ auto memory_map_region = make_scoped_ptr(new TestMemoryMapRegionSnapshot());
+
+ MINIDUMP_MEMORY_INFO mmi = {0};
+ mmi.BaseAddress = 0x12340000;
+ mmi.AllocationBase = 0x12000000;
+ mmi.AllocationProtect = PAGE_READWRITE;
+ mmi.RegionSize = 0x6000;
+ mmi.State = MEM_COMMIT;
+ mmi.Protect = PAGE_NOACCESS;
+ mmi.Type = MEM_PRIVATE;
+ memory_map_region->SetMindumpMemoryInfo(mmi);
+
+ std::vector<const MemoryMapRegionSnapshot*> memory_map;
+ memory_map.push_back(memory_map_region.get());
+ memory_info_list_writer->InitializeFromSnapshot(memory_map);
+
+ minidump_file_writer.AddStream(memory_info_list_writer.Pass());
+
+ StringFile string_file;
+ ASSERT_TRUE(minidump_file_writer.WriteEverything(&string_file));
+
+ ASSERT_EQ(sizeof(MINIDUMP_HEADER) + sizeof(MINIDUMP_DIRECTORY) +
+ sizeof(MINIDUMP_MEMORY_INFO_LIST) +
+ sizeof(MINIDUMP_MEMORY_INFO),
+ string_file.string().size());
+
+ const MINIDUMP_MEMORY_INFO_LIST* memory_info_list = nullptr;
+ ASSERT_NO_FATAL_FAILURE(
+ GetMemoryInfoListStream(string_file.string(), &memory_info_list));
+
+ EXPECT_EQ(1u, memory_info_list->NumberOfEntries);
+ const MINIDUMP_MEMORY_INFO* memory_info =
+ reinterpret_cast<const MINIDUMP_MEMORY_INFO*>(&memory_info_list[1]);
+ EXPECT_EQ(mmi.BaseAddress, memory_info->BaseAddress);
+ EXPECT_EQ(mmi.AllocationBase, memory_info->AllocationBase);
+ EXPECT_EQ(mmi.AllocationProtect, memory_info->AllocationProtect);
+ EXPECT_EQ(mmi.RegionSize, memory_info->RegionSize);
+ EXPECT_EQ(mmi.State, memory_info->State);
+ EXPECT_EQ(mmi.Protect, memory_info->Protect);
+ EXPECT_EQ(mmi.Type, memory_info->Type);
+}
+
+} // namespace
+} // namespace test
+} // namespace crashpad
« no previous file with comments | « minidump/minidump_memory_info_writer.cc ('k') | minidump/minidump_test.gyp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698