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 476 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
487 kDebugUTF16)); | 487 kDebugUTF16)); |
488 } | 488 } |
489 | 489 |
490 TEST(MinidumpModuleWriter, ThreeModules) { | 490 TEST(MinidumpModuleWriter, ThreeModules) { |
491 // As good exercise, this test uses three modules, one with a PDB 7.0 link as | 491 // As good exercise, this test uses three modules, one with a PDB 7.0 link as |
492 // its CodeView record, one with no CodeView record, and one with a PDB 2.0 | 492 // its CodeView record, one with no CodeView record, and one with a PDB 2.0 |
493 // link as its CodeView record. | 493 // link as its CodeView record. |
494 MinidumpFileWriter minidump_file_writer; | 494 MinidumpFileWriter minidump_file_writer; |
495 MinidumpModuleListWriter module_list_writer; | 495 MinidumpModuleListWriter module_list_writer; |
496 | 496 |
497 const char kModuleName1[] = "main"; | 497 const char kModuleName0[] = "main"; |
498 const uint64_t kModuleBase1 = 0x100101000; | 498 const uint64_t kModuleBase0 = 0x100101000; |
499 const uint32_t kModuleSize1 = 0xf000; | 499 const uint32_t kModuleSize0 = 0xf000; |
500 const char kPDBName1[] = "main"; | 500 const char kPDBName0[] = "main"; |
501 const uint8_t kPDBUUIDBytes1[16] = | 501 const uint8_t kPDBUUIDBytes0[16] = |
502 {0xaa, 0xbb, 0xcc, 0xdd, 0xee, 0xff, 0x00, 0x11, | 502 {0xaa, 0xbb, 0xcc, 0xdd, 0xee, 0xff, 0x00, 0x11, |
503 0x22, 0x33, 0x44, 0x55, 0x66, 0x77, 0x88, 0x99}; | 503 0x22, 0x33, 0x44, 0x55, 0x66, 0x77, 0x88, 0x99}; |
504 UUID pdb_uuid_1; | 504 UUID pdb_uuid_0; |
505 pdb_uuid_1.InitializeFromBytes(kPDBUUIDBytes1); | 505 pdb_uuid_0.InitializeFromBytes(kPDBUUIDBytes0); |
506 const uint32_t kPDBAge1 = 0; | 506 const uint32_t kPDBAge0 = 0; |
507 | 507 |
508 const char kModuleName2[] = "ld.so"; | 508 const char kModuleName1[] = "ld.so"; |
509 const uint64_t kModuleBase2 = 0x200202000; | 509 const uint64_t kModuleBase1 = 0x200202000; |
510 const uint32_t kModuleSize2 = 0x1e000; | 510 const uint32_t kModuleSize1 = 0x1e000; |
511 | 511 |
512 const char kModuleName3[] = "libc.so"; | 512 const char kModuleName2[] = "libc.so"; |
513 const uint64_t kModuleBase3 = 0x300303000; | 513 const uint64_t kModuleBase2 = 0x300303000; |
514 const uint32_t kModuleSize3 = 0x2d000; | 514 const uint32_t kModuleSize2 = 0x2d000; |
515 const char kPDBName3[] = "libc.so"; | 515 const char kPDBName2[] = "libc.so"; |
516 const time_t kPDBTimestamp3 = 0x386d4380; | 516 const time_t kPDBTimestamp2 = 0x386d4380; |
517 const uint32_t kPDBAge3 = 2; | 517 const uint32_t kPDBAge2 = 2; |
| 518 |
| 519 MinidumpModuleWriter module_writer_0; |
| 520 module_writer_0.SetName(kModuleName0); |
| 521 module_writer_0.SetImageBaseAddress(kModuleBase0); |
| 522 module_writer_0.SetImageSize(kModuleSize0); |
| 523 |
| 524 MinidumpModuleCodeViewRecordPDB70Writer codeview_pdb70_writer_0; |
| 525 codeview_pdb70_writer_0.SetPDBName(kPDBName0); |
| 526 codeview_pdb70_writer_0.SetUUIDAndAge(pdb_uuid_0, kPDBAge0); |
| 527 module_writer_0.SetCodeViewRecord(&codeview_pdb70_writer_0); |
| 528 |
| 529 module_list_writer.AddModule(&module_writer_0); |
518 | 530 |
519 MinidumpModuleWriter module_writer_1; | 531 MinidumpModuleWriter module_writer_1; |
520 module_writer_1.SetName(kModuleName1); | 532 module_writer_1.SetName(kModuleName1); |
521 module_writer_1.SetImageBaseAddress(kModuleBase1); | 533 module_writer_1.SetImageBaseAddress(kModuleBase1); |
522 module_writer_1.SetImageSize(kModuleSize1); | 534 module_writer_1.SetImageSize(kModuleSize1); |
523 | 535 |
524 MinidumpModuleCodeViewRecordPDB70Writer codeview_pdb70_writer_1; | |
525 codeview_pdb70_writer_1.SetPDBName(kPDBName1); | |
526 codeview_pdb70_writer_1.SetUUIDAndAge(pdb_uuid_1, kPDBAge1); | |
527 module_writer_1.SetCodeViewRecord(&codeview_pdb70_writer_1); | |
528 | |
529 module_list_writer.AddModule(&module_writer_1); | 536 module_list_writer.AddModule(&module_writer_1); |
530 | 537 |
531 MinidumpModuleWriter module_writer_2; | 538 MinidumpModuleWriter module_writer_2; |
532 module_writer_2.SetName(kModuleName2); | 539 module_writer_2.SetName(kModuleName2); |
533 module_writer_2.SetImageBaseAddress(kModuleBase2); | 540 module_writer_2.SetImageBaseAddress(kModuleBase2); |
534 module_writer_2.SetImageSize(kModuleSize2); | 541 module_writer_2.SetImageSize(kModuleSize2); |
535 | 542 |
| 543 MinidumpModuleCodeViewRecordPDB20Writer codeview_pdb70_writer_2; |
| 544 codeview_pdb70_writer_2.SetPDBName(kPDBName2); |
| 545 codeview_pdb70_writer_2.SetTimestampAndAge(kPDBTimestamp2, kPDBAge2); |
| 546 module_writer_2.SetCodeViewRecord(&codeview_pdb70_writer_2); |
| 547 |
536 module_list_writer.AddModule(&module_writer_2); | 548 module_list_writer.AddModule(&module_writer_2); |
537 | 549 |
538 MinidumpModuleWriter module_writer_3; | |
539 module_writer_3.SetName(kModuleName3); | |
540 module_writer_3.SetImageBaseAddress(kModuleBase3); | |
541 module_writer_3.SetImageSize(kModuleSize3); | |
542 | |
543 MinidumpModuleCodeViewRecordPDB20Writer codeview_pdb70_writer_3; | |
544 codeview_pdb70_writer_3.SetPDBName(kPDBName3); | |
545 codeview_pdb70_writer_3.SetTimestampAndAge(kPDBTimestamp3, kPDBAge3); | |
546 module_writer_3.SetCodeViewRecord(&codeview_pdb70_writer_3); | |
547 | |
548 module_list_writer.AddModule(&module_writer_3); | |
549 | |
550 minidump_file_writer.AddStream(&module_list_writer); | 550 minidump_file_writer.AddStream(&module_list_writer); |
551 | 551 |
552 StringFileWriter file_writer; | 552 StringFileWriter file_writer; |
553 ASSERT_TRUE(minidump_file_writer.WriteEverything(&file_writer)); | 553 ASSERT_TRUE(minidump_file_writer.WriteEverything(&file_writer)); |
554 | 554 |
555 ASSERT_GT(file_writer.string().size(), | 555 ASSERT_GT(file_writer.string().size(), |
556 sizeof(MINIDUMP_HEADER) + sizeof(MINIDUMP_DIRECTORY) + | 556 sizeof(MINIDUMP_HEADER) + sizeof(MINIDUMP_DIRECTORY) + |
557 sizeof(MINIDUMP_MODULE_LIST) + 1 * sizeof(MINIDUMP_MODULE)); | 557 sizeof(MINIDUMP_MODULE_LIST) + 1 * sizeof(MINIDUMP_MODULE)); |
558 | 558 |
559 const MINIDUMP_MODULE_LIST* module_list; | 559 const MINIDUMP_MODULE_LIST* module_list; |
560 ASSERT_NO_FATAL_FAILURE( | 560 ASSERT_NO_FATAL_FAILURE( |
561 GetModuleListStream(file_writer.string(), &module_list)); | 561 GetModuleListStream(file_writer.string(), &module_list)); |
562 | 562 |
563 EXPECT_EQ(3u, module_list->NumberOfModules); | 563 EXPECT_EQ(3u, module_list->NumberOfModules); |
564 | 564 |
565 MINIDUMP_MODULE expected = {}; | 565 MINIDUMP_MODULE expected = {}; |
566 | 566 |
567 { | 567 { |
568 SCOPED_TRACE("module 0"); | 568 SCOPED_TRACE("module 0"); |
569 | 569 |
570 expected.BaseOfImage = kModuleBase1; | 570 expected.BaseOfImage = kModuleBase0; |
571 expected.SizeOfImage = kModuleSize1; | 571 expected.SizeOfImage = kModuleSize0; |
572 | 572 |
573 ASSERT_NO_FATAL_FAILURE(ExpectModule(&expected, | 573 ASSERT_NO_FATAL_FAILURE(ExpectModule(&expected, |
574 &module_list->Modules[0], | 574 &module_list->Modules[0], |
575 file_writer.string(), | 575 file_writer.string(), |
576 kModuleName1, | 576 kModuleName0, |
577 kPDBName1, | 577 kPDBName0, |
578 &pdb_uuid_1, | 578 &pdb_uuid_0, |
579 0, | 579 0, |
580 kPDBAge1, | 580 kPDBAge0, |
581 NULL, | 581 NULL, |
582 0, | 582 0, |
583 false)); | 583 false)); |
584 } | 584 } |
585 | 585 |
586 { | 586 { |
587 SCOPED_TRACE("module 1"); | 587 SCOPED_TRACE("module 1"); |
588 | 588 |
589 expected.BaseOfImage = kModuleBase2; | 589 expected.BaseOfImage = kModuleBase1; |
590 expected.SizeOfImage = kModuleSize2; | 590 expected.SizeOfImage = kModuleSize1; |
591 | 591 |
592 ASSERT_NO_FATAL_FAILURE(ExpectModule(&expected, | 592 ASSERT_NO_FATAL_FAILURE(ExpectModule(&expected, |
593 &module_list->Modules[1], | 593 &module_list->Modules[1], |
594 file_writer.string(), | 594 file_writer.string(), |
595 kModuleName2, | 595 kModuleName1, |
596 NULL, | 596 NULL, |
597 NULL, | 597 NULL, |
598 0, | 598 0, |
599 0, | 599 0, |
600 NULL, | 600 NULL, |
601 0, | 601 0, |
602 false)); | 602 false)); |
603 } | 603 } |
604 | 604 |
605 { | 605 { |
606 SCOPED_TRACE("module 2"); | 606 SCOPED_TRACE("module 2"); |
607 | 607 |
608 expected.BaseOfImage = kModuleBase3; | 608 expected.BaseOfImage = kModuleBase2; |
609 expected.SizeOfImage = kModuleSize3; | 609 expected.SizeOfImage = kModuleSize2; |
610 | 610 |
611 ASSERT_NO_FATAL_FAILURE(ExpectModule(&expected, | 611 ASSERT_NO_FATAL_FAILURE(ExpectModule(&expected, |
612 &module_list->Modules[2], | 612 &module_list->Modules[2], |
613 file_writer.string(), | 613 file_writer.string(), |
614 kModuleName3, | 614 kModuleName2, |
615 kPDBName3, | 615 kPDBName2, |
616 NULL, | 616 NULL, |
617 kPDBTimestamp3, | 617 kPDBTimestamp2, |
618 kPDBAge3, | 618 kPDBAge2, |
619 NULL, | 619 NULL, |
620 0, | 620 0, |
621 false)); | 621 false)); |
622 } | 622 } |
623 } | 623 } |
624 | 624 |
625 TEST(MinidumpSystemInfoWriterDeathTest, NoModuleName) { | 625 TEST(MinidumpSystemInfoWriterDeathTest, NoModuleName) { |
626 MinidumpFileWriter minidump_file_writer; | 626 MinidumpFileWriter minidump_file_writer; |
627 MinidumpModuleListWriter module_list_writer; | 627 MinidumpModuleListWriter module_list_writer; |
628 MinidumpModuleWriter module_writer; | 628 MinidumpModuleWriter module_writer; |
629 module_list_writer.AddModule(&module_writer); | 629 module_list_writer.AddModule(&module_writer); |
630 minidump_file_writer.AddStream(&module_list_writer); | 630 minidump_file_writer.AddStream(&module_list_writer); |
631 | 631 |
632 StringFileWriter file_writer; | 632 StringFileWriter file_writer; |
633 ASSERT_DEATH(minidump_file_writer.WriteEverything(&file_writer), "name_"); | 633 ASSERT_DEATH(minidump_file_writer.WriteEverything(&file_writer), "name_"); |
634 } | 634 } |
635 | 635 |
636 } // namespace | 636 } // namespace |
637 } // namespace test | 637 } // namespace test |
638 } // namespace crashpad | 638 } // namespace crashpad |
OLD | NEW |