| OLD | NEW |
| 1 // Copyright (c) 2006-2008 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2006-2008 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 "base/metrics/histogram.h" | 7 #include "base/metrics/histogram.h" |
| 8 #include "base/time.h" | 8 #include "base/time.h" |
| 9 #include "testing/gtest/include/gtest/gtest.h" | 9 #include "testing/gtest/include/gtest/gtest.h" |
| 10 | 10 |
| (...skipping 290 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 301 | 301 |
| 302 // Check to see that the bucket counts reflect our additions. | 302 // Check to see that the bucket counts reflect our additions. |
| 303 Histogram::SampleSet sample; | 303 Histogram::SampleSet sample; |
| 304 histogram->SnapshotSample(&sample); | 304 histogram->SnapshotSample(&sample); |
| 305 EXPECT_EQ(INT_MAX, histogram->ranges(8)); | 305 EXPECT_EQ(INT_MAX, histogram->ranges(8)); |
| 306 for (int i = 0; i < 8; i++) | 306 for (int i = 0; i < 8; i++) |
| 307 EXPECT_EQ(i + 1, sample.counts(i)); | 307 EXPECT_EQ(i + 1, sample.counts(i)); |
| 308 } | 308 } |
| 309 | 309 |
| 310 } // namespace | 310 } // namespace |
| 311 | |
| 312 //------------------------------------------------------------------------------ | |
| 313 // We can't be an an anonymous namespace while being friends, so we pop back | |
| 314 // out to the base namespace here. We need to be friends to corrupt the | |
| 315 // internals of the histogram and/or sampleset. | |
| 316 TEST(HistogramTest, CorruptSampleCounts) { | |
| 317 scoped_refptr<Histogram> histogram = Histogram::FactoryGet( | |
| 318 "Histogram", 1, 64, 8, Histogram::kNoFlags); // As per header file. | |
| 319 | |
| 320 EXPECT_EQ(0, histogram->sample_.redundant_count()); | |
| 321 histogram->Add(20); // Add some samples. | |
| 322 histogram->Add(40); | |
| 323 EXPECT_EQ(2, histogram->sample_.redundant_count()); | |
| 324 | |
| 325 Histogram::SampleSet snapshot; | |
| 326 histogram->SnapshotSample(&snapshot); | |
| 327 EXPECT_EQ(Histogram::NO_INCONSISTENCIES, 0); | |
| 328 EXPECT_EQ(0, histogram->FindCorruption(snapshot)); // No default corruption. | |
| 329 EXPECT_EQ(2, snapshot.redundant_count()); | |
| 330 | |
| 331 snapshot.counts_[3] += 100; // Sample count won't match redundant count. | |
| 332 EXPECT_EQ(Histogram::COUNT_LOW_ERROR, histogram->FindCorruption(snapshot)); | |
| 333 snapshot.counts_[2] -= 200; | |
| 334 EXPECT_EQ(Histogram::COUNT_HIGH_ERROR, histogram->FindCorruption(snapshot)); | |
| 335 | |
| 336 // But we can't spot a corruption if it is compensated for. | |
| 337 snapshot.counts_[1] += 100; | |
| 338 EXPECT_EQ(0, histogram->FindCorruption(snapshot)); | |
| 339 } | |
| 340 | |
| 341 TEST(HistogramTest, CorruptBucketBounds) { | |
| 342 scoped_refptr<Histogram> histogram = Histogram::FactoryGet( | |
| 343 "Histogram", 1, 64, 8, Histogram::kNoFlags); // As per header file. | |
| 344 | |
| 345 Histogram::SampleSet snapshot; | |
| 346 histogram->SnapshotSample(&snapshot); | |
| 347 EXPECT_EQ(Histogram::NO_INCONSISTENCIES, 0); | |
| 348 EXPECT_EQ(0, histogram->FindCorruption(snapshot)); // No default corruption. | |
| 349 | |
| 350 std::swap(histogram->ranges_[1], histogram->ranges_[2]); | |
| 351 EXPECT_EQ(Histogram::BUCKET_ORDER_ERROR, histogram->FindCorruption(snapshot)); | |
| 352 | |
| 353 std::swap(histogram->ranges_[1], histogram->ranges_[2]); | |
| 354 EXPECT_EQ(0, histogram->FindCorruption(snapshot)); | |
| 355 | |
| 356 ++histogram->ranges_[3]; | |
| 357 EXPECT_EQ(Histogram::RANGE_CHECKSUM_ERROR, | |
| 358 histogram->FindCorruption(snapshot)); | |
| 359 | |
| 360 // Repair histogram so that destructor won't DCHECK(). | |
| 361 --histogram->ranges_[3]; | |
| 362 } | |
| 363 | |
| 364 } // namespace base | 311 } // namespace base |
| OLD | NEW |