| 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 55 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 66 directory[directory_index].StreamType); | 66 directory[directory_index].StreamType); |
| 67 EXPECT_EQ(kMemoryListStreamOffset, directory[directory_index].Location.Rva); | 67 EXPECT_EQ(kMemoryListStreamOffset, directory[directory_index].Location.Rva); |
| 68 | 68 |
| 69 *memory_list = MinidumpWritableAtLocationDescriptor<MINIDUMP_MEMORY_LIST>( | 69 *memory_list = MinidumpWritableAtLocationDescriptor<MINIDUMP_MEMORY_LIST>( |
| 70 file_contents, directory[directory_index].Location); | 70 file_contents, directory[directory_index].Location); |
| 71 ASSERT_TRUE(memory_list); | 71 ASSERT_TRUE(memory_list); |
| 72 } | 72 } |
| 73 | 73 |
| 74 TEST(MinidumpMemoryWriter, EmptyMemoryList) { | 74 TEST(MinidumpMemoryWriter, EmptyMemoryList) { |
| 75 MinidumpFileWriter minidump_file_writer; | 75 MinidumpFileWriter minidump_file_writer; |
| 76 MinidumpMemoryListWriter memory_list_writer; | 76 auto memory_list_writer = make_scoped_ptr(new MinidumpMemoryListWriter()); |
| 77 | 77 |
| 78 minidump_file_writer.AddStream(&memory_list_writer); | 78 minidump_file_writer.AddStream(memory_list_writer.Pass()); |
| 79 | 79 |
| 80 StringFileWriter file_writer; | 80 StringFileWriter file_writer; |
| 81 ASSERT_TRUE(minidump_file_writer.WriteEverything(&file_writer)); | 81 ASSERT_TRUE(minidump_file_writer.WriteEverything(&file_writer)); |
| 82 | 82 |
| 83 ASSERT_EQ(sizeof(MINIDUMP_HEADER) + sizeof(MINIDUMP_DIRECTORY) + | 83 ASSERT_EQ(sizeof(MINIDUMP_HEADER) + sizeof(MINIDUMP_DIRECTORY) + |
| 84 sizeof(MINIDUMP_MEMORY_LIST), | 84 sizeof(MINIDUMP_MEMORY_LIST), |
| 85 file_writer.string().size()); | 85 file_writer.string().size()); |
| 86 | 86 |
| 87 const MINIDUMP_MEMORY_LIST* memory_list; | 87 const MINIDUMP_MEMORY_LIST* memory_list; |
| 88 ASSERT_NO_FATAL_FAILURE( | 88 ASSERT_NO_FATAL_FAILURE( |
| 89 GetMemoryListStream(file_writer.string(), &memory_list, 1)); | 89 GetMemoryListStream(file_writer.string(), &memory_list, 1)); |
| 90 | 90 |
| 91 EXPECT_EQ(0u, memory_list->NumberOfMemoryRanges); | 91 EXPECT_EQ(0u, memory_list->NumberOfMemoryRanges); |
| 92 } | 92 } |
| 93 | 93 |
| 94 TEST(MinidumpMemoryWriter, OneMemoryRegion) { | 94 TEST(MinidumpMemoryWriter, OneMemoryRegion) { |
| 95 MinidumpFileWriter minidump_file_writer; | 95 MinidumpFileWriter minidump_file_writer; |
| 96 MinidumpMemoryListWriter memory_list_writer; | 96 auto memory_list_writer = make_scoped_ptr(new MinidumpMemoryListWriter()); |
| 97 | 97 |
| 98 const uint64_t kBaseAddress = 0xfedcba9876543210; | 98 const uint64_t kBaseAddress = 0xfedcba9876543210; |
| 99 const uint64_t kSize = 0x1000; | 99 const uint64_t kSize = 0x1000; |
| 100 const uint8_t kValue = 'm'; | 100 const uint8_t kValue = 'm'; |
| 101 | 101 |
| 102 TestMinidumpMemoryWriter memory_writer(kBaseAddress, kSize, kValue); | 102 auto memory_writer = make_scoped_ptr( |
| 103 memory_list_writer.AddMemory(&memory_writer); | 103 new TestMinidumpMemoryWriter(kBaseAddress, kSize, kValue)); |
| 104 memory_list_writer->AddMemory(memory_writer.Pass()); |
| 104 | 105 |
| 105 minidump_file_writer.AddStream(&memory_list_writer); | 106 minidump_file_writer.AddStream(memory_list_writer.Pass()); |
| 106 | 107 |
| 107 StringFileWriter file_writer; | 108 StringFileWriter file_writer; |
| 108 ASSERT_TRUE(minidump_file_writer.WriteEverything(&file_writer)); | 109 ASSERT_TRUE(minidump_file_writer.WriteEverything(&file_writer)); |
| 109 | 110 |
| 110 const MINIDUMP_MEMORY_LIST* memory_list; | 111 const MINIDUMP_MEMORY_LIST* memory_list; |
| 111 ASSERT_NO_FATAL_FAILURE( | 112 ASSERT_NO_FATAL_FAILURE( |
| 112 GetMemoryListStream(file_writer.string(), &memory_list, 1)); | 113 GetMemoryListStream(file_writer.string(), &memory_list, 1)); |
| 113 | 114 |
| 114 MINIDUMP_MEMORY_DESCRIPTOR expected; | 115 MINIDUMP_MEMORY_DESCRIPTOR expected; |
| 115 expected.StartOfMemoryRange = kBaseAddress; | 116 expected.StartOfMemoryRange = kBaseAddress; |
| 116 expected.Memory.DataSize = kSize; | 117 expected.Memory.DataSize = kSize; |
| 117 expected.Memory.Rva = | 118 expected.Memory.Rva = |
| 118 sizeof(MINIDUMP_HEADER) + sizeof(MINIDUMP_DIRECTORY) + | 119 sizeof(MINIDUMP_HEADER) + sizeof(MINIDUMP_DIRECTORY) + |
| 119 sizeof(MINIDUMP_MEMORY_LIST) + | 120 sizeof(MINIDUMP_MEMORY_LIST) + |
| 120 memory_list->NumberOfMemoryRanges * sizeof(MINIDUMP_MEMORY_DESCRIPTOR); | 121 memory_list->NumberOfMemoryRanges * sizeof(MINIDUMP_MEMORY_DESCRIPTOR); |
| 121 ExpectMinidumpMemoryDescriptorAndContents(&expected, | 122 ExpectMinidumpMemoryDescriptorAndContents(&expected, |
| 122 &memory_list->MemoryRanges[0], | 123 &memory_list->MemoryRanges[0], |
| 123 file_writer.string(), | 124 file_writer.string(), |
| 124 kValue, | 125 kValue, |
| 125 true); | 126 true); |
| 126 } | 127 } |
| 127 | 128 |
| 128 TEST(MinidumpMemoryWriter, TwoMemoryRegions) { | 129 TEST(MinidumpMemoryWriter, TwoMemoryRegions) { |
| 129 MinidumpFileWriter minidump_file_writer; | 130 MinidumpFileWriter minidump_file_writer; |
| 130 MinidumpMemoryListWriter memory_list_writer; | 131 auto memory_list_writer = make_scoped_ptr(new MinidumpMemoryListWriter()); |
| 131 | 132 |
| 132 const uint64_t kBaseAddress0 = 0xc0ffee; | 133 const uint64_t kBaseAddress0 = 0xc0ffee; |
| 133 const uint64_t kSize0 = 0x0100; | 134 const uint64_t kSize0 = 0x0100; |
| 134 const uint8_t kValue0 = '6'; | 135 const uint8_t kValue0 = '6'; |
| 135 const uint64_t kBaseAddress1 = 0xfac00fac; | 136 const uint64_t kBaseAddress1 = 0xfac00fac; |
| 136 const uint64_t kSize1 = 0x0200; | 137 const uint64_t kSize1 = 0x0200; |
| 137 const uint8_t kValue1 = '!'; | 138 const uint8_t kValue1 = '!'; |
| 138 | 139 |
| 139 TestMinidumpMemoryWriter memory_writer_0(kBaseAddress0, kSize0, kValue0); | 140 auto memory_writer_0 = make_scoped_ptr( |
| 140 memory_list_writer.AddMemory(&memory_writer_0); | 141 new TestMinidumpMemoryWriter(kBaseAddress0, kSize0, kValue0)); |
| 141 TestMinidumpMemoryWriter memory_writer_1(kBaseAddress1, kSize1, kValue1); | 142 memory_list_writer->AddMemory(memory_writer_0.Pass()); |
| 142 memory_list_writer.AddMemory(&memory_writer_1); | 143 auto memory_writer_1 = make_scoped_ptr( |
| 144 new TestMinidumpMemoryWriter(kBaseAddress1, kSize1, kValue1)); |
| 145 memory_list_writer->AddMemory(memory_writer_1.Pass()); |
| 143 | 146 |
| 144 minidump_file_writer.AddStream(&memory_list_writer); | 147 minidump_file_writer.AddStream(memory_list_writer.Pass()); |
| 145 | 148 |
| 146 StringFileWriter file_writer; | 149 StringFileWriter file_writer; |
| 147 ASSERT_TRUE(minidump_file_writer.WriteEverything(&file_writer)); | 150 ASSERT_TRUE(minidump_file_writer.WriteEverything(&file_writer)); |
| 148 | 151 |
| 149 const MINIDUMP_MEMORY_LIST* memory_list; | 152 const MINIDUMP_MEMORY_LIST* memory_list; |
| 150 ASSERT_NO_FATAL_FAILURE( | 153 ASSERT_NO_FATAL_FAILURE( |
| 151 GetMemoryListStream(file_writer.string(), &memory_list, 1)); | 154 GetMemoryListStream(file_writer.string(), &memory_list, 1)); |
| 152 | 155 |
| 153 EXPECT_EQ(2u, memory_list->NumberOfMemoryRanges); | 156 EXPECT_EQ(2u, memory_list->NumberOfMemoryRanges); |
| 154 | 157 |
| (...skipping 28 matching lines...) Expand all Loading... |
| 183 kValue1, | 186 kValue1, |
| 184 true); | 187 true); |
| 185 } | 188 } |
| 186 } | 189 } |
| 187 | 190 |
| 188 class TestMemoryStream final : public internal::MinidumpStreamWriter { | 191 class TestMemoryStream final : public internal::MinidumpStreamWriter { |
| 189 public: | 192 public: |
| 190 TestMemoryStream(uint64_t base_address, size_t size, uint8_t value) | 193 TestMemoryStream(uint64_t base_address, size_t size, uint8_t value) |
| 191 : MinidumpStreamWriter(), memory_(base_address, size, value) {} | 194 : MinidumpStreamWriter(), memory_(base_address, size, value) {} |
| 192 | 195 |
| 193 ~TestMemoryStream() {} | 196 ~TestMemoryStream() override {} |
| 194 | 197 |
| 195 TestMinidumpMemoryWriter* memory() { return &memory_; } | 198 TestMinidumpMemoryWriter* memory() { |
| 199 return &memory_; |
| 200 } |
| 196 | 201 |
| 197 // MinidumpStreamWriter: | 202 // MinidumpStreamWriter: |
| 198 MinidumpStreamType StreamType() const override { | 203 MinidumpStreamType StreamType() const override { |
| 199 return kBogusStreamType; | 204 return kBogusStreamType; |
| 200 } | 205 } |
| 201 | 206 |
| 202 protected: | 207 protected: |
| 203 // MinidumpWritable: | 208 // MinidumpWritable: |
| 204 size_t SizeOfObject() override { | 209 size_t SizeOfObject() override { |
| 205 EXPECT_GE(state(), kStateFrozen); | 210 EXPECT_GE(state(), kStateFrozen); |
| (...skipping 19 matching lines...) Expand all Loading... |
| 225 | 230 |
| 226 TEST(MinidumpMemoryWriter, ExtraMemory) { | 231 TEST(MinidumpMemoryWriter, ExtraMemory) { |
| 227 // This tests MinidumpMemoryListWriter::AddExtraMemory(). That method adds | 232 // This tests MinidumpMemoryListWriter::AddExtraMemory(). That method adds |
| 228 // a MinidumpMemoryWriter to the MinidumpMemoryListWriter without making the | 233 // a MinidumpMemoryWriter to the MinidumpMemoryListWriter without making the |
| 229 // memory writer a child of the memory list writer. | 234 // memory writer a child of the memory list writer. |
| 230 MinidumpFileWriter minidump_file_writer; | 235 MinidumpFileWriter minidump_file_writer; |
| 231 | 236 |
| 232 const uint64_t kBaseAddress0 = 0x1000; | 237 const uint64_t kBaseAddress0 = 0x1000; |
| 233 const uint64_t kSize0 = 0x0400; | 238 const uint64_t kSize0 = 0x0400; |
| 234 const uint8_t kValue0 = '1'; | 239 const uint8_t kValue0 = '1'; |
| 235 TestMemoryStream test_memory_stream(kBaseAddress0, kSize0, kValue0); | 240 auto test_memory_stream = |
| 241 make_scoped_ptr(new TestMemoryStream(kBaseAddress0, kSize0, kValue0)); |
| 236 | 242 |
| 237 MinidumpMemoryListWriter memory_list_writer; | 243 auto memory_list_writer = make_scoped_ptr(new MinidumpMemoryListWriter()); |
| 238 memory_list_writer.AddExtraMemory(test_memory_stream.memory()); | 244 memory_list_writer->AddExtraMemory(test_memory_stream->memory()); |
| 239 | 245 |
| 240 minidump_file_writer.AddStream(&test_memory_stream); | 246 minidump_file_writer.AddStream(test_memory_stream.Pass()); |
| 241 | 247 |
| 242 const uint64_t kBaseAddress1 = 0x2000; | 248 const uint64_t kBaseAddress1 = 0x2000; |
| 243 const uint64_t kSize1 = 0x0400; | 249 const uint64_t kSize1 = 0x0400; |
| 244 const uint8_t kValue1 = 'm'; | 250 const uint8_t kValue1 = 'm'; |
| 245 | 251 |
| 246 TestMinidumpMemoryWriter memory_writer(kBaseAddress1, kSize1, kValue1); | 252 auto memory_writer = make_scoped_ptr( |
| 247 memory_list_writer.AddMemory(&memory_writer); | 253 new TestMinidumpMemoryWriter(kBaseAddress1, kSize1, kValue1)); |
| 254 memory_list_writer->AddMemory(memory_writer.Pass()); |
| 248 | 255 |
| 249 minidump_file_writer.AddStream(&memory_list_writer); | 256 minidump_file_writer.AddStream(memory_list_writer.Pass()); |
| 250 | 257 |
| 251 StringFileWriter file_writer; | 258 StringFileWriter file_writer; |
| 252 ASSERT_TRUE(minidump_file_writer.WriteEverything(&file_writer)); | 259 ASSERT_TRUE(minidump_file_writer.WriteEverything(&file_writer)); |
| 253 | 260 |
| 254 const MINIDUMP_MEMORY_LIST* memory_list; | 261 const MINIDUMP_MEMORY_LIST* memory_list; |
| 255 ASSERT_NO_FATAL_FAILURE( | 262 ASSERT_NO_FATAL_FAILURE( |
| 256 GetMemoryListStream(file_writer.string(), &memory_list, 2)); | 263 GetMemoryListStream(file_writer.string(), &memory_list, 2)); |
| 257 | 264 |
| 258 EXPECT_EQ(2u, memory_list->NumberOfMemoryRanges); | 265 EXPECT_EQ(2u, memory_list->NumberOfMemoryRanges); |
| 259 | 266 |
| (...skipping 26 matching lines...) Expand all Loading... |
| 286 &memory_list->MemoryRanges[1], | 293 &memory_list->MemoryRanges[1], |
| 287 file_writer.string(), | 294 file_writer.string(), |
| 288 kValue1, | 295 kValue1, |
| 289 true); | 296 true); |
| 290 } | 297 } |
| 291 } | 298 } |
| 292 | 299 |
| 293 } // namespace | 300 } // namespace |
| 294 } // namespace test | 301 } // namespace test |
| 295 } // namespace crashpad | 302 } // namespace crashpad |
| OLD | NEW |