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

Side by Side Diff: minidump/minidump_file_writer_test.cc

Issue 674153002: minidump: Change the ownership model (Closed) Base URL: https://chromium.googlesource.com/crashpad/crashpad@master
Patch Set: Rebase 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
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,
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after
44 EXPECT_FALSE(directory); 44 EXPECT_FALSE(directory);
45 } 45 }
46 46
47 class TestStream final : public internal::MinidumpStreamWriter { 47 class TestStream final : public internal::MinidumpStreamWriter {
48 public: 48 public:
49 TestStream(MinidumpStreamType stream_type, 49 TestStream(MinidumpStreamType stream_type,
50 size_t stream_size, 50 size_t stream_size,
51 uint8_t stream_value) 51 uint8_t stream_value)
52 : stream_data_(stream_size, stream_value), stream_type_(stream_type) {} 52 : stream_data_(stream_size, stream_value), stream_type_(stream_type) {}
53 53
54 ~TestStream() {} 54 ~TestStream() override {}
55 55
56 // MinidumpStreamWriter: 56 // MinidumpStreamWriter:
57 MinidumpStreamType StreamType() const override { 57 MinidumpStreamType StreamType() const override {
58 return stream_type_; 58 return stream_type_;
59 } 59 }
60 60
61 protected: 61 protected:
62 // MinidumpWritable: 62 // MinidumpWritable:
63 size_t SizeOfObject() override { 63 size_t SizeOfObject() override {
64 EXPECT_GE(state(), kStateFrozen); 64 EXPECT_GE(state(), kStateFrozen);
(...skipping 13 matching lines...) Expand all
78 }; 78 };
79 79
80 TEST(MinidumpFileWriter, OneStream) { 80 TEST(MinidumpFileWriter, OneStream) {
81 MinidumpFileWriter minidump_file; 81 MinidumpFileWriter minidump_file;
82 const time_t kTimestamp = 0x155d2fb8; 82 const time_t kTimestamp = 0x155d2fb8;
83 minidump_file.SetTimestamp(kTimestamp); 83 minidump_file.SetTimestamp(kTimestamp);
84 84
85 const size_t kStreamSize = 5; 85 const size_t kStreamSize = 5;
86 const MinidumpStreamType kStreamType = static_cast<MinidumpStreamType>(0x4d); 86 const MinidumpStreamType kStreamType = static_cast<MinidumpStreamType>(0x4d);
87 const uint8_t kStreamValue = 0x5a; 87 const uint8_t kStreamValue = 0x5a;
88 TestStream stream(kStreamType, kStreamSize, kStreamValue); 88 auto stream =
89 minidump_file.AddStream(&stream); 89 make_scoped_ptr(new TestStream(kStreamType, kStreamSize, kStreamValue));
90 minidump_file.AddStream(stream.Pass());
90 91
91 StringFileWriter file_writer; 92 StringFileWriter file_writer;
92 ASSERT_TRUE(minidump_file.WriteEverything(&file_writer)); 93 ASSERT_TRUE(minidump_file.WriteEverything(&file_writer));
93 94
94 const size_t kDirectoryOffset = sizeof(MINIDUMP_HEADER); 95 const size_t kDirectoryOffset = sizeof(MINIDUMP_HEADER);
95 const size_t kStreamOffset = kDirectoryOffset + sizeof(MINIDUMP_DIRECTORY); 96 const size_t kStreamOffset = kDirectoryOffset + sizeof(MINIDUMP_DIRECTORY);
96 const size_t kFileSize = kStreamOffset + kStreamSize; 97 const size_t kFileSize = kStreamOffset + kStreamSize;
97 98
98 ASSERT_EQ(kFileSize, file_writer.string().size()); 99 ASSERT_EQ(kFileSize, file_writer.string().size());
99 100
(...skipping 16 matching lines...) Expand all
116 } 117 }
117 118
118 TEST(MinidumpFileWriter, ThreeStreams) { 119 TEST(MinidumpFileWriter, ThreeStreams) {
119 MinidumpFileWriter minidump_file; 120 MinidumpFileWriter minidump_file;
120 const time_t kTimestamp = 0x155d2fb8; 121 const time_t kTimestamp = 0x155d2fb8;
121 minidump_file.SetTimestamp(kTimestamp); 122 minidump_file.SetTimestamp(kTimestamp);
122 123
123 const size_t kStream0Size = 5; 124 const size_t kStream0Size = 5;
124 const MinidumpStreamType kStream0Type = static_cast<MinidumpStreamType>(0x6d); 125 const MinidumpStreamType kStream0Type = static_cast<MinidumpStreamType>(0x6d);
125 const uint8_t kStream0Value = 0x5a; 126 const uint8_t kStream0Value = 0x5a;
126 TestStream stream0(kStream0Type, kStream0Size, kStream0Value); 127 auto stream0 = make_scoped_ptr(
127 minidump_file.AddStream(&stream0); 128 new TestStream(kStream0Type, kStream0Size, kStream0Value));
129 minidump_file.AddStream(stream0.Pass());
128 130
129 // Make the second stream’s type be a smaller quantity than the first stream’s 131 // Make the second stream’s type be a smaller quantity than the first stream’s
130 // to test that the streams show up in the order that they were added, not in 132 // to test that the streams show up in the order that they were added, not in
131 // numeric order. 133 // numeric order.
132 const size_t kStream1Size = 3; 134 const size_t kStream1Size = 3;
133 const MinidumpStreamType kStream1Type = static_cast<MinidumpStreamType>(0x4d); 135 const MinidumpStreamType kStream1Type = static_cast<MinidumpStreamType>(0x4d);
134 const uint8_t kStream1Value = 0xa5; 136 const uint8_t kStream1Value = 0xa5;
135 TestStream stream1(kStream1Type, kStream1Size, kStream1Value); 137 auto stream1 = make_scoped_ptr(
136 minidump_file.AddStream(&stream1); 138 new TestStream(kStream1Type, kStream1Size, kStream1Value));
139 minidump_file.AddStream(stream1.Pass());
137 140
138 const size_t kStream2Size = 1; 141 const size_t kStream2Size = 1;
139 const MinidumpStreamType kStream2Type = static_cast<MinidumpStreamType>(0x7e); 142 const MinidumpStreamType kStream2Type = static_cast<MinidumpStreamType>(0x7e);
140 const uint8_t kStream2Value = 0x36; 143 const uint8_t kStream2Value = 0x36;
141 TestStream stream2(kStream2Type, kStream2Size, kStream2Value); 144 auto stream2 = make_scoped_ptr(
142 minidump_file.AddStream(&stream2); 145 new TestStream(kStream2Type, kStream2Size, kStream2Value));
146 minidump_file.AddStream(stream2.Pass());
143 147
144 StringFileWriter file_writer; 148 StringFileWriter file_writer;
145 ASSERT_TRUE(minidump_file.WriteEverything(&file_writer)); 149 ASSERT_TRUE(minidump_file.WriteEverything(&file_writer));
146 150
147 const size_t kDirectoryOffset = sizeof(MINIDUMP_HEADER); 151 const size_t kDirectoryOffset = sizeof(MINIDUMP_HEADER);
148 const size_t kStream0Offset = 152 const size_t kStream0Offset =
149 kDirectoryOffset + 3 * sizeof(MINIDUMP_DIRECTORY); 153 kDirectoryOffset + 3 * sizeof(MINIDUMP_DIRECTORY);
150 const size_t kStream1Padding = 3; 154 const size_t kStream1Padding = 3;
151 const size_t kStream1Offset = kStream0Offset + kStream0Size + kStream1Padding; 155 const size_t kStream1Offset = kStream0Offset + kStream0Size + kStream1Padding;
152 const size_t kStream2Padding = 1; 156 const size_t kStream2Padding = 1;
(...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after
198 202
199 std::string expected_stream2(kStream2Size, kStream2Value); 203 std::string expected_stream2(kStream2Size, kStream2Value);
200 EXPECT_EQ(0, memcmp(stream2_data, expected_stream2.c_str(), kStream2Size)); 204 EXPECT_EQ(0, memcmp(stream2_data, expected_stream2.c_str(), kStream2Size));
201 } 205 }
202 206
203 TEST(MinidumpFileWriter, ZeroLengthStream) { 207 TEST(MinidumpFileWriter, ZeroLengthStream) {
204 MinidumpFileWriter minidump_file; 208 MinidumpFileWriter minidump_file;
205 209
206 const size_t kStreamSize = 0; 210 const size_t kStreamSize = 0;
207 const MinidumpStreamType kStreamType = static_cast<MinidumpStreamType>(0x4d); 211 const MinidumpStreamType kStreamType = static_cast<MinidumpStreamType>(0x4d);
208 TestStream stream(kStreamType, kStreamSize, 0); 212 auto stream = make_scoped_ptr(new TestStream(kStreamType, kStreamSize, 0));
209 minidump_file.AddStream(&stream); 213 minidump_file.AddStream(stream.Pass());
210 214
211 StringFileWriter file_writer; 215 StringFileWriter file_writer;
212 ASSERT_TRUE(minidump_file.WriteEverything(&file_writer)); 216 ASSERT_TRUE(minidump_file.WriteEverything(&file_writer));
213 217
214 const size_t kDirectoryOffset = sizeof(MINIDUMP_HEADER); 218 const size_t kDirectoryOffset = sizeof(MINIDUMP_HEADER);
215 const size_t kStreamOffset = kDirectoryOffset + sizeof(MINIDUMP_DIRECTORY); 219 const size_t kStreamOffset = kDirectoryOffset + sizeof(MINIDUMP_DIRECTORY);
216 const size_t kFileSize = kStreamOffset + kStreamSize; 220 const size_t kFileSize = kStreamOffset + kStreamSize;
217 221
218 ASSERT_EQ(kFileSize, file_writer.string().size()); 222 ASSERT_EQ(kFileSize, file_writer.string().size());
219 223
220 const MINIDUMP_DIRECTORY* directory; 224 const MINIDUMP_DIRECTORY* directory;
221 const MINIDUMP_HEADER* header = 225 const MINIDUMP_HEADER* header =
222 MinidumpHeaderAtStart(file_writer.string(), &directory); 226 MinidumpHeaderAtStart(file_writer.string(), &directory);
223 ASSERT_NO_FATAL_FAILURE(VerifyMinidumpHeader(header, 1, 0)); 227 ASSERT_NO_FATAL_FAILURE(VerifyMinidumpHeader(header, 1, 0));
224 ASSERT_TRUE(directory); 228 ASSERT_TRUE(directory);
225 229
226 EXPECT_EQ(kStreamType, directory[0].StreamType); 230 EXPECT_EQ(kStreamType, directory[0].StreamType);
227 EXPECT_EQ(kStreamSize, directory[0].Location.DataSize); 231 EXPECT_EQ(kStreamSize, directory[0].Location.DataSize);
228 EXPECT_EQ(kStreamOffset, directory[0].Location.Rva); 232 EXPECT_EQ(kStreamOffset, directory[0].Location.Rva);
229 } 233 }
230 234
231 TEST(MinidumpFileWriterDeathTest, SameStreamType) { 235 TEST(MinidumpFileWriterDeathTest, SameStreamType) {
232 MinidumpFileWriter minidump_file; 236 MinidumpFileWriter minidump_file;
233 237
234 const size_t kStream0Size = 5; 238 const size_t kStream0Size = 5;
235 const MinidumpStreamType kStream0Type = static_cast<MinidumpStreamType>(0x4d); 239 const MinidumpStreamType kStream0Type = static_cast<MinidumpStreamType>(0x4d);
236 const uint8_t kStream0Value = 0x5a; 240 const uint8_t kStream0Value = 0x5a;
237 TestStream stream0(kStream0Type, kStream0Size, kStream0Value); 241 auto stream0 = make_scoped_ptr(
238 minidump_file.AddStream(&stream0); 242 new TestStream(kStream0Type, kStream0Size, kStream0Value));
243 minidump_file.AddStream(stream0.Pass());
239 244
240 // It is an error to add a second stream of the same type. 245 // It is an error to add a second stream of the same type.
241 const size_t kStream1Size = 3; 246 const size_t kStream1Size = 3;
242 const MinidumpStreamType kStream1Type = static_cast<MinidumpStreamType>(0x4d); 247 const MinidumpStreamType kStream1Type = static_cast<MinidumpStreamType>(0x4d);
243 const uint8_t kStream1Value = 0xa5; 248 const uint8_t kStream1Value = 0xa5;
244 TestStream stream1(kStream1Type, kStream1Size, kStream1Value); 249 auto stream1 = make_scoped_ptr(
245 ASSERT_DEATH(minidump_file.AddStream(&stream1), "already present"); 250 new TestStream(kStream1Type, kStream1Size, kStream1Value));
251 ASSERT_DEATH(minidump_file.AddStream(stream1.Pass()), "already present");
246 } 252 }
247 253
248 } // namespace 254 } // namespace
249 } // namespace test 255 } // namespace test
250 } // namespace crashpad 256 } // namespace crashpad
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698