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, |
(...skipping 15 matching lines...) Expand all Loading... |
26 #include "gtest/gtest.h" | 26 #include "gtest/gtest.h" |
27 #include "minidump/minidump_extensions.h" | 27 #include "minidump/minidump_extensions.h" |
28 #include "minidump/minidump_file_writer.h" | 28 #include "minidump/minidump_file_writer.h" |
29 #include "minidump/test/minidump_file_writer_test_util.h" | 29 #include "minidump/test/minidump_file_writer_test_util.h" |
30 #include "minidump/test/minidump_string_writer_test_util.h" | 30 #include "minidump/test/minidump_string_writer_test_util.h" |
31 #include "minidump/test/minidump_writable_test_util.h" | 31 #include "minidump/test/minidump_writable_test_util.h" |
32 #include "snapshot/test/test_module_snapshot.h" | 32 #include "snapshot/test/test_module_snapshot.h" |
33 #include "test/gtest_death_check.h" | 33 #include "test/gtest_death_check.h" |
34 #include "util/file/string_file.h" | 34 #include "util/file/string_file.h" |
35 #include "util/misc/implicit_cast.h" | 35 #include "util/misc/implicit_cast.h" |
| 36 #include "util/stdlib/move.h" |
36 #include "util/misc/uuid.h" | 37 #include "util/misc/uuid.h" |
37 #include "util/stdlib/pointer_container.h" | 38 #include "util/stdlib/pointer_container.h" |
38 | 39 |
39 namespace crashpad { | 40 namespace crashpad { |
40 namespace test { | 41 namespace test { |
41 namespace { | 42 namespace { |
42 | 43 |
43 void GetModuleListStream(const std::string& file_contents, | 44 void GetModuleListStream(const std::string& file_contents, |
44 const MINIDUMP_MODULE_LIST** module_list) { | 45 const MINIDUMP_MODULE_LIST** module_list) { |
45 const size_t kDirectoryOffset = sizeof(MINIDUMP_HEADER); | 46 const size_t kDirectoryOffset = sizeof(MINIDUMP_HEADER); |
(...skipping 15 matching lines...) Expand all Loading... |
61 | 62 |
62 *module_list = MinidumpWritableAtLocationDescriptor<MINIDUMP_MODULE_LIST>( | 63 *module_list = MinidumpWritableAtLocationDescriptor<MINIDUMP_MODULE_LIST>( |
63 file_contents, directory[0].Location); | 64 file_contents, directory[0].Location); |
64 ASSERT_TRUE(module_list); | 65 ASSERT_TRUE(module_list); |
65 } | 66 } |
66 | 67 |
67 TEST(MinidumpModuleWriter, EmptyModuleList) { | 68 TEST(MinidumpModuleWriter, EmptyModuleList) { |
68 MinidumpFileWriter minidump_file_writer; | 69 MinidumpFileWriter minidump_file_writer; |
69 auto module_list_writer = make_scoped_ptr(new MinidumpModuleListWriter()); | 70 auto module_list_writer = make_scoped_ptr(new MinidumpModuleListWriter()); |
70 | 71 |
71 minidump_file_writer.AddStream(module_list_writer.Pass()); | 72 minidump_file_writer.AddStream(crashpad::move(module_list_writer)); |
72 | 73 |
73 StringFile string_file; | 74 StringFile string_file; |
74 ASSERT_TRUE(minidump_file_writer.WriteEverything(&string_file)); | 75 ASSERT_TRUE(minidump_file_writer.WriteEverything(&string_file)); |
75 | 76 |
76 ASSERT_EQ(sizeof(MINIDUMP_HEADER) + sizeof(MINIDUMP_DIRECTORY) + | 77 ASSERT_EQ(sizeof(MINIDUMP_HEADER) + sizeof(MINIDUMP_DIRECTORY) + |
77 sizeof(MINIDUMP_MODULE_LIST), | 78 sizeof(MINIDUMP_MODULE_LIST), |
78 string_file.string().size()); | 79 string_file.string().size()); |
79 | 80 |
80 const MINIDUMP_MODULE_LIST* module_list = nullptr; | 81 const MINIDUMP_MODULE_LIST* module_list = nullptr; |
81 ASSERT_NO_FATAL_FAILURE( | 82 ASSERT_NO_FATAL_FAILURE( |
(...skipping 187 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
269 | 270 |
270 TEST(MinidumpModuleWriter, EmptyModule) { | 271 TEST(MinidumpModuleWriter, EmptyModule) { |
271 MinidumpFileWriter minidump_file_writer; | 272 MinidumpFileWriter minidump_file_writer; |
272 auto module_list_writer = make_scoped_ptr(new MinidumpModuleListWriter()); | 273 auto module_list_writer = make_scoped_ptr(new MinidumpModuleListWriter()); |
273 | 274 |
274 const char kModuleName[] = "test_executable"; | 275 const char kModuleName[] = "test_executable"; |
275 | 276 |
276 auto module_writer = make_scoped_ptr(new MinidumpModuleWriter()); | 277 auto module_writer = make_scoped_ptr(new MinidumpModuleWriter()); |
277 module_writer->SetName(kModuleName); | 278 module_writer->SetName(kModuleName); |
278 | 279 |
279 module_list_writer->AddModule(module_writer.Pass()); | 280 module_list_writer->AddModule(crashpad::move(module_writer)); |
280 minidump_file_writer.AddStream(module_list_writer.Pass()); | 281 minidump_file_writer.AddStream(crashpad::move(module_list_writer)); |
281 | 282 |
282 StringFile string_file; | 283 StringFile string_file; |
283 ASSERT_TRUE(minidump_file_writer.WriteEverything(&string_file)); | 284 ASSERT_TRUE(minidump_file_writer.WriteEverything(&string_file)); |
284 | 285 |
285 ASSERT_GT(string_file.string().size(), | 286 ASSERT_GT(string_file.string().size(), |
286 sizeof(MINIDUMP_HEADER) + sizeof(MINIDUMP_DIRECTORY) + | 287 sizeof(MINIDUMP_HEADER) + sizeof(MINIDUMP_DIRECTORY) + |
287 sizeof(MINIDUMP_MODULE_LIST) + 1 * sizeof(MINIDUMP_MODULE)); | 288 sizeof(MINIDUMP_MODULE_LIST) + 1 * sizeof(MINIDUMP_MODULE)); |
288 | 289 |
289 const MINIDUMP_MODULE_LIST* module_list = nullptr; | 290 const MINIDUMP_MODULE_LIST* module_list = nullptr; |
290 ASSERT_NO_FATAL_FAILURE( | 291 ASSERT_NO_FATAL_FAILURE( |
(...skipping 61 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
352 kProductVersionLS >> 16, | 353 kProductVersionLS >> 16, |
353 kProductVersionLS & 0xffff); | 354 kProductVersionLS & 0xffff); |
354 module_writer->SetFileFlagsAndMask(kFileFlags, kFileFlagsMask); | 355 module_writer->SetFileFlagsAndMask(kFileFlags, kFileFlagsMask); |
355 module_writer->SetFileOS(kFileOS); | 356 module_writer->SetFileOS(kFileOS); |
356 module_writer->SetFileTypeAndSubtype(kFileType, kFileSubtype); | 357 module_writer->SetFileTypeAndSubtype(kFileType, kFileSubtype); |
357 | 358 |
358 auto codeview_pdb70_writer = | 359 auto codeview_pdb70_writer = |
359 make_scoped_ptr(new MinidumpModuleCodeViewRecordPDB70Writer()); | 360 make_scoped_ptr(new MinidumpModuleCodeViewRecordPDB70Writer()); |
360 codeview_pdb70_writer->SetPDBName(kPDBName); | 361 codeview_pdb70_writer->SetPDBName(kPDBName); |
361 codeview_pdb70_writer->SetUUIDAndAge(pdb_uuid, kPDBAge); | 362 codeview_pdb70_writer->SetUUIDAndAge(pdb_uuid, kPDBAge); |
362 module_writer->SetCodeViewRecord(codeview_pdb70_writer.Pass()); | 363 module_writer->SetCodeViewRecord(crashpad::move(codeview_pdb70_writer)); |
363 | 364 |
364 auto misc_debug_writer = | 365 auto misc_debug_writer = |
365 make_scoped_ptr(new MinidumpModuleMiscDebugRecordWriter()); | 366 make_scoped_ptr(new MinidumpModuleMiscDebugRecordWriter()); |
366 misc_debug_writer->SetDataType(kDebugType); | 367 misc_debug_writer->SetDataType(kDebugType); |
367 misc_debug_writer->SetData(kDebugName, kDebugUTF16); | 368 misc_debug_writer->SetData(kDebugName, kDebugUTF16); |
368 module_writer->SetMiscDebugRecord(misc_debug_writer.Pass()); | 369 module_writer->SetMiscDebugRecord(crashpad::move(misc_debug_writer)); |
369 | 370 |
370 module_list_writer->AddModule(module_writer.Pass()); | 371 module_list_writer->AddModule(crashpad::move(module_writer)); |
371 minidump_file_writer.AddStream(module_list_writer.Pass()); | 372 minidump_file_writer.AddStream(crashpad::move(module_list_writer)); |
372 | 373 |
373 StringFile string_file; | 374 StringFile string_file; |
374 ASSERT_TRUE(minidump_file_writer.WriteEverything(&string_file)); | 375 ASSERT_TRUE(minidump_file_writer.WriteEverything(&string_file)); |
375 | 376 |
376 ASSERT_GT(string_file.string().size(), | 377 ASSERT_GT(string_file.string().size(), |
377 sizeof(MINIDUMP_HEADER) + sizeof(MINIDUMP_DIRECTORY) + | 378 sizeof(MINIDUMP_HEADER) + sizeof(MINIDUMP_DIRECTORY) + |
378 sizeof(MINIDUMP_MODULE_LIST) + 1 * sizeof(MINIDUMP_MODULE)); | 379 sizeof(MINIDUMP_MODULE_LIST) + 1 * sizeof(MINIDUMP_MODULE)); |
379 | 380 |
380 const MINIDUMP_MODULE_LIST* module_list = nullptr; | 381 const MINIDUMP_MODULE_LIST* module_list = nullptr; |
381 ASSERT_NO_FATAL_FAILURE( | 382 ASSERT_NO_FATAL_FAILURE( |
(...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
427 const char kDebugName[] = "d1n05.dbg"; | 428 const char kDebugName[] = "d1n05.dbg"; |
428 const bool kDebugUTF16 = true; | 429 const bool kDebugUTF16 = true; |
429 | 430 |
430 auto module_writer = make_scoped_ptr(new MinidumpModuleWriter()); | 431 auto module_writer = make_scoped_ptr(new MinidumpModuleWriter()); |
431 module_writer->SetName(kModuleName); | 432 module_writer->SetName(kModuleName); |
432 | 433 |
433 auto codeview_pdb20_writer = | 434 auto codeview_pdb20_writer = |
434 make_scoped_ptr(new MinidumpModuleCodeViewRecordPDB20Writer()); | 435 make_scoped_ptr(new MinidumpModuleCodeViewRecordPDB20Writer()); |
435 codeview_pdb20_writer->SetPDBName(kPDBName); | 436 codeview_pdb20_writer->SetPDBName(kPDBName); |
436 codeview_pdb20_writer->SetTimestampAndAge(kPDBTimestamp, kPDBAge); | 437 codeview_pdb20_writer->SetTimestampAndAge(kPDBTimestamp, kPDBAge); |
437 module_writer->SetCodeViewRecord(codeview_pdb20_writer.Pass()); | 438 module_writer->SetCodeViewRecord(crashpad::move(codeview_pdb20_writer)); |
438 | 439 |
439 auto misc_debug_writer = | 440 auto misc_debug_writer = |
440 make_scoped_ptr(new MinidumpModuleMiscDebugRecordWriter()); | 441 make_scoped_ptr(new MinidumpModuleMiscDebugRecordWriter()); |
441 misc_debug_writer->SetDataType(kDebugType); | 442 misc_debug_writer->SetDataType(kDebugType); |
442 misc_debug_writer->SetData(kDebugName, kDebugUTF16); | 443 misc_debug_writer->SetData(kDebugName, kDebugUTF16); |
443 module_writer->SetMiscDebugRecord(misc_debug_writer.Pass()); | 444 module_writer->SetMiscDebugRecord(crashpad::move(misc_debug_writer)); |
444 | 445 |
445 module_list_writer->AddModule(module_writer.Pass()); | 446 module_list_writer->AddModule(crashpad::move(module_writer)); |
446 minidump_file_writer.AddStream(module_list_writer.Pass()); | 447 minidump_file_writer.AddStream(crashpad::move(module_list_writer)); |
447 | 448 |
448 StringFile string_file; | 449 StringFile string_file; |
449 ASSERT_TRUE(minidump_file_writer.WriteEverything(&string_file)); | 450 ASSERT_TRUE(minidump_file_writer.WriteEverything(&string_file)); |
450 | 451 |
451 ASSERT_GT(string_file.string().size(), | 452 ASSERT_GT(string_file.string().size(), |
452 sizeof(MINIDUMP_HEADER) + sizeof(MINIDUMP_DIRECTORY) + | 453 sizeof(MINIDUMP_HEADER) + sizeof(MINIDUMP_DIRECTORY) + |
453 sizeof(MINIDUMP_MODULE_LIST) + 1 * sizeof(MINIDUMP_MODULE)); | 454 sizeof(MINIDUMP_MODULE_LIST) + 1 * sizeof(MINIDUMP_MODULE)); |
454 | 455 |
455 const MINIDUMP_MODULE_LIST* module_list = nullptr; | 456 const MINIDUMP_MODULE_LIST* module_list = nullptr; |
456 ASSERT_NO_FATAL_FAILURE( | 457 ASSERT_NO_FATAL_FAILURE( |
(...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
504 | 505 |
505 auto module_writer_0 = make_scoped_ptr(new MinidumpModuleWriter()); | 506 auto module_writer_0 = make_scoped_ptr(new MinidumpModuleWriter()); |
506 module_writer_0->SetName(kModuleName0); | 507 module_writer_0->SetName(kModuleName0); |
507 module_writer_0->SetImageBaseAddress(kModuleBase0); | 508 module_writer_0->SetImageBaseAddress(kModuleBase0); |
508 module_writer_0->SetImageSize(kModuleSize0); | 509 module_writer_0->SetImageSize(kModuleSize0); |
509 | 510 |
510 auto codeview_pdb70_writer_0 = | 511 auto codeview_pdb70_writer_0 = |
511 make_scoped_ptr(new MinidumpModuleCodeViewRecordPDB70Writer()); | 512 make_scoped_ptr(new MinidumpModuleCodeViewRecordPDB70Writer()); |
512 codeview_pdb70_writer_0->SetPDBName(kPDBName0); | 513 codeview_pdb70_writer_0->SetPDBName(kPDBName0); |
513 codeview_pdb70_writer_0->SetUUIDAndAge(pdb_uuid_0, kPDBAge0); | 514 codeview_pdb70_writer_0->SetUUIDAndAge(pdb_uuid_0, kPDBAge0); |
514 module_writer_0->SetCodeViewRecord(codeview_pdb70_writer_0.Pass()); | 515 module_writer_0->SetCodeViewRecord(crashpad::move(codeview_pdb70_writer_0)); |
515 | 516 |
516 module_list_writer->AddModule(module_writer_0.Pass()); | 517 module_list_writer->AddModule(crashpad::move(module_writer_0)); |
517 | 518 |
518 auto module_writer_1 = make_scoped_ptr(new MinidumpModuleWriter()); | 519 auto module_writer_1 = make_scoped_ptr(new MinidumpModuleWriter()); |
519 module_writer_1->SetName(kModuleName1); | 520 module_writer_1->SetName(kModuleName1); |
520 module_writer_1->SetImageBaseAddress(kModuleBase1); | 521 module_writer_1->SetImageBaseAddress(kModuleBase1); |
521 module_writer_1->SetImageSize(kModuleSize1); | 522 module_writer_1->SetImageSize(kModuleSize1); |
522 | 523 |
523 module_list_writer->AddModule(module_writer_1.Pass()); | 524 module_list_writer->AddModule(crashpad::move(module_writer_1)); |
524 | 525 |
525 auto module_writer_2 = make_scoped_ptr(new MinidumpModuleWriter()); | 526 auto module_writer_2 = make_scoped_ptr(new MinidumpModuleWriter()); |
526 module_writer_2->SetName(kModuleName2); | 527 module_writer_2->SetName(kModuleName2); |
527 module_writer_2->SetImageBaseAddress(kModuleBase2); | 528 module_writer_2->SetImageBaseAddress(kModuleBase2); |
528 module_writer_2->SetImageSize(kModuleSize2); | 529 module_writer_2->SetImageSize(kModuleSize2); |
529 | 530 |
530 auto codeview_pdb70_writer_2 = | 531 auto codeview_pdb70_writer_2 = |
531 make_scoped_ptr(new MinidumpModuleCodeViewRecordPDB20Writer()); | 532 make_scoped_ptr(new MinidumpModuleCodeViewRecordPDB20Writer()); |
532 codeview_pdb70_writer_2->SetPDBName(kPDBName2); | 533 codeview_pdb70_writer_2->SetPDBName(kPDBName2); |
533 codeview_pdb70_writer_2->SetTimestampAndAge(kPDBTimestamp2, kPDBAge2); | 534 codeview_pdb70_writer_2->SetTimestampAndAge(kPDBTimestamp2, kPDBAge2); |
534 module_writer_2->SetCodeViewRecord(codeview_pdb70_writer_2.Pass()); | 535 module_writer_2->SetCodeViewRecord(crashpad::move(codeview_pdb70_writer_2)); |
535 | 536 |
536 module_list_writer->AddModule(module_writer_2.Pass()); | 537 module_list_writer->AddModule(crashpad::move(module_writer_2)); |
537 | 538 |
538 minidump_file_writer.AddStream(module_list_writer.Pass()); | 539 minidump_file_writer.AddStream(crashpad::move(module_list_writer)); |
539 | 540 |
540 StringFile string_file; | 541 StringFile string_file; |
541 ASSERT_TRUE(minidump_file_writer.WriteEverything(&string_file)); | 542 ASSERT_TRUE(minidump_file_writer.WriteEverything(&string_file)); |
542 | 543 |
543 ASSERT_GT(string_file.string().size(), | 544 ASSERT_GT(string_file.string().size(), |
544 sizeof(MINIDUMP_HEADER) + sizeof(MINIDUMP_DIRECTORY) + | 545 sizeof(MINIDUMP_HEADER) + sizeof(MINIDUMP_DIRECTORY) + |
545 sizeof(MINIDUMP_MODULE_LIST) + 1 * sizeof(MINIDUMP_MODULE)); | 546 sizeof(MINIDUMP_MODULE_LIST) + 1 * sizeof(MINIDUMP_MODULE)); |
546 | 547 |
547 const MINIDUMP_MODULE_LIST* module_list = nullptr; | 548 const MINIDUMP_MODULE_LIST* module_list = nullptr; |
548 ASSERT_NO_FATAL_FAILURE( | 549 ASSERT_NO_FATAL_FAILURE( |
(...skipping 172 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
721 module_pdbs[index], | 722 module_pdbs[index], |
722 uuids[index], | 723 uuids[index], |
723 ages[index]); | 724 ages[index]); |
724 module_snapshots.push_back(module_snapshot); | 725 module_snapshots.push_back(module_snapshot); |
725 } | 726 } |
726 | 727 |
727 auto module_list_writer = make_scoped_ptr(new MinidumpModuleListWriter()); | 728 auto module_list_writer = make_scoped_ptr(new MinidumpModuleListWriter()); |
728 module_list_writer->InitializeFromSnapshot(module_snapshots); | 729 module_list_writer->InitializeFromSnapshot(module_snapshots); |
729 | 730 |
730 MinidumpFileWriter minidump_file_writer; | 731 MinidumpFileWriter minidump_file_writer; |
731 minidump_file_writer.AddStream(module_list_writer.Pass()); | 732 minidump_file_writer.AddStream(crashpad::move(module_list_writer)); |
732 | 733 |
733 StringFile string_file; | 734 StringFile string_file; |
734 ASSERT_TRUE(minidump_file_writer.WriteEverything(&string_file)); | 735 ASSERT_TRUE(minidump_file_writer.WriteEverything(&string_file)); |
735 | 736 |
736 const MINIDUMP_MODULE_LIST* module_list = nullptr; | 737 const MINIDUMP_MODULE_LIST* module_list = nullptr; |
737 ASSERT_NO_FATAL_FAILURE( | 738 ASSERT_NO_FATAL_FAILURE( |
738 GetModuleListStream(string_file.string(), &module_list)); | 739 GetModuleListStream(string_file.string(), &module_list)); |
739 | 740 |
740 ASSERT_EQ(3u, module_list->NumberOfModules); | 741 ASSERT_EQ(3u, module_list->NumberOfModules); |
741 | 742 |
(...skipping 10 matching lines...) Expand all Loading... |
752 nullptr, | 753 nullptr, |
753 0, | 754 0, |
754 false)); | 755 false)); |
755 } | 756 } |
756 } | 757 } |
757 | 758 |
758 TEST(MinidumpModuleWriterDeathTest, NoModuleName) { | 759 TEST(MinidumpModuleWriterDeathTest, NoModuleName) { |
759 MinidumpFileWriter minidump_file_writer; | 760 MinidumpFileWriter minidump_file_writer; |
760 auto module_list_writer = make_scoped_ptr(new MinidumpModuleListWriter()); | 761 auto module_list_writer = make_scoped_ptr(new MinidumpModuleListWriter()); |
761 auto module_writer = make_scoped_ptr(new MinidumpModuleWriter()); | 762 auto module_writer = make_scoped_ptr(new MinidumpModuleWriter()); |
762 module_list_writer->AddModule(module_writer.Pass()); | 763 module_list_writer->AddModule(crashpad::move(module_writer)); |
763 minidump_file_writer.AddStream(module_list_writer.Pass()); | 764 minidump_file_writer.AddStream(crashpad::move(module_list_writer)); |
764 | 765 |
765 StringFile string_file; | 766 StringFile string_file; |
766 ASSERT_DEATH_CHECK(minidump_file_writer.WriteEverything(&string_file), | 767 ASSERT_DEATH_CHECK(minidump_file_writer.WriteEverything(&string_file), |
767 "name_"); | 768 "name_"); |
768 } | 769 } |
769 | 770 |
770 } // namespace | 771 } // namespace |
771 } // namespace test | 772 } // namespace test |
772 } // namespace crashpad | 773 } // namespace crashpad |
OLD | NEW |