Index: trunk/src/net/url_request/url_request_throttler_unittest.cc |
=================================================================== |
--- trunk/src/net/url_request/url_request_throttler_unittest.cc (revision 242174) |
+++ trunk/src/net/url_request/url_request_throttler_unittest.cc (working copy) |
@@ -5,12 +5,13 @@ |
#include "net/url_request/url_request_throttler_manager.h" |
#include "base/memory/scoped_ptr.h" |
+#include "base/metrics/histogram.h" |
#include "base/metrics/histogram_samples.h" |
+#include "base/metrics/statistics_recorder.h" |
#include "base/pickle.h" |
#include "base/stl_util.h" |
#include "base/strings/string_number_conversions.h" |
#include "base/strings/stringprintf.h" |
-#include "base/test/histogram_recorder.h" |
#include "base/time/time.h" |
#include "net/base/load_flags.h" |
#include "net/base/request_priority.h" |
@@ -28,7 +29,10 @@ |
namespace { |
-const char kRequestThrottledHistogramName[] = "Throttling.RequestThrottled"; |
+using base::Histogram; |
+using base::HistogramBase; |
+using base::HistogramSamples; |
+using base::StatisticsRecorder; |
class MockURLRequestThrottlerEntry : public URLRequestThrottlerEntry { |
public: |
@@ -172,22 +176,32 @@ |
URLRequestThrottlerEntryTest() |
: request_(GURL(), DEFAULT_PRIORITY, NULL, &context_) {} |
- static void SetUpTestCase() { |
- base::HistogramRecorder::Initialize(); |
- } |
- |
virtual void SetUp(); |
+ virtual void TearDown(); |
+ // After calling this function, histogram snapshots in |samples_| contain |
+ // only the delta caused by the test case currently running. |
+ void CalculateHistogramDeltas(); |
+ |
TimeTicks now_; |
MockURLRequestThrottlerManager manager_; // Dummy object, not used. |
scoped_refptr<MockURLRequestThrottlerEntry> entry_; |
- scoped_ptr<base::HistogramRecorder> histogram_recorder_; |
+ std::map<std::string, HistogramSamples*> original_samples_; |
+ std::map<std::string, HistogramSamples*> samples_; |
TestURLRequestContext context_; |
TestURLRequest request_; |
}; |
+// List of all histograms we care about in these unit tests. |
+const char* kHistogramNames[] = { |
+ "Throttling.FailureCountAtSuccess", |
+ "Throttling.PerceivedDowntime", |
+ "Throttling.RequestThrottled", |
+ "Throttling.SiteOptedOut", |
+}; |
+ |
void URLRequestThrottlerEntryTest::SetUp() { |
request_.SetLoadFlags(0); |
@@ -195,9 +209,45 @@ |
entry_ = new MockURLRequestThrottlerEntry(&manager_); |
entry_->ResetToBlank(now_); |
- histogram_recorder_.reset(new base::HistogramRecorder()); |
+ for (size_t i = 0; i < arraysize(kHistogramNames); ++i) { |
+ // Must retrieve original samples for each histogram for comparison |
+ // as other tests may affect them. |
+ const char* name = kHistogramNames[i]; |
+ HistogramBase* histogram = StatisticsRecorder::FindHistogram(name); |
+ if (histogram) { |
+ original_samples_[name] = histogram->SnapshotSamples().release(); |
+ } else { |
+ original_samples_[name] = NULL; |
+ } |
+ } |
} |
+void URLRequestThrottlerEntryTest::TearDown() { |
+ STLDeleteValues(&original_samples_); |
+ STLDeleteValues(&samples_); |
+} |
+ |
+void URLRequestThrottlerEntryTest::CalculateHistogramDeltas() { |
+ for (size_t i = 0; i < arraysize(kHistogramNames); ++i) { |
+ const char* name = kHistogramNames[i]; |
+ HistogramSamples* original = original_samples_[name]; |
+ |
+ HistogramBase* histogram = StatisticsRecorder::FindHistogram(name); |
+ if (histogram) { |
+ ASSERT_EQ(HistogramBase::kUmaTargetedHistogramFlag, histogram->flags()); |
+ |
+ scoped_ptr<HistogramSamples> samples(histogram->SnapshotSamples()); |
+ if (original) |
+ samples->Subtract(*original); |
+ samples_[name] = samples.release(); |
+ } |
+ } |
+ |
+ // Ensure we don't accidentally use the originals in our tests. |
+ STLDeleteValues(&original_samples_); |
+ original_samples_.clear(); |
+} |
+ |
std::ostream& operator<<(std::ostream& out, const base::TimeTicks& time) { |
return out << time.ToInternalValue(); |
} |
@@ -223,11 +273,9 @@ |
request_.SetLoadFlags(LOAD_MAYBE_USER_GESTURE); |
EXPECT_FALSE(entry_->ShouldRejectRequest(request_)); |
- scoped_ptr<base::HistogramSamples> samples( |
- histogram_recorder_->GetHistogramSamplesSinceCreation( |
- kRequestThrottledHistogramName)); |
- ASSERT_EQ(1, samples->GetCount(0)); |
- ASSERT_EQ(1, samples->GetCount(1)); |
+ CalculateHistogramDeltas(); |
+ ASSERT_EQ(1, samples_["Throttling.RequestThrottled"]->GetCount(0)); |
+ ASSERT_EQ(1, samples_["Throttling.RequestThrottled"]->GetCount(1)); |
} |
TEST_F(URLRequestThrottlerEntryTest, InterfaceNotDuringExponentialBackoff) { |
@@ -237,11 +285,9 @@ |
entry_->fake_time_now_ - TimeDelta::FromMilliseconds(1)); |
EXPECT_FALSE(entry_->ShouldRejectRequest(request_)); |
- scoped_ptr<base::HistogramSamples> samples( |
- histogram_recorder_->GetHistogramSamplesSinceCreation( |
- kRequestThrottledHistogramName)); |
- ASSERT_EQ(2, samples->GetCount(0)); |
- ASSERT_EQ(0, samples->GetCount(1)); |
+ CalculateHistogramDeltas(); |
+ ASSERT_EQ(2, samples_["Throttling.RequestThrottled"]->GetCount(0)); |
+ ASSERT_EQ(0, samples_["Throttling.RequestThrottled"]->GetCount(1)); |
} |
TEST_F(URLRequestThrottlerEntryTest, InterfaceUpdateFailure) { |