| Index: trunk/src/net/url_request/url_request_throttler_unittest.cc
|
| ===================================================================
|
| --- trunk/src/net/url_request/url_request_throttler_unittest.cc (revision 212417)
|
| +++ trunk/src/net/url_request/url_request_throttler_unittest.cc (working copy)
|
| @@ -1,4 +1,3 @@
|
| -
|
| // Copyright (c) 2012 The Chromium Authors. All rights reserved.
|
| // Use of this source code is governed by a BSD-style license that can be
|
| // found in the LICENSE file.
|
| @@ -6,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/test_completion_callback.h"
|
| @@ -28,7 +28,10 @@
|
|
|
| namespace {
|
|
|
| -const char kRequestThrottledHistogramName[] = "Throttling.RequestThrottled";
|
| +using base::Histogram;
|
| +using base::HistogramBase;
|
| +using base::HistogramSamples;
|
| +using base::StatisticsRecorder;
|
|
|
| class MockURLRequestThrottlerEntry : public URLRequestThrottlerEntry {
|
| public:
|
| @@ -173,17 +176,31 @@
|
| }
|
|
|
| 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_.set_load_flags(0);
|
|
|
| @@ -191,9 +208,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();
|
| }
|
| @@ -207,11 +260,9 @@
|
| request_.set_load_flags(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) {
|
| @@ -221,11 +272,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) {
|
|
|