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 12 matching lines...) Expand all Loading... |
23 #include "base/format_macros.h" | 23 #include "base/format_macros.h" |
24 #include "base/strings/stringprintf.h" | 24 #include "base/strings/stringprintf.h" |
25 #include "base/strings/utf_string_conversions.h" | 25 #include "base/strings/utf_string_conversions.h" |
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 "util/file/string_file_writer.h" | 33 #include "util/file/string_file.h" |
34 #include "util/misc/uuid.h" | 34 #include "util/misc/uuid.h" |
35 #include "util/stdlib/pointer_container.h" | 35 #include "util/stdlib/pointer_container.h" |
36 | 36 |
37 namespace crashpad { | 37 namespace crashpad { |
38 namespace test { | 38 namespace test { |
39 namespace { | 39 namespace { |
40 | 40 |
41 void GetModuleListStream(const std::string& file_contents, | 41 void GetModuleListStream(const std::string& file_contents, |
42 const MINIDUMP_MODULE_LIST** module_list) { | 42 const MINIDUMP_MODULE_LIST** module_list) { |
43 const size_t kDirectoryOffset = sizeof(MINIDUMP_HEADER); | 43 const size_t kDirectoryOffset = sizeof(MINIDUMP_HEADER); |
(...skipping 17 matching lines...) Expand all Loading... |
61 file_contents, directory[0].Location); | 61 file_contents, directory[0].Location); |
62 ASSERT_TRUE(module_list); | 62 ASSERT_TRUE(module_list); |
63 } | 63 } |
64 | 64 |
65 TEST(MinidumpModuleWriter, EmptyModuleList) { | 65 TEST(MinidumpModuleWriter, EmptyModuleList) { |
66 MinidumpFileWriter minidump_file_writer; | 66 MinidumpFileWriter minidump_file_writer; |
67 auto module_list_writer = make_scoped_ptr(new MinidumpModuleListWriter()); | 67 auto module_list_writer = make_scoped_ptr(new MinidumpModuleListWriter()); |
68 | 68 |
69 minidump_file_writer.AddStream(module_list_writer.Pass()); | 69 minidump_file_writer.AddStream(module_list_writer.Pass()); |
70 | 70 |
71 StringFileWriter file_writer; | 71 StringFile string_file; |
72 ASSERT_TRUE(minidump_file_writer.WriteEverything(&file_writer)); | 72 ASSERT_TRUE(minidump_file_writer.WriteEverything(&string_file)); |
73 | 73 |
74 ASSERT_EQ(sizeof(MINIDUMP_HEADER) + sizeof(MINIDUMP_DIRECTORY) + | 74 ASSERT_EQ(sizeof(MINIDUMP_HEADER) + sizeof(MINIDUMP_DIRECTORY) + |
75 sizeof(MINIDUMP_MODULE_LIST), | 75 sizeof(MINIDUMP_MODULE_LIST), |
76 file_writer.string().size()); | 76 string_file.string().size()); |
77 | 77 |
78 const MINIDUMP_MODULE_LIST* module_list = nullptr; | 78 const MINIDUMP_MODULE_LIST* module_list = nullptr; |
79 ASSERT_NO_FATAL_FAILURE( | 79 ASSERT_NO_FATAL_FAILURE( |
80 GetModuleListStream(file_writer.string(), &module_list)); | 80 GetModuleListStream(string_file.string(), &module_list)); |
81 | 81 |
82 EXPECT_EQ(0u, module_list->NumberOfModules); | 82 EXPECT_EQ(0u, module_list->NumberOfModules); |
83 } | 83 } |
84 | 84 |
85 // If |expected_pdb_name| is not nullptr, |codeview_record| is used to locate a | 85 // If |expected_pdb_name| is not nullptr, |codeview_record| is used to locate a |
86 // CodeView record in |file_contents|, and its fields are compared against the | 86 // CodeView record in |file_contents|, and its fields are compared against the |
87 // the |expected_pdb_*| values. If |expected_pdb_uuid| is supplied, the CodeView | 87 // the |expected_pdb_*| values. If |expected_pdb_uuid| is supplied, the CodeView |
88 // record must be a PDB 7.0 link, otherwise, it must be a PDB 2.0 link. If | 88 // record must be a PDB 7.0 link, otherwise, it must be a PDB 2.0 link. If |
89 // |expected_pdb_name| is nullptr, |codeview_record| must not point to anything. | 89 // |expected_pdb_name| is nullptr, |codeview_record| must not point to anything. |
90 void ExpectCodeViewRecord(const MINIDUMP_LOCATION_DESCRIPTOR* codeview_record, | 90 void ExpectCodeViewRecord(const MINIDUMP_LOCATION_DESCRIPTOR* codeview_record, |
(...skipping 184 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
275 auto module_list_writer = make_scoped_ptr(new MinidumpModuleListWriter()); | 275 auto module_list_writer = make_scoped_ptr(new MinidumpModuleListWriter()); |
276 | 276 |
277 const char kModuleName[] = "test_executable"; | 277 const char kModuleName[] = "test_executable"; |
278 | 278 |
279 auto module_writer = make_scoped_ptr(new MinidumpModuleWriter()); | 279 auto module_writer = make_scoped_ptr(new MinidumpModuleWriter()); |
280 module_writer->SetName(kModuleName); | 280 module_writer->SetName(kModuleName); |
281 | 281 |
282 module_list_writer->AddModule(module_writer.Pass()); | 282 module_list_writer->AddModule(module_writer.Pass()); |
283 minidump_file_writer.AddStream(module_list_writer.Pass()); | 283 minidump_file_writer.AddStream(module_list_writer.Pass()); |
284 | 284 |
285 StringFileWriter file_writer; | 285 StringFile string_file; |
286 ASSERT_TRUE(minidump_file_writer.WriteEverything(&file_writer)); | 286 ASSERT_TRUE(minidump_file_writer.WriteEverything(&string_file)); |
287 | 287 |
288 ASSERT_GT(file_writer.string().size(), | 288 ASSERT_GT(string_file.string().size(), |
289 sizeof(MINIDUMP_HEADER) + sizeof(MINIDUMP_DIRECTORY) + | 289 sizeof(MINIDUMP_HEADER) + sizeof(MINIDUMP_DIRECTORY) + |
290 sizeof(MINIDUMP_MODULE_LIST) + 1 * sizeof(MINIDUMP_MODULE)); | 290 sizeof(MINIDUMP_MODULE_LIST) + 1 * sizeof(MINIDUMP_MODULE)); |
291 | 291 |
292 const MINIDUMP_MODULE_LIST* module_list = nullptr; | 292 const MINIDUMP_MODULE_LIST* module_list = nullptr; |
293 ASSERT_NO_FATAL_FAILURE( | 293 ASSERT_NO_FATAL_FAILURE( |
294 GetModuleListStream(file_writer.string(), &module_list)); | 294 GetModuleListStream(string_file.string(), &module_list)); |
295 | 295 |
296 EXPECT_EQ(1u, module_list->NumberOfModules); | 296 EXPECT_EQ(1u, module_list->NumberOfModules); |
297 | 297 |
298 MINIDUMP_MODULE expected = {}; | 298 MINIDUMP_MODULE expected = {}; |
299 ASSERT_NO_FATAL_FAILURE(ExpectModule(&expected, | 299 ASSERT_NO_FATAL_FAILURE(ExpectModule(&expected, |
300 &module_list->Modules[0], | 300 &module_list->Modules[0], |
301 file_writer.string(), | 301 string_file.string(), |
302 kModuleName, | 302 kModuleName, |
303 nullptr, | 303 nullptr, |
304 nullptr, | 304 nullptr, |
305 0, | 305 0, |
306 0, | 306 0, |
307 nullptr, | 307 nullptr, |
308 0, | 308 0, |
309 false)); | 309 false)); |
310 } | 310 } |
311 | 311 |
(...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
366 | 366 |
367 auto misc_debug_writer = | 367 auto misc_debug_writer = |
368 make_scoped_ptr(new MinidumpModuleMiscDebugRecordWriter()); | 368 make_scoped_ptr(new MinidumpModuleMiscDebugRecordWriter()); |
369 misc_debug_writer->SetDataType(kDebugType); | 369 misc_debug_writer->SetDataType(kDebugType); |
370 misc_debug_writer->SetData(kDebugName, kDebugUTF16); | 370 misc_debug_writer->SetData(kDebugName, kDebugUTF16); |
371 module_writer->SetMiscDebugRecord(misc_debug_writer.Pass()); | 371 module_writer->SetMiscDebugRecord(misc_debug_writer.Pass()); |
372 | 372 |
373 module_list_writer->AddModule(module_writer.Pass()); | 373 module_list_writer->AddModule(module_writer.Pass()); |
374 minidump_file_writer.AddStream(module_list_writer.Pass()); | 374 minidump_file_writer.AddStream(module_list_writer.Pass()); |
375 | 375 |
376 StringFileWriter file_writer; | 376 StringFile string_file; |
377 ASSERT_TRUE(minidump_file_writer.WriteEverything(&file_writer)); | 377 ASSERT_TRUE(minidump_file_writer.WriteEverything(&string_file)); |
378 | 378 |
379 ASSERT_GT(file_writer.string().size(), | 379 ASSERT_GT(string_file.string().size(), |
380 sizeof(MINIDUMP_HEADER) + sizeof(MINIDUMP_DIRECTORY) + | 380 sizeof(MINIDUMP_HEADER) + sizeof(MINIDUMP_DIRECTORY) + |
381 sizeof(MINIDUMP_MODULE_LIST) + 1 * sizeof(MINIDUMP_MODULE)); | 381 sizeof(MINIDUMP_MODULE_LIST) + 1 * sizeof(MINIDUMP_MODULE)); |
382 | 382 |
383 const MINIDUMP_MODULE_LIST* module_list = nullptr; | 383 const MINIDUMP_MODULE_LIST* module_list = nullptr; |
384 ASSERT_NO_FATAL_FAILURE( | 384 ASSERT_NO_FATAL_FAILURE( |
385 GetModuleListStream(file_writer.string(), &module_list)); | 385 GetModuleListStream(string_file.string(), &module_list)); |
386 | 386 |
387 EXPECT_EQ(1u, module_list->NumberOfModules); | 387 EXPECT_EQ(1u, module_list->NumberOfModules); |
388 | 388 |
389 MINIDUMP_MODULE expected = {}; | 389 MINIDUMP_MODULE expected = {}; |
390 expected.BaseOfImage = kModuleBase; | 390 expected.BaseOfImage = kModuleBase; |
391 expected.SizeOfImage = kModuleSize; | 391 expected.SizeOfImage = kModuleSize; |
392 expected.CheckSum = kChecksum; | 392 expected.CheckSum = kChecksum; |
393 expected.TimeDateStamp = kTimestamp; | 393 expected.TimeDateStamp = kTimestamp; |
394 expected.VersionInfo.dwFileVersionMS = kFileVersionMS; | 394 expected.VersionInfo.dwFileVersionMS = kFileVersionMS; |
395 expected.VersionInfo.dwFileVersionLS = kFileVersionLS; | 395 expected.VersionInfo.dwFileVersionLS = kFileVersionLS; |
396 expected.VersionInfo.dwProductVersionMS = kProductVersionMS; | 396 expected.VersionInfo.dwProductVersionMS = kProductVersionMS; |
397 expected.VersionInfo.dwProductVersionLS = kProductVersionLS; | 397 expected.VersionInfo.dwProductVersionLS = kProductVersionLS; |
398 expected.VersionInfo.dwFileFlagsMask = kFileFlagsMask; | 398 expected.VersionInfo.dwFileFlagsMask = kFileFlagsMask; |
399 expected.VersionInfo.dwFileFlags = kFileFlags; | 399 expected.VersionInfo.dwFileFlags = kFileFlags; |
400 expected.VersionInfo.dwFileOS = kFileOS; | 400 expected.VersionInfo.dwFileOS = kFileOS; |
401 expected.VersionInfo.dwFileType = kFileType; | 401 expected.VersionInfo.dwFileType = kFileType; |
402 expected.VersionInfo.dwFileSubtype = kFileSubtype; | 402 expected.VersionInfo.dwFileSubtype = kFileSubtype; |
403 | 403 |
404 ASSERT_NO_FATAL_FAILURE(ExpectModule(&expected, | 404 ASSERT_NO_FATAL_FAILURE(ExpectModule(&expected, |
405 &module_list->Modules[0], | 405 &module_list->Modules[0], |
406 file_writer.string(), | 406 string_file.string(), |
407 kModuleName, | 407 kModuleName, |
408 kPDBName, | 408 kPDBName, |
409 &pdb_uuid, | 409 &pdb_uuid, |
410 0, | 410 0, |
411 kPDBAge, | 411 kPDBAge, |
412 kDebugName, | 412 kDebugName, |
413 kDebugType, | 413 kDebugType, |
414 kDebugUTF16)); | 414 kDebugUTF16)); |
415 } | 415 } |
416 | 416 |
(...skipping 24 matching lines...) Expand all Loading... |
441 | 441 |
442 auto misc_debug_writer = | 442 auto misc_debug_writer = |
443 make_scoped_ptr(new MinidumpModuleMiscDebugRecordWriter()); | 443 make_scoped_ptr(new MinidumpModuleMiscDebugRecordWriter()); |
444 misc_debug_writer->SetDataType(kDebugType); | 444 misc_debug_writer->SetDataType(kDebugType); |
445 misc_debug_writer->SetData(kDebugName, kDebugUTF16); | 445 misc_debug_writer->SetData(kDebugName, kDebugUTF16); |
446 module_writer->SetMiscDebugRecord(misc_debug_writer.Pass()); | 446 module_writer->SetMiscDebugRecord(misc_debug_writer.Pass()); |
447 | 447 |
448 module_list_writer->AddModule(module_writer.Pass()); | 448 module_list_writer->AddModule(module_writer.Pass()); |
449 minidump_file_writer.AddStream(module_list_writer.Pass()); | 449 minidump_file_writer.AddStream(module_list_writer.Pass()); |
450 | 450 |
451 StringFileWriter file_writer; | 451 StringFile string_file; |
452 ASSERT_TRUE(minidump_file_writer.WriteEverything(&file_writer)); | 452 ASSERT_TRUE(minidump_file_writer.WriteEverything(&string_file)); |
453 | 453 |
454 ASSERT_GT(file_writer.string().size(), | 454 ASSERT_GT(string_file.string().size(), |
455 sizeof(MINIDUMP_HEADER) + sizeof(MINIDUMP_DIRECTORY) + | 455 sizeof(MINIDUMP_HEADER) + sizeof(MINIDUMP_DIRECTORY) + |
456 sizeof(MINIDUMP_MODULE_LIST) + 1 * sizeof(MINIDUMP_MODULE)); | 456 sizeof(MINIDUMP_MODULE_LIST) + 1 * sizeof(MINIDUMP_MODULE)); |
457 | 457 |
458 const MINIDUMP_MODULE_LIST* module_list = nullptr; | 458 const MINIDUMP_MODULE_LIST* module_list = nullptr; |
459 ASSERT_NO_FATAL_FAILURE( | 459 ASSERT_NO_FATAL_FAILURE( |
460 GetModuleListStream(file_writer.string(), &module_list)); | 460 GetModuleListStream(string_file.string(), &module_list)); |
461 | 461 |
462 EXPECT_EQ(1u, module_list->NumberOfModules); | 462 EXPECT_EQ(1u, module_list->NumberOfModules); |
463 | 463 |
464 MINIDUMP_MODULE expected = {}; | 464 MINIDUMP_MODULE expected = {}; |
465 | 465 |
466 ASSERT_NO_FATAL_FAILURE(ExpectModule(&expected, | 466 ASSERT_NO_FATAL_FAILURE(ExpectModule(&expected, |
467 &module_list->Modules[0], | 467 &module_list->Modules[0], |
468 file_writer.string(), | 468 string_file.string(), |
469 kModuleName, | 469 kModuleName, |
470 kPDBName, | 470 kPDBName, |
471 nullptr, | 471 nullptr, |
472 kPDBTimestamp, | 472 kPDBTimestamp, |
473 kPDBAge, | 473 kPDBAge, |
474 kDebugName, | 474 kDebugName, |
475 kDebugType, | 475 kDebugType, |
476 kDebugUTF16)); | 476 kDebugUTF16)); |
477 } | 477 } |
478 | 478 |
(...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
533 auto codeview_pdb70_writer_2 = | 533 auto codeview_pdb70_writer_2 = |
534 make_scoped_ptr(new MinidumpModuleCodeViewRecordPDB20Writer()); | 534 make_scoped_ptr(new MinidumpModuleCodeViewRecordPDB20Writer()); |
535 codeview_pdb70_writer_2->SetPDBName(kPDBName2); | 535 codeview_pdb70_writer_2->SetPDBName(kPDBName2); |
536 codeview_pdb70_writer_2->SetTimestampAndAge(kPDBTimestamp2, kPDBAge2); | 536 codeview_pdb70_writer_2->SetTimestampAndAge(kPDBTimestamp2, kPDBAge2); |
537 module_writer_2->SetCodeViewRecord(codeview_pdb70_writer_2.Pass()); | 537 module_writer_2->SetCodeViewRecord(codeview_pdb70_writer_2.Pass()); |
538 | 538 |
539 module_list_writer->AddModule(module_writer_2.Pass()); | 539 module_list_writer->AddModule(module_writer_2.Pass()); |
540 | 540 |
541 minidump_file_writer.AddStream(module_list_writer.Pass()); | 541 minidump_file_writer.AddStream(module_list_writer.Pass()); |
542 | 542 |
543 StringFileWriter file_writer; | 543 StringFile string_file; |
544 ASSERT_TRUE(minidump_file_writer.WriteEverything(&file_writer)); | 544 ASSERT_TRUE(minidump_file_writer.WriteEverything(&string_file)); |
545 | 545 |
546 ASSERT_GT(file_writer.string().size(), | 546 ASSERT_GT(string_file.string().size(), |
547 sizeof(MINIDUMP_HEADER) + sizeof(MINIDUMP_DIRECTORY) + | 547 sizeof(MINIDUMP_HEADER) + sizeof(MINIDUMP_DIRECTORY) + |
548 sizeof(MINIDUMP_MODULE_LIST) + 1 * sizeof(MINIDUMP_MODULE)); | 548 sizeof(MINIDUMP_MODULE_LIST) + 1 * sizeof(MINIDUMP_MODULE)); |
549 | 549 |
550 const MINIDUMP_MODULE_LIST* module_list = nullptr; | 550 const MINIDUMP_MODULE_LIST* module_list = nullptr; |
551 ASSERT_NO_FATAL_FAILURE( | 551 ASSERT_NO_FATAL_FAILURE( |
552 GetModuleListStream(file_writer.string(), &module_list)); | 552 GetModuleListStream(string_file.string(), &module_list)); |
553 | 553 |
554 EXPECT_EQ(3u, module_list->NumberOfModules); | 554 EXPECT_EQ(3u, module_list->NumberOfModules); |
555 | 555 |
556 MINIDUMP_MODULE expected = {}; | 556 MINIDUMP_MODULE expected = {}; |
557 | 557 |
558 { | 558 { |
559 SCOPED_TRACE("module 0"); | 559 SCOPED_TRACE("module 0"); |
560 | 560 |
561 expected.BaseOfImage = kModuleBase0; | 561 expected.BaseOfImage = kModuleBase0; |
562 expected.SizeOfImage = kModuleSize0; | 562 expected.SizeOfImage = kModuleSize0; |
563 | 563 |
564 ASSERT_NO_FATAL_FAILURE(ExpectModule(&expected, | 564 ASSERT_NO_FATAL_FAILURE(ExpectModule(&expected, |
565 &module_list->Modules[0], | 565 &module_list->Modules[0], |
566 file_writer.string(), | 566 string_file.string(), |
567 kModuleName0, | 567 kModuleName0, |
568 kPDBName0, | 568 kPDBName0, |
569 &pdb_uuid_0, | 569 &pdb_uuid_0, |
570 0, | 570 0, |
571 kPDBAge0, | 571 kPDBAge0, |
572 nullptr, | 572 nullptr, |
573 0, | 573 0, |
574 false)); | 574 false)); |
575 } | 575 } |
576 | 576 |
577 { | 577 { |
578 SCOPED_TRACE("module 1"); | 578 SCOPED_TRACE("module 1"); |
579 | 579 |
580 expected.BaseOfImage = kModuleBase1; | 580 expected.BaseOfImage = kModuleBase1; |
581 expected.SizeOfImage = kModuleSize1; | 581 expected.SizeOfImage = kModuleSize1; |
582 | 582 |
583 ASSERT_NO_FATAL_FAILURE(ExpectModule(&expected, | 583 ASSERT_NO_FATAL_FAILURE(ExpectModule(&expected, |
584 &module_list->Modules[1], | 584 &module_list->Modules[1], |
585 file_writer.string(), | 585 string_file.string(), |
586 kModuleName1, | 586 kModuleName1, |
587 nullptr, | 587 nullptr, |
588 nullptr, | 588 nullptr, |
589 0, | 589 0, |
590 0, | 590 0, |
591 nullptr, | 591 nullptr, |
592 0, | 592 0, |
593 false)); | 593 false)); |
594 } | 594 } |
595 | 595 |
596 { | 596 { |
597 SCOPED_TRACE("module 2"); | 597 SCOPED_TRACE("module 2"); |
598 | 598 |
599 expected.BaseOfImage = kModuleBase2; | 599 expected.BaseOfImage = kModuleBase2; |
600 expected.SizeOfImage = kModuleSize2; | 600 expected.SizeOfImage = kModuleSize2; |
601 | 601 |
602 ASSERT_NO_FATAL_FAILURE(ExpectModule(&expected, | 602 ASSERT_NO_FATAL_FAILURE(ExpectModule(&expected, |
603 &module_list->Modules[2], | 603 &module_list->Modules[2], |
604 file_writer.string(), | 604 string_file.string(), |
605 kModuleName2, | 605 kModuleName2, |
606 kPDBName2, | 606 kPDBName2, |
607 nullptr, | 607 nullptr, |
608 kPDBTimestamp2, | 608 kPDBTimestamp2, |
609 kPDBAge2, | 609 kPDBAge2, |
610 nullptr, | 610 nullptr, |
611 0, | 611 0, |
612 false)); | 612 false)); |
613 } | 613 } |
614 } | 614 } |
(...skipping 98 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
713 uuids[index]); | 713 uuids[index]); |
714 module_snapshots.push_back(module_snapshot); | 714 module_snapshots.push_back(module_snapshot); |
715 } | 715 } |
716 | 716 |
717 auto module_list_writer = make_scoped_ptr(new MinidumpModuleListWriter()); | 717 auto module_list_writer = make_scoped_ptr(new MinidumpModuleListWriter()); |
718 module_list_writer->InitializeFromSnapshot(module_snapshots); | 718 module_list_writer->InitializeFromSnapshot(module_snapshots); |
719 | 719 |
720 MinidumpFileWriter minidump_file_writer; | 720 MinidumpFileWriter minidump_file_writer; |
721 minidump_file_writer.AddStream(module_list_writer.Pass()); | 721 minidump_file_writer.AddStream(module_list_writer.Pass()); |
722 | 722 |
723 StringFileWriter file_writer; | 723 StringFile string_file; |
724 ASSERT_TRUE(minidump_file_writer.WriteEverything(&file_writer)); | 724 ASSERT_TRUE(minidump_file_writer.WriteEverything(&string_file)); |
725 | 725 |
726 const MINIDUMP_MODULE_LIST* module_list = nullptr; | 726 const MINIDUMP_MODULE_LIST* module_list = nullptr; |
727 ASSERT_NO_FATAL_FAILURE( | 727 ASSERT_NO_FATAL_FAILURE( |
728 GetModuleListStream(file_writer.string(), &module_list)); | 728 GetModuleListStream(string_file.string(), &module_list)); |
729 | 729 |
730 ASSERT_EQ(3u, module_list->NumberOfModules); | 730 ASSERT_EQ(3u, module_list->NumberOfModules); |
731 | 731 |
732 for (size_t index = 0; index < module_list->NumberOfModules; ++index) { | 732 for (size_t index = 0; index < module_list->NumberOfModules; ++index) { |
733 SCOPED_TRACE(base::StringPrintf("index %" PRIuS, index)); | 733 SCOPED_TRACE(base::StringPrintf("index %" PRIuS, index)); |
734 ASSERT_NO_FATAL_FAILURE(ExpectModule(&expect_modules[index], | 734 ASSERT_NO_FATAL_FAILURE(ExpectModule(&expect_modules[index], |
735 &module_list->Modules[index], | 735 &module_list->Modules[index], |
736 file_writer.string(), | 736 string_file.string(), |
737 module_paths[index], | 737 module_paths[index], |
738 module_names[index], | 738 module_names[index], |
739 &uuids[index], | 739 &uuids[index], |
740 0, | 740 0, |
741 0, | 741 0, |
742 nullptr, | 742 nullptr, |
743 0, | 743 0, |
744 false)); | 744 false)); |
745 } | 745 } |
746 } | 746 } |
747 | 747 |
748 TEST(MinidumpModuleWriterDeathTest, NoModuleName) { | 748 TEST(MinidumpModuleWriterDeathTest, NoModuleName) { |
749 MinidumpFileWriter minidump_file_writer; | 749 MinidumpFileWriter minidump_file_writer; |
750 auto module_list_writer = make_scoped_ptr(new MinidumpModuleListWriter()); | 750 auto module_list_writer = make_scoped_ptr(new MinidumpModuleListWriter()); |
751 auto module_writer = make_scoped_ptr(new MinidumpModuleWriter()); | 751 auto module_writer = make_scoped_ptr(new MinidumpModuleWriter()); |
752 module_list_writer->AddModule(module_writer.Pass()); | 752 module_list_writer->AddModule(module_writer.Pass()); |
753 minidump_file_writer.AddStream(module_list_writer.Pass()); | 753 minidump_file_writer.AddStream(module_list_writer.Pass()); |
754 | 754 |
755 StringFileWriter file_writer; | 755 StringFile string_file; |
756 ASSERT_DEATH(minidump_file_writer.WriteEverything(&file_writer), "name_"); | 756 ASSERT_DEATH(minidump_file_writer.WriteEverything(&string_file), "name_"); |
757 } | 757 } |
758 | 758 |
759 } // namespace | 759 } // namespace |
760 } // namespace test | 760 } // namespace test |
761 } // namespace crashpad | 761 } // namespace crashpad |
OLD | NEW |