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 |
311 } // namespace base | 364 } // namespace base |
OLD | NEW |