Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(8)

Side by Side Diff: components/data_reduction_proxy/core/browser/data_reduction_proxy_bypass_stats_unittest.cc

Issue 956223002: Rename DataReductionProxyUsageStats to DataReductionProxyBypassStats (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: nits Created 5 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright 2014 The Chromium Authors. All rights reserved. 1 // Copyright 2014 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 #include "components/data_reduction_proxy/core/browser/data_reduction_proxy_usag e_stats.h" 5 #include "components/data_reduction_proxy/core/browser/data_reduction_proxy_bypa ss_stats.h"
6 6
7 #include <set> 7 #include <set>
8 #include <string> 8 #include <string>
9 #include <vector> 9 #include <vector>
10 10
11 #include "base/bind.h" 11 #include "base/bind.h"
12 #include "base/memory/scoped_ptr.h" 12 #include "base/memory/scoped_ptr.h"
13 #include "base/metrics/histogram.h" 13 #include "base/metrics/histogram.h"
14 #include "base/prefs/testing_pref_service.h" 14 #include "base/prefs/testing_pref_service.h"
15 #include "base/test/histogram_tester.h" 15 #include "base/test/histogram_tester.h"
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after
50 namespace data_reduction_proxy { 50 namespace data_reduction_proxy {
51 51
52 namespace { 52 namespace {
53 53
54 const std::string kBody = "hello"; 54 const std::string kBody = "hello";
55 const std::string kNextBody = "hello again"; 55 const std::string kNextBody = "hello again";
56 const std::string kErrorBody = "bad"; 56 const std::string kErrorBody = "bad";
57 57
58 } // namespace 58 } // namespace
59 59
60 class DataReductionProxyUsageStatsTest : public testing::Test { 60 class DataReductionProxyBypassStatsTest : public testing::Test {
61 public: 61 public:
62 DataReductionProxyUsageStatsTest() 62 DataReductionProxyBypassStatsTest() : context_(true) {
63 : context_(true) {
64 context_.Init(); 63 context_.Init();
65 64
66 // The |test_job_factory_| takes ownership of the interceptor. 65 // The |test_job_factory_| takes ownership of the interceptor.
67 test_job_interceptor_ = new net::TestJobInterceptor(); 66 test_job_interceptor_ = new net::TestJobInterceptor();
68 EXPECT_TRUE(test_job_factory_.SetProtocolHandler(url::kHttpScheme, 67 EXPECT_TRUE(test_job_factory_.SetProtocolHandler(url::kHttpScheme,
69 test_job_interceptor_)); 68 test_job_interceptor_));
70 69
71 context_.set_job_factory(&test_job_factory_); 70 context_.set_job_factory(&test_job_factory_);
72 71
73 test_context_ = 72 test_context_ =
(...skipping 30 matching lines...) Expand all
104 103
105 EXPECT_TRUE(fake_request->response_headers() != NULL); 104 EXPECT_TRUE(fake_request->response_headers() != NULL);
106 return fake_request.Pass(); 105 return fake_request.Pass();
107 } 106 }
108 107
109 bool IsUnreachable() const { 108 bool IsUnreachable() const {
110 return test_context_->settings()->IsDataReductionProxyUnreachable(); 109 return test_context_->settings()->IsDataReductionProxyUnreachable();
111 } 110 }
112 111
113 protected: 112 protected:
114 scoped_ptr<DataReductionProxyUsageStats> BuildUsageStats() { 113 scoped_ptr<DataReductionProxyBypassStats> BuildBypassStats() {
115 return make_scoped_ptr( 114 return make_scoped_ptr(
116 new DataReductionProxyUsageStats( 115 new DataReductionProxyBypassStats(
117 test_context_->config(), 116 test_context_->config(),
118 test_context_->unreachable_callback(), 117 test_context_->unreachable_callback(),
119 test_context_->task_runner())).Pass(); 118 test_context_->task_runner())).Pass();
120 } 119 }
121 120
122 net::URLRequest* url_request() { 121 net::URLRequest* url_request() {
123 return mock_url_request_.get(); 122 return mock_url_request_.get();
124 } 123 }
125 124
126 MockDataReductionProxyConfig* config() const { 125 MockDataReductionProxyConfig* config() const {
127 return test_context_->mock_config(); 126 return test_context_->mock_config();
128 } 127 }
129 128
130 void RunUntilIdle() { 129 void RunUntilIdle() {
131 test_context_->RunUntilIdle(); 130 test_context_->RunUntilIdle();
132 } 131 }
133 132
134 private: 133 private:
135 net::TestURLRequestContext context_; 134 net::TestURLRequestContext context_;
136 net::TestDelegate delegate_; 135 net::TestDelegate delegate_;
137 scoped_ptr<net::URLRequest> mock_url_request_; 136 scoped_ptr<net::URLRequest> mock_url_request_;
138 // |test_job_interceptor_| is owned by |test_job_factory_|. 137 // |test_job_interceptor_| is owned by |test_job_factory_|.
139 net::TestJobInterceptor* test_job_interceptor_; 138 net::TestJobInterceptor* test_job_interceptor_;
140 net::URLRequestJobFactoryImpl test_job_factory_; 139 net::URLRequestJobFactoryImpl test_job_factory_;
141 scoped_ptr<DataReductionProxyTestContext> test_context_; 140 scoped_ptr<DataReductionProxyTestContext> test_context_;
142 }; 141 };
143 142
144 TEST_F(DataReductionProxyUsageStatsTest, IsDataReductionProxyUnreachable) { 143 TEST_F(DataReductionProxyBypassStatsTest, IsDataReductionProxyUnreachable) {
145 net::ProxyServer fallback_proxy_server = 144 net::ProxyServer fallback_proxy_server =
146 net::ProxyServer::FromURI("foo.com", net::ProxyServer::SCHEME_HTTP); 145 net::ProxyServer::FromURI("foo.com", net::ProxyServer::SCHEME_HTTP);
147 data_reduction_proxy::DataReductionProxyTypeInfo proxy_info; 146 data_reduction_proxy::DataReductionProxyTypeInfo proxy_info;
148 struct TestCase { 147 struct TestCase {
149 bool fallback_proxy_server_is_data_reduction_proxy; 148 bool fallback_proxy_server_is_data_reduction_proxy;
150 bool was_proxy_used; 149 bool was_proxy_used;
151 bool is_unreachable; 150 bool is_unreachable;
152 }; 151 };
153 const TestCase test_cases[] = { 152 const TestCase test_cases[] = {
154 { 153 {
(...skipping 16 matching lines...) Expand all
171 false, 170 false,
172 true 171 true
173 } 172 }
174 }; 173 };
175 for (size_t i = 0; i < arraysize(test_cases); ++i) { 174 for (size_t i = 0; i < arraysize(test_cases); ++i) {
176 TestCase test_case = test_cases[i]; 175 TestCase test_case = test_cases[i];
177 176
178 EXPECT_CALL(*config(), IsDataReductionProxy(testing::_, testing::_)) 177 EXPECT_CALL(*config(), IsDataReductionProxy(testing::_, testing::_))
179 .WillRepeatedly(testing::Return( 178 .WillRepeatedly(testing::Return(
180 test_case.fallback_proxy_server_is_data_reduction_proxy)); 179 test_case.fallback_proxy_server_is_data_reduction_proxy));
181 EXPECT_CALL(*config(), 180 EXPECT_CALL(*config(), WasDataReductionProxyUsed(url_request(), testing::_))
182 WasDataReductionProxyUsed(url_request(), testing::_))
183 .WillRepeatedly(testing::Return(test_case.was_proxy_used)); 181 .WillRepeatedly(testing::Return(test_case.was_proxy_used));
184 182
185 scoped_ptr<DataReductionProxyUsageStats> usage_stats = BuildUsageStats(); 183 scoped_ptr<DataReductionProxyBypassStats> bypass_stats = BuildBypassStats();
186 184
187 usage_stats->OnProxyFallback(fallback_proxy_server, 185 bypass_stats->OnProxyFallback(fallback_proxy_server,
188 net::ERR_PROXY_CONNECTION_FAILED); 186 net::ERR_PROXY_CONNECTION_FAILED);
189 usage_stats->OnUrlRequestCompleted(url_request(), false); 187 bypass_stats->OnUrlRequestCompleted(url_request(), false);
190 RunUntilIdle(); 188 RunUntilIdle();
191 189
192 EXPECT_EQ(test_case.is_unreachable, IsUnreachable()); 190 EXPECT_EQ(test_case.is_unreachable, IsUnreachable());
193 } 191 }
194 } 192 }
195 193
196 TEST_F(DataReductionProxyUsageStatsTest, ProxyUnreachableThenReachable) { 194 TEST_F(DataReductionProxyBypassStatsTest, ProxyUnreachableThenReachable) {
197 net::ProxyServer fallback_proxy_server = 195 net::ProxyServer fallback_proxy_server =
198 net::ProxyServer::FromURI("foo.com", net::ProxyServer::SCHEME_HTTP); 196 net::ProxyServer::FromURI("foo.com", net::ProxyServer::SCHEME_HTTP);
199 scoped_ptr<DataReductionProxyUsageStats> usage_stats = BuildUsageStats(); 197 scoped_ptr<DataReductionProxyBypassStats> bypass_stats = BuildBypassStats();
200 EXPECT_CALL(*config(), IsDataReductionProxy(testing::_, testing::_)) 198 EXPECT_CALL(*config(), IsDataReductionProxy(testing::_, testing::_))
201 .WillOnce(testing::Return(true)); 199 .WillOnce(testing::Return(true));
202 EXPECT_CALL(*config(), 200 EXPECT_CALL(*config(), WasDataReductionProxyUsed(url_request(), testing::_))
203 WasDataReductionProxyUsed(url_request(), testing::_))
204 .WillOnce(testing::Return(true)); 201 .WillOnce(testing::Return(true));
205 202
206 // proxy falls back 203 // proxy falls back
207 usage_stats->OnProxyFallback(fallback_proxy_server, 204 bypass_stats->OnProxyFallback(fallback_proxy_server,
208 net::ERR_PROXY_CONNECTION_FAILED); 205 net::ERR_PROXY_CONNECTION_FAILED);
209 RunUntilIdle(); 206 RunUntilIdle();
210 EXPECT_TRUE(IsUnreachable()); 207 EXPECT_TRUE(IsUnreachable());
211 208
212 // proxy succeeds 209 // proxy succeeds
213 usage_stats->OnUrlRequestCompleted(url_request(), false); 210 bypass_stats->OnUrlRequestCompleted(url_request(), false);
214 RunUntilIdle(); 211 RunUntilIdle();
215 EXPECT_FALSE(IsUnreachable()); 212 EXPECT_FALSE(IsUnreachable());
216 } 213 }
217 214
218 TEST_F(DataReductionProxyUsageStatsTest, ProxyReachableThenUnreachable) { 215 TEST_F(DataReductionProxyBypassStatsTest, ProxyReachableThenUnreachable) {
219 net::ProxyServer fallback_proxy_server = 216 net::ProxyServer fallback_proxy_server =
220 net::ProxyServer::FromURI("foo.com", net::ProxyServer::SCHEME_HTTP); 217 net::ProxyServer::FromURI("foo.com", net::ProxyServer::SCHEME_HTTP);
221 scoped_ptr<DataReductionProxyUsageStats> usage_stats = BuildUsageStats(); 218 scoped_ptr<DataReductionProxyBypassStats> bypass_stats = BuildBypassStats();
222 EXPECT_CALL(*config(), 219 EXPECT_CALL(*config(), WasDataReductionProxyUsed(url_request(), testing::_))
223 WasDataReductionProxyUsed(url_request(), testing::_))
224 .WillOnce(testing::Return(true)); 220 .WillOnce(testing::Return(true));
225 EXPECT_CALL(*config(), IsDataReductionProxy(testing::_, testing::_)) 221 EXPECT_CALL(*config(), IsDataReductionProxy(testing::_, testing::_))
226 .WillRepeatedly(testing::Return(true)); 222 .WillRepeatedly(testing::Return(true));
227 223
228 // Proxy succeeds. 224 // Proxy succeeds.
229 usage_stats->OnUrlRequestCompleted(url_request(), false); 225 bypass_stats->OnUrlRequestCompleted(url_request(), false);
230 RunUntilIdle(); 226 RunUntilIdle();
231 EXPECT_FALSE(IsUnreachable()); 227 EXPECT_FALSE(IsUnreachable());
232 228
233 // Then proxy falls back indefinitely. 229 // Then proxy falls back indefinitely.
234 usage_stats->OnProxyFallback(fallback_proxy_server, 230 bypass_stats->OnProxyFallback(fallback_proxy_server,
235 net::ERR_PROXY_CONNECTION_FAILED); 231 net::ERR_PROXY_CONNECTION_FAILED);
236 usage_stats->OnProxyFallback(fallback_proxy_server, 232 bypass_stats->OnProxyFallback(fallback_proxy_server,
237 net::ERR_PROXY_CONNECTION_FAILED); 233 net::ERR_PROXY_CONNECTION_FAILED);
238 usage_stats->OnProxyFallback(fallback_proxy_server, 234 bypass_stats->OnProxyFallback(fallback_proxy_server,
239 net::ERR_PROXY_CONNECTION_FAILED); 235 net::ERR_PROXY_CONNECTION_FAILED);
240 usage_stats->OnProxyFallback(fallback_proxy_server, 236 bypass_stats->OnProxyFallback(fallback_proxy_server,
241 net::ERR_PROXY_CONNECTION_FAILED); 237 net::ERR_PROXY_CONNECTION_FAILED);
242 RunUntilIdle(); 238 RunUntilIdle();
243 EXPECT_TRUE(IsUnreachable()); 239 EXPECT_TRUE(IsUnreachable());
244 } 240 }
245 241
246 TEST_F(DataReductionProxyUsageStatsTest, 242 TEST_F(DataReductionProxyBypassStatsTest,
247 DetectAndRecordMissingViaHeaderResponseCode) { 243 DetectAndRecordMissingViaHeaderResponseCode) {
248 const std::string kPrimaryHistogramName = 244 const std::string kPrimaryHistogramName =
249 "DataReductionProxy.MissingViaHeader.ResponseCode.Primary"; 245 "DataReductionProxy.MissingViaHeader.ResponseCode.Primary";
250 const std::string kFallbackHistogramName = 246 const std::string kFallbackHistogramName =
251 "DataReductionProxy.MissingViaHeader.ResponseCode.Fallback"; 247 "DataReductionProxy.MissingViaHeader.ResponseCode.Fallback";
252 248
253 struct TestCase { 249 struct TestCase {
254 bool is_primary; 250 bool is_primary;
255 const char* headers; 251 const char* headers;
256 int expected_primary_sample; // -1 indicates no expected sample. 252 int expected_primary_sample; // -1 indicates no expected sample.
(...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after
309 } 305 }
310 }; 306 };
311 307
312 for (size_t i = 0; i < arraysize(test_cases); ++i) { 308 for (size_t i = 0; i < arraysize(test_cases); ++i) {
313 base::HistogramTester histogram_tester; 309 base::HistogramTester histogram_tester;
314 std::string raw_headers(test_cases[i].headers); 310 std::string raw_headers(test_cases[i].headers);
315 HeadersToRaw(&raw_headers); 311 HeadersToRaw(&raw_headers);
316 scoped_refptr<net::HttpResponseHeaders> headers( 312 scoped_refptr<net::HttpResponseHeaders> headers(
317 new net::HttpResponseHeaders(raw_headers)); 313 new net::HttpResponseHeaders(raw_headers));
318 314
319 DataReductionProxyUsageStats::DetectAndRecordMissingViaHeaderResponseCode( 315 DataReductionProxyBypassStats::DetectAndRecordMissingViaHeaderResponseCode(
320 test_cases[i].is_primary, headers.get()); 316 test_cases[i].is_primary, headers.get());
321 317
322 if (test_cases[i].expected_primary_sample == -1) { 318 if (test_cases[i].expected_primary_sample == -1) {
323 histogram_tester.ExpectTotalCount(kPrimaryHistogramName, 0); 319 histogram_tester.ExpectTotalCount(kPrimaryHistogramName, 0);
324 } else { 320 } else {
325 histogram_tester.ExpectUniqueSample( 321 histogram_tester.ExpectUniqueSample(
326 kPrimaryHistogramName, test_cases[i].expected_primary_sample, 1); 322 kPrimaryHistogramName, test_cases[i].expected_primary_sample, 1);
327 } 323 }
328 324
329 if (test_cases[i].expected_fallback_sample == -1) { 325 if (test_cases[i].expected_fallback_sample == -1) {
330 histogram_tester.ExpectTotalCount(kFallbackHistogramName, 0); 326 histogram_tester.ExpectTotalCount(kFallbackHistogramName, 0);
331 } else { 327 } else {
332 histogram_tester.ExpectUniqueSample( 328 histogram_tester.ExpectUniqueSample(
333 kFallbackHistogramName, test_cases[i].expected_fallback_sample, 1); 329 kFallbackHistogramName, test_cases[i].expected_fallback_sample, 1);
334 } 330 }
335 } 331 }
336 } 332 }
337 333
338 TEST_F(DataReductionProxyUsageStatsTest, RecordMissingViaHeaderBytes) { 334 TEST_F(DataReductionProxyBypassStatsTest, RecordMissingViaHeaderBytes) {
339 const std::string k4xxHistogramName = 335 const std::string k4xxHistogramName =
340 "DataReductionProxy.MissingViaHeader.Bytes.4xx"; 336 "DataReductionProxy.MissingViaHeader.Bytes.4xx";
341 const std::string kOtherHistogramName = 337 const std::string kOtherHistogramName =
342 "DataReductionProxy.MissingViaHeader.Bytes.Other"; 338 "DataReductionProxy.MissingViaHeader.Bytes.Other";
343 const int64 kResponseContentLength = 100; 339 const int64 kResponseContentLength = 100;
344 340
345 struct TestCase { 341 struct TestCase {
346 bool was_proxy_used; 342 bool was_proxy_used;
347 const char* headers; 343 const char* headers;
348 bool is_4xx_sample_expected; 344 bool is_4xx_sample_expected;
(...skipping 65 matching lines...) Expand 10 before | Expand all | Expand 10 after
414 { 410 {
415 true, 411 true,
416 "HTTP/1.1 500 Internal Server Error\n", 412 "HTTP/1.1 500 Internal Server Error\n",
417 false, 413 false,
418 true 414 true
419 } 415 }
420 }; 416 };
421 417
422 for (size_t i = 0; i < arraysize(test_cases); ++i) { 418 for (size_t i = 0; i < arraysize(test_cases); ++i) {
423 base::HistogramTester histogram_tester; 419 base::HistogramTester histogram_tester;
424 scoped_ptr<DataReductionProxyUsageStats> usage_stats = BuildUsageStats(); 420 scoped_ptr<DataReductionProxyBypassStats> bypass_stats = BuildBypassStats();
425 421
426 std::string raw_headers(test_cases[i].headers); 422 std::string raw_headers(test_cases[i].headers);
427 HeadersToRaw(&raw_headers); 423 HeadersToRaw(&raw_headers);
428 424
429 scoped_ptr<net::URLRequest> fake_request( 425 scoped_ptr<net::URLRequest> fake_request(
430 CreateURLRequestWithResponseHeaders(GURL("http://www.google.com/"), 426 CreateURLRequestWithResponseHeaders(GURL("http://www.google.com/"),
431 raw_headers)); 427 raw_headers));
432 fake_request->set_received_response_content_length(kResponseContentLength); 428 fake_request->set_received_response_content_length(kResponseContentLength);
433 429
434 EXPECT_CALL(*config(), 430 EXPECT_CALL(*config(),
435 WasDataReductionProxyUsed(fake_request.get(), testing::_)) 431 WasDataReductionProxyUsed(fake_request.get(), testing::_))
436 .WillRepeatedly(Return(test_cases[i].was_proxy_used)); 432 .WillRepeatedly(Return(test_cases[i].was_proxy_used));
437 433
438 usage_stats->RecordMissingViaHeaderBytes(*fake_request); 434 bypass_stats->RecordMissingViaHeaderBytes(*fake_request);
439 435
440 if (test_cases[i].is_4xx_sample_expected) { 436 if (test_cases[i].is_4xx_sample_expected) {
441 histogram_tester.ExpectUniqueSample(k4xxHistogramName, 437 histogram_tester.ExpectUniqueSample(k4xxHistogramName,
442 kResponseContentLength, 1); 438 kResponseContentLength, 1);
443 } else { 439 } else {
444 histogram_tester.ExpectTotalCount(k4xxHistogramName, 0); 440 histogram_tester.ExpectTotalCount(k4xxHistogramName, 0);
445 } 441 }
446 442
447 if (test_cases[i].is_other_sample_expected) { 443 if (test_cases[i].is_other_sample_expected) {
448 histogram_tester.ExpectUniqueSample(kOtherHistogramName, 444 histogram_tester.ExpectUniqueSample(kOtherHistogramName,
449 kResponseContentLength, 1); 445 kResponseContentLength, 1);
450 } else { 446 } else {
451 histogram_tester.ExpectTotalCount(kOtherHistogramName, 0); 447 histogram_tester.ExpectTotalCount(kOtherHistogramName, 0);
452 } 448 }
453 } 449 }
454 } 450 }
455 451
456 TEST_F(DataReductionProxyUsageStatsTest, RequestCompletionErrorCodes) { 452 TEST_F(DataReductionProxyBypassStatsTest, RequestCompletionErrorCodes) {
457 const std::string kPrimaryHistogramName = 453 const std::string kPrimaryHistogramName =
458 "DataReductionProxy.RequestCompletionErrorCodes.Primary"; 454 "DataReductionProxy.RequestCompletionErrorCodes.Primary";
459 const std::string kFallbackHistogramName = 455 const std::string kFallbackHistogramName =
460 "DataReductionProxy.RequestCompletionErrorCodes.Fallback"; 456 "DataReductionProxy.RequestCompletionErrorCodes.Fallback";
461 const std::string kPrimaryMainFrameHistogramName = 457 const std::string kPrimaryMainFrameHistogramName =
462 "DataReductionProxy.RequestCompletionErrorCodes.MainFrame.Primary"; 458 "DataReductionProxy.RequestCompletionErrorCodes.MainFrame.Primary";
463 const std::string kFallbackMainFrameHistogramName = 459 const std::string kFallbackMainFrameHistogramName =
464 "DataReductionProxy.RequestCompletionErrorCodes.MainFrame.Fallback"; 460 "DataReductionProxy.RequestCompletionErrorCodes.MainFrame.Fallback";
465 461
466 struct TestCase { 462 struct TestCase {
467 bool was_proxy_used; 463 bool was_proxy_used;
468 bool is_load_bypass_proxy; 464 bool is_load_bypass_proxy;
469 bool is_fallback; 465 bool is_fallback;
470 bool is_main_frame; 466 bool is_main_frame;
471 net::Error net_error; 467 net::Error net_error;
472 }; 468 };
473 469
474 const TestCase test_cases[] = { 470 const TestCase test_cases[] = {
475 {false, true, false, true, net::OK}, 471 { false, true, false, true, net::OK },
476 {false, true, false, false, net::ERR_TOO_MANY_REDIRECTS}, 472 { false, true, false, false, net::ERR_TOO_MANY_REDIRECTS },
477 {false, false, false, true, net::OK}, 473 { false, false, false, true, net::OK },
478 {false, false, false, false, net::ERR_TOO_MANY_REDIRECTS}, 474 { false, false, false, false, net::ERR_TOO_MANY_REDIRECTS },
479 {true, false, false, true, net::OK}, 475 { true, false, false, true, net::OK },
480 {true, false, false, true, net::ERR_TOO_MANY_REDIRECTS}, 476 { true, false, false, true, net::ERR_TOO_MANY_REDIRECTS },
481 {true, false, false, false, net::OK}, 477 { true, false, false, false, net::OK },
482 {true, false, false, false, net::ERR_TOO_MANY_REDIRECTS}, 478 { true, false, false, false, net::ERR_TOO_MANY_REDIRECTS },
483 {true, false, true, true, net::OK}, 479 { true, false, true, true, net::OK },
484 {true, false, true, true, net::ERR_TOO_MANY_REDIRECTS}, 480 { true, false, true, true, net::ERR_TOO_MANY_REDIRECTS },
485 {true, false, true, false, net::OK}, 481 { true, false, true, false, net::OK },
486 {true, false, true, false, net::ERR_TOO_MANY_REDIRECTS} 482 { true, false, true, false, net::ERR_TOO_MANY_REDIRECTS }
487 }; 483 };
488 484
489 for (size_t i = 0; i < arraysize(test_cases); ++i) { 485 for (size_t i = 0; i < arraysize(test_cases); ++i) {
490 base::HistogramTester histogram_tester; 486 base::HistogramTester histogram_tester;
491 scoped_ptr<DataReductionProxyUsageStats> usage_stats = BuildUsageStats(); 487 scoped_ptr<DataReductionProxyBypassStats> bypass_stats = BuildBypassStats();
492 488
493 std::string raw_headers("HTTP/1.1 200 OK\n" 489 std::string raw_headers("HTTP/1.1 200 OK\n"
494 "Via: 1.1 Chrome-Compression-Proxy\n"); 490 "Via: 1.1 Chrome-Compression-Proxy\n");
495 HeadersToRaw(&raw_headers); 491 HeadersToRaw(&raw_headers);
496 scoped_ptr<net::URLRequest> fake_request( 492 scoped_ptr<net::URLRequest> fake_request(
497 CreateURLRequestWithResponseHeaders(GURL("http://www.google.com/"), 493 CreateURLRequestWithResponseHeaders(GURL("http://www.google.com/"),
498 raw_headers)); 494 raw_headers));
499 if (test_cases[i].is_load_bypass_proxy) { 495 if (test_cases[i].is_load_bypass_proxy) {
500 fake_request->SetLoadFlags(fake_request->load_flags() | 496 fake_request->SetLoadFlags(fake_request->load_flags() |
501 net::LOAD_BYPASS_PROXY); 497 net::LOAD_BYPASS_PROXY);
502 } 498 }
503 if (test_cases[i].is_main_frame) { 499 if (test_cases[i].is_main_frame) {
504 fake_request->SetLoadFlags(fake_request->load_flags() | 500 fake_request->SetLoadFlags(fake_request->load_flags() |
505 net::LOAD_MAIN_FRAME); 501 net::LOAD_MAIN_FRAME);
506 } 502 }
507 503
508 int net_error_int = static_cast<int>(test_cases[i].net_error); 504 int net_error_int = static_cast<int>(test_cases[i].net_error);
509 if (test_cases[i].net_error != net::OK) { 505 if (test_cases[i].net_error != net::OK) {
510 fake_request->CancelWithError(net_error_int); 506 fake_request->CancelWithError(net_error_int);
511 } 507 }
512 508
513 DataReductionProxyTypeInfo proxy_info; 509 DataReductionProxyTypeInfo proxy_info;
514 proxy_info.is_fallback = test_cases[i].is_fallback; 510 proxy_info.is_fallback = test_cases[i].is_fallback;
515 EXPECT_CALL(*config(), WasDataReductionProxyUsed(fake_request.get(), 511 EXPECT_CALL(*config(), WasDataReductionProxyUsed(fake_request.get(),
516 testing::NotNull())) 512 testing::NotNull()))
517 .WillRepeatedly(testing::DoAll(testing::SetArgPointee<1>(proxy_info), 513 .WillRepeatedly(testing::DoAll(testing::SetArgPointee<1>(proxy_info),
518 Return(test_cases[i].was_proxy_used))); 514 Return(test_cases[i].was_proxy_used)));
519 515
520 usage_stats->OnUrlRequestCompleted(fake_request.get(), false); 516 bypass_stats->OnUrlRequestCompleted(fake_request.get(), false);
521 517
522 if (test_cases[i].was_proxy_used && !test_cases[i].is_load_bypass_proxy && 518 if (test_cases[i].was_proxy_used && !test_cases[i].is_load_bypass_proxy &&
523 !test_cases[i].is_fallback) { 519 !test_cases[i].is_fallback) {
524 histogram_tester.ExpectUniqueSample( 520 histogram_tester.ExpectUniqueSample(
525 kPrimaryHistogramName, -net_error_int, 1); 521 kPrimaryHistogramName, -net_error_int, 1);
526 } else { 522 } else {
527 histogram_tester.ExpectTotalCount(kPrimaryHistogramName, 0); 523 histogram_tester.ExpectTotalCount(kPrimaryHistogramName, 0);
528 } 524 }
529 if (test_cases[i].was_proxy_used && !test_cases[i].is_load_bypass_proxy && 525 if (test_cases[i].was_proxy_used && !test_cases[i].is_load_bypass_proxy &&
530 test_cases[i].is_fallback) { 526 test_cases[i].is_fallback) {
(...skipping 13 matching lines...) Expand all
544 test_cases[i].is_fallback && test_cases[i].is_main_frame) { 540 test_cases[i].is_fallback && test_cases[i].is_main_frame) {
545 histogram_tester.ExpectUniqueSample( 541 histogram_tester.ExpectUniqueSample(
546 kFallbackMainFrameHistogramName, -net_error_int, 1); 542 kFallbackMainFrameHistogramName, -net_error_int, 1);
547 } else { 543 } else {
548 histogram_tester.ExpectTotalCount(kFallbackMainFrameHistogramName, 0); 544 histogram_tester.ExpectTotalCount(kFallbackMainFrameHistogramName, 0);
549 } 545 }
550 } 546 }
551 } 547 }
552 548
553 // End-to-end tests for the DataReductionProxy.BypassedBytes histograms. 549 // End-to-end tests for the DataReductionProxy.BypassedBytes histograms.
554 class DataReductionProxyUsageStatsEndToEndTest : public testing::Test { 550 class DataReductionProxyBypassStatsEndToEndTest : public testing::Test {
555 public: 551 public:
556 DataReductionProxyUsageStatsEndToEndTest() 552 DataReductionProxyBypassStatsEndToEndTest()
557 : context_(true), context_storage_(&context_) {} 553 : context_(true), context_storage_(&context_) {}
558 554
559 ~DataReductionProxyUsageStatsEndToEndTest() override { 555 ~DataReductionProxyBypassStatsEndToEndTest() override {
560 drp_test_context_->io_data()->ShutdownOnUIThread(); 556 drp_test_context_->io_data()->ShutdownOnUIThread();
561 drp_test_context_->RunUntilIdle(); 557 drp_test_context_->RunUntilIdle();
562 } 558 }
563 559
564 void SetUp() override { 560 void SetUp() override {
565 // Only use the primary data reduction proxy in order to make it easier to 561 // Only use the primary data reduction proxy in order to make it easier to
566 // test bypassed bytes due to proxy fallbacks. This way, a test just needs 562 // test bypassed bytes due to proxy fallbacks. This way, a test just needs
567 // to cause one proxy fallback in order for the data reduction proxy to be 563 // to cause one proxy fallback in order for the data reduction proxy to be
568 // fully bypassed. 564 // fully bypassed.
569 drp_test_context_ = 565 drp_test_context_ =
(...skipping 137 matching lines...) Expand 10 before | Expand all | Expand 10 after
707 } 703 }
708 704
709 private: 705 private:
710 net::TestDelegate delegate_; 706 net::TestDelegate delegate_;
711 net::MockClientSocketFactory mock_socket_factory_; 707 net::MockClientSocketFactory mock_socket_factory_;
712 net::TestURLRequestContext context_; 708 net::TestURLRequestContext context_;
713 net::URLRequestContextStorage context_storage_; 709 net::URLRequestContextStorage context_storage_;
714 scoped_ptr<DataReductionProxyTestContext> drp_test_context_; 710 scoped_ptr<DataReductionProxyTestContext> drp_test_context_;
715 }; 711 };
716 712
717 TEST_F(DataReductionProxyUsageStatsEndToEndTest, BypassedBytesNoRetry) { 713 TEST_F(DataReductionProxyBypassStatsEndToEndTest, BypassedBytesNoRetry) {
718 struct TestCase { 714 struct TestCase {
719 GURL url; 715 GURL url;
720 const char* histogram_name; 716 const char* histogram_name;
721 const char* initial_response_headers; 717 const char* initial_response_headers;
722 }; 718 };
723 const TestCase test_cases[] = { 719 const TestCase test_cases[] = {
724 { GURL("http://foo.com"), 720 { GURL("http://foo.com"),
725 "DataReductionProxy.BypassedBytes.NotBypassed", 721 "DataReductionProxy.BypassedBytes.NotBypassed",
726 "HTTP/1.1 200 OK\r\n" 722 "HTTP/1.1 200 OK\r\n"
727 "Via: 1.1 Chrome-Compression-Proxy\r\n\r\n", 723 "Via: 1.1 Chrome-Compression-Proxy\r\n\r\n",
(...skipping 15 matching lines...) Expand all
743 CreateAndExecuteRequest(test_case.url, test_case.initial_response_headers, 739 CreateAndExecuteRequest(test_case.url, test_case.initial_response_headers,
744 kBody.c_str(), nullptr, nullptr); 740 kBody.c_str(), nullptr, nullptr);
745 741
746 histogram_tester.ExpectUniqueSample(test_case.histogram_name, kBody.size(), 742 histogram_tester.ExpectUniqueSample(test_case.histogram_name, kBody.size(),
747 1); 743 1);
748 ExpectOtherBypassedBytesHistogramsEmpty(histogram_tester, 744 ExpectOtherBypassedBytesHistogramsEmpty(histogram_tester,
749 test_case.histogram_name); 745 test_case.histogram_name);
750 } 746 }
751 } 747 }
752 748
753 TEST_F(DataReductionProxyUsageStatsEndToEndTest, BypassedBytesProxyOverridden) { 749 TEST_F(DataReductionProxyBypassStatsEndToEndTest,
750 BypassedBytesProxyOverridden) {
754 scoped_ptr<net::ProxyService> proxy_service( 751 scoped_ptr<net::ProxyService> proxy_service(
755 net::ProxyService::CreateFixed("http://test.com:80")); 752 net::ProxyService::CreateFixed("http://test.com:80"));
756 set_proxy_service(proxy_service.get()); 753 set_proxy_service(proxy_service.get());
757 InitializeContext(); 754 InitializeContext();
758 755
759 base::HistogramTester histogram_tester; 756 base::HistogramTester histogram_tester;
760 CreateAndExecuteRequest(GURL("http://foo.com"), "HTTP/1.1 200 OK\r\n\r\n", 757 CreateAndExecuteRequest(GURL("http://foo.com"), "HTTP/1.1 200 OK\r\n\r\n",
761 kBody.c_str(), nullptr, nullptr); 758 kBody.c_str(), nullptr, nullptr);
762 759
763 histogram_tester.ExpectUniqueSample( 760 histogram_tester.ExpectUniqueSample(
764 "DataReductionProxy.BypassedBytes.ProxyOverridden", kBody.size(), 1); 761 "DataReductionProxy.BypassedBytes.ProxyOverridden", kBody.size(), 1);
765 ExpectOtherBypassedBytesHistogramsEmpty( 762 ExpectOtherBypassedBytesHistogramsEmpty(
766 histogram_tester, "DataReductionProxy.BypassedBytes.ProxyOverridden"); 763 histogram_tester, "DataReductionProxy.BypassedBytes.ProxyOverridden");
767 } 764 }
768 765
769 TEST_F(DataReductionProxyUsageStatsEndToEndTest, BypassedBytesCurrent) { 766 TEST_F(DataReductionProxyBypassStatsEndToEndTest, BypassedBytesCurrent) {
770 InitializeContext(); 767 InitializeContext();
771 base::HistogramTester histogram_tester; 768 base::HistogramTester histogram_tester;
772 CreateAndExecuteRequest(GURL("http://foo.com"), 769 CreateAndExecuteRequest(GURL("http://foo.com"),
773 "HTTP/1.1 502 Bad Gateway\r\n" 770 "HTTP/1.1 502 Bad Gateway\r\n"
774 "Via: 1.1 Chrome-Compression-Proxy\r\n" 771 "Via: 1.1 Chrome-Compression-Proxy\r\n"
775 "Chrome-Proxy: block-once\r\n\r\n", 772 "Chrome-Proxy: block-once\r\n\r\n",
776 kErrorBody.c_str(), "HTTP/1.1 200 OK\r\n\r\n", 773 kErrorBody.c_str(), "HTTP/1.1 200 OK\r\n\r\n",
777 kBody.c_str()); 774 kBody.c_str());
778 775
779 histogram_tester.ExpectUniqueSample( 776 histogram_tester.ExpectUniqueSample(
780 "DataReductionProxy.BypassedBytes.Current", kBody.size(), 1); 777 "DataReductionProxy.BypassedBytes.Current", kBody.size(), 1);
781 ExpectOtherBypassedBytesHistogramsEmpty( 778 ExpectOtherBypassedBytesHistogramsEmpty(
782 histogram_tester, "DataReductionProxy.BypassedBytes.Current"); 779 histogram_tester, "DataReductionProxy.BypassedBytes.Current");
783 } 780 }
784 781
785 TEST_F(DataReductionProxyUsageStatsEndToEndTest, BypassedBytesShortAudioVideo) { 782 TEST_F(DataReductionProxyBypassStatsEndToEndTest,
783 BypassedBytesShortAudioVideo) {
786 InitializeContext(); 784 InitializeContext();
787 base::HistogramTester histogram_tester; 785 base::HistogramTester histogram_tester;
788 CreateAndExecuteRequest(GURL("http://foo.com"), 786 CreateAndExecuteRequest(GURL("http://foo.com"),
789 "HTTP/1.1 502 Bad Gateway\r\n" 787 "HTTP/1.1 502 Bad Gateway\r\n"
790 "Via: 1.1 Chrome-Compression-Proxy\r\n" 788 "Via: 1.1 Chrome-Compression-Proxy\r\n"
791 "Chrome-Proxy: block=1\r\n\r\n", 789 "Chrome-Proxy: block=1\r\n\r\n",
792 kErrorBody.c_str(), 790 kErrorBody.c_str(),
793 "HTTP/1.1 200 OK\r\n" 791 "HTTP/1.1 200 OK\r\n"
794 "Content-Type: video/mp4\r\n\r\n", 792 "Content-Type: video/mp4\r\n\r\n",
795 kBody.c_str()); 793 kBody.c_str());
796 794
797 histogram_tester.ExpectUniqueSample( 795 histogram_tester.ExpectUniqueSample(
798 "DataReductionProxy.BypassedBytes.ShortAudioVideo", kBody.size(), 1); 796 "DataReductionProxy.BypassedBytes.ShortAudioVideo", kBody.size(), 1);
799 ExpectOtherBypassedBytesHistogramsEmpty( 797 ExpectOtherBypassedBytesHistogramsEmpty(
800 histogram_tester, "DataReductionProxy.BypassedBytes.ShortAudioVideo"); 798 histogram_tester, "DataReductionProxy.BypassedBytes.ShortAudioVideo");
801 } 799 }
802 800
803 TEST_F(DataReductionProxyUsageStatsEndToEndTest, BypassedBytesExplicitBypass) { 801 TEST_F(DataReductionProxyBypassStatsEndToEndTest, BypassedBytesExplicitBypass) {
804 struct TestCase { 802 struct TestCase {
805 const char* triggering_histogram_name; 803 const char* triggering_histogram_name;
806 const char* all_histogram_name; 804 const char* all_histogram_name;
807 const char* initial_response_headers; 805 const char* initial_response_headers;
808 }; 806 };
809 const TestCase test_cases[] = { 807 const TestCase test_cases[] = {
810 { "DataReductionProxy.BypassedBytes.ShortTriggeringRequest", 808 { "DataReductionProxy.BypassedBytes.ShortTriggeringRequest",
811 "DataReductionProxy.BypassedBytes.ShortAll", 809 "DataReductionProxy.BypassedBytes.ShortAll",
812 "HTTP/1.1 502 Bad Gateway\r\n" 810 "HTTP/1.1 502 Bad Gateway\r\n"
813 "Via: 1.1 Chrome-Compression-Proxy\r\n" 811 "Via: 1.1 Chrome-Compression-Proxy\r\n"
(...skipping 29 matching lines...) Expand all
843 histogram_tester.ExpectUniqueSample(test_case.triggering_histogram_name, 841 histogram_tester.ExpectUniqueSample(test_case.triggering_histogram_name,
844 kBody.size(), 1); 842 kBody.size(), 1);
845 histogram_tester.ExpectUniqueSample(test_case.all_histogram_name, 843 histogram_tester.ExpectUniqueSample(test_case.all_histogram_name,
846 kNextBody.size(), 1); 844 kNextBody.size(), 1);
847 ExpectOtherBypassedBytesHistogramsEmpty(histogram_tester, 845 ExpectOtherBypassedBytesHistogramsEmpty(histogram_tester,
848 test_case.triggering_histogram_name, 846 test_case.triggering_histogram_name,
849 test_case.all_histogram_name); 847 test_case.all_histogram_name);
850 } 848 }
851 } 849 }
852 850
853 TEST_F(DataReductionProxyUsageStatsEndToEndTest, 851 TEST_F(DataReductionProxyBypassStatsEndToEndTest,
854 BypassedBytesClientSideFallback) { 852 BypassedBytesClientSideFallback) {
855 struct TestCase { 853 struct TestCase {
856 const char* histogram_name; 854 const char* histogram_name;
857 const char* initial_response_headers; 855 const char* initial_response_headers;
858 }; 856 };
859 const TestCase test_cases[] = { 857 const TestCase test_cases[] = {
860 { "DataReductionProxy.BypassedBytes.MissingViaHeader4xx", 858 { "DataReductionProxy.BypassedBytes.MissingViaHeader4xx",
861 "HTTP/1.1 414 Request-URI Too Long\r\n\r\n", 859 "HTTP/1.1 414 Request-URI Too Long\r\n\r\n",
862 }, 860 },
863 { "DataReductionProxy.BypassedBytes.MissingViaHeaderOther", 861 { "DataReductionProxy.BypassedBytes.MissingViaHeaderOther",
(...skipping 29 matching lines...) Expand all
893 histogram_tester.ExpectTotalCount(test_case.histogram_name, 2); 891 histogram_tester.ExpectTotalCount(test_case.histogram_name, 2);
894 histogram_tester.ExpectBucketCount(test_case.histogram_name, kBody.size(), 892 histogram_tester.ExpectBucketCount(test_case.histogram_name, kBody.size(),
895 1); 893 1);
896 histogram_tester.ExpectBucketCount(test_case.histogram_name, 894 histogram_tester.ExpectBucketCount(test_case.histogram_name,
897 kNextBody.size(), 1); 895 kNextBody.size(), 1);
898 ExpectOtherBypassedBytesHistogramsEmpty(histogram_tester, 896 ExpectOtherBypassedBytesHistogramsEmpty(histogram_tester,
899 test_case.histogram_name); 897 test_case.histogram_name);
900 } 898 }
901 } 899 }
902 900
903 TEST_F(DataReductionProxyUsageStatsEndToEndTest, BypassedBytesNetErrorOther) { 901 TEST_F(DataReductionProxyBypassStatsEndToEndTest, BypassedBytesNetErrorOther) {
904 // Make the data reduction proxy host fail to resolve. 902 // Make the data reduction proxy host fail to resolve.
905 scoped_ptr<net::MockHostResolver> host_resolver(new net::MockHostResolver()); 903 scoped_ptr<net::MockHostResolver> host_resolver(new net::MockHostResolver());
906 host_resolver->rules()->AddSimulatedFailure( 904 host_resolver->rules()->AddSimulatedFailure(
907 config()->test_params()->origin().host_port_pair().host()); 905 config()->test_params()->origin().host_port_pair().host());
908 set_host_resolver(host_resolver.get()); 906 set_host_resolver(host_resolver.get());
909 InitializeContext(); 907 InitializeContext();
910 908
911 base::HistogramTester histogram_tester; 909 base::HistogramTester histogram_tester;
912 CreateAndExecuteRequest(GURL("http://foo.com"), "HTTP/1.1 200 OK\r\n\r\n", 910 CreateAndExecuteRequest(GURL("http://foo.com"), "HTTP/1.1 200 OK\r\n\r\n",
913 kBody.c_str(), nullptr, nullptr); 911 kBody.c_str(), nullptr, nullptr);
914 912
915 histogram_tester.ExpectUniqueSample( 913 histogram_tester.ExpectUniqueSample(
916 "DataReductionProxy.BypassedBytes.NetworkErrorOther", kBody.size(), 1); 914 "DataReductionProxy.BypassedBytes.NetworkErrorOther", kBody.size(), 1);
917 ExpectOtherBypassedBytesHistogramsEmpty( 915 ExpectOtherBypassedBytesHistogramsEmpty(
918 histogram_tester, "DataReductionProxy.BypassedBytes.NetworkErrorOther"); 916 histogram_tester, "DataReductionProxy.BypassedBytes.NetworkErrorOther");
919 histogram_tester.ExpectUniqueSample( 917 histogram_tester.ExpectUniqueSample(
920 "DataReductionProxy.BypassOnNetworkErrorPrimary", 918 "DataReductionProxy.BypassOnNetworkErrorPrimary",
921 -net::ERR_PROXY_CONNECTION_FAILED, 1); 919 -net::ERR_PROXY_CONNECTION_FAILED, 1);
922 } 920 }
923 921
924 } // namespace data_reduction_proxy 922 } // namespace data_reduction_proxy
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698