Index: minidump/minidump_module_crashpad_info_writer_test.cc |
diff --git a/minidump/minidump_module_crashpad_info_writer_test.cc b/minidump/minidump_module_crashpad_info_writer_test.cc |
index c256ab30b1990b433f09b3d99880a571f3048ee4..f458b6a6b78021deceea88a44b5dac49e8264b81 100644 |
--- a/minidump/minidump_module_crashpad_info_writer_test.cc |
+++ b/minidump/minidump_module_crashpad_info_writer_test.cc |
@@ -21,7 +21,6 @@ |
#include "minidump/minidump_extensions.h" |
#include "minidump/minidump_simple_string_dictionary_writer.h" |
#include "minidump/test/minidump_file_writer_test_util.h" |
-#include "minidump/test/minidump_location_descriptor_list_test_util.h" |
#include "minidump/test/minidump_string_writer_test_util.h" |
#include "minidump/test/minidump_writable_test_util.h" |
#include "snapshot/test/test_module_snapshot.h" |
@@ -31,49 +30,73 @@ namespace crashpad { |
namespace test { |
namespace { |
+const MinidumpModuleCrashpadInfoList* MinidumpModuleCrashpadInfoListAtStart( |
+ const std::string& file_contents, |
+ size_t count) { |
+ MINIDUMP_LOCATION_DESCRIPTOR location_descriptor; |
+ location_descriptor.DataSize = sizeof(MinidumpModuleCrashpadInfoList) + |
+ count * sizeof(MinidumpModuleCrashpadInfoLink); |
+ location_descriptor.Rva = 0; |
+ |
+ const MinidumpModuleCrashpadInfoList* list = |
+ MinidumpWritableAtLocationDescriptor<MinidumpModuleCrashpadInfoList>( |
+ file_contents, location_descriptor); |
+ if (!list) { |
+ return nullptr; |
+ } |
+ |
+ if (list->count != count) { |
+ EXPECT_EQ(count, list->count); |
+ return nullptr; |
+ } |
+ |
+ return list; |
+} |
+ |
TEST(MinidumpModuleCrashpadInfoWriter, EmptyList) { |
StringFile string_file; |
- MinidumpModuleCrashpadInfoListWriter module_list_writer; |
- EXPECT_FALSE(module_list_writer.IsUseful()); |
+ auto module_list_writer = |
+ make_scoped_ptr(new MinidumpModuleCrashpadInfoListWriter()); |
+ EXPECT_FALSE(module_list_writer->IsUseful()); |
- EXPECT_TRUE(module_list_writer.WriteEverything(&string_file)); |
+ EXPECT_TRUE(module_list_writer->WriteEverything(&string_file)); |
ASSERT_EQ(sizeof(MinidumpModuleCrashpadInfoList), |
string_file.string().size()); |
const MinidumpModuleCrashpadInfoList* module_list = |
- MinidumpLocationDescriptorListAtStart(string_file.string(), 0); |
+ MinidumpModuleCrashpadInfoListAtStart(string_file.string(), 0); |
ASSERT_TRUE(module_list); |
} |
TEST(MinidumpModuleCrashpadInfoWriter, EmptyModule) { |
StringFile string_file; |
- MinidumpModuleCrashpadInfoListWriter module_list_writer; |
- auto module_writer = |
- make_scoped_ptr(new MinidumpModuleCrashpadInfoWriter()); |
+ auto module_list_writer = |
+ make_scoped_ptr(new MinidumpModuleCrashpadInfoListWriter()); |
+ auto module_writer = make_scoped_ptr(new MinidumpModuleCrashpadInfoWriter()); |
EXPECT_FALSE(module_writer->IsUseful()); |
- module_list_writer.AddModule(module_writer.Pass()); |
+ module_list_writer->AddModule(module_writer.Pass(), 0); |
- EXPECT_TRUE(module_list_writer.IsUseful()); |
+ EXPECT_TRUE(module_list_writer->IsUseful()); |
- EXPECT_TRUE(module_list_writer.WriteEverything(&string_file)); |
+ EXPECT_TRUE(module_list_writer->WriteEverything(&string_file)); |
ASSERT_EQ(sizeof(MinidumpModuleCrashpadInfoList) + |
- sizeof(MINIDUMP_LOCATION_DESCRIPTOR) + |
+ sizeof(MinidumpModuleCrashpadInfoLink) + |
sizeof(MinidumpModuleCrashpadInfo), |
string_file.string().size()); |
const MinidumpModuleCrashpadInfoList* module_list = |
- MinidumpLocationDescriptorListAtStart(string_file.string(), 1); |
+ MinidumpModuleCrashpadInfoListAtStart(string_file.string(), 1); |
ASSERT_TRUE(module_list); |
+ EXPECT_EQ(0u, module_list->modules[0].minidump_module_list_index); |
const MinidumpModuleCrashpadInfo* module = |
MinidumpWritableAtLocationDescriptor<MinidumpModuleCrashpadInfo>( |
- string_file.string(), module_list->children[0]); |
+ string_file.string(), module_list->modules[0].location); |
ASSERT_TRUE(module); |
EXPECT_EQ(MinidumpModuleCrashpadInfo::kVersion, module->version); |
- EXPECT_EQ(0u, module->minidump_module_list_index); |
EXPECT_EQ(0u, module->list_annotations.DataSize); |
EXPECT_EQ(0u, module->list_annotations.Rva); |
EXPECT_EQ(0u, module->simple_annotations.DataSize); |
@@ -89,11 +112,10 @@ TEST(MinidumpModuleCrashpadInfoWriter, FullModule) { |
StringFile string_file; |
- MinidumpModuleCrashpadInfoListWriter module_list_writer; |
+ auto module_list_writer = |
+ make_scoped_ptr(new MinidumpModuleCrashpadInfoListWriter()); |
- auto module_writer = |
- make_scoped_ptr(new MinidumpModuleCrashpadInfoWriter()); |
- module_writer->SetMinidumpModuleListIndex(kMinidumpModuleListIndex); |
+ auto module_writer = make_scoped_ptr(new MinidumpModuleCrashpadInfoWriter()); |
auto string_list_writer = make_scoped_ptr(new MinidumpUTF8StringListWriter()); |
string_list_writer->InitializeFromVector(vector); |
module_writer->SetListAnnotations(string_list_writer.Pass()); |
@@ -106,13 +128,13 @@ TEST(MinidumpModuleCrashpadInfoWriter, FullModule) { |
simple_string_dictionary_entry_writer.Pass()); |
module_writer->SetSimpleAnnotations(simple_string_dictionary_writer.Pass()); |
EXPECT_TRUE(module_writer->IsUseful()); |
- module_list_writer.AddModule(module_writer.Pass()); |
+ module_list_writer->AddModule(module_writer.Pass(), kMinidumpModuleListIndex); |
- EXPECT_TRUE(module_list_writer.IsUseful()); |
+ EXPECT_TRUE(module_list_writer->IsUseful()); |
- EXPECT_TRUE(module_list_writer.WriteEverything(&string_file)); |
+ EXPECT_TRUE(module_list_writer->WriteEverything(&string_file)); |
ASSERT_EQ(sizeof(MinidumpModuleCrashpadInfoList) + |
- sizeof(MINIDUMP_LOCATION_DESCRIPTOR) + |
+ sizeof(MinidumpModuleCrashpadInfoLink) + |
sizeof(MinidumpModuleCrashpadInfo) + |
sizeof(MinidumpRVAList) + |
sizeof(RVA) + |
@@ -124,16 +146,17 @@ TEST(MinidumpModuleCrashpadInfoWriter, FullModule) { |
string_file.string().size()); |
const MinidumpModuleCrashpadInfoList* module_list = |
- MinidumpLocationDescriptorListAtStart(string_file.string(), 1); |
+ MinidumpModuleCrashpadInfoListAtStart(string_file.string(), 1); |
ASSERT_TRUE(module_list); |
+ EXPECT_EQ(kMinidumpModuleListIndex, |
+ module_list->modules[0].minidump_module_list_index); |
const MinidumpModuleCrashpadInfo* module = |
MinidumpWritableAtLocationDescriptor<MinidumpModuleCrashpadInfo>( |
- string_file.string(), module_list->children[0]); |
+ string_file.string(), module_list->modules[0].location); |
ASSERT_TRUE(module); |
EXPECT_EQ(MinidumpModuleCrashpadInfo::kVersion, module->version); |
- EXPECT_EQ(kMinidumpModuleListIndex, module->minidump_module_list_index); |
EXPECT_NE(0u, module->list_annotations.DataSize); |
EXPECT_NE(0u, module->list_annotations.Rva); |
EXPECT_NE(0u, module->simple_annotations.DataSize); |
@@ -145,8 +168,9 @@ TEST(MinidumpModuleCrashpadInfoWriter, FullModule) { |
ASSERT_TRUE(list_annotations); |
ASSERT_EQ(1u, list_annotations->count); |
- EXPECT_EQ(kEntry, MinidumpUTF8StringAtRVAAsString( |
- string_file.string(), list_annotations->children[0])); |
+ EXPECT_EQ(kEntry, |
+ MinidumpUTF8StringAtRVAAsString(string_file.string(), |
+ list_annotations->children[0])); |
const MinidumpSimpleStringDictionary* simple_annotations = |
MinidumpWritableAtLocationDescriptor<MinidumpSimpleStringDictionary>( |
@@ -175,11 +199,11 @@ TEST(MinidumpModuleCrashpadInfoWriter, ThreeModules) { |
StringFile string_file; |
- MinidumpModuleCrashpadInfoListWriter module_list_writer; |
+ auto module_list_writer = |
+ make_scoped_ptr(new MinidumpModuleCrashpadInfoListWriter()); |
auto module_writer_0 = |
make_scoped_ptr(new MinidumpModuleCrashpadInfoWriter()); |
- module_writer_0->SetMinidumpModuleListIndex(kMinidumpModuleListIndex0); |
auto simple_string_dictionary_writer_0 = |
make_scoped_ptr(new MinidumpSimpleStringDictionaryWriter()); |
auto simple_string_dictionary_entry_writer_0 = |
@@ -190,17 +214,17 @@ TEST(MinidumpModuleCrashpadInfoWriter, ThreeModules) { |
module_writer_0->SetSimpleAnnotations( |
simple_string_dictionary_writer_0.Pass()); |
EXPECT_TRUE(module_writer_0->IsUseful()); |
- module_list_writer.AddModule(module_writer_0.Pass()); |
+ module_list_writer->AddModule(module_writer_0.Pass(), |
+ kMinidumpModuleListIndex0); |
auto module_writer_1 = |
make_scoped_ptr(new MinidumpModuleCrashpadInfoWriter()); |
- module_writer_1->SetMinidumpModuleListIndex(kMinidumpModuleListIndex1); |
EXPECT_FALSE(module_writer_1->IsUseful()); |
- module_list_writer.AddModule(module_writer_1.Pass()); |
+ module_list_writer->AddModule(module_writer_1.Pass(), |
+ kMinidumpModuleListIndex1); |
auto module_writer_2 = |
make_scoped_ptr(new MinidumpModuleCrashpadInfoWriter()); |
- module_writer_2->SetMinidumpModuleListIndex(kMinidumpModuleListIndex2); |
auto simple_string_dictionary_writer_2 = |
make_scoped_ptr(new MinidumpSimpleStringDictionaryWriter()); |
auto simple_string_dictionary_entry_writer_2a = |
@@ -216,23 +240,25 @@ TEST(MinidumpModuleCrashpadInfoWriter, ThreeModules) { |
module_writer_2->SetSimpleAnnotations( |
simple_string_dictionary_writer_2.Pass()); |
EXPECT_TRUE(module_writer_2->IsUseful()); |
- module_list_writer.AddModule(module_writer_2.Pass()); |
+ module_list_writer->AddModule(module_writer_2.Pass(), |
+ kMinidumpModuleListIndex2); |
- EXPECT_TRUE(module_list_writer.IsUseful()); |
+ EXPECT_TRUE(module_list_writer->IsUseful()); |
- EXPECT_TRUE(module_list_writer.WriteEverything(&string_file)); |
+ EXPECT_TRUE(module_list_writer->WriteEverything(&string_file)); |
const MinidumpModuleCrashpadInfoList* module_list = |
- MinidumpLocationDescriptorListAtStart(string_file.string(), 3); |
+ MinidumpModuleCrashpadInfoListAtStart(string_file.string(), 3); |
ASSERT_TRUE(module_list); |
+ EXPECT_EQ(kMinidumpModuleListIndex0, |
+ module_list->modules[0].minidump_module_list_index); |
const MinidumpModuleCrashpadInfo* module_0 = |
MinidumpWritableAtLocationDescriptor<MinidumpModuleCrashpadInfo>( |
- string_file.string(), module_list->children[0]); |
+ string_file.string(), module_list->modules[0].location); |
ASSERT_TRUE(module_0); |
EXPECT_EQ(MinidumpModuleCrashpadInfo::kVersion, module_0->version); |
- EXPECT_EQ(kMinidumpModuleListIndex0, module_0->minidump_module_list_index); |
const MinidumpRVAList* list_annotations_0 = |
MinidumpWritableAtLocationDescriptor<MinidumpRVAList>( |
@@ -252,13 +278,14 @@ TEST(MinidumpModuleCrashpadInfoWriter, ThreeModules) { |
MinidumpUTF8StringAtRVAAsString( |
string_file.string(), simple_annotations_0->entries[0].value)); |
+ EXPECT_EQ(kMinidumpModuleListIndex1, |
+ module_list->modules[1].minidump_module_list_index); |
const MinidumpModuleCrashpadInfo* module_1 = |
MinidumpWritableAtLocationDescriptor<MinidumpModuleCrashpadInfo>( |
- string_file.string(), module_list->children[1]); |
+ string_file.string(), module_list->modules[1].location); |
ASSERT_TRUE(module_1); |
EXPECT_EQ(MinidumpModuleCrashpadInfo::kVersion, module_1->version); |
- EXPECT_EQ(kMinidumpModuleListIndex1, module_1->minidump_module_list_index); |
const MinidumpRVAList* list_annotations_1 = |
MinidumpWritableAtLocationDescriptor<MinidumpRVAList>( |
@@ -270,13 +297,14 @@ TEST(MinidumpModuleCrashpadInfoWriter, ThreeModules) { |
string_file.string(), module_1->simple_annotations); |
EXPECT_FALSE(simple_annotations_1); |
+ EXPECT_EQ(kMinidumpModuleListIndex2, |
+ module_list->modules[2].minidump_module_list_index); |
const MinidumpModuleCrashpadInfo* module_2 = |
MinidumpWritableAtLocationDescriptor<MinidumpModuleCrashpadInfo>( |
- string_file.string(), module_list->children[2]); |
+ string_file.string(), module_list->modules[2].location); |
ASSERT_TRUE(module_2); |
EXPECT_EQ(MinidumpModuleCrashpadInfo::kVersion, module_2->version); |
- EXPECT_EQ(kMinidumpModuleListIndex2, module_2->minidump_module_list_index); |
const MinidumpRVAList* list_annotations_2 = |
MinidumpWritableAtLocationDescriptor<MinidumpRVAList>( |
@@ -340,24 +368,25 @@ TEST(MinidumpModuleCrashpadInfoWriter, InitializeFromSnapshot) { |
module_snapshot_3.SetAnnotationsVector(annotations_vector_3); |
module_snapshots.push_back(&module_snapshot_3); |
- MinidumpModuleCrashpadInfoListWriter module_list_writer; |
- module_list_writer.InitializeFromSnapshot(module_snapshots); |
- EXPECT_TRUE(module_list_writer.IsUseful()); |
+ auto module_list_writer = |
+ make_scoped_ptr(new MinidumpModuleCrashpadInfoListWriter()); |
+ module_list_writer->InitializeFromSnapshot(module_snapshots); |
+ EXPECT_TRUE(module_list_writer->IsUseful()); |
StringFile string_file; |
- ASSERT_TRUE(module_list_writer.WriteEverything(&string_file)); |
+ ASSERT_TRUE(module_list_writer->WriteEverything(&string_file)); |
const MinidumpModuleCrashpadInfoList* module_list = |
- MinidumpLocationDescriptorListAtStart(string_file.string(), 3); |
+ MinidumpModuleCrashpadInfoListAtStart(string_file.string(), 3); |
ASSERT_TRUE(module_list); |
+ EXPECT_EQ(0u, module_list->modules[0].minidump_module_list_index); |
const MinidumpModuleCrashpadInfo* module_0 = |
MinidumpWritableAtLocationDescriptor<MinidumpModuleCrashpadInfo>( |
- string_file.string(), module_list->children[0]); |
+ string_file.string(), module_list->modules[0].location); |
ASSERT_TRUE(module_0); |
EXPECT_EQ(MinidumpModuleCrashpadInfo::kVersion, module_0->version); |
- EXPECT_EQ(0u, module_0->minidump_module_list_index); |
const MinidumpRVAList* list_annotations_0 = |
MinidumpWritableAtLocationDescriptor<MinidumpRVAList>( |
@@ -383,13 +412,13 @@ TEST(MinidumpModuleCrashpadInfoWriter, InitializeFromSnapshot) { |
MinidumpUTF8StringAtRVAAsString( |
string_file.string(), simple_annotations_0->entries[1].value)); |
+ EXPECT_EQ(2u, module_list->modules[1].minidump_module_list_index); |
const MinidumpModuleCrashpadInfo* module_2 = |
MinidumpWritableAtLocationDescriptor<MinidumpModuleCrashpadInfo>( |
- string_file.string(), module_list->children[1]); |
+ string_file.string(), module_list->modules[1].location); |
ASSERT_TRUE(module_2); |
EXPECT_EQ(MinidumpModuleCrashpadInfo::kVersion, module_2->version); |
- EXPECT_EQ(2u, module_2->minidump_module_list_index); |
const MinidumpRVAList* list_annotations_2 = |
MinidumpWritableAtLocationDescriptor<MinidumpRVAList>( |
@@ -409,13 +438,13 @@ TEST(MinidumpModuleCrashpadInfoWriter, InitializeFromSnapshot) { |
MinidumpUTF8StringAtRVAAsString( |
string_file.string(), simple_annotations_2->entries[0].value)); |
+ EXPECT_EQ(3u, module_list->modules[2].minidump_module_list_index); |
const MinidumpModuleCrashpadInfo* module_3 = |
MinidumpWritableAtLocationDescriptor<MinidumpModuleCrashpadInfo>( |
- string_file.string(), module_list->children[2]); |
+ string_file.string(), module_list->modules[2].location); |
ASSERT_TRUE(module_3); |
EXPECT_EQ(MinidumpModuleCrashpadInfo::kVersion, module_3->version); |
- EXPECT_EQ(3u, module_3->minidump_module_list_index); |
const MinidumpRVAList* list_annotations_3 = |
MinidumpWritableAtLocationDescriptor<MinidumpRVAList>( |
@@ -424,11 +453,11 @@ TEST(MinidumpModuleCrashpadInfoWriter, InitializeFromSnapshot) { |
ASSERT_EQ(annotations_vector_3.size(), list_annotations_3->count); |
EXPECT_EQ(kEntry3A, |
- MinidumpUTF8StringAtRVAAsString( |
- string_file.string(), list_annotations_3->children[0])); |
+ MinidumpUTF8StringAtRVAAsString(string_file.string(), |
+ list_annotations_3->children[0])); |
EXPECT_EQ(kEntry3B, |
- MinidumpUTF8StringAtRVAAsString( |
- string_file.string(), list_annotations_3->children[1])); |
+ MinidumpUTF8StringAtRVAAsString(string_file.string(), |
+ list_annotations_3->children[1])); |
const MinidumpSimpleStringDictionary* simple_annotations_3 = |
MinidumpWritableAtLocationDescriptor<MinidumpSimpleStringDictionary>( |