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

Side by Side Diff: minidump/minidump_exception_writer_test.cc

Issue 670853002: minidump: Migrate the rest of the tests to MinidumpWritableAtLocationDescriptor<>() (Closed) Base URL: https://chromium.googlesource.com/crashpad/crashpad@master
Patch Set: Address review feedback Created 6 years, 1 month 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
« no previous file with comments | « minidump/minidump_crashpad_info_writer_test.cc ('k') | minidump/minidump_file_writer_test.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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_exception_writer.h" 15 #include "minidump/minidump_exception_writer.h"
16 16
17 #include <dbghelp.h> 17 #include <dbghelp.h>
18 #include <stdint.h> 18 #include <stdint.h>
19 19
20 #include <string> 20 #include <string>
21 #include <vector> 21 #include <vector>
22 22
23 #include "gtest/gtest.h" 23 #include "gtest/gtest.h"
24 #include "minidump/minidump_context.h" 24 #include "minidump/minidump_context.h"
25 #include "minidump/minidump_context_writer.h" 25 #include "minidump/minidump_context_writer.h"
26 #include "minidump/minidump_extensions.h" 26 #include "minidump/minidump_extensions.h"
27 #include "minidump/minidump_file_writer.h" 27 #include "minidump/minidump_file_writer.h"
28 #include "minidump/test/minidump_context_test_util.h" 28 #include "minidump/test/minidump_context_test_util.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_writable_test_util.h"
30 #include "util/file/string_file_writer.h" 31 #include "util/file/string_file_writer.h"
31 32
32 namespace crashpad { 33 namespace crashpad {
33 namespace test { 34 namespace test {
34 namespace { 35 namespace {
35 36
36 // This returns the MINIDUMP_EXCEPTION_STREAM stream in |exception_stream|. 37 // This returns the MINIDUMP_EXCEPTION_STREAM stream in |exception_stream|.
37 void GetExceptionStream(const std::string& file_contents, 38 void GetExceptionStream(const std::string& file_contents,
38 const MINIDUMP_EXCEPTION_STREAM** exception_stream) { 39 const MINIDUMP_EXCEPTION_STREAM** exception_stream) {
39 const size_t kDirectoryOffset = sizeof(MINIDUMP_HEADER); 40 const size_t kDirectoryOffset = sizeof(MINIDUMP_HEADER);
40 const size_t kExceptionStreamOffset = 41 const size_t kExceptionStreamOffset =
41 kDirectoryOffset + sizeof(MINIDUMP_DIRECTORY); 42 kDirectoryOffset + sizeof(MINIDUMP_DIRECTORY);
42 const size_t kContextOffset = 43 const size_t kContextOffset =
43 kExceptionStreamOffset + sizeof(MINIDUMP_EXCEPTION_STREAM); 44 kExceptionStreamOffset + sizeof(MINIDUMP_EXCEPTION_STREAM);
44 const size_t kFileSize = kContextOffset + sizeof(MinidumpContextX86); 45 const size_t kFileSize = kContextOffset + sizeof(MinidumpContextX86);
45 ASSERT_EQ(file_contents.size(), kFileSize); 46 ASSERT_EQ(file_contents.size(), kFileSize);
46 47
47 const MINIDUMP_DIRECTORY* directory; 48 const MINIDUMP_DIRECTORY* directory;
48 const MINIDUMP_HEADER* header = 49 const MINIDUMP_HEADER* header =
49 MinidumpHeaderAtStart(file_contents, &directory); 50 MinidumpHeaderAtStart(file_contents, &directory);
50 ASSERT_NO_FATAL_FAILURE(VerifyMinidumpHeader(header, 1, 0)); 51 ASSERT_NO_FATAL_FAILURE(VerifyMinidumpHeader(header, 1, 0));
51 52
52 ASSERT_EQ(kMinidumpStreamTypeException, directory[0].StreamType); 53 ASSERT_EQ(kMinidumpStreamTypeException, directory[0].StreamType);
53 ASSERT_GE(directory[0].Location.DataSize, sizeof(MINIDUMP_EXCEPTION_STREAM)); 54 EXPECT_EQ(kExceptionStreamOffset, directory[0].Location.Rva);
54 ASSERT_EQ(kExceptionStreamOffset, directory[0].Location.Rva);
55 55
56 *exception_stream = reinterpret_cast<const MINIDUMP_EXCEPTION_STREAM*>( 56 *exception_stream =
57 &file_contents[kExceptionStreamOffset]); 57 MinidumpWritableAtLocationDescriptor<MINIDUMP_EXCEPTION_STREAM>(
58 file_contents, directory[0].Location);
59 ASSERT_TRUE(exception_stream);
58 } 60 }
59 61
60 // The MINIDUMP_EXCEPTION_STREAMs |expected| and |observed| are compared against 62 // The MINIDUMP_EXCEPTION_STREAMs |expected| and |observed| are compared against
61 // each other using gtest assertions. The context will be recovered from 63 // each other using gtest assertions. The context will be recovered from
62 // |file_contents| and stored in |context|. 64 // |file_contents| and stored in |context|.
63 void ExpectExceptionStream(const MINIDUMP_EXCEPTION_STREAM* expected, 65 void ExpectExceptionStream(const MINIDUMP_EXCEPTION_STREAM* expected,
64 const MINIDUMP_EXCEPTION_STREAM* observed, 66 const MINIDUMP_EXCEPTION_STREAM* observed,
65 const std::string& file_contents, 67 const std::string& file_contents,
66 const MinidumpContextX86** context) { 68 const MinidumpContextX86** context) {
67 EXPECT_EQ(expected->ThreadId, observed->ThreadId); 69 EXPECT_EQ(expected->ThreadId, observed->ThreadId);
68 EXPECT_EQ(0u, observed->__alignment); 70 EXPECT_EQ(0u, observed->__alignment);
69 EXPECT_EQ(expected->ExceptionRecord.ExceptionCode, 71 EXPECT_EQ(expected->ExceptionRecord.ExceptionCode,
70 observed->ExceptionRecord.ExceptionCode); 72 observed->ExceptionRecord.ExceptionCode);
71 EXPECT_EQ(expected->ExceptionRecord.ExceptionFlags, 73 EXPECT_EQ(expected->ExceptionRecord.ExceptionFlags,
72 observed->ExceptionRecord.ExceptionFlags); 74 observed->ExceptionRecord.ExceptionFlags);
73 EXPECT_EQ(expected->ExceptionRecord.ExceptionRecord, 75 EXPECT_EQ(expected->ExceptionRecord.ExceptionRecord,
74 observed->ExceptionRecord.ExceptionRecord); 76 observed->ExceptionRecord.ExceptionRecord);
75 EXPECT_EQ(expected->ExceptionRecord.ExceptionAddress, 77 EXPECT_EQ(expected->ExceptionRecord.ExceptionAddress,
76 observed->ExceptionRecord.ExceptionAddress); 78 observed->ExceptionRecord.ExceptionAddress);
77 EXPECT_EQ(expected->ExceptionRecord.NumberParameters, 79 EXPECT_EQ(expected->ExceptionRecord.NumberParameters,
78 observed->ExceptionRecord.NumberParameters); 80 observed->ExceptionRecord.NumberParameters);
79 EXPECT_EQ(0u, observed->ExceptionRecord.__unusedAlignment); 81 EXPECT_EQ(0u, observed->ExceptionRecord.__unusedAlignment);
80 for (size_t index = 0; 82 for (size_t index = 0;
81 index < arraysize(observed->ExceptionRecord.ExceptionInformation); 83 index < arraysize(observed->ExceptionRecord.ExceptionInformation);
82 ++index) { 84 ++index) {
83 EXPECT_EQ(expected->ExceptionRecord.ExceptionInformation[index], 85 EXPECT_EQ(expected->ExceptionRecord.ExceptionInformation[index],
84 observed->ExceptionRecord.ExceptionInformation[index]); 86 observed->ExceptionRecord.ExceptionInformation[index]);
85 } 87 }
86 EXPECT_EQ(expected->ThreadContext.DataSize, observed->ThreadContext.DataSize); 88 *context = MinidumpWritableAtLocationDescriptor<MinidumpContextX86>(
87 ASSERT_NE(0u, observed->ThreadContext.DataSize); 89 file_contents, observed->ThreadContext);
88 ASSERT_NE(0u, observed->ThreadContext.Rva); 90 ASSERT_TRUE(context);
89 ASSERT_GE(file_contents.size(),
90 observed->ThreadContext.Rva + observed->ThreadContext.DataSize);
91 *context = reinterpret_cast<const MinidumpContextX86*>(
92 &file_contents[observed->ThreadContext.Rva]);
93 } 91 }
94 92
95 TEST(MinidumpExceptionWriter, Minimal) { 93 TEST(MinidumpExceptionWriter, Minimal) {
96 MinidumpFileWriter minidump_file_writer; 94 MinidumpFileWriter minidump_file_writer;
97 MinidumpExceptionWriter exception_writer; 95 MinidumpExceptionWriter exception_writer;
98 96
99 const uint32_t kSeed = 100; 97 const uint32_t kSeed = 100;
100 98
101 MinidumpContextX86Writer context_x86_writer; 99 MinidumpContextX86Writer context_x86_writer;
102 InitializeMinidumpContextX86(context_x86_writer.context(), kSeed); 100 InitializeMinidumpContextX86(context_x86_writer.context(), kSeed);
(...skipping 104 matching lines...) Expand 10 before | Expand all | Expand 10 after
207 MinidumpExceptionWriter exception_writer; 205 MinidumpExceptionWriter exception_writer;
208 std::vector<uint64_t> exception_information(EXCEPTION_MAXIMUM_PARAMETERS + 1, 206 std::vector<uint64_t> exception_information(EXCEPTION_MAXIMUM_PARAMETERS + 1,
209 0x5a5a5a5a5a5a5a5a); 207 0x5a5a5a5a5a5a5a5a);
210 ASSERT_DEATH(exception_writer.SetExceptionInformation(exception_information), 208 ASSERT_DEATH(exception_writer.SetExceptionInformation(exception_information),
211 "kMaxParameters"); 209 "kMaxParameters");
212 } 210 }
213 211
214 } // namespace 212 } // namespace
215 } // namespace test 213 } // namespace test
216 } // namespace crashpad 214 } // namespace crashpad
OLDNEW
« no previous file with comments | « minidump/minidump_crashpad_info_writer_test.cc ('k') | minidump/minidump_file_writer_test.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698