OLD | NEW |
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 // Test of Histogram class | 5 // Test of Histogram class |
6 | 6 |
7 #include <climits> | 7 #include <climits> |
8 #include <algorithm> | 8 #include <algorithm> |
9 #include <vector> | 9 #include <vector> |
10 | 10 |
(...skipping 297 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
308 | 308 |
309 TEST_F(HistogramTest, CorruptSampleCounts) { | 309 TEST_F(HistogramTest, CorruptSampleCounts) { |
310 Histogram* histogram = static_cast<Histogram*>( | 310 Histogram* histogram = static_cast<Histogram*>( |
311 Histogram::FactoryGet("Histogram", 1, 64, 8, HistogramBase::kNoFlags)); | 311 Histogram::FactoryGet("Histogram", 1, 64, 8, HistogramBase::kNoFlags)); |
312 | 312 |
313 // Add some samples. | 313 // Add some samples. |
314 histogram->Add(20); | 314 histogram->Add(20); |
315 histogram->Add(40); | 315 histogram->Add(40); |
316 | 316 |
317 scoped_ptr<SampleVector> snapshot = histogram->SnapshotSampleVector(); | 317 scoped_ptr<SampleVector> snapshot = histogram->SnapshotSampleVector(); |
318 EXPECT_EQ(Histogram::NO_INCONSISTENCIES, | 318 EXPECT_EQ(NO_INCONSISTENCIES, histogram->FindCorruption(*snapshot)); |
319 histogram->FindCorruption(*snapshot)); | |
320 EXPECT_EQ(2, snapshot->redundant_count()); | 319 EXPECT_EQ(2, snapshot->redundant_count()); |
321 EXPECT_EQ(2, snapshot->TotalCount()); | 320 EXPECT_EQ(2, snapshot->TotalCount()); |
322 | 321 |
323 snapshot->counts_[3] += 100; // Sample count won't match redundant count. | 322 snapshot->counts_[3] += 100; // Sample count won't match redundant count. |
324 EXPECT_EQ(Histogram::COUNT_LOW_ERROR, | 323 EXPECT_EQ(COUNT_LOW_ERROR, histogram->FindCorruption(*snapshot)); |
325 histogram->FindCorruption(*snapshot)); | |
326 snapshot->counts_[2] -= 200; | 324 snapshot->counts_[2] -= 200; |
327 EXPECT_EQ(Histogram::COUNT_HIGH_ERROR, | 325 EXPECT_EQ(COUNT_HIGH_ERROR, histogram->FindCorruption(*snapshot)); |
328 histogram->FindCorruption(*snapshot)); | |
329 | 326 |
330 // But we can't spot a corruption if it is compensated for. | 327 // But we can't spot a corruption if it is compensated for. |
331 snapshot->counts_[1] += 100; | 328 snapshot->counts_[1] += 100; |
332 EXPECT_EQ(Histogram::NO_INCONSISTENCIES, | 329 EXPECT_EQ(NO_INCONSISTENCIES, histogram->FindCorruption(*snapshot)); |
333 histogram->FindCorruption(*snapshot)); | |
334 } | 330 } |
335 | 331 |
336 TEST_F(HistogramTest, CorruptBucketBounds) { | 332 TEST_F(HistogramTest, CorruptBucketBounds) { |
337 Histogram* histogram = static_cast<Histogram*>( | 333 Histogram* histogram = static_cast<Histogram*>( |
338 Histogram::FactoryGet("Histogram", 1, 64, 8, HistogramBase::kNoFlags)); | 334 Histogram::FactoryGet("Histogram", 1, 64, 8, HistogramBase::kNoFlags)); |
339 | 335 |
340 scoped_ptr<SampleVector> snapshot = histogram->SnapshotSampleVector(); | 336 scoped_ptr<SampleVector> snapshot = histogram->SnapshotSampleVector(); |
341 EXPECT_EQ(Histogram::NO_INCONSISTENCIES, | 337 EXPECT_EQ(NO_INCONSISTENCIES, histogram->FindCorruption(*snapshot)); |
342 histogram->FindCorruption(*snapshot)); | |
343 | 338 |
344 BucketRanges* bucket_ranges = | 339 BucketRanges* bucket_ranges = |
345 const_cast<BucketRanges*>(histogram->bucket_ranges()); | 340 const_cast<BucketRanges*>(histogram->bucket_ranges()); |
346 HistogramBase::Sample tmp = bucket_ranges->range(1); | 341 HistogramBase::Sample tmp = bucket_ranges->range(1); |
347 bucket_ranges->set_range(1, bucket_ranges->range(2)); | 342 bucket_ranges->set_range(1, bucket_ranges->range(2)); |
348 bucket_ranges->set_range(2, tmp); | 343 bucket_ranges->set_range(2, tmp); |
349 EXPECT_EQ(Histogram::BUCKET_ORDER_ERROR | Histogram::RANGE_CHECKSUM_ERROR, | 344 EXPECT_EQ(BUCKET_ORDER_ERROR | RANGE_CHECKSUM_ERROR, |
350 histogram->FindCorruption(*snapshot)); | 345 histogram->FindCorruption(*snapshot)); |
351 | 346 |
352 bucket_ranges->set_range(2, bucket_ranges->range(1)); | 347 bucket_ranges->set_range(2, bucket_ranges->range(1)); |
353 bucket_ranges->set_range(1, tmp); | 348 bucket_ranges->set_range(1, tmp); |
354 EXPECT_EQ(0, histogram->FindCorruption(*snapshot)); | 349 EXPECT_EQ(0, histogram->FindCorruption(*snapshot)); |
355 | 350 |
356 // Show that two simple changes don't offset each other | 351 // Show that two simple changes don't offset each other |
357 bucket_ranges->set_range(3, bucket_ranges->range(3) + 1); | 352 bucket_ranges->set_range(3, bucket_ranges->range(3) + 1); |
358 EXPECT_EQ(Histogram::RANGE_CHECKSUM_ERROR, | 353 EXPECT_EQ(RANGE_CHECKSUM_ERROR, histogram->FindCorruption(*snapshot)); |
359 histogram->FindCorruption(*snapshot)); | |
360 | 354 |
361 bucket_ranges->set_range(4, bucket_ranges->range(4) - 1); | 355 bucket_ranges->set_range(4, bucket_ranges->range(4) - 1); |
362 EXPECT_EQ(Histogram::RANGE_CHECKSUM_ERROR, | 356 EXPECT_EQ(RANGE_CHECKSUM_ERROR, histogram->FindCorruption(*snapshot)); |
363 histogram->FindCorruption(*snapshot)); | |
364 | 357 |
365 // Repair histogram so that destructor won't DCHECK(). | 358 // Repair histogram so that destructor won't DCHECK(). |
366 bucket_ranges->set_range(3, bucket_ranges->range(3) - 1); | 359 bucket_ranges->set_range(3, bucket_ranges->range(3) - 1); |
367 bucket_ranges->set_range(4, bucket_ranges->range(4) + 1); | 360 bucket_ranges->set_range(4, bucket_ranges->range(4) + 1); |
368 } | 361 } |
369 | 362 |
370 TEST_F(HistogramTest, HistogramSerializeInfo) { | 363 TEST_F(HistogramTest, HistogramSerializeInfo) { |
371 Histogram* histogram = static_cast<Histogram*>( | 364 Histogram* histogram = static_cast<Histogram*>( |
372 Histogram::FactoryGet("Histogram", 1, 64, 8, | 365 Histogram::FactoryGet("Histogram", 1, 64, 8, |
373 HistogramBase::kIPCSerializationSourceFlag)); | 366 HistogramBase::kIPCSerializationSourceFlag)); |
(...skipping 109 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
483 // CustomHistogram needs at least 1 valid range. | 476 // CustomHistogram needs at least 1 valid range. |
484 custom_ranges.clear(); | 477 custom_ranges.clear(); |
485 custom_ranges.push_back(0); | 478 custom_ranges.push_back(0); |
486 EXPECT_DEATH(CustomHistogram::FactoryGet("BadRangesCustom3", custom_ranges, | 479 EXPECT_DEATH(CustomHistogram::FactoryGet("BadRangesCustom3", custom_ranges, |
487 HistogramBase::kNoFlags), | 480 HistogramBase::kNoFlags), |
488 ""); | 481 ""); |
489 } | 482 } |
490 #endif | 483 #endif |
491 | 484 |
492 } // namespace base | 485 } // namespace base |
OLD | NEW |