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 "gtest/gtest.h" | 20 #include "gtest/gtest.h" |
21 #include "minidump/minidump_extensions.h" | 21 #include "minidump/minidump_extensions.h" |
22 #include "minidump/minidump_simple_string_dictionary_writer.h" | 22 #include "minidump/minidump_simple_string_dictionary_writer.h" |
23 #include "minidump/test/minidump_file_writer_test_util.h" | 23 #include "minidump/test/minidump_file_writer_test_util.h" |
24 #include "minidump/test/minidump_string_writer_test_util.h" | 24 #include "minidump/test/minidump_string_writer_test_util.h" |
25 #include "minidump/test/minidump_writable_test_util.h" | 25 #include "minidump/test/minidump_writable_test_util.h" |
26 #include "snapshot/test/test_module_snapshot.h" | 26 #include "snapshot/test/test_module_snapshot.h" |
27 #include "util/file/string_file.h" | 27 #include "util/file/string_file.h" |
| 28 #include "util/stdlib/move.h" |
28 | 29 |
29 namespace crashpad { | 30 namespace crashpad { |
30 namespace test { | 31 namespace test { |
31 namespace { | 32 namespace { |
32 | 33 |
33 const MinidumpModuleCrashpadInfoList* MinidumpModuleCrashpadInfoListAtStart( | 34 const MinidumpModuleCrashpadInfoList* MinidumpModuleCrashpadInfoListAtStart( |
34 const std::string& file_contents, | 35 const std::string& file_contents, |
35 size_t count) { | 36 size_t count) { |
36 MINIDUMP_LOCATION_DESCRIPTOR location_descriptor; | 37 MINIDUMP_LOCATION_DESCRIPTOR location_descriptor; |
37 location_descriptor.DataSize = | 38 location_descriptor.DataSize = |
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
70 ASSERT_TRUE(module_list); | 71 ASSERT_TRUE(module_list); |
71 } | 72 } |
72 | 73 |
73 TEST(MinidumpModuleCrashpadInfoWriter, EmptyModule) { | 74 TEST(MinidumpModuleCrashpadInfoWriter, EmptyModule) { |
74 StringFile string_file; | 75 StringFile string_file; |
75 | 76 |
76 auto module_list_writer = | 77 auto module_list_writer = |
77 make_scoped_ptr(new MinidumpModuleCrashpadInfoListWriter()); | 78 make_scoped_ptr(new MinidumpModuleCrashpadInfoListWriter()); |
78 auto module_writer = make_scoped_ptr(new MinidumpModuleCrashpadInfoWriter()); | 79 auto module_writer = make_scoped_ptr(new MinidumpModuleCrashpadInfoWriter()); |
79 EXPECT_FALSE(module_writer->IsUseful()); | 80 EXPECT_FALSE(module_writer->IsUseful()); |
80 module_list_writer->AddModule(module_writer.Pass(), 0); | 81 module_list_writer->AddModule(crashpad::move(module_writer), 0); |
81 | 82 |
82 EXPECT_TRUE(module_list_writer->IsUseful()); | 83 EXPECT_TRUE(module_list_writer->IsUseful()); |
83 | 84 |
84 EXPECT_TRUE(module_list_writer->WriteEverything(&string_file)); | 85 EXPECT_TRUE(module_list_writer->WriteEverything(&string_file)); |
85 ASSERT_EQ(sizeof(MinidumpModuleCrashpadInfoList) + | 86 ASSERT_EQ(sizeof(MinidumpModuleCrashpadInfoList) + |
86 sizeof(MinidumpModuleCrashpadInfoLink) + | 87 sizeof(MinidumpModuleCrashpadInfoLink) + |
87 sizeof(MinidumpModuleCrashpadInfo), | 88 sizeof(MinidumpModuleCrashpadInfo), |
88 string_file.string().size()); | 89 string_file.string().size()); |
89 | 90 |
90 const MinidumpModuleCrashpadInfoList* module_list = | 91 const MinidumpModuleCrashpadInfoList* module_list = |
(...skipping 21 matching lines...) Expand all Loading... |
112 std::vector<std::string> vector(1, std::string(kEntry)); | 113 std::vector<std::string> vector(1, std::string(kEntry)); |
113 | 114 |
114 StringFile string_file; | 115 StringFile string_file; |
115 | 116 |
116 auto module_list_writer = | 117 auto module_list_writer = |
117 make_scoped_ptr(new MinidumpModuleCrashpadInfoListWriter()); | 118 make_scoped_ptr(new MinidumpModuleCrashpadInfoListWriter()); |
118 | 119 |
119 auto module_writer = make_scoped_ptr(new MinidumpModuleCrashpadInfoWriter()); | 120 auto module_writer = make_scoped_ptr(new MinidumpModuleCrashpadInfoWriter()); |
120 auto string_list_writer = make_scoped_ptr(new MinidumpUTF8StringListWriter()); | 121 auto string_list_writer = make_scoped_ptr(new MinidumpUTF8StringListWriter()); |
121 string_list_writer->InitializeFromVector(vector); | 122 string_list_writer->InitializeFromVector(vector); |
122 module_writer->SetListAnnotations(string_list_writer.Pass()); | 123 module_writer->SetListAnnotations(crashpad::move(string_list_writer)); |
123 auto simple_string_dictionary_writer = | 124 auto simple_string_dictionary_writer = |
124 make_scoped_ptr(new MinidumpSimpleStringDictionaryWriter()); | 125 make_scoped_ptr(new MinidumpSimpleStringDictionaryWriter()); |
125 auto simple_string_dictionary_entry_writer = | 126 auto simple_string_dictionary_entry_writer = |
126 make_scoped_ptr(new MinidumpSimpleStringDictionaryEntryWriter()); | 127 make_scoped_ptr(new MinidumpSimpleStringDictionaryEntryWriter()); |
127 simple_string_dictionary_entry_writer->SetKeyValue(kKey, kValue); | 128 simple_string_dictionary_entry_writer->SetKeyValue(kKey, kValue); |
128 simple_string_dictionary_writer->AddEntry( | 129 simple_string_dictionary_writer->AddEntry( |
129 simple_string_dictionary_entry_writer.Pass()); | 130 crashpad::move(simple_string_dictionary_entry_writer)); |
130 module_writer->SetSimpleAnnotations(simple_string_dictionary_writer.Pass()); | 131 module_writer->SetSimpleAnnotations( |
| 132 crashpad::move(simple_string_dictionary_writer)); |
131 EXPECT_TRUE(module_writer->IsUseful()); | 133 EXPECT_TRUE(module_writer->IsUseful()); |
132 module_list_writer->AddModule(module_writer.Pass(), kMinidumpModuleListIndex); | 134 module_list_writer->AddModule(crashpad::move(module_writer), |
| 135 kMinidumpModuleListIndex); |
133 | 136 |
134 EXPECT_TRUE(module_list_writer->IsUseful()); | 137 EXPECT_TRUE(module_list_writer->IsUseful()); |
135 | 138 |
136 EXPECT_TRUE(module_list_writer->WriteEverything(&string_file)); | 139 EXPECT_TRUE(module_list_writer->WriteEverything(&string_file)); |
137 ASSERT_EQ(sizeof(MinidumpModuleCrashpadInfoList) + | 140 ASSERT_EQ(sizeof(MinidumpModuleCrashpadInfoList) + |
138 sizeof(MinidumpModuleCrashpadInfoLink) + | 141 sizeof(MinidumpModuleCrashpadInfoLink) + |
139 sizeof(MinidumpModuleCrashpadInfo) + | 142 sizeof(MinidumpModuleCrashpadInfo) + |
140 sizeof(MinidumpRVAList) + | 143 sizeof(MinidumpRVAList) + |
141 sizeof(RVA) + | 144 sizeof(RVA) + |
142 sizeof(MinidumpSimpleStringDictionary) + | 145 sizeof(MinidumpSimpleStringDictionary) + |
(...skipping 61 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
204 make_scoped_ptr(new MinidumpModuleCrashpadInfoListWriter()); | 207 make_scoped_ptr(new MinidumpModuleCrashpadInfoListWriter()); |
205 | 208 |
206 auto module_writer_0 = | 209 auto module_writer_0 = |
207 make_scoped_ptr(new MinidumpModuleCrashpadInfoWriter()); | 210 make_scoped_ptr(new MinidumpModuleCrashpadInfoWriter()); |
208 auto simple_string_dictionary_writer_0 = | 211 auto simple_string_dictionary_writer_0 = |
209 make_scoped_ptr(new MinidumpSimpleStringDictionaryWriter()); | 212 make_scoped_ptr(new MinidumpSimpleStringDictionaryWriter()); |
210 auto simple_string_dictionary_entry_writer_0 = | 213 auto simple_string_dictionary_entry_writer_0 = |
211 make_scoped_ptr(new MinidumpSimpleStringDictionaryEntryWriter()); | 214 make_scoped_ptr(new MinidumpSimpleStringDictionaryEntryWriter()); |
212 simple_string_dictionary_entry_writer_0->SetKeyValue(kKey0, kValue0); | 215 simple_string_dictionary_entry_writer_0->SetKeyValue(kKey0, kValue0); |
213 simple_string_dictionary_writer_0->AddEntry( | 216 simple_string_dictionary_writer_0->AddEntry( |
214 simple_string_dictionary_entry_writer_0.Pass()); | 217 crashpad::move(simple_string_dictionary_entry_writer_0)); |
215 module_writer_0->SetSimpleAnnotations( | 218 module_writer_0->SetSimpleAnnotations( |
216 simple_string_dictionary_writer_0.Pass()); | 219 crashpad::move(simple_string_dictionary_writer_0)); |
217 EXPECT_TRUE(module_writer_0->IsUseful()); | 220 EXPECT_TRUE(module_writer_0->IsUseful()); |
218 module_list_writer->AddModule(module_writer_0.Pass(), | 221 module_list_writer->AddModule(crashpad::move(module_writer_0), |
219 kMinidumpModuleListIndex0); | 222 kMinidumpModuleListIndex0); |
220 | 223 |
221 auto module_writer_1 = | 224 auto module_writer_1 = |
222 make_scoped_ptr(new MinidumpModuleCrashpadInfoWriter()); | 225 make_scoped_ptr(new MinidumpModuleCrashpadInfoWriter()); |
223 EXPECT_FALSE(module_writer_1->IsUseful()); | 226 EXPECT_FALSE(module_writer_1->IsUseful()); |
224 module_list_writer->AddModule(module_writer_1.Pass(), | 227 module_list_writer->AddModule(crashpad::move(module_writer_1), |
225 kMinidumpModuleListIndex1); | 228 kMinidumpModuleListIndex1); |
226 | 229 |
227 auto module_writer_2 = | 230 auto module_writer_2 = |
228 make_scoped_ptr(new MinidumpModuleCrashpadInfoWriter()); | 231 make_scoped_ptr(new MinidumpModuleCrashpadInfoWriter()); |
229 auto simple_string_dictionary_writer_2 = | 232 auto simple_string_dictionary_writer_2 = |
230 make_scoped_ptr(new MinidumpSimpleStringDictionaryWriter()); | 233 make_scoped_ptr(new MinidumpSimpleStringDictionaryWriter()); |
231 auto simple_string_dictionary_entry_writer_2a = | 234 auto simple_string_dictionary_entry_writer_2a = |
232 make_scoped_ptr(new MinidumpSimpleStringDictionaryEntryWriter()); | 235 make_scoped_ptr(new MinidumpSimpleStringDictionaryEntryWriter()); |
233 simple_string_dictionary_entry_writer_2a->SetKeyValue(kKey2A, kValue2A); | 236 simple_string_dictionary_entry_writer_2a->SetKeyValue(kKey2A, kValue2A); |
234 simple_string_dictionary_writer_2->AddEntry( | 237 simple_string_dictionary_writer_2->AddEntry( |
235 simple_string_dictionary_entry_writer_2a.Pass()); | 238 crashpad::move(simple_string_dictionary_entry_writer_2a)); |
236 auto simple_string_dictionary_entry_writer_2b = | 239 auto simple_string_dictionary_entry_writer_2b = |
237 make_scoped_ptr(new MinidumpSimpleStringDictionaryEntryWriter()); | 240 make_scoped_ptr(new MinidumpSimpleStringDictionaryEntryWriter()); |
238 simple_string_dictionary_entry_writer_2b->SetKeyValue(kKey2B, kValue2B); | 241 simple_string_dictionary_entry_writer_2b->SetKeyValue(kKey2B, kValue2B); |
239 simple_string_dictionary_writer_2->AddEntry( | 242 simple_string_dictionary_writer_2->AddEntry( |
240 simple_string_dictionary_entry_writer_2b.Pass()); | 243 crashpad::move(simple_string_dictionary_entry_writer_2b)); |
241 module_writer_2->SetSimpleAnnotations( | 244 module_writer_2->SetSimpleAnnotations( |
242 simple_string_dictionary_writer_2.Pass()); | 245 crashpad::move(simple_string_dictionary_writer_2)); |
243 EXPECT_TRUE(module_writer_2->IsUseful()); | 246 EXPECT_TRUE(module_writer_2->IsUseful()); |
244 module_list_writer->AddModule(module_writer_2.Pass(), | 247 module_list_writer->AddModule(crashpad::move(module_writer_2), |
245 kMinidumpModuleListIndex2); | 248 kMinidumpModuleListIndex2); |
246 | 249 |
247 EXPECT_TRUE(module_list_writer->IsUseful()); | 250 EXPECT_TRUE(module_list_writer->IsUseful()); |
248 | 251 |
249 EXPECT_TRUE(module_list_writer->WriteEverything(&string_file)); | 252 EXPECT_TRUE(module_list_writer->WriteEverything(&string_file)); |
250 | 253 |
251 const MinidumpModuleCrashpadInfoList* module_list = | 254 const MinidumpModuleCrashpadInfoList* module_list = |
252 MinidumpModuleCrashpadInfoListAtStart(string_file.string(), 3); | 255 MinidumpModuleCrashpadInfoListAtStart(string_file.string(), 3); |
253 ASSERT_TRUE(module_list); | 256 ASSERT_TRUE(module_list); |
254 | 257 |
(...skipping 207 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
462 | 465 |
463 const MinidumpSimpleStringDictionary* simple_annotations_3 = | 466 const MinidumpSimpleStringDictionary* simple_annotations_3 = |
464 MinidumpWritableAtLocationDescriptor<MinidumpSimpleStringDictionary>( | 467 MinidumpWritableAtLocationDescriptor<MinidumpSimpleStringDictionary>( |
465 string_file.string(), module_3->simple_annotations); | 468 string_file.string(), module_3->simple_annotations); |
466 EXPECT_FALSE(simple_annotations_3); | 469 EXPECT_FALSE(simple_annotations_3); |
467 } | 470 } |
468 | 471 |
469 } // namespace | 472 } // namespace |
470 } // namespace test | 473 } // namespace test |
471 } // namespace crashpad | 474 } // namespace crashpad |
OLD | NEW |