| 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, |
| 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_misc_info_writer.h" | 15 #include "minidump/minidump_misc_info_writer.h" |
| 16 | 16 |
| 17 #include <dbghelp.h> | 17 #include <dbghelp.h> |
| 18 #include <string.h> | 18 #include <string.h> |
| 19 | 19 |
| 20 #include <string> | 20 #include <string> |
| 21 | 21 |
| 22 #include "base/basictypes.h" | 22 #include "base/basictypes.h" |
| 23 #include "base/memory/scoped_ptr.h" |
| 23 #include "base/strings/string16.h" | 24 #include "base/strings/string16.h" |
| 24 #include "base/strings/utf_string_conversions.h" | 25 #include "base/strings/utf_string_conversions.h" |
| 25 #include "gtest/gtest.h" | 26 #include "gtest/gtest.h" |
| 26 #include "minidump/minidump_file_writer.h" | 27 #include "minidump/minidump_file_writer.h" |
| 27 #include "minidump/test/minidump_file_writer_test_util.h" | 28 #include "minidump/test/minidump_file_writer_test_util.h" |
| 28 #include "minidump/test/minidump_writable_test_util.h" | 29 #include "minidump/test/minidump_writable_test_util.h" |
| 29 #include "util/file/string_file_writer.h" | 30 #include "util/file/string_file_writer.h" |
| 30 #include "util/stdlib/strlcpy.h" | 31 #include "util/stdlib/strlcpy.h" |
| 31 | 32 |
| 32 namespace crashpad { | 33 namespace crashpad { |
| (...skipping 115 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 148 { | 149 { |
| 149 SCOPED_TRACE("DbgBldStr"); | 150 SCOPED_TRACE("DbgBldStr"); |
| 150 ExpectNULPaddedString16Equal(expected->DbgBldStr, | 151 ExpectNULPaddedString16Equal(expected->DbgBldStr, |
| 151 observed->DbgBldStr, | 152 observed->DbgBldStr, |
| 152 arraysize(expected->DbgBldStr)); | 153 arraysize(expected->DbgBldStr)); |
| 153 } | 154 } |
| 154 } | 155 } |
| 155 | 156 |
| 156 TEST(MinidumpMiscInfoWriter, Empty) { | 157 TEST(MinidumpMiscInfoWriter, Empty) { |
| 157 MinidumpFileWriter minidump_file_writer; | 158 MinidumpFileWriter minidump_file_writer; |
| 158 MinidumpMiscInfoWriter misc_info_writer; | 159 auto misc_info_writer = make_scoped_ptr(new MinidumpMiscInfoWriter()); |
| 159 | 160 |
| 160 minidump_file_writer.AddStream(&misc_info_writer); | 161 minidump_file_writer.AddStream(misc_info_writer.Pass()); |
| 161 | 162 |
| 162 StringFileWriter file_writer; | 163 StringFileWriter file_writer; |
| 163 ASSERT_TRUE(minidump_file_writer.WriteEverything(&file_writer)); | 164 ASSERT_TRUE(minidump_file_writer.WriteEverything(&file_writer)); |
| 164 | 165 |
| 165 const MINIDUMP_MISC_INFO* observed; | 166 const MINIDUMP_MISC_INFO* observed; |
| 166 ASSERT_NO_FATAL_FAILURE(GetMiscInfoStream(file_writer.string(), &observed)); | 167 ASSERT_NO_FATAL_FAILURE(GetMiscInfoStream(file_writer.string(), &observed)); |
| 167 | 168 |
| 168 MINIDUMP_MISC_INFO expected = {}; | 169 MINIDUMP_MISC_INFO expected = {}; |
| 169 | 170 |
| 170 ExpectMiscInfoEqual(&expected, observed); | 171 ExpectMiscInfoEqual(&expected, observed); |
| 171 } | 172 } |
| 172 | 173 |
| 173 TEST(MinidumpMiscInfoWriter, ProcessId) { | 174 TEST(MinidumpMiscInfoWriter, ProcessId) { |
| 174 MinidumpFileWriter minidump_file_writer; | 175 MinidumpFileWriter minidump_file_writer; |
| 175 MinidumpMiscInfoWriter misc_info_writer; | 176 auto misc_info_writer = make_scoped_ptr(new MinidumpMiscInfoWriter()); |
| 176 | 177 |
| 177 const uint32_t kProcessId = 12345; | 178 const uint32_t kProcessId = 12345; |
| 178 | 179 |
| 179 misc_info_writer.SetProcessId(kProcessId); | 180 misc_info_writer->SetProcessId(kProcessId); |
| 180 | 181 |
| 181 minidump_file_writer.AddStream(&misc_info_writer); | 182 minidump_file_writer.AddStream(misc_info_writer.Pass()); |
| 182 | 183 |
| 183 StringFileWriter file_writer; | 184 StringFileWriter file_writer; |
| 184 ASSERT_TRUE(minidump_file_writer.WriteEverything(&file_writer)); | 185 ASSERT_TRUE(minidump_file_writer.WriteEverything(&file_writer)); |
| 185 | 186 |
| 186 const MINIDUMP_MISC_INFO* observed; | 187 const MINIDUMP_MISC_INFO* observed; |
| 187 ASSERT_NO_FATAL_FAILURE(GetMiscInfoStream(file_writer.string(), &observed)); | 188 ASSERT_NO_FATAL_FAILURE(GetMiscInfoStream(file_writer.string(), &observed)); |
| 188 | 189 |
| 189 MINIDUMP_MISC_INFO expected = {}; | 190 MINIDUMP_MISC_INFO expected = {}; |
| 190 expected.Flags1 = MINIDUMP_MISC1_PROCESS_ID; | 191 expected.Flags1 = MINIDUMP_MISC1_PROCESS_ID; |
| 191 expected.ProcessId = kProcessId; | 192 expected.ProcessId = kProcessId; |
| 192 | 193 |
| 193 ExpectMiscInfoEqual(&expected, observed); | 194 ExpectMiscInfoEqual(&expected, observed); |
| 194 } | 195 } |
| 195 | 196 |
| 196 TEST(MinidumpMiscInfoWriter, ProcessTimes) { | 197 TEST(MinidumpMiscInfoWriter, ProcessTimes) { |
| 197 MinidumpFileWriter minidump_file_writer; | 198 MinidumpFileWriter minidump_file_writer; |
| 198 MinidumpMiscInfoWriter misc_info_writer; | 199 auto misc_info_writer = make_scoped_ptr(new MinidumpMiscInfoWriter()); |
| 199 | 200 |
| 200 const time_t kProcessCreateTime = 0x15252f00; | 201 const time_t kProcessCreateTime = 0x15252f00; |
| 201 const uint32_t kProcessUserTime = 10; | 202 const uint32_t kProcessUserTime = 10; |
| 202 const uint32_t kProcessKernelTime = 5; | 203 const uint32_t kProcessKernelTime = 5; |
| 203 | 204 |
| 204 misc_info_writer.SetProcessTimes( | 205 misc_info_writer->SetProcessTimes( |
| 205 kProcessCreateTime, kProcessUserTime, kProcessKernelTime); | 206 kProcessCreateTime, kProcessUserTime, kProcessKernelTime); |
| 206 | 207 |
| 207 minidump_file_writer.AddStream(&misc_info_writer); | 208 minidump_file_writer.AddStream(misc_info_writer.Pass()); |
| 208 | 209 |
| 209 StringFileWriter file_writer; | 210 StringFileWriter file_writer; |
| 210 ASSERT_TRUE(minidump_file_writer.WriteEverything(&file_writer)); | 211 ASSERT_TRUE(minidump_file_writer.WriteEverything(&file_writer)); |
| 211 | 212 |
| 212 const MINIDUMP_MISC_INFO* observed; | 213 const MINIDUMP_MISC_INFO* observed; |
| 213 ASSERT_NO_FATAL_FAILURE(GetMiscInfoStream(file_writer.string(), &observed)); | 214 ASSERT_NO_FATAL_FAILURE(GetMiscInfoStream(file_writer.string(), &observed)); |
| 214 | 215 |
| 215 MINIDUMP_MISC_INFO expected = {}; | 216 MINIDUMP_MISC_INFO expected = {}; |
| 216 expected.Flags1 = MINIDUMP_MISC1_PROCESS_TIMES; | 217 expected.Flags1 = MINIDUMP_MISC1_PROCESS_TIMES; |
| 217 expected.ProcessCreateTime = kProcessCreateTime; | 218 expected.ProcessCreateTime = kProcessCreateTime; |
| 218 expected.ProcessUserTime = kProcessUserTime; | 219 expected.ProcessUserTime = kProcessUserTime; |
| 219 expected.ProcessKernelTime = kProcessKernelTime; | 220 expected.ProcessKernelTime = kProcessKernelTime; |
| 220 | 221 |
| 221 ExpectMiscInfoEqual(&expected, observed); | 222 ExpectMiscInfoEqual(&expected, observed); |
| 222 } | 223 } |
| 223 | 224 |
| 224 TEST(MinidumpMiscInfoWriter, ProcessorPowerInfo) { | 225 TEST(MinidumpMiscInfoWriter, ProcessorPowerInfo) { |
| 225 MinidumpFileWriter minidump_file_writer; | 226 MinidumpFileWriter minidump_file_writer; |
| 226 MinidumpMiscInfoWriter misc_info_writer; | 227 auto misc_info_writer = make_scoped_ptr(new MinidumpMiscInfoWriter()); |
| 227 | 228 |
| 228 const uint32_t kProcessorMaxMhz = 2800; | 229 const uint32_t kProcessorMaxMhz = 2800; |
| 229 const uint32_t kProcessorCurrentMhz = 2300; | 230 const uint32_t kProcessorCurrentMhz = 2300; |
| 230 const uint32_t kProcessorMhzLimit = 3300; | 231 const uint32_t kProcessorMhzLimit = 3300; |
| 231 const uint32_t kProcessorMaxIdleState = 5; | 232 const uint32_t kProcessorMaxIdleState = 5; |
| 232 const uint32_t kProcessorCurrentIdleState = 1; | 233 const uint32_t kProcessorCurrentIdleState = 1; |
| 233 | 234 |
| 234 misc_info_writer.SetProcessorPowerInfo(kProcessorMaxMhz, | 235 misc_info_writer->SetProcessorPowerInfo(kProcessorMaxMhz, |
| 235 kProcessorCurrentMhz, | 236 kProcessorCurrentMhz, |
| 236 kProcessorMhzLimit, | 237 kProcessorMhzLimit, |
| 237 kProcessorMaxIdleState, | 238 kProcessorMaxIdleState, |
| 238 kProcessorCurrentIdleState); | 239 kProcessorCurrentIdleState); |
| 239 | 240 |
| 240 minidump_file_writer.AddStream(&misc_info_writer); | 241 minidump_file_writer.AddStream(misc_info_writer.Pass()); |
| 241 | 242 |
| 242 StringFileWriter file_writer; | 243 StringFileWriter file_writer; |
| 243 ASSERT_TRUE(minidump_file_writer.WriteEverything(&file_writer)); | 244 ASSERT_TRUE(minidump_file_writer.WriteEverything(&file_writer)); |
| 244 | 245 |
| 245 const MINIDUMP_MISC_INFO_2* observed; | 246 const MINIDUMP_MISC_INFO_2* observed; |
| 246 ASSERT_NO_FATAL_FAILURE(GetMiscInfoStream(file_writer.string(), &observed)); | 247 ASSERT_NO_FATAL_FAILURE(GetMiscInfoStream(file_writer.string(), &observed)); |
| 247 | 248 |
| 248 MINIDUMP_MISC_INFO_2 expected = {}; | 249 MINIDUMP_MISC_INFO_2 expected = {}; |
| 249 expected.Flags1 = MINIDUMP_MISC1_PROCESSOR_POWER_INFO; | 250 expected.Flags1 = MINIDUMP_MISC1_PROCESSOR_POWER_INFO; |
| 250 expected.ProcessorMaxMhz = kProcessorMaxMhz; | 251 expected.ProcessorMaxMhz = kProcessorMaxMhz; |
| 251 expected.ProcessorCurrentMhz = kProcessorCurrentMhz; | 252 expected.ProcessorCurrentMhz = kProcessorCurrentMhz; |
| 252 expected.ProcessorMhzLimit = kProcessorMhzLimit; | 253 expected.ProcessorMhzLimit = kProcessorMhzLimit; |
| 253 expected.ProcessorMaxIdleState = kProcessorMaxIdleState; | 254 expected.ProcessorMaxIdleState = kProcessorMaxIdleState; |
| 254 expected.ProcessorCurrentIdleState = kProcessorCurrentIdleState; | 255 expected.ProcessorCurrentIdleState = kProcessorCurrentIdleState; |
| 255 | 256 |
| 256 ExpectMiscInfoEqual(&expected, observed); | 257 ExpectMiscInfoEqual(&expected, observed); |
| 257 } | 258 } |
| 258 | 259 |
| 259 TEST(MinidumpMiscInfoWriter, ProcessIntegrityLevel) { | 260 TEST(MinidumpMiscInfoWriter, ProcessIntegrityLevel) { |
| 260 MinidumpFileWriter minidump_file_writer; | 261 MinidumpFileWriter minidump_file_writer; |
| 261 MinidumpMiscInfoWriter misc_info_writer; | 262 auto misc_info_writer = make_scoped_ptr(new MinidumpMiscInfoWriter()); |
| 262 | 263 |
| 263 const uint32_t kProcessIntegrityLevel = 0x2000; | 264 const uint32_t kProcessIntegrityLevel = 0x2000; |
| 264 | 265 |
| 265 misc_info_writer.SetProcessIntegrityLevel(kProcessIntegrityLevel); | 266 misc_info_writer->SetProcessIntegrityLevel(kProcessIntegrityLevel); |
| 266 | 267 |
| 267 minidump_file_writer.AddStream(&misc_info_writer); | 268 minidump_file_writer.AddStream(misc_info_writer.Pass()); |
| 268 | 269 |
| 269 StringFileWriter file_writer; | 270 StringFileWriter file_writer; |
| 270 ASSERT_TRUE(minidump_file_writer.WriteEverything(&file_writer)); | 271 ASSERT_TRUE(minidump_file_writer.WriteEverything(&file_writer)); |
| 271 | 272 |
| 272 const MINIDUMP_MISC_INFO_3* observed; | 273 const MINIDUMP_MISC_INFO_3* observed; |
| 273 ASSERT_NO_FATAL_FAILURE(GetMiscInfoStream(file_writer.string(), &observed)); | 274 ASSERT_NO_FATAL_FAILURE(GetMiscInfoStream(file_writer.string(), &observed)); |
| 274 | 275 |
| 275 MINIDUMP_MISC_INFO_3 expected = {}; | 276 MINIDUMP_MISC_INFO_3 expected = {}; |
| 276 expected.Flags1 = MINIDUMP_MISC3_PROCESS_INTEGRITY; | 277 expected.Flags1 = MINIDUMP_MISC3_PROCESS_INTEGRITY; |
| 277 expected.ProcessIntegrityLevel = kProcessIntegrityLevel; | 278 expected.ProcessIntegrityLevel = kProcessIntegrityLevel; |
| 278 | 279 |
| 279 ExpectMiscInfoEqual(&expected, observed); | 280 ExpectMiscInfoEqual(&expected, observed); |
| 280 } | 281 } |
| 281 | 282 |
| 282 TEST(MinidumpMiscInfoWriter, ProcessExecuteFlags) { | 283 TEST(MinidumpMiscInfoWriter, ProcessExecuteFlags) { |
| 283 MinidumpFileWriter minidump_file_writer; | 284 MinidumpFileWriter minidump_file_writer; |
| 284 MinidumpMiscInfoWriter misc_info_writer; | 285 auto misc_info_writer = make_scoped_ptr(new MinidumpMiscInfoWriter()); |
| 285 | 286 |
| 286 const uint32_t kProcessExecuteFlags = 0x13579bdf; | 287 const uint32_t kProcessExecuteFlags = 0x13579bdf; |
| 287 | 288 |
| 288 misc_info_writer.SetProcessExecuteFlags(kProcessExecuteFlags); | 289 misc_info_writer->SetProcessExecuteFlags(kProcessExecuteFlags); |
| 289 | 290 |
| 290 minidump_file_writer.AddStream(&misc_info_writer); | 291 minidump_file_writer.AddStream(misc_info_writer.Pass()); |
| 291 | 292 |
| 292 StringFileWriter file_writer; | 293 StringFileWriter file_writer; |
| 293 ASSERT_TRUE(minidump_file_writer.WriteEverything(&file_writer)); | 294 ASSERT_TRUE(minidump_file_writer.WriteEverything(&file_writer)); |
| 294 | 295 |
| 295 const MINIDUMP_MISC_INFO_3* observed; | 296 const MINIDUMP_MISC_INFO_3* observed; |
| 296 ASSERT_NO_FATAL_FAILURE(GetMiscInfoStream(file_writer.string(), &observed)); | 297 ASSERT_NO_FATAL_FAILURE(GetMiscInfoStream(file_writer.string(), &observed)); |
| 297 | 298 |
| 298 MINIDUMP_MISC_INFO_3 expected = {}; | 299 MINIDUMP_MISC_INFO_3 expected = {}; |
| 299 expected.Flags1 = MINIDUMP_MISC3_PROCESS_EXECUTE_FLAGS; | 300 expected.Flags1 = MINIDUMP_MISC3_PROCESS_EXECUTE_FLAGS; |
| 300 expected.ProcessExecuteFlags = kProcessExecuteFlags; | 301 expected.ProcessExecuteFlags = kProcessExecuteFlags; |
| 301 | 302 |
| 302 ExpectMiscInfoEqual(&expected, observed); | 303 ExpectMiscInfoEqual(&expected, observed); |
| 303 } | 304 } |
| 304 | 305 |
| 305 TEST(MinidumpMiscInfoWriter, ProtectedProcess) { | 306 TEST(MinidumpMiscInfoWriter, ProtectedProcess) { |
| 306 MinidumpFileWriter minidump_file_writer; | 307 MinidumpFileWriter minidump_file_writer; |
| 307 MinidumpMiscInfoWriter misc_info_writer; | 308 auto misc_info_writer = make_scoped_ptr(new MinidumpMiscInfoWriter()); |
| 308 | 309 |
| 309 const uint32_t kProtectedProcess = 1; | 310 const uint32_t kProtectedProcess = 1; |
| 310 | 311 |
| 311 misc_info_writer.SetProtectedProcess(kProtectedProcess); | 312 misc_info_writer->SetProtectedProcess(kProtectedProcess); |
| 312 | 313 |
| 313 minidump_file_writer.AddStream(&misc_info_writer); | 314 minidump_file_writer.AddStream(misc_info_writer.Pass()); |
| 314 | 315 |
| 315 StringFileWriter file_writer; | 316 StringFileWriter file_writer; |
| 316 ASSERT_TRUE(minidump_file_writer.WriteEverything(&file_writer)); | 317 ASSERT_TRUE(minidump_file_writer.WriteEverything(&file_writer)); |
| 317 | 318 |
| 318 const MINIDUMP_MISC_INFO_3* observed; | 319 const MINIDUMP_MISC_INFO_3* observed; |
| 319 ASSERT_NO_FATAL_FAILURE(GetMiscInfoStream(file_writer.string(), &observed)); | 320 ASSERT_NO_FATAL_FAILURE(GetMiscInfoStream(file_writer.string(), &observed)); |
| 320 | 321 |
| 321 MINIDUMP_MISC_INFO_3 expected = {}; | 322 MINIDUMP_MISC_INFO_3 expected = {}; |
| 322 expected.Flags1 = MINIDUMP_MISC3_PROTECTED_PROCESS; | 323 expected.Flags1 = MINIDUMP_MISC3_PROTECTED_PROCESS; |
| 323 expected.ProtectedProcess = kProtectedProcess; | 324 expected.ProtectedProcess = kProtectedProcess; |
| 324 | 325 |
| 325 ExpectMiscInfoEqual(&expected, observed); | 326 ExpectMiscInfoEqual(&expected, observed); |
| 326 } | 327 } |
| 327 | 328 |
| 328 TEST(MinidumpMiscInfoWriter, TimeZone) { | 329 TEST(MinidumpMiscInfoWriter, TimeZone) { |
| 329 MinidumpFileWriter minidump_file_writer; | 330 MinidumpFileWriter minidump_file_writer; |
| 330 MinidumpMiscInfoWriter misc_info_writer; | 331 auto misc_info_writer = make_scoped_ptr(new MinidumpMiscInfoWriter()); |
| 331 | 332 |
| 332 const uint32_t kTimeZoneId = 2; | 333 const uint32_t kTimeZoneId = 2; |
| 333 const int32_t kBias = 300; | 334 const int32_t kBias = 300; |
| 334 const char kStandardName[] = "EST"; | 335 const char kStandardName[] = "EST"; |
| 335 const SYSTEMTIME kStandardDate = {0, 11, 1, 0, 2, 0, 0, 0}; | 336 const SYSTEMTIME kStandardDate = {0, 11, 1, 0, 2, 0, 0, 0}; |
| 336 const int32_t kStandardBias = 0; | 337 const int32_t kStandardBias = 0; |
| 337 const char kDaylightName[] = "EDT"; | 338 const char kDaylightName[] = "EDT"; |
| 338 const SYSTEMTIME kDaylightDate = {0, 3, 2, 0, 2, 0, 0, 0}; | 339 const SYSTEMTIME kDaylightDate = {0, 3, 2, 0, 2, 0, 0, 0}; |
| 339 const int32_t kDaylightBias = -60; | 340 const int32_t kDaylightBias = -60; |
| 340 | 341 |
| 341 misc_info_writer.SetTimeZone(kTimeZoneId, | 342 misc_info_writer->SetTimeZone(kTimeZoneId, |
| 342 kBias, | 343 kBias, |
| 343 kStandardName, | 344 kStandardName, |
| 344 kStandardDate, | 345 kStandardDate, |
| 345 kStandardBias, | 346 kStandardBias, |
| 346 kDaylightName, | 347 kDaylightName, |
| 347 kDaylightDate, | 348 kDaylightDate, |
| 348 kDaylightBias); | 349 kDaylightBias); |
| 349 | 350 |
| 350 minidump_file_writer.AddStream(&misc_info_writer); | 351 minidump_file_writer.AddStream(misc_info_writer.Pass()); |
| 351 | 352 |
| 352 StringFileWriter file_writer; | 353 StringFileWriter file_writer; |
| 353 ASSERT_TRUE(minidump_file_writer.WriteEverything(&file_writer)); | 354 ASSERT_TRUE(minidump_file_writer.WriteEverything(&file_writer)); |
| 354 | 355 |
| 355 const MINIDUMP_MISC_INFO_3* observed; | 356 const MINIDUMP_MISC_INFO_3* observed; |
| 356 ASSERT_NO_FATAL_FAILURE(GetMiscInfoStream(file_writer.string(), &observed)); | 357 ASSERT_NO_FATAL_FAILURE(GetMiscInfoStream(file_writer.string(), &observed)); |
| 357 | 358 |
| 358 MINIDUMP_MISC_INFO_3 expected = {}; | 359 MINIDUMP_MISC_INFO_3 expected = {}; |
| 359 expected.Flags1 = MINIDUMP_MISC3_TIMEZONE; | 360 expected.Flags1 = MINIDUMP_MISC3_TIMEZONE; |
| 360 expected.TimeZoneId = kTimeZoneId; | 361 expected.TimeZoneId = kTimeZoneId; |
| (...skipping 16 matching lines...) Expand all Loading... |
| 377 expected.TimeZone.DaylightBias = kDaylightBias; | 378 expected.TimeZone.DaylightBias = kDaylightBias; |
| 378 | 379 |
| 379 ExpectMiscInfoEqual(&expected, observed); | 380 ExpectMiscInfoEqual(&expected, observed); |
| 380 } | 381 } |
| 381 | 382 |
| 382 TEST(MinidumpMiscInfoWriter, TimeZoneStringsOverflow) { | 383 TEST(MinidumpMiscInfoWriter, TimeZoneStringsOverflow) { |
| 383 // This test makes sure that the time zone name strings are truncated properly | 384 // This test makes sure that the time zone name strings are truncated properly |
| 384 // to the widths of their fields. | 385 // to the widths of their fields. |
| 385 | 386 |
| 386 MinidumpFileWriter minidump_file_writer; | 387 MinidumpFileWriter minidump_file_writer; |
| 387 MinidumpMiscInfoWriter misc_info_writer; | 388 auto misc_info_writer = make_scoped_ptr(new MinidumpMiscInfoWriter()); |
| 388 | 389 |
| 389 const uint32_t kTimeZoneId = 2; | 390 const uint32_t kTimeZoneId = 2; |
| 390 const int32_t kBias = 300; | 391 const int32_t kBias = 300; |
| 391 std::string standard_name( | 392 std::string standard_name( |
| 392 arraysize(decltype(MINIDUMP_MISC_INFO_N::TimeZone)::StandardName) + 1, | 393 arraysize(decltype(MINIDUMP_MISC_INFO_N::TimeZone)::StandardName) + 1, |
| 393 's'); | 394 's'); |
| 394 const int32_t kStandardBias = 0; | 395 const int32_t kStandardBias = 0; |
| 395 std::string daylight_name( | 396 std::string daylight_name( |
| 396 arraysize(decltype(MINIDUMP_MISC_INFO_N::TimeZone)::DaylightName), 'd'); | 397 arraysize(decltype(MINIDUMP_MISC_INFO_N::TimeZone)::DaylightName), 'd'); |
| 397 const int32_t kDaylightBias = -60; | 398 const int32_t kDaylightBias = -60; |
| 398 | 399 |
| 399 // Test using kSystemTimeZero, because not all platforms will be able to | 400 // Test using kSystemTimeZero, because not all platforms will be able to |
| 400 // provide daylight saving time transition times. | 401 // provide daylight saving time transition times. |
| 401 const SYSTEMTIME kSystemTimeZero = {}; | 402 const SYSTEMTIME kSystemTimeZero = {}; |
| 402 | 403 |
| 403 misc_info_writer.SetTimeZone(kTimeZoneId, | 404 misc_info_writer->SetTimeZone(kTimeZoneId, |
| 404 kBias, | 405 kBias, |
| 405 standard_name, | 406 standard_name, |
| 406 kSystemTimeZero, | 407 kSystemTimeZero, |
| 407 kStandardBias, | 408 kStandardBias, |
| 408 daylight_name, | 409 daylight_name, |
| 409 kSystemTimeZero, | 410 kSystemTimeZero, |
| 410 kDaylightBias); | 411 kDaylightBias); |
| 411 | 412 |
| 412 minidump_file_writer.AddStream(&misc_info_writer); | 413 minidump_file_writer.AddStream(misc_info_writer.Pass()); |
| 413 | 414 |
| 414 StringFileWriter file_writer; | 415 StringFileWriter file_writer; |
| 415 ASSERT_TRUE(minidump_file_writer.WriteEverything(&file_writer)); | 416 ASSERT_TRUE(minidump_file_writer.WriteEverything(&file_writer)); |
| 416 | 417 |
| 417 const MINIDUMP_MISC_INFO_3* observed; | 418 const MINIDUMP_MISC_INFO_3* observed; |
| 418 ASSERT_NO_FATAL_FAILURE(GetMiscInfoStream(file_writer.string(), &observed)); | 419 ASSERT_NO_FATAL_FAILURE(GetMiscInfoStream(file_writer.string(), &observed)); |
| 419 | 420 |
| 420 MINIDUMP_MISC_INFO_3 expected = {}; | 421 MINIDUMP_MISC_INFO_3 expected = {}; |
| 421 expected.Flags1 = MINIDUMP_MISC3_TIMEZONE; | 422 expected.Flags1 = MINIDUMP_MISC3_TIMEZONE; |
| 422 expected.TimeZoneId = kTimeZoneId; | 423 expected.TimeZoneId = kTimeZoneId; |
| (...skipping 13 matching lines...) Expand all Loading... |
| 436 memcpy(&expected.TimeZone.DaylightDate, | 437 memcpy(&expected.TimeZone.DaylightDate, |
| 437 &kSystemTimeZero, | 438 &kSystemTimeZero, |
| 438 sizeof(expected.TimeZone.DaylightDate)); | 439 sizeof(expected.TimeZone.DaylightDate)); |
| 439 expected.TimeZone.DaylightBias = kDaylightBias; | 440 expected.TimeZone.DaylightBias = kDaylightBias; |
| 440 | 441 |
| 441 ExpectMiscInfoEqual(&expected, observed); | 442 ExpectMiscInfoEqual(&expected, observed); |
| 442 } | 443 } |
| 443 | 444 |
| 444 TEST(MinidumpMiscInfoWriter, BuildStrings) { | 445 TEST(MinidumpMiscInfoWriter, BuildStrings) { |
| 445 MinidumpFileWriter minidump_file_writer; | 446 MinidumpFileWriter minidump_file_writer; |
| 446 MinidumpMiscInfoWriter misc_info_writer; | 447 auto misc_info_writer = make_scoped_ptr(new MinidumpMiscInfoWriter()); |
| 447 | 448 |
| 448 const char kBuildString[] = "build string"; | 449 const char kBuildString[] = "build string"; |
| 449 const char kDebugBuildString[] = "debug build string"; | 450 const char kDebugBuildString[] = "debug build string"; |
| 450 | 451 |
| 451 misc_info_writer.SetBuildString(kBuildString, kDebugBuildString); | 452 misc_info_writer->SetBuildString(kBuildString, kDebugBuildString); |
| 452 | 453 |
| 453 minidump_file_writer.AddStream(&misc_info_writer); | 454 minidump_file_writer.AddStream(misc_info_writer.Pass()); |
| 454 | 455 |
| 455 StringFileWriter file_writer; | 456 StringFileWriter file_writer; |
| 456 ASSERT_TRUE(minidump_file_writer.WriteEverything(&file_writer)); | 457 ASSERT_TRUE(minidump_file_writer.WriteEverything(&file_writer)); |
| 457 | 458 |
| 458 const MINIDUMP_MISC_INFO_4* observed; | 459 const MINIDUMP_MISC_INFO_4* observed; |
| 459 ASSERT_NO_FATAL_FAILURE(GetMiscInfoStream(file_writer.string(), &observed)); | 460 ASSERT_NO_FATAL_FAILURE(GetMiscInfoStream(file_writer.string(), &observed)); |
| 460 | 461 |
| 461 MINIDUMP_MISC_INFO_4 expected = {}; | 462 MINIDUMP_MISC_INFO_4 expected = {}; |
| 462 expected.Flags1 = MINIDUMP_MISC4_BUILDSTRING; | 463 expected.Flags1 = MINIDUMP_MISC4_BUILDSTRING; |
| 463 string16 build_string_utf16 = base::UTF8ToUTF16(kBuildString); | 464 string16 build_string_utf16 = base::UTF8ToUTF16(kBuildString); |
| 464 c16lcpy(expected.BuildString, | 465 c16lcpy(expected.BuildString, |
| 465 build_string_utf16.c_str(), | 466 build_string_utf16.c_str(), |
| 466 arraysize(expected.BuildString)); | 467 arraysize(expected.BuildString)); |
| 467 string16 debug_build_string_utf16 = base::UTF8ToUTF16(kDebugBuildString); | 468 string16 debug_build_string_utf16 = base::UTF8ToUTF16(kDebugBuildString); |
| 468 c16lcpy(expected.DbgBldStr, | 469 c16lcpy(expected.DbgBldStr, |
| 469 debug_build_string_utf16.c_str(), | 470 debug_build_string_utf16.c_str(), |
| 470 arraysize(expected.DbgBldStr)); | 471 arraysize(expected.DbgBldStr)); |
| 471 | 472 |
| 472 ExpectMiscInfoEqual(&expected, observed); | 473 ExpectMiscInfoEqual(&expected, observed); |
| 473 } | 474 } |
| 474 | 475 |
| 475 TEST(MinidumpMiscInfoWriter, BuildStringsOverflow) { | 476 TEST(MinidumpMiscInfoWriter, BuildStringsOverflow) { |
| 476 // This test makes sure that the build strings are truncated properly to the | 477 // This test makes sure that the build strings are truncated properly to the |
| 477 // widths of their fields. | 478 // widths of their fields. |
| 478 | 479 |
| 479 MinidumpFileWriter minidump_file_writer; | 480 MinidumpFileWriter minidump_file_writer; |
| 480 MinidumpMiscInfoWriter misc_info_writer; | 481 auto misc_info_writer = make_scoped_ptr(new MinidumpMiscInfoWriter()); |
| 481 | 482 |
| 482 std::string build_string(arraysize(MINIDUMP_MISC_INFO_N::BuildString) + 1, | 483 std::string build_string(arraysize(MINIDUMP_MISC_INFO_N::BuildString) + 1, |
| 483 'B'); | 484 'B'); |
| 484 std::string debug_build_string(arraysize(MINIDUMP_MISC_INFO_N::DbgBldStr), | 485 std::string debug_build_string(arraysize(MINIDUMP_MISC_INFO_N::DbgBldStr), |
| 485 'D'); | 486 'D'); |
| 486 | 487 |
| 487 misc_info_writer.SetBuildString(build_string, debug_build_string); | 488 misc_info_writer->SetBuildString(build_string, debug_build_string); |
| 488 | 489 |
| 489 minidump_file_writer.AddStream(&misc_info_writer); | 490 minidump_file_writer.AddStream(misc_info_writer.Pass()); |
| 490 | 491 |
| 491 StringFileWriter file_writer; | 492 StringFileWriter file_writer; |
| 492 ASSERT_TRUE(minidump_file_writer.WriteEverything(&file_writer)); | 493 ASSERT_TRUE(minidump_file_writer.WriteEverything(&file_writer)); |
| 493 | 494 |
| 494 const MINIDUMP_MISC_INFO_4* observed; | 495 const MINIDUMP_MISC_INFO_4* observed; |
| 495 ASSERT_NO_FATAL_FAILURE(GetMiscInfoStream(file_writer.string(), &observed)); | 496 ASSERT_NO_FATAL_FAILURE(GetMiscInfoStream(file_writer.string(), &observed)); |
| 496 | 497 |
| 497 MINIDUMP_MISC_INFO_4 expected = {}; | 498 MINIDUMP_MISC_INFO_4 expected = {}; |
| 498 expected.Flags1 = MINIDUMP_MISC4_BUILDSTRING; | 499 expected.Flags1 = MINIDUMP_MISC4_BUILDSTRING; |
| 499 string16 build_string_utf16 = base::UTF8ToUTF16(build_string); | 500 string16 build_string_utf16 = base::UTF8ToUTF16(build_string); |
| 500 c16lcpy(expected.BuildString, | 501 c16lcpy(expected.BuildString, |
| 501 build_string_utf16.c_str(), | 502 build_string_utf16.c_str(), |
| 502 arraysize(expected.BuildString)); | 503 arraysize(expected.BuildString)); |
| 503 string16 debug_build_string_utf16 = base::UTF8ToUTF16(debug_build_string); | 504 string16 debug_build_string_utf16 = base::UTF8ToUTF16(debug_build_string); |
| 504 c16lcpy(expected.DbgBldStr, | 505 c16lcpy(expected.DbgBldStr, |
| 505 debug_build_string_utf16.c_str(), | 506 debug_build_string_utf16.c_str(), |
| 506 arraysize(expected.DbgBldStr)); | 507 arraysize(expected.DbgBldStr)); |
| 507 | 508 |
| 508 ExpectMiscInfoEqual(&expected, observed); | 509 ExpectMiscInfoEqual(&expected, observed); |
| 509 } | 510 } |
| 510 | 511 |
| 511 TEST(MinidumpMiscInfoWriter, Everything) { | 512 TEST(MinidumpMiscInfoWriter, Everything) { |
| 512 MinidumpFileWriter minidump_file_writer; | 513 MinidumpFileWriter minidump_file_writer; |
| 513 MinidumpMiscInfoWriter misc_info_writer; | 514 auto misc_info_writer = make_scoped_ptr(new MinidumpMiscInfoWriter()); |
| 514 | 515 |
| 515 const uint32_t kProcessId = 12345; | 516 const uint32_t kProcessId = 12345; |
| 516 const time_t kProcessCreateTime = 0x15252f00; | 517 const time_t kProcessCreateTime = 0x15252f00; |
| 517 const uint32_t kProcessUserTime = 10; | 518 const uint32_t kProcessUserTime = 10; |
| 518 const uint32_t kProcessKernelTime = 5; | 519 const uint32_t kProcessKernelTime = 5; |
| 519 const uint32_t kProcessorMaxMhz = 2800; | 520 const uint32_t kProcessorMaxMhz = 2800; |
| 520 const uint32_t kProcessorCurrentMhz = 2300; | 521 const uint32_t kProcessorCurrentMhz = 2300; |
| 521 const uint32_t kProcessorMhzLimit = 3300; | 522 const uint32_t kProcessorMhzLimit = 3300; |
| 522 const uint32_t kProcessorMaxIdleState = 5; | 523 const uint32_t kProcessorMaxIdleState = 5; |
| 523 const uint32_t kProcessorCurrentIdleState = 1; | 524 const uint32_t kProcessorCurrentIdleState = 1; |
| 524 const uint32_t kProcessIntegrityLevel = 0x2000; | 525 const uint32_t kProcessIntegrityLevel = 0x2000; |
| 525 const uint32_t kProcessExecuteFlags = 0x13579bdf; | 526 const uint32_t kProcessExecuteFlags = 0x13579bdf; |
| 526 const uint32_t kProtectedProcess = 1; | 527 const uint32_t kProtectedProcess = 1; |
| 527 const uint32_t kTimeZoneId = 2; | 528 const uint32_t kTimeZoneId = 2; |
| 528 const int32_t kBias = 300; | 529 const int32_t kBias = 300; |
| 529 const char kStandardName[] = "EST"; | 530 const char kStandardName[] = "EST"; |
| 530 const int32_t kStandardBias = 0; | 531 const int32_t kStandardBias = 0; |
| 531 const char kDaylightName[] = "EDT"; | 532 const char kDaylightName[] = "EDT"; |
| 532 const int32_t kDaylightBias = -60; | 533 const int32_t kDaylightBias = -60; |
| 533 const SYSTEMTIME kSystemTimeZero = {}; | 534 const SYSTEMTIME kSystemTimeZero = {}; |
| 534 const char kBuildString[] = "build string"; | 535 const char kBuildString[] = "build string"; |
| 535 const char kDebugBuildString[] = "debug build string"; | 536 const char kDebugBuildString[] = "debug build string"; |
| 536 | 537 |
| 537 misc_info_writer.SetProcessId(kProcessId); | 538 misc_info_writer->SetProcessId(kProcessId); |
| 538 misc_info_writer.SetProcessTimes( | 539 misc_info_writer->SetProcessTimes( |
| 539 kProcessCreateTime, kProcessUserTime, kProcessKernelTime); | 540 kProcessCreateTime, kProcessUserTime, kProcessKernelTime); |
| 540 misc_info_writer.SetProcessorPowerInfo(kProcessorMaxMhz, | 541 misc_info_writer->SetProcessorPowerInfo(kProcessorMaxMhz, |
| 541 kProcessorCurrentMhz, | 542 kProcessorCurrentMhz, |
| 542 kProcessorMhzLimit, | 543 kProcessorMhzLimit, |
| 543 kProcessorMaxIdleState, | 544 kProcessorMaxIdleState, |
| 544 kProcessorCurrentIdleState); | 545 kProcessorCurrentIdleState); |
| 545 misc_info_writer.SetProcessIntegrityLevel(kProcessIntegrityLevel); | 546 misc_info_writer->SetProcessIntegrityLevel(kProcessIntegrityLevel); |
| 546 misc_info_writer.SetProcessExecuteFlags(kProcessExecuteFlags); | 547 misc_info_writer->SetProcessExecuteFlags(kProcessExecuteFlags); |
| 547 misc_info_writer.SetProtectedProcess(kProtectedProcess); | 548 misc_info_writer->SetProtectedProcess(kProtectedProcess); |
| 548 misc_info_writer.SetTimeZone(kTimeZoneId, | 549 misc_info_writer->SetTimeZone(kTimeZoneId, |
| 549 kBias, | 550 kBias, |
| 550 kStandardName, | 551 kStandardName, |
| 551 kSystemTimeZero, | 552 kSystemTimeZero, |
| 552 kStandardBias, | 553 kStandardBias, |
| 553 kDaylightName, | 554 kDaylightName, |
| 554 kSystemTimeZero, | 555 kSystemTimeZero, |
| 555 kDaylightBias); | 556 kDaylightBias); |
| 556 misc_info_writer.SetBuildString(kBuildString, kDebugBuildString); | 557 misc_info_writer->SetBuildString(kBuildString, kDebugBuildString); |
| 557 | 558 |
| 558 minidump_file_writer.AddStream(&misc_info_writer); | 559 minidump_file_writer.AddStream(misc_info_writer.Pass()); |
| 559 | 560 |
| 560 StringFileWriter file_writer; | 561 StringFileWriter file_writer; |
| 561 ASSERT_TRUE(minidump_file_writer.WriteEverything(&file_writer)); | 562 ASSERT_TRUE(minidump_file_writer.WriteEverything(&file_writer)); |
| 562 | 563 |
| 563 const MINIDUMP_MISC_INFO_4* observed; | 564 const MINIDUMP_MISC_INFO_4* observed; |
| 564 ASSERT_NO_FATAL_FAILURE(GetMiscInfoStream(file_writer.string(), &observed)); | 565 ASSERT_NO_FATAL_FAILURE(GetMiscInfoStream(file_writer.string(), &observed)); |
| 565 | 566 |
| 566 MINIDUMP_MISC_INFO_4 expected = {}; | 567 MINIDUMP_MISC_INFO_4 expected = {}; |
| 567 expected.Flags1 = | 568 expected.Flags1 = |
| 568 MINIDUMP_MISC1_PROCESS_ID | MINIDUMP_MISC1_PROCESS_TIMES | | 569 MINIDUMP_MISC1_PROCESS_ID | MINIDUMP_MISC1_PROCESS_TIMES | |
| (...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 607 c16lcpy(expected.DbgBldStr, | 608 c16lcpy(expected.DbgBldStr, |
| 608 debug_build_string_utf16.c_str(), | 609 debug_build_string_utf16.c_str(), |
| 609 arraysize(expected.DbgBldStr)); | 610 arraysize(expected.DbgBldStr)); |
| 610 | 611 |
| 611 ExpectMiscInfoEqual(&expected, observed); | 612 ExpectMiscInfoEqual(&expected, observed); |
| 612 } | 613 } |
| 613 | 614 |
| 614 } // namespace | 615 } // namespace |
| 615 } // namespace test | 616 } // namespace test |
| 616 } // namespace crashpad | 617 } // namespace crashpad |
| OLD | NEW |