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

Side by Side Diff: components/data_reduction_proxy/core/common/data_reduction_proxy_headers_unittest.cc

Issue 2777823002: Bypass DRP if a redirect cycle is detected (Closed)
Patch Set: ryansturm comments Created 3 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/common/data_reduction_proxy_heade rs.h" 5 #include "components/data_reduction_proxy/core/common/data_reduction_proxy_heade rs.h"
6 6
7 #include <stddef.h> 7 #include <stddef.h>
8 #include <stdint.h> 8 #include <stdint.h>
9 9
10 #include <memory> 10 #include <memory>
11 #include <vector> 11 #include <vector>
12 12
13 #include "base/macros.h" 13 #include "base/macros.h"
14 #include "base/metrics/field_trial.h" 14 #include "base/metrics/field_trial.h"
15 #include "components/data_reduction_proxy/core/common/data_reduction_proxy_event _creator.h" 15 #include "components/data_reduction_proxy/core/common/data_reduction_proxy_event _creator.h"
16 #include "components/data_reduction_proxy/core/common/data_reduction_proxy_event _storage_delegate_test_utils.h" 16 #include "components/data_reduction_proxy/core/common/data_reduction_proxy_event _storage_delegate_test_utils.h"
17 #include "components/data_reduction_proxy/core/common/data_reduction_proxy_heade rs_test_utils.h" 17 #include "components/data_reduction_proxy/core/common/data_reduction_proxy_heade rs_test_utils.h"
18 #include "net/http/http_response_headers.h" 18 #include "net/http/http_response_headers.h"
19 #include "net/proxy/proxy_service.h" 19 #include "net/proxy/proxy_service.h"
20 #include "testing/gtest/include/gtest/gtest.h" 20 #include "testing/gtest/include/gtest/gtest.h"
21 #include "url/gurl.h"
21 22
22 namespace data_reduction_proxy { 23 namespace data_reduction_proxy {
23 24
24 class DataReductionProxyHeadersTest : public testing::Test { 25 class DataReductionProxyHeadersTest : public testing::Test {
25 protected: 26 protected:
26 void SetUp() override { 27 void SetUp() override {
27 storage_delegate_.reset(new TestDataReductionProxyEventStorageDelegate()); 28 storage_delegate_.reset(new TestDataReductionProxyEventStorageDelegate());
28 event_creator_.reset( 29 event_creator_.reset(
29 new DataReductionProxyEventCreator(storage_delegate_.get())); 30 new DataReductionProxyEventCreator(storage_delegate_.get()));
30 } 31 }
(...skipping 459 matching lines...) Expand 10 before | Expand all | Expand 10 after
490 false, 491 false,
491 }, 492 },
492 }; 493 };
493 for (size_t i = 0; i < arraysize(tests); ++i) { 494 for (size_t i = 0; i < arraysize(tests); ++i) {
494 std::string headers(tests[i].headers); 495 std::string headers(tests[i].headers);
495 HeadersToRaw(&headers); 496 HeadersToRaw(&headers);
496 scoped_refptr<net::HttpResponseHeaders> parsed( 497 scoped_refptr<net::HttpResponseHeaders> parsed(
497 new net::HttpResponseHeaders(headers)); 498 new net::HttpResponseHeaders(headers));
498 499
499 DataReductionProxyInfo data_reduction_proxy_info; 500 DataReductionProxyInfo data_reduction_proxy_info;
500 EXPECT_EQ( 501 EXPECT_EQ(tests[i].expected_result,
501 tests[i].expected_result, 502 ParseHeadersForBypassInfo(*parsed, &data_reduction_proxy_info));
502 ParseHeadersForBypassInfo(parsed.get(), &data_reduction_proxy_info));
503 EXPECT_EQ(tests[i].expected_retry_delay, 503 EXPECT_EQ(tests[i].expected_retry_delay,
504 data_reduction_proxy_info.bypass_duration.InSeconds()); 504 data_reduction_proxy_info.bypass_duration.InSeconds());
505 EXPECT_EQ(tests[i].expected_bypass_all, 505 EXPECT_EQ(tests[i].expected_bypass_all,
506 data_reduction_proxy_info.bypass_all); 506 data_reduction_proxy_info.bypass_all);
507 EXPECT_EQ(tests[i].expected_mark_proxies_as_bad, 507 EXPECT_EQ(tests[i].expected_mark_proxies_as_bad,
508 data_reduction_proxy_info.mark_proxies_as_bad); 508 data_reduction_proxy_info.mark_proxies_as_bad);
509 } 509 }
510 } 510 }
511 511
512 TEST_F(DataReductionProxyHeadersTest, ParseHeadersAndSetProxyInfo) { 512 TEST_F(DataReductionProxyHeadersTest, ParseHeadersAndSetProxyInfo) {
513 std::string headers = 513 std::string headers =
514 "HTTP/1.1 200 OK\n" 514 "HTTP/1.1 200 OK\n"
515 "connection: keep-alive\n" 515 "connection: keep-alive\n"
516 "Chrome-Proxy: bypass=0\n" 516 "Chrome-Proxy: bypass=0\n"
517 "Content-Length: 999\n"; 517 "Content-Length: 999\n";
518 HeadersToRaw(&headers); 518 HeadersToRaw(&headers);
519 scoped_refptr<net::HttpResponseHeaders> parsed( 519 scoped_refptr<net::HttpResponseHeaders> parsed(
520 new net::HttpResponseHeaders(headers)); 520 new net::HttpResponseHeaders(headers));
521 521
522 DataReductionProxyInfo data_reduction_proxy_info; 522 DataReductionProxyInfo data_reduction_proxy_info;
523 EXPECT_TRUE( 523 EXPECT_TRUE(ParseHeadersForBypassInfo(*parsed, &data_reduction_proxy_info));
524 ParseHeadersForBypassInfo(parsed.get(), &data_reduction_proxy_info));
525 EXPECT_LE(60, data_reduction_proxy_info.bypass_duration.InSeconds()); 524 EXPECT_LE(60, data_reduction_proxy_info.bypass_duration.InSeconds());
526 EXPECT_GE(5 * 60, data_reduction_proxy_info.bypass_duration.InSeconds()); 525 EXPECT_GE(5 * 60, data_reduction_proxy_info.bypass_duration.InSeconds());
527 EXPECT_FALSE(data_reduction_proxy_info.bypass_all); 526 EXPECT_FALSE(data_reduction_proxy_info.bypass_all);
528 } 527 }
529 528
530 TEST_F(DataReductionProxyHeadersTest, HasDataReductionProxyViaHeader) { 529 TEST_F(DataReductionProxyHeadersTest, HasDataReductionProxyViaHeader) {
531 const struct { 530 const struct {
532 const char* headers; 531 const char* headers;
533 bool expected_result; 532 bool expected_result;
534 bool expected_has_intermediary; 533 bool expected_has_intermediary;
(...skipping 70 matching lines...) Expand 10 before | Expand all | Expand 10 after
605 }; 604 };
606 for (size_t i = 0; i < arraysize(tests); ++i) { 605 for (size_t i = 0; i < arraysize(tests); ++i) {
607 std::string headers(tests[i].headers); 606 std::string headers(tests[i].headers);
608 HeadersToRaw(&headers); 607 HeadersToRaw(&headers);
609 scoped_refptr<net::HttpResponseHeaders> parsed( 608 scoped_refptr<net::HttpResponseHeaders> parsed(
610 new net::HttpResponseHeaders(headers)); 609 new net::HttpResponseHeaders(headers));
611 610
612 bool has_chrome_proxy_via_header, has_intermediary; 611 bool has_chrome_proxy_via_header, has_intermediary;
613 if (tests[i].ignore_intermediary) { 612 if (tests[i].ignore_intermediary) {
614 has_chrome_proxy_via_header = 613 has_chrome_proxy_via_header =
615 HasDataReductionProxyViaHeader(parsed.get(), NULL); 614 HasDataReductionProxyViaHeader(*parsed, NULL);
616 } 615 }
617 else { 616 else {
618 has_chrome_proxy_via_header = 617 has_chrome_proxy_via_header =
619 HasDataReductionProxyViaHeader(parsed.get(), &has_intermediary); 618 HasDataReductionProxyViaHeader(*parsed, &has_intermediary);
620 } 619 }
621 EXPECT_EQ(tests[i].expected_result, has_chrome_proxy_via_header); 620 EXPECT_EQ(tests[i].expected_result, has_chrome_proxy_via_header);
622 if (has_chrome_proxy_via_header && !tests[i].ignore_intermediary) { 621 if (has_chrome_proxy_via_header && !tests[i].ignore_intermediary) {
623 EXPECT_EQ(tests[i].expected_has_intermediary, has_intermediary); 622 EXPECT_EQ(tests[i].expected_has_intermediary, has_intermediary);
624 } 623 }
625 } 624 }
626 } 625 }
627 626
628 TEST_F(DataReductionProxyHeadersTest, GetDataReductionProxyBypassEventType) { 627 TEST_F(DataReductionProxyHeadersTest, GetDataReductionProxyBypassEventType) {
629 const struct { 628 const struct {
(...skipping 131 matching lines...) Expand 10 before | Expand all | Expand 10 after
761 scoped_refptr<net::HttpResponseHeaders> parsed( 760 scoped_refptr<net::HttpResponseHeaders> parsed(
762 new net::HttpResponseHeaders(headers)); 761 new net::HttpResponseHeaders(headers));
763 DataReductionProxyInfo chrome_proxy_info; 762 DataReductionProxyInfo chrome_proxy_info;
764 763
765 base::FieldTrialList trial_list(nullptr); 764 base::FieldTrialList trial_list(nullptr);
766 base::FieldTrialList::CreateFieldTrial( 765 base::FieldTrialList::CreateFieldTrial(
767 "DataReductionProxyServerExperiments", 766 "DataReductionProxyServerExperiments",
768 tests[i].in_tamper_detection_experiment ? "TamperDetection_Enabled" 767 tests[i].in_tamper_detection_experiment ? "TamperDetection_Enabled"
769 : "TamperDetection_Disabled"); 768 : "TamperDetection_Disabled");
770 769
771 EXPECT_EQ(tests[i].expected_result, GetDataReductionProxyBypassType( 770 EXPECT_EQ(tests[i].expected_result,
772 parsed.get(), &chrome_proxy_info)); 771 GetDataReductionProxyBypassType(std::vector<GURL>(), *parsed,
772 &chrome_proxy_info));
773 } 773 }
774 } 774 }
775 775
776 TEST_F(DataReductionProxyHeadersTest,
777 GetDataReductionProxyBypassEventTypeURLRedirectCycle) {
778 const struct {
779 const char* headers;
780 std::vector<GURL> url_chain;
781 DataReductionProxyBypassType expected_result;
782 } tests[] = {
783 {
784 "HTTP/1.1 200 OK\n"
785 "Via: 1.1 Chrome-Compression-Proxy\n",
786 std::vector<GURL>{GURL("http://google.com/1"),
787 GURL("http://google.com/2"),
788 GURL("http://google.com/1")},
789 BYPASS_EVENT_TYPE_URL_REDIRECT_CYCLE,
790 },
791 {
792 "HTTP/1.1 200 OK\n"
793 "Via: 1.1 Chrome-Compression-Proxy\n",
794 std::vector<GURL>{
795 GURL("http://google.com/1"), GURL("http://google.com/2"),
796 GURL("http://google.com/1"), GURL("http://google.com/2")},
797 BYPASS_EVENT_TYPE_URL_REDIRECT_CYCLE,
798 },
799 {
800 "HTTP/1.1 200 OK\n"
801 "Via: 1.1 Chrome-Compression-Proxy\n",
802 std::vector<GURL>{GURL("http://google.com/1")}, BYPASS_EVENT_TYPE_MAX,
803 },
804 {
805 "HTTP/1.1 200 OK\n"
806 "Via: 1.1 Chrome-Compression-Proxy\n",
807 std::vector<GURL>{GURL("http://google.com/1"),
808 GURL("http://google.com/2")},
809 BYPASS_EVENT_TYPE_MAX,
810 },
811 {
812 "HTTP/1.1 200 OK\n"
813 "Via: 1.1 Chrome-Compression-Proxy\n",
814 std::vector<GURL>{GURL("http://google.com/1"),
815 GURL("http://google.com/2"),
816 GURL("http://google.com/3")},
817 BYPASS_EVENT_TYPE_MAX,
818 },
819 {
820 "HTTP/1.1 200 OK\n"
821 "Via: 1.1 Chrome-Compression-Proxy\n",
822 std::vector<GURL>{
823 GURL("http://google.com/1"), GURL("http://google.com/2"),
824 GURL("http://google.com/3"), GURL("http://google.com/1")},
825 BYPASS_EVENT_TYPE_URL_REDIRECT_CYCLE,
826 },
827 {
828 "HTTP/1.1 200 OK\n"
829 "Via: 1.1 Chrome-Compression-Proxy\n",
830 std::vector<GURL>{
831 GURL("http://google.com/1"), GURL("http://google.com/2"),
832 GURL("http://google.com/1"), GURL("http://google.com/3")},
833 BYPASS_EVENT_TYPE_MAX,
834 },
835 {
836 "HTTP/1.1 200 OK\n"
837 "Via: 1.1 Chrome-Compression-Proxy\n",
838 std::vector<GURL>(), BYPASS_EVENT_TYPE_MAX,
839 }};
840
841 for (const auto& test : tests) {
842 std::string headers(test.headers);
843 HeadersToRaw(&headers);
844 scoped_refptr<net::HttpResponseHeaders> parsed(
845 new net::HttpResponseHeaders(headers));
846 DataReductionProxyInfo chrome_proxy_info;
847
848 EXPECT_EQ(test.expected_result,
849 GetDataReductionProxyBypassType(test.url_chain, *parsed,
850 &chrome_proxy_info));
851 }
852 }
853
776 TEST_F(DataReductionProxyHeadersTest, 854 TEST_F(DataReductionProxyHeadersTest,
777 GetDataReductionProxyActionFingerprintChromeProxy) { 855 GetDataReductionProxyActionFingerprintChromeProxy) {
778 const struct { 856 const struct {
779 std::string label; 857 std::string label;
780 const char* headers; 858 const char* headers;
781 bool expected_fingerprint_exist; 859 bool expected_fingerprint_exist;
782 std::string expected_fingerprint; 860 std::string expected_fingerprint;
783 } tests[] = { 861 } tests[] = {
784 { "fingerprint doesn't exist", 862 { "fingerprint doesn't exist",
785 "HTTP/1.1 200 OK\n" 863 "HTTP/1.1 200 OK\n"
(...skipping 224 matching lines...) Expand 10 before | Expand all | Expand 10 after
1010 std::string output_values_string; 1088 std::string output_values_string;
1011 for (size_t j = 0; j < output_values.size(); ++j) 1089 for (size_t j = 0; j < output_values.size(); ++j)
1012 output_values_string += output_values[j] + ","; 1090 output_values_string += output_values[j] + ",";
1013 1091
1014 EXPECT_EQ(test[i].expected_output_values_string, output_values_string) 1092 EXPECT_EQ(test[i].expected_output_values_string, output_values_string)
1015 << test[i].label; 1093 << test[i].label;
1016 } 1094 }
1017 } 1095 }
1018 1096
1019 } // namespace data_reduction_proxy 1097 } // namespace data_reduction_proxy
OLDNEW
« no previous file with comments | « components/data_reduction_proxy/core/common/data_reduction_proxy_headers.cc ('k') | tools/metrics/histograms/histograms.xml » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698