Index: base/metrics/histogram_unittest.cc |
=================================================================== |
--- base/metrics/histogram_unittest.cc (revision 149495) |
+++ base/metrics/histogram_unittest.cc (working copy) |
@@ -319,4 +319,48 @@ |
bucket_ranges->set_range(4, bucket_ranges->range(4) + 1); |
} |
+#if GTEST_HAS_DEATH_TEST |
+// For Histogram, LinearHistogram and CustomHistogram, the minimum for a |
+// declared range is 1, while the maximum is (HistogramBase::kSampleType_MAX - |
+// 1). But we accept ranges exceeding those limits, and silently clamped to |
+// those limits. This is for backwards compatibility. |
+TEST(HistogramDeathTest, BadRangesTest) { |
+ Histogram* histogram = Histogram::FactoryGet( |
+ "BadRanges", 0, HistogramBase::kSampleType_MAX, 8, Histogram::kNoFlags); |
+ EXPECT_EQ(1, histogram->declared_min()); |
+ EXPECT_EQ(HistogramBase::kSampleType_MAX - 1, histogram->declared_max()); |
+ |
+ Histogram* linear_histogram = LinearHistogram::FactoryGet( |
+ "BadRangesLinear", 0, HistogramBase::kSampleType_MAX, 8, |
+ Histogram::kNoFlags); |
+ EXPECT_EQ(1, linear_histogram->declared_min()); |
+ EXPECT_EQ(HistogramBase::kSampleType_MAX - 1, |
+ linear_histogram->declared_max()); |
+ |
+ vector<int> custom_ranges; |
+ custom_ranges.push_back(0); |
+ custom_ranges.push_back(5); |
+ Histogram* custom_histogram1 = CustomHistogram::FactoryGet( |
+ "BadRangesCustom", custom_ranges, Histogram::kNoFlags); |
+ const BucketRanges* ranges = custom_histogram1->bucket_ranges(); |
+ ASSERT_EQ(3u, ranges->size()); |
+ EXPECT_EQ(0, ranges->range(0)); |
+ EXPECT_EQ(5, ranges->range(1)); |
+ EXPECT_EQ(HistogramBase::kSampleType_MAX, ranges->range(2)); |
+ |
+ // CustomHistogram does not accepts kSampleType_MAX as range. |
+ custom_ranges.push_back(HistogramBase::kSampleType_MAX); |
+ EXPECT_DEATH(CustomHistogram::FactoryGet("BadRangesCustom2", custom_ranges, |
+ Histogram::kNoFlags), |
+ ""); |
+ |
+ // CustomHistogram needs at least 1 valid range. |
+ custom_ranges.clear(); |
+ custom_ranges.push_back(0); |
+ EXPECT_DEATH(CustomHistogram::FactoryGet("BadRangesCustom3", custom_ranges, |
+ Histogram::kNoFlags), |
+ ""); |
+} |
+#endif |
+ |
} // namespace base |