| OLD | NEW |
| 1 // Copyright 2014 The Crashpad Authors. All rights reserved. | 1 // Copyright 2014 The Crashpad Authors. All rights reserved. |
| 2 // | 2 // |
| 3 // Licensed under the Apache License, Version 2.0 (the "License"); | 3 // Licensed under the Apache License, Version 2.0 (the "License"); |
| 4 // you may not use this file except in compliance with the License. | 4 // you may not use this file except in compliance with the License. |
| 5 // You may obtain a copy of the License at | 5 // You may obtain a copy of the License at |
| 6 // | 6 // |
| 7 // http://www.apache.org/licenses/LICENSE-2.0 | 7 // http://www.apache.org/licenses/LICENSE-2.0 |
| 8 // | 8 // |
| 9 // Unless required by applicable law or agreed to in writing, software | 9 // Unless required by applicable law or agreed to in writing, software |
| 10 // distributed under the License is distributed on an "AS IS" BASIS, | 10 // distributed under the License is distributed on an "AS IS" BASIS, |
| 11 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | 11 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| 12 // See the License for the specific language governing permissions and | 12 // See the License for the specific language governing permissions and |
| 13 // limitations under the License. | 13 // limitations under the License. |
| 14 | 14 |
| 15 #include "minidump/minidump_module_crashpad_info_writer.h" | 15 #include "minidump/minidump_module_crashpad_info_writer.h" |
| 16 | 16 |
| 17 #include <windows.h> | 17 #include <windows.h> |
| 18 #include <dbghelp.h> | 18 #include <dbghelp.h> |
| 19 | 19 |
| 20 #include <utility> |
| 21 |
| 20 #include "gtest/gtest.h" | 22 #include "gtest/gtest.h" |
| 21 #include "minidump/minidump_extensions.h" | 23 #include "minidump/minidump_extensions.h" |
| 22 #include "minidump/minidump_simple_string_dictionary_writer.h" | 24 #include "minidump/minidump_simple_string_dictionary_writer.h" |
| 23 #include "minidump/test/minidump_file_writer_test_util.h" | 25 #include "minidump/test/minidump_file_writer_test_util.h" |
| 24 #include "minidump/test/minidump_string_writer_test_util.h" | 26 #include "minidump/test/minidump_string_writer_test_util.h" |
| 25 #include "minidump/test/minidump_writable_test_util.h" | 27 #include "minidump/test/minidump_writable_test_util.h" |
| 26 #include "snapshot/test/test_module_snapshot.h" | 28 #include "snapshot/test/test_module_snapshot.h" |
| 27 #include "util/file/string_file.h" | 29 #include "util/file/string_file.h" |
| 28 #include "util/stdlib/move.h" | |
| 29 | 30 |
| 30 namespace crashpad { | 31 namespace crashpad { |
| 31 namespace test { | 32 namespace test { |
| 32 namespace { | 33 namespace { |
| 33 | 34 |
| 34 const MinidumpModuleCrashpadInfoList* MinidumpModuleCrashpadInfoListAtStart( | 35 const MinidumpModuleCrashpadInfoList* MinidumpModuleCrashpadInfoListAtStart( |
| 35 const std::string& file_contents, | 36 const std::string& file_contents, |
| 36 size_t count) { | 37 size_t count) { |
| 37 MINIDUMP_LOCATION_DESCRIPTOR location_descriptor; | 38 MINIDUMP_LOCATION_DESCRIPTOR location_descriptor; |
| 38 location_descriptor.DataSize = | 39 location_descriptor.DataSize = |
| (...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 71 ASSERT_TRUE(module_list); | 72 ASSERT_TRUE(module_list); |
| 72 } | 73 } |
| 73 | 74 |
| 74 TEST(MinidumpModuleCrashpadInfoWriter, EmptyModule) { | 75 TEST(MinidumpModuleCrashpadInfoWriter, EmptyModule) { |
| 75 StringFile string_file; | 76 StringFile string_file; |
| 76 | 77 |
| 77 auto module_list_writer = | 78 auto module_list_writer = |
| 78 make_scoped_ptr(new MinidumpModuleCrashpadInfoListWriter()); | 79 make_scoped_ptr(new MinidumpModuleCrashpadInfoListWriter()); |
| 79 auto module_writer = make_scoped_ptr(new MinidumpModuleCrashpadInfoWriter()); | 80 auto module_writer = make_scoped_ptr(new MinidumpModuleCrashpadInfoWriter()); |
| 80 EXPECT_FALSE(module_writer->IsUseful()); | 81 EXPECT_FALSE(module_writer->IsUseful()); |
| 81 module_list_writer->AddModule(crashpad::move(module_writer), 0); | 82 module_list_writer->AddModule(std::move(module_writer), 0); |
| 82 | 83 |
| 83 EXPECT_TRUE(module_list_writer->IsUseful()); | 84 EXPECT_TRUE(module_list_writer->IsUseful()); |
| 84 | 85 |
| 85 EXPECT_TRUE(module_list_writer->WriteEverything(&string_file)); | 86 EXPECT_TRUE(module_list_writer->WriteEverything(&string_file)); |
| 86 ASSERT_EQ(sizeof(MinidumpModuleCrashpadInfoList) + | 87 ASSERT_EQ(sizeof(MinidumpModuleCrashpadInfoList) + |
| 87 sizeof(MinidumpModuleCrashpadInfoLink) + | 88 sizeof(MinidumpModuleCrashpadInfoLink) + |
| 88 sizeof(MinidumpModuleCrashpadInfo), | 89 sizeof(MinidumpModuleCrashpadInfo), |
| 89 string_file.string().size()); | 90 string_file.string().size()); |
| 90 | 91 |
| 91 const MinidumpModuleCrashpadInfoList* module_list = | 92 const MinidumpModuleCrashpadInfoList* module_list = |
| (...skipping 21 matching lines...) Expand all Loading... |
| 113 std::vector<std::string> vector(1, std::string(kEntry)); | 114 std::vector<std::string> vector(1, std::string(kEntry)); |
| 114 | 115 |
| 115 StringFile string_file; | 116 StringFile string_file; |
| 116 | 117 |
| 117 auto module_list_writer = | 118 auto module_list_writer = |
| 118 make_scoped_ptr(new MinidumpModuleCrashpadInfoListWriter()); | 119 make_scoped_ptr(new MinidumpModuleCrashpadInfoListWriter()); |
| 119 | 120 |
| 120 auto module_writer = make_scoped_ptr(new MinidumpModuleCrashpadInfoWriter()); | 121 auto module_writer = make_scoped_ptr(new MinidumpModuleCrashpadInfoWriter()); |
| 121 auto string_list_writer = make_scoped_ptr(new MinidumpUTF8StringListWriter()); | 122 auto string_list_writer = make_scoped_ptr(new MinidumpUTF8StringListWriter()); |
| 122 string_list_writer->InitializeFromVector(vector); | 123 string_list_writer->InitializeFromVector(vector); |
| 123 module_writer->SetListAnnotations(crashpad::move(string_list_writer)); | 124 module_writer->SetListAnnotations(std::move(string_list_writer)); |
| 124 auto simple_string_dictionary_writer = | 125 auto simple_string_dictionary_writer = |
| 125 make_scoped_ptr(new MinidumpSimpleStringDictionaryWriter()); | 126 make_scoped_ptr(new MinidumpSimpleStringDictionaryWriter()); |
| 126 auto simple_string_dictionary_entry_writer = | 127 auto simple_string_dictionary_entry_writer = |
| 127 make_scoped_ptr(new MinidumpSimpleStringDictionaryEntryWriter()); | 128 make_scoped_ptr(new MinidumpSimpleStringDictionaryEntryWriter()); |
| 128 simple_string_dictionary_entry_writer->SetKeyValue(kKey, kValue); | 129 simple_string_dictionary_entry_writer->SetKeyValue(kKey, kValue); |
| 129 simple_string_dictionary_writer->AddEntry( | 130 simple_string_dictionary_writer->AddEntry( |
| 130 crashpad::move(simple_string_dictionary_entry_writer)); | 131 std::move(simple_string_dictionary_entry_writer)); |
| 131 module_writer->SetSimpleAnnotations( | 132 module_writer->SetSimpleAnnotations( |
| 132 crashpad::move(simple_string_dictionary_writer)); | 133 std::move(simple_string_dictionary_writer)); |
| 133 EXPECT_TRUE(module_writer->IsUseful()); | 134 EXPECT_TRUE(module_writer->IsUseful()); |
| 134 module_list_writer->AddModule(crashpad::move(module_writer), | 135 module_list_writer->AddModule(std::move(module_writer), |
| 135 kMinidumpModuleListIndex); | 136 kMinidumpModuleListIndex); |
| 136 | 137 |
| 137 EXPECT_TRUE(module_list_writer->IsUseful()); | 138 EXPECT_TRUE(module_list_writer->IsUseful()); |
| 138 | 139 |
| 139 EXPECT_TRUE(module_list_writer->WriteEverything(&string_file)); | 140 EXPECT_TRUE(module_list_writer->WriteEverything(&string_file)); |
| 140 ASSERT_EQ(sizeof(MinidumpModuleCrashpadInfoList) + | 141 ASSERT_EQ(sizeof(MinidumpModuleCrashpadInfoList) + |
| 141 sizeof(MinidumpModuleCrashpadInfoLink) + | 142 sizeof(MinidumpModuleCrashpadInfoLink) + |
| 142 sizeof(MinidumpModuleCrashpadInfo) + | 143 sizeof(MinidumpModuleCrashpadInfo) + |
| 143 sizeof(MinidumpRVAList) + | 144 sizeof(MinidumpRVAList) + |
| 144 sizeof(RVA) + | 145 sizeof(RVA) + |
| (...skipping 62 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 207 make_scoped_ptr(new MinidumpModuleCrashpadInfoListWriter()); | 208 make_scoped_ptr(new MinidumpModuleCrashpadInfoListWriter()); |
| 208 | 209 |
| 209 auto module_writer_0 = | 210 auto module_writer_0 = |
| 210 make_scoped_ptr(new MinidumpModuleCrashpadInfoWriter()); | 211 make_scoped_ptr(new MinidumpModuleCrashpadInfoWriter()); |
| 211 auto simple_string_dictionary_writer_0 = | 212 auto simple_string_dictionary_writer_0 = |
| 212 make_scoped_ptr(new MinidumpSimpleStringDictionaryWriter()); | 213 make_scoped_ptr(new MinidumpSimpleStringDictionaryWriter()); |
| 213 auto simple_string_dictionary_entry_writer_0 = | 214 auto simple_string_dictionary_entry_writer_0 = |
| 214 make_scoped_ptr(new MinidumpSimpleStringDictionaryEntryWriter()); | 215 make_scoped_ptr(new MinidumpSimpleStringDictionaryEntryWriter()); |
| 215 simple_string_dictionary_entry_writer_0->SetKeyValue(kKey0, kValue0); | 216 simple_string_dictionary_entry_writer_0->SetKeyValue(kKey0, kValue0); |
| 216 simple_string_dictionary_writer_0->AddEntry( | 217 simple_string_dictionary_writer_0->AddEntry( |
| 217 crashpad::move(simple_string_dictionary_entry_writer_0)); | 218 std::move(simple_string_dictionary_entry_writer_0)); |
| 218 module_writer_0->SetSimpleAnnotations( | 219 module_writer_0->SetSimpleAnnotations( |
| 219 crashpad::move(simple_string_dictionary_writer_0)); | 220 std::move(simple_string_dictionary_writer_0)); |
| 220 EXPECT_TRUE(module_writer_0->IsUseful()); | 221 EXPECT_TRUE(module_writer_0->IsUseful()); |
| 221 module_list_writer->AddModule(crashpad::move(module_writer_0), | 222 module_list_writer->AddModule(std::move(module_writer_0), |
| 222 kMinidumpModuleListIndex0); | 223 kMinidumpModuleListIndex0); |
| 223 | 224 |
| 224 auto module_writer_1 = | 225 auto module_writer_1 = |
| 225 make_scoped_ptr(new MinidumpModuleCrashpadInfoWriter()); | 226 make_scoped_ptr(new MinidumpModuleCrashpadInfoWriter()); |
| 226 EXPECT_FALSE(module_writer_1->IsUseful()); | 227 EXPECT_FALSE(module_writer_1->IsUseful()); |
| 227 module_list_writer->AddModule(crashpad::move(module_writer_1), | 228 module_list_writer->AddModule(std::move(module_writer_1), |
| 228 kMinidumpModuleListIndex1); | 229 kMinidumpModuleListIndex1); |
| 229 | 230 |
| 230 auto module_writer_2 = | 231 auto module_writer_2 = |
| 231 make_scoped_ptr(new MinidumpModuleCrashpadInfoWriter()); | 232 make_scoped_ptr(new MinidumpModuleCrashpadInfoWriter()); |
| 232 auto simple_string_dictionary_writer_2 = | 233 auto simple_string_dictionary_writer_2 = |
| 233 make_scoped_ptr(new MinidumpSimpleStringDictionaryWriter()); | 234 make_scoped_ptr(new MinidumpSimpleStringDictionaryWriter()); |
| 234 auto simple_string_dictionary_entry_writer_2a = | 235 auto simple_string_dictionary_entry_writer_2a = |
| 235 make_scoped_ptr(new MinidumpSimpleStringDictionaryEntryWriter()); | 236 make_scoped_ptr(new MinidumpSimpleStringDictionaryEntryWriter()); |
| 236 simple_string_dictionary_entry_writer_2a->SetKeyValue(kKey2A, kValue2A); | 237 simple_string_dictionary_entry_writer_2a->SetKeyValue(kKey2A, kValue2A); |
| 237 simple_string_dictionary_writer_2->AddEntry( | 238 simple_string_dictionary_writer_2->AddEntry( |
| 238 crashpad::move(simple_string_dictionary_entry_writer_2a)); | 239 std::move(simple_string_dictionary_entry_writer_2a)); |
| 239 auto simple_string_dictionary_entry_writer_2b = | 240 auto simple_string_dictionary_entry_writer_2b = |
| 240 make_scoped_ptr(new MinidumpSimpleStringDictionaryEntryWriter()); | 241 make_scoped_ptr(new MinidumpSimpleStringDictionaryEntryWriter()); |
| 241 simple_string_dictionary_entry_writer_2b->SetKeyValue(kKey2B, kValue2B); | 242 simple_string_dictionary_entry_writer_2b->SetKeyValue(kKey2B, kValue2B); |
| 242 simple_string_dictionary_writer_2->AddEntry( | 243 simple_string_dictionary_writer_2->AddEntry( |
| 243 crashpad::move(simple_string_dictionary_entry_writer_2b)); | 244 std::move(simple_string_dictionary_entry_writer_2b)); |
| 244 module_writer_2->SetSimpleAnnotations( | 245 module_writer_2->SetSimpleAnnotations( |
| 245 crashpad::move(simple_string_dictionary_writer_2)); | 246 std::move(simple_string_dictionary_writer_2)); |
| 246 EXPECT_TRUE(module_writer_2->IsUseful()); | 247 EXPECT_TRUE(module_writer_2->IsUseful()); |
| 247 module_list_writer->AddModule(crashpad::move(module_writer_2), | 248 module_list_writer->AddModule(std::move(module_writer_2), |
| 248 kMinidumpModuleListIndex2); | 249 kMinidumpModuleListIndex2); |
| 249 | 250 |
| 250 EXPECT_TRUE(module_list_writer->IsUseful()); | 251 EXPECT_TRUE(module_list_writer->IsUseful()); |
| 251 | 252 |
| 252 EXPECT_TRUE(module_list_writer->WriteEverything(&string_file)); | 253 EXPECT_TRUE(module_list_writer->WriteEverything(&string_file)); |
| 253 | 254 |
| 254 const MinidumpModuleCrashpadInfoList* module_list = | 255 const MinidumpModuleCrashpadInfoList* module_list = |
| 255 MinidumpModuleCrashpadInfoListAtStart(string_file.string(), 3); | 256 MinidumpModuleCrashpadInfoListAtStart(string_file.string(), 3); |
| 256 ASSERT_TRUE(module_list); | 257 ASSERT_TRUE(module_list); |
| 257 | 258 |
| (...skipping 207 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 465 | 466 |
| 466 const MinidumpSimpleStringDictionary* simple_annotations_3 = | 467 const MinidumpSimpleStringDictionary* simple_annotations_3 = |
| 467 MinidumpWritableAtLocationDescriptor<MinidumpSimpleStringDictionary>( | 468 MinidumpWritableAtLocationDescriptor<MinidumpSimpleStringDictionary>( |
| 468 string_file.string(), module_3->simple_annotations); | 469 string_file.string(), module_3->simple_annotations); |
| 469 EXPECT_FALSE(simple_annotations_3); | 470 EXPECT_FALSE(simple_annotations_3); |
| 470 } | 471 } |
| 471 | 472 |
| 472 } // namespace | 473 } // namespace |
| 473 } // namespace test | 474 } // namespace test |
| 474 } // namespace crashpad | 475 } // namespace crashpad |
| OLD | NEW |