Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(230)

Side by Side Diff: minidump/minidump_module_writer_test.cc

Issue 664283002: Refactor minidump test utilities for MinidumpWritable, … (Closed) Base URL: https://chromium.googlesource.com/crashpad/crashpad@master
Patch Set: Created 6 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
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_writer.h" 15 #include "minidump/minidump_module_writer.h"
16 16
17 #include <dbghelp.h> 17 #include <dbghelp.h>
18 #include <stdint.h> 18 #include <stdint.h>
19 #include <string.h> 19 #include <string.h>
20 20
21 #include "base/strings/utf_string_conversions.h" 21 #include "base/strings/utf_string_conversions.h"
22 #include "gtest/gtest.h" 22 #include "gtest/gtest.h"
23 #include "minidump/minidump_extensions.h" 23 #include "minidump/minidump_extensions.h"
24 #include "minidump/minidump_file_writer.h" 24 #include "minidump/minidump_file_writer.h"
25 #include "minidump/test/minidump_file_writer_test_util.h" 25 #include "minidump/test/minidump_file_writer_test_util.h"
26 #include "minidump/test/minidump_string_writer_test_util.h"
26 #include "util/file/string_file_writer.h" 27 #include "util/file/string_file_writer.h"
27 #include "util/misc/uuid.h" 28 #include "util/misc/uuid.h"
28 29
29 namespace crashpad { 30 namespace crashpad {
30 namespace test { 31 namespace test {
31 namespace { 32 namespace {
32 33
33 void GetModuleListStream(const std::string& file_contents, 34 void GetModuleListStream(const std::string& file_contents,
34 const MINIDUMP_MODULE_LIST** module_list) { 35 const MINIDUMP_MODULE_LIST** module_list) {
35 const size_t kDirectoryOffset = sizeof(MINIDUMP_HEADER); 36 const size_t kDirectoryOffset = sizeof(MINIDUMP_HEADER);
36 const size_t kModuleListStreamOffset = 37 const size_t kModuleListStreamOffset =
37 kDirectoryOffset + sizeof(MINIDUMP_DIRECTORY); 38 kDirectoryOffset + sizeof(MINIDUMP_DIRECTORY);
38 const size_t kModulesOffset = 39 const size_t kModulesOffset =
39 kModuleListStreamOffset + sizeof(MINIDUMP_MODULE_LIST); 40 kModuleListStreamOffset + sizeof(MINIDUMP_MODULE_LIST);
40 41
41 ASSERT_GE(file_contents.size(), kModulesOffset); 42 ASSERT_GE(file_contents.size(), kModulesOffset);
42 43
44 const MINIDUMP_DIRECTORY* directory;
43 const MINIDUMP_HEADER* header = 45 const MINIDUMP_HEADER* header =
44 reinterpret_cast<const MINIDUMP_HEADER*>(&file_contents[0]); 46 MinidumpHeaderAtStart(file_contents, &directory);
47 ASSERT_NO_FATAL_FAILURE(VerifyMinidumpHeader(header, 1, 0));
48 ASSERT_TRUE(directory);
45 49
46 ASSERT_NO_FATAL_FAILURE(VerifyMinidumpHeader(header, 1, 0)); 50 ASSERT_EQ(kMinidumpStreamTypeModuleList, directory[0].StreamType);
47 51 ASSERT_GE(directory[0].Location.DataSize, sizeof(MINIDUMP_MODULE_LIST));
48 const MINIDUMP_DIRECTORY* directory = 52 ASSERT_EQ(kModuleListStreamOffset, directory[0].Location.Rva);
49 reinterpret_cast<const MINIDUMP_DIRECTORY*>(
50 &file_contents[kDirectoryOffset]);
51
52 ASSERT_EQ(kMinidumpStreamTypeModuleList, directory->StreamType);
53 ASSERT_GE(directory->Location.DataSize, sizeof(MINIDUMP_MODULE_LIST));
54 ASSERT_EQ(kModuleListStreamOffset, directory->Location.Rva);
55 53
56 *module_list = reinterpret_cast<const MINIDUMP_MODULE_LIST*>( 54 *module_list = reinterpret_cast<const MINIDUMP_MODULE_LIST*>(
57 &file_contents[kModuleListStreamOffset]); 55 &file_contents[kModuleListStreamOffset]);
58 56
59 ASSERT_EQ(sizeof(MINIDUMP_MODULE_LIST) + 57 ASSERT_EQ(sizeof(MINIDUMP_MODULE_LIST) +
60 (*module_list)->NumberOfModules * sizeof(MINIDUMP_MODULE), 58 (*module_list)->NumberOfModules * sizeof(MINIDUMP_MODULE),
61 directory->Location.DataSize); 59 directory[0].Location.DataSize);
62 } 60 }
63 61
64 TEST(MinidumpModuleWriter, EmptyModuleList) { 62 TEST(MinidumpModuleWriter, EmptyModuleList) {
65 MinidumpFileWriter minidump_file_writer; 63 MinidumpFileWriter minidump_file_writer;
66 MinidumpModuleListWriter module_list_writer; 64 MinidumpModuleListWriter module_list_writer;
67 65
68 minidump_file_writer.AddStream(&module_list_writer); 66 minidump_file_writer.AddStream(&module_list_writer);
69 67
70 StringFileWriter file_writer; 68 StringFileWriter file_writer;
71 ASSERT_TRUE(minidump_file_writer.WriteEverything(&file_writer)); 69 ASSERT_TRUE(minidump_file_writer.WriteEverything(&file_writer));
(...skipping 177 matching lines...) Expand 10 before | Expand all | Expand 10 after
249 EXPECT_EQ(expected->VersionInfo.dwFileSubtype, 247 EXPECT_EQ(expected->VersionInfo.dwFileSubtype,
250 observed->VersionInfo.dwFileSubtype); 248 observed->VersionInfo.dwFileSubtype);
251 EXPECT_EQ(expected->VersionInfo.dwFileDateMS, 249 EXPECT_EQ(expected->VersionInfo.dwFileDateMS,
252 observed->VersionInfo.dwFileDateMS); 250 observed->VersionInfo.dwFileDateMS);
253 EXPECT_EQ(expected->VersionInfo.dwFileDateLS, 251 EXPECT_EQ(expected->VersionInfo.dwFileDateLS,
254 observed->VersionInfo.dwFileDateLS); 252 observed->VersionInfo.dwFileDateLS);
255 EXPECT_EQ(0u, observed->Reserved0); 253 EXPECT_EQ(0u, observed->Reserved0);
256 EXPECT_EQ(0u, observed->Reserved1); 254 EXPECT_EQ(0u, observed->Reserved1);
257 255
258 EXPECT_NE(0u, observed->ModuleNameRva); 256 EXPECT_NE(0u, observed->ModuleNameRva);
259 ASSERT_LE(observed->ModuleNameRva, 257 string16 observed_module_name_utf16 =
260 file_contents.size() - sizeof(MINIDUMP_STRING)); 258 MinidumpStringAtRVAAsString(file_contents, observed->ModuleNameRva);
261 const MINIDUMP_STRING* module_name = reinterpret_cast<const MINIDUMP_STRING*>(
262 &file_contents[observed->ModuleNameRva]);
263 ASSERT_LE(observed->ModuleNameRva + sizeof(MINIDUMP_STRING) +
264 (module_name->Length + 1),
265 file_contents.size());
266 ASSERT_EQ(0u, module_name->Length % 2);
267 string16 observed_module_name_utf16(
268 reinterpret_cast<const char16*>(
269 &file_contents[observed->ModuleNameRva + sizeof(MINIDUMP_STRING)]),
270 module_name->Length / 2);
271 string16 expected_module_name_utf16 = base::UTF8ToUTF16(expected_module_name); 259 string16 expected_module_name_utf16 = base::UTF8ToUTF16(expected_module_name);
272 EXPECT_EQ(expected_module_name_utf16, observed_module_name_utf16); 260 EXPECT_EQ(expected_module_name_utf16, observed_module_name_utf16);
273 261
274 ASSERT_NO_FATAL_FAILURE(ExpectCodeViewRecord(&observed->CvRecord, 262 ASSERT_NO_FATAL_FAILURE(ExpectCodeViewRecord(&observed->CvRecord,
275 file_contents, 263 file_contents,
276 expected_pdb_name, 264 expected_pdb_name,
277 expected_pdb_uuid, 265 expected_pdb_uuid,
278 expected_pdb_timestamp, 266 expected_pdb_timestamp,
279 expected_pdb_age)); 267 expected_pdb_age));
280 268
(...skipping 348 matching lines...) Expand 10 before | Expand all | Expand 10 after
629 module_list_writer.AddModule(&module_writer); 617 module_list_writer.AddModule(&module_writer);
630 minidump_file_writer.AddStream(&module_list_writer); 618 minidump_file_writer.AddStream(&module_list_writer);
631 619
632 StringFileWriter file_writer; 620 StringFileWriter file_writer;
633 ASSERT_DEATH(minidump_file_writer.WriteEverything(&file_writer), "name_"); 621 ASSERT_DEATH(minidump_file_writer.WriteEverything(&file_writer), "name_");
634 } 622 }
635 623
636 } // namespace 624 } // namespace
637 } // namespace test 625 } // namespace test
638 } // namespace crashpad 626 } // namespace crashpad
OLDNEW
« no previous file with comments | « minidump/minidump_misc_info_writer_test.cc ('k') | minidump/minidump_simple_string_dictionary_writer_test.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698