| 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 116 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 127 &memory_list->MemoryRanges[0], | 127 &memory_list->MemoryRanges[0], |
| 128 file_writer.string(), | 128 file_writer.string(), |
| 129 kValue, | 129 kValue, |
| 130 true); | 130 true); |
| 131 } | 131 } |
| 132 | 132 |
| 133 TEST(MinidumpMemoryWriter, TwoMemoryRegions) { | 133 TEST(MinidumpMemoryWriter, TwoMemoryRegions) { |
| 134 MinidumpFileWriter minidump_file_writer; | 134 MinidumpFileWriter minidump_file_writer; |
| 135 MinidumpMemoryListWriter memory_list_writer; | 135 MinidumpMemoryListWriter memory_list_writer; |
| 136 | 136 |
| 137 const uint64_t kBaseAddress1 = 0xc0ffee; | 137 const uint64_t kBaseAddress0 = 0xc0ffee; |
| 138 const uint64_t kSize1 = 0x0100; | 138 const uint64_t kSize0 = 0x0100; |
| 139 const uint8_t kValue1 = '6'; | 139 const uint8_t kValue0 = '6'; |
| 140 const uint64_t kBaseAddress2 = 0xfac00fac; | 140 const uint64_t kBaseAddress1 = 0xfac00fac; |
| 141 const uint64_t kSize2 = 0x0200; | 141 const uint64_t kSize1 = 0x0200; |
| 142 const uint8_t kValue2 = '!'; | 142 const uint8_t kValue1 = '!'; |
| 143 | 143 |
| 144 TestMinidumpMemoryWriter memory_writer_0(kBaseAddress0, kSize0, kValue0); |
| 145 memory_list_writer.AddMemory(&memory_writer_0); |
| 144 TestMinidumpMemoryWriter memory_writer_1(kBaseAddress1, kSize1, kValue1); | 146 TestMinidumpMemoryWriter memory_writer_1(kBaseAddress1, kSize1, kValue1); |
| 145 memory_list_writer.AddMemory(&memory_writer_1); | 147 memory_list_writer.AddMemory(&memory_writer_1); |
| 146 TestMinidumpMemoryWriter memory_writer_2(kBaseAddress2, kSize2, kValue2); | |
| 147 memory_list_writer.AddMemory(&memory_writer_2); | |
| 148 | 148 |
| 149 minidump_file_writer.AddStream(&memory_list_writer); | 149 minidump_file_writer.AddStream(&memory_list_writer); |
| 150 | 150 |
| 151 StringFileWriter file_writer; | 151 StringFileWriter file_writer; |
| 152 ASSERT_TRUE(minidump_file_writer.WriteEverything(&file_writer)); | 152 ASSERT_TRUE(minidump_file_writer.WriteEverything(&file_writer)); |
| 153 | 153 |
| 154 const MINIDUMP_MEMORY_LIST* memory_list; | 154 const MINIDUMP_MEMORY_LIST* memory_list; |
| 155 ASSERT_NO_FATAL_FAILURE( | 155 ASSERT_NO_FATAL_FAILURE( |
| 156 GetMemoryListStream(file_writer.string(), &memory_list, 1)); | 156 GetMemoryListStream(file_writer.string(), &memory_list, 1)); |
| 157 | 157 |
| 158 EXPECT_EQ(2u, memory_list->NumberOfMemoryRanges); | 158 EXPECT_EQ(2u, memory_list->NumberOfMemoryRanges); |
| 159 | 159 |
| 160 MINIDUMP_MEMORY_DESCRIPTOR expected; | 160 MINIDUMP_MEMORY_DESCRIPTOR expected; |
| 161 | 161 |
| 162 { | 162 { |
| 163 SCOPED_TRACE("region 0"); | 163 SCOPED_TRACE("region 0"); |
| 164 | 164 |
| 165 expected.StartOfMemoryRange = kBaseAddress1; | 165 expected.StartOfMemoryRange = kBaseAddress0; |
| 166 expected.Memory.DataSize = kSize1; | 166 expected.Memory.DataSize = kSize0; |
| 167 expected.Memory.Rva = | 167 expected.Memory.Rva = |
| 168 sizeof(MINIDUMP_HEADER) + sizeof(MINIDUMP_DIRECTORY) + | 168 sizeof(MINIDUMP_HEADER) + sizeof(MINIDUMP_DIRECTORY) + |
| 169 sizeof(MINIDUMP_MEMORY_LIST) + | 169 sizeof(MINIDUMP_MEMORY_LIST) + |
| 170 memory_list->NumberOfMemoryRanges * sizeof(MINIDUMP_MEMORY_DESCRIPTOR); | 170 memory_list->NumberOfMemoryRanges * sizeof(MINIDUMP_MEMORY_DESCRIPTOR); |
| 171 ExpectMinidumpMemoryDescriptorAndContents(&expected, | 171 ExpectMinidumpMemoryDescriptorAndContents(&expected, |
| 172 &memory_list->MemoryRanges[0], | 172 &memory_list->MemoryRanges[0], |
| 173 file_writer.string(), | 173 file_writer.string(), |
| 174 kValue1, | 174 kValue0, |
| 175 false); | 175 false); |
| 176 } | 176 } |
| 177 | 177 |
| 178 { | 178 { |
| 179 SCOPED_TRACE("region 1"); | 179 SCOPED_TRACE("region 1"); |
| 180 | 180 |
| 181 expected.StartOfMemoryRange = kBaseAddress2; | 181 expected.StartOfMemoryRange = kBaseAddress1; |
| 182 expected.Memory.DataSize = kSize2; | 182 expected.Memory.DataSize = kSize1; |
| 183 expected.Memory.Rva = memory_list->MemoryRanges[0].Memory.Rva + | 183 expected.Memory.Rva = memory_list->MemoryRanges[0].Memory.Rva + |
| 184 memory_list->MemoryRanges[0].Memory.DataSize; | 184 memory_list->MemoryRanges[0].Memory.DataSize; |
| 185 ExpectMinidumpMemoryDescriptorAndContents(&expected, | 185 ExpectMinidumpMemoryDescriptorAndContents(&expected, |
| 186 &memory_list->MemoryRanges[1], | 186 &memory_list->MemoryRanges[1], |
| 187 file_writer.string(), | 187 file_writer.string(), |
| 188 kValue2, | 188 kValue1, |
| 189 true); | 189 true); |
| 190 } | 190 } |
| 191 } | 191 } |
| 192 | 192 |
| 193 class TestMemoryStream final : public internal::MinidumpStreamWriter { | 193 class TestMemoryStream final : public internal::MinidumpStreamWriter { |
| 194 public: | 194 public: |
| 195 TestMemoryStream(uint64_t base_address, size_t size, uint8_t value) | 195 TestMemoryStream(uint64_t base_address, size_t size, uint8_t value) |
| 196 : MinidumpStreamWriter(), memory_(base_address, size, value) {} | 196 : MinidumpStreamWriter(), memory_(base_address, size, value) {} |
| 197 | 197 |
| 198 ~TestMemoryStream() {} | 198 ~TestMemoryStream() {} |
| (...skipping 28 matching lines...) Expand all Loading... |
| 227 | 227 |
| 228 DISALLOW_COPY_AND_ASSIGN(TestMemoryStream); | 228 DISALLOW_COPY_AND_ASSIGN(TestMemoryStream); |
| 229 }; | 229 }; |
| 230 | 230 |
| 231 TEST(MinidumpMemoryWriter, ExtraMemory) { | 231 TEST(MinidumpMemoryWriter, ExtraMemory) { |
| 232 // This tests MinidumpMemoryListWriter::AddExtraMemory(). That method adds | 232 // This tests MinidumpMemoryListWriter::AddExtraMemory(). That method adds |
| 233 // a MinidumpMemoryWriter to the MinidumpMemoryListWriter without making the | 233 // a MinidumpMemoryWriter to the MinidumpMemoryListWriter without making the |
| 234 // memory writer a child of the memory list writer. | 234 // memory writer a child of the memory list writer. |
| 235 MinidumpFileWriter minidump_file_writer; | 235 MinidumpFileWriter minidump_file_writer; |
| 236 | 236 |
| 237 const uint64_t kBaseAddress1 = 0x1000; | 237 const uint64_t kBaseAddress0 = 0x1000; |
| 238 const uint64_t kSize1 = 0x0400; | 238 const uint64_t kSize0 = 0x0400; |
| 239 const uint8_t kValue1 = '1'; | 239 const uint8_t kValue0 = '1'; |
| 240 TestMemoryStream test_memory_stream(kBaseAddress1, kSize1, kValue1); | 240 TestMemoryStream test_memory_stream(kBaseAddress0, kSize0, kValue0); |
| 241 | 241 |
| 242 MinidumpMemoryListWriter memory_list_writer; | 242 MinidumpMemoryListWriter memory_list_writer; |
| 243 memory_list_writer.AddExtraMemory(test_memory_stream.memory()); | 243 memory_list_writer.AddExtraMemory(test_memory_stream.memory()); |
| 244 | 244 |
| 245 minidump_file_writer.AddStream(&test_memory_stream); | 245 minidump_file_writer.AddStream(&test_memory_stream); |
| 246 | 246 |
| 247 const uint64_t kBaseAddress2 = 0x2000; | 247 const uint64_t kBaseAddress1 = 0x2000; |
| 248 const uint64_t kSize2 = 0x0400; | 248 const uint64_t kSize1 = 0x0400; |
| 249 const uint8_t kValue2 = 'm'; | 249 const uint8_t kValue1 = 'm'; |
| 250 | 250 |
| 251 TestMinidumpMemoryWriter memory_writer(kBaseAddress2, kSize2, kValue2); | 251 TestMinidumpMemoryWriter memory_writer(kBaseAddress1, kSize1, kValue1); |
| 252 memory_list_writer.AddMemory(&memory_writer); | 252 memory_list_writer.AddMemory(&memory_writer); |
| 253 | 253 |
| 254 minidump_file_writer.AddStream(&memory_list_writer); | 254 minidump_file_writer.AddStream(&memory_list_writer); |
| 255 | 255 |
| 256 StringFileWriter file_writer; | 256 StringFileWriter file_writer; |
| 257 ASSERT_TRUE(minidump_file_writer.WriteEverything(&file_writer)); | 257 ASSERT_TRUE(minidump_file_writer.WriteEverything(&file_writer)); |
| 258 | 258 |
| 259 const MINIDUMP_MEMORY_LIST* memory_list; | 259 const MINIDUMP_MEMORY_LIST* memory_list; |
| 260 ASSERT_NO_FATAL_FAILURE( | 260 ASSERT_NO_FATAL_FAILURE( |
| 261 GetMemoryListStream(file_writer.string(), &memory_list, 2)); | 261 GetMemoryListStream(file_writer.string(), &memory_list, 2)); |
| 262 | 262 |
| 263 EXPECT_EQ(2u, memory_list->NumberOfMemoryRanges); | 263 EXPECT_EQ(2u, memory_list->NumberOfMemoryRanges); |
| 264 | 264 |
| 265 MINIDUMP_MEMORY_DESCRIPTOR expected; | 265 MINIDUMP_MEMORY_DESCRIPTOR expected; |
| 266 | 266 |
| 267 { | 267 { |
| 268 SCOPED_TRACE("region 0"); | 268 SCOPED_TRACE("region 0"); |
| 269 | 269 |
| 270 expected.StartOfMemoryRange = kBaseAddress1; | 270 expected.StartOfMemoryRange = kBaseAddress0; |
| 271 expected.Memory.DataSize = kSize1; | 271 expected.Memory.DataSize = kSize0; |
| 272 expected.Memory.Rva = | 272 expected.Memory.Rva = |
| 273 sizeof(MINIDUMP_HEADER) + 2 * sizeof(MINIDUMP_DIRECTORY) + | 273 sizeof(MINIDUMP_HEADER) + 2 * sizeof(MINIDUMP_DIRECTORY) + |
| 274 sizeof(MINIDUMP_MEMORY_LIST) + | 274 sizeof(MINIDUMP_MEMORY_LIST) + |
| 275 memory_list->NumberOfMemoryRanges * sizeof(MINIDUMP_MEMORY_DESCRIPTOR); | 275 memory_list->NumberOfMemoryRanges * sizeof(MINIDUMP_MEMORY_DESCRIPTOR); |
| 276 ExpectMinidumpMemoryDescriptorAndContents(&expected, | 276 ExpectMinidumpMemoryDescriptorAndContents(&expected, |
| 277 &memory_list->MemoryRanges[0], | 277 &memory_list->MemoryRanges[0], |
| 278 file_writer.string(), | 278 file_writer.string(), |
| 279 kValue1, | 279 kValue0, |
| 280 false); | 280 false); |
| 281 } | 281 } |
| 282 | 282 |
| 283 { | 283 { |
| 284 SCOPED_TRACE("region 1"); | 284 SCOPED_TRACE("region 1"); |
| 285 | 285 |
| 286 expected.StartOfMemoryRange = kBaseAddress2; | 286 expected.StartOfMemoryRange = kBaseAddress1; |
| 287 expected.Memory.DataSize = kSize2; | 287 expected.Memory.DataSize = kSize1; |
| 288 expected.Memory.Rva = memory_list->MemoryRanges[0].Memory.Rva + | 288 expected.Memory.Rva = memory_list->MemoryRanges[0].Memory.Rva + |
| 289 memory_list->MemoryRanges[0].Memory.DataSize; | 289 memory_list->MemoryRanges[0].Memory.DataSize; |
| 290 ExpectMinidumpMemoryDescriptorAndContents(&expected, | 290 ExpectMinidumpMemoryDescriptorAndContents(&expected, |
| 291 &memory_list->MemoryRanges[1], | 291 &memory_list->MemoryRanges[1], |
| 292 file_writer.string(), | 292 file_writer.string(), |
| 293 kValue2, | 293 kValue1, |
| 294 true); | 294 true); |
| 295 } | 295 } |
| 296 } | 296 } |
| 297 | 297 |
| 298 } // namespace | 298 } // namespace |
| 299 } // namespace test | 299 } // namespace test |
| 300 } // namespace crashpad | 300 } // namespace crashpad |
| OLD | NEW |