Chromium Code Reviews| Index: components/data_reduction_proxy/core/browser/data_reduction_proxy_usage_stats_unittest.cc |
| diff --git a/components/data_reduction_proxy/core/browser/data_reduction_proxy_usage_stats_unittest.cc b/components/data_reduction_proxy/core/browser/data_reduction_proxy_usage_stats_unittest.cc |
| index 24f39eb035ccc077271a713ad85dabcbf0ceb4e4..1aa2ae7a569fca89c0dda3fc2fe8925d271f63e9 100644 |
| --- a/components/data_reduction_proxy/core/browser/data_reduction_proxy_usage_stats_unittest.cc |
| +++ b/components/data_reduction_proxy/core/browser/data_reduction_proxy_usage_stats_unittest.cc |
| @@ -12,6 +12,7 @@ |
| #include "base/test/histogram_tester.h" |
| #include "components/data_reduction_proxy/core/common/data_reduction_proxy_headers_test_utils.h" |
| #include "net/base/host_port_pair.h" |
| +#include "net/base/net_errors.h" |
| #include "net/base/request_priority.h" |
| #include "net/http/http_response_headers.h" |
| #include "net/http/http_util.h" |
| @@ -149,7 +150,7 @@ TEST_F(DataReductionProxyUsageStatsTest, IsDataReductionProxyUnreachable) { |
| .WillRepeatedly(testing::Return( |
| test_case.fallback_proxy_server_is_data_reduction_proxy)); |
| EXPECT_CALL(mock_params_, |
| - WasDataReductionProxyUsed(mock_url_request_.get(), NULL)) |
| + WasDataReductionProxyUsed(mock_url_request_.get(), testing::_)) |
| .WillRepeatedly(testing::Return(test_case.was_proxy_used)); |
| scoped_ptr<DataReductionProxyUsageStats> usage_stats( |
| @@ -161,7 +162,7 @@ TEST_F(DataReductionProxyUsageStatsTest, IsDataReductionProxyUnreachable) { |
| usage_stats->OnProxyFallback(fallback_proxy_server, |
| net::ERR_PROXY_CONNECTION_FAILED); |
| - usage_stats->OnUrlRequestCompleted(mock_url_request_.get(), false); |
| + usage_stats->OnUrlRequestCompleted(mock_url_request_.get(), false, false); |
| base::MessageLoop::current()->RunUntilIdle(); |
| EXPECT_EQ(test_case.is_unreachable, unavailable_); |
| @@ -181,7 +182,7 @@ TEST_F(DataReductionProxyUsageStatsTest, ProxyUnreachableThenReachable) { |
| EXPECT_CALL(mock_params_, IsDataReductionProxy(testing::_, testing::_)) |
| .WillOnce(testing::Return(true)); |
| EXPECT_CALL(mock_params_, |
| - WasDataReductionProxyUsed(mock_url_request_.get(), NULL)) |
| + WasDataReductionProxyUsed(mock_url_request_.get(), testing::_)) |
| .WillOnce(testing::Return(true)); |
| // proxy falls back |
| @@ -191,7 +192,7 @@ TEST_F(DataReductionProxyUsageStatsTest, ProxyUnreachableThenReachable) { |
| EXPECT_TRUE(unavailable_); |
| // proxy succeeds |
| - usage_stats->OnUrlRequestCompleted(mock_url_request_.get(), false); |
| + usage_stats->OnUrlRequestCompleted(mock_url_request_.get(), false, false); |
| base::MessageLoop::current()->RunUntilIdle(); |
| EXPECT_FALSE(unavailable_); |
| } |
| @@ -206,13 +207,13 @@ TEST_F(DataReductionProxyUsageStatsTest, ProxyReachableThenUnreachable) { |
| base::Bind(&DataReductionProxyUsageStatsTest::NotifyUnavailable, |
| base::Unretained(this))); |
| EXPECT_CALL(mock_params_, |
| - WasDataReductionProxyUsed(mock_url_request_.get(), NULL)) |
| + WasDataReductionProxyUsed(mock_url_request_.get(), testing::_)) |
| .WillOnce(testing::Return(true)); |
| EXPECT_CALL(mock_params_, IsDataReductionProxy(testing::_, testing::_)) |
| .WillRepeatedly(testing::Return(true)); |
| // Proxy succeeds. |
| - usage_stats->OnUrlRequestCompleted(mock_url_request_.get(), false); |
| + usage_stats->OnUrlRequestCompleted(mock_url_request_.get(), false, false); |
| base::MessageLoop::current()->RunUntilIdle(); |
| EXPECT_FALSE(unavailable_); |
| @@ -419,7 +420,7 @@ TEST_F(DataReductionProxyUsageStatsTest, RecordMissingViaHeaderBytes) { |
| fake_request->set_received_response_content_length(kResponseContentLength); |
| EXPECT_CALL(mock_params_, |
| - WasDataReductionProxyUsed(fake_request.get(), NULL)) |
| + WasDataReductionProxyUsed(fake_request.get(), testing::_)) |
| .WillRepeatedly(Return(test_cases[i].was_proxy_used)); |
| usage_stats->RecordMissingViaHeaderBytes(fake_request.get()); |
| @@ -440,4 +441,90 @@ TEST_F(DataReductionProxyUsageStatsTest, RecordMissingViaHeaderBytes) { |
| } |
| } |
| +TEST_F(DataReductionProxyUsageStatsTest, RequestCompletionErrorCodes) { |
| + const std::string kPrimaryHistogramName = |
| + "DataReductionProxy.RequestCompletionErrorCodes.Primary"; |
| + const std::string kFallbackHistogramName = |
| + "DataReductionProxy.RequestCompletionErrorCodes.Fallback"; |
| + const std::string kPrimaryMainFrameHistogramName = |
| + "DataReductionProxy.RequestCompletionErrorCodes.MainFrame.Primary"; |
| + const std::string kFallbackMainFrameHistogramName = |
| + "DataReductionProxy.RequestCompletionErrorCodes.MainFrame.Fallback"; |
| + |
| + struct TestCase { |
| + bool was_proxy_used; |
| + bool is_fallback; |
| + bool is_main_frame; |
| + net::Error net_error; |
| + }; |
|
bengr
2014/12/09 23:44:13
Add a blank line.
sclittle
2014/12/10 00:05:03
Done.
|
| + const TestCase test_cases[] = { |
| + {false, false, true, net::OK}, |
|
bengr
2014/12/09 23:44:13
Indent only 2.
sclittle
2014/12/10 00:05:03
Done.
|
| + {false, false, false, net::ERR_TOO_MANY_REDIRECTS}, |
| + {true, false, true, net::OK}, |
| + {true, false, true, net::ERR_TOO_MANY_REDIRECTS}, |
| + {true, false, false, net::OK}, |
| + {true, false, false, net::ERR_TOO_MANY_REDIRECTS}, |
| + {true, true, true, net::OK}, |
| + {true, true, true, net::ERR_TOO_MANY_REDIRECTS}, |
| + {true, true, false, net::OK}, |
| + {true, true, false, net::ERR_TOO_MANY_REDIRECTS} |
| + }; |
| + |
| + for (size_t i = 0; i < arraysize(test_cases); ++i) { |
| + base::HistogramTester histogram_tester; |
| + scoped_ptr<DataReductionProxyUsageStats> usage_stats( |
| + new DataReductionProxyUsageStats(&mock_params_, loop_proxy_)); |
| + |
| + std::string raw_headers("HTTP/1.1 200 OK\n" |
| + "Via: 1.1 Chrome-Compression-Proxy\n"); |
| + HeadersToRaw(&raw_headers); |
| + scoped_ptr<net::URLRequest> fake_request( |
| + CreateURLRequestWithResponseHeaders(GURL("http://www.google.com/"), |
| + raw_headers)); |
| + |
| + int net_error_int = static_cast<int>(test_cases[i].net_error); |
| + if (test_cases[i].net_error != net::OK) { |
| + fake_request->CancelWithError(net_error_int); |
| + } |
| + |
| + DataReductionProxyTypeInfo proxy_info; |
| + proxy_info.is_fallback = test_cases[i].is_fallback; |
| + |
| + EXPECT_CALL(mock_params_, WasDataReductionProxyUsed(fake_request.get(), |
| + testing::NotNull())) |
| + .WillRepeatedly(testing::DoAll(testing::SetArgPointee<1>(proxy_info), |
| + Return(test_cases[i].was_proxy_used))); |
| + |
| + usage_stats->OnUrlRequestCompleted(fake_request.get(), false, |
| + test_cases[i].is_main_frame); |
| + |
| + if (test_cases[i].was_proxy_used && !test_cases[i].is_fallback) { |
| + histogram_tester.ExpectUniqueSample(kPrimaryHistogramName, -net_error_int, |
|
bengr
2014/12/09 23:44:13
I'd put all three parameters on one line. Move the
sclittle
2014/12/10 00:05:03
Done.
|
| + 1); |
| + } else { |
| + histogram_tester.ExpectTotalCount(kPrimaryHistogramName, 0); |
| + } |
| + if (test_cases[i].was_proxy_used && test_cases[i].is_fallback) { |
| + histogram_tester.ExpectUniqueSample(kFallbackHistogramName, |
| + -net_error_int, 1); |
| + } else { |
| + histogram_tester.ExpectTotalCount(kFallbackHistogramName, 0); |
| + } |
| + if (test_cases[i].was_proxy_used && !test_cases[i].is_fallback && |
| + test_cases[i].is_main_frame) { |
| + histogram_tester.ExpectUniqueSample(kPrimaryMainFrameHistogramName, |
| + -net_error_int, 1); |
| + } else { |
| + histogram_tester.ExpectTotalCount(kPrimaryMainFrameHistogramName, 0); |
| + } |
| + if (test_cases[i].was_proxy_used && test_cases[i].is_fallback && |
| + test_cases[i].is_main_frame) { |
| + histogram_tester.ExpectUniqueSample(kFallbackMainFrameHistogramName, |
| + -net_error_int, 1); |
| + } else { |
| + histogram_tester.ExpectTotalCount(kFallbackMainFrameHistogramName, 0); |
| + } |
| + } |
| +} |
| + |
| } // namespace data_reduction_proxy |