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

Side by Side Diff: components/data_reduction_proxy/browser/data_reduction_proxy_settings_unittest.cc

Issue 333113002: Move data reduction proxy to Chrome-Proxy header for authentication (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@flywheel-refactor-net-fake-a-redirect-response-headers-chrome-proxy-auth
Patch Set: errata Created 6 years, 5 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/browser/data_reduction_proxy_settings. h" 5 #include "components/data_reduction_proxy/browser/data_reduction_proxy_settings. h"
6 6
7 #include "base/command_line.h" 7 #include "base/command_line.h"
8 #include "base/md5.h" 8 #include "base/md5.h"
9 #include "base/message_loop/message_loop.h" 9 #include "base/message_loop/message_loop.h"
10 #include "base/strings/utf_string_conversions.h" 10 #include "base/strings/utf_string_conversions.h"
11 #include "components/data_reduction_proxy/browser/data_reduction_proxy_params.h" 11 #include "components/data_reduction_proxy/browser/data_reduction_proxy_params.h"
12 #include "components/data_reduction_proxy/browser/data_reduction_proxy_settings_ test_utils.h" 12 #include "components/data_reduction_proxy/browser/data_reduction_proxy_settings_ test_utils.h"
13 #include "components/data_reduction_proxy/common/data_reduction_proxy_pref_names .h" 13 #include "components/data_reduction_proxy/common/data_reduction_proxy_pref_names .h"
14 #include "components/data_reduction_proxy/common/data_reduction_proxy_switches.h " 14 #include "components/data_reduction_proxy/common/data_reduction_proxy_switches.h "
15 #include "net/http/http_auth.h" 15 #include "net/http/http_auth.h"
16 #include "net/http/http_auth_cache.h" 16 #include "net/http/http_auth_cache.h"
17 #include "testing/gmock/include/gmock/gmock.h" 17 #include "testing/gmock/include/gmock/gmock.h"
18 #include "testing/gtest/include/gtest/gtest.h" 18 #include "testing/gtest/include/gtest/gtest.h"
19 #include "url/gurl.h" 19 #include "url/gurl.h"
20 20
21 namespace { 21 namespace {
22 22
23 const char kDataReductionProxy[] = "https://foo.com:443/";
24 const char kDataReductionProxyDev[] = "http://foo-dev.com:80";
25 const char kDataReductionProxyFallback[] = "http://bar.com:80";
26 const char kDataReductionProxyKey[] = "12345";
27 const char kDataReductionProxyAlt[] = "https://alt.com:443/";
28 const char kDataReductionProxyAltFallback[] = "http://alt2.com:80";
29 const char kDataReductionProxySSL[] = "http://ssl.com:80";
30
31 const char kProbeURLWithOKResponse[] = "http://ok.org/"; 23 const char kProbeURLWithOKResponse[] = "http://ok.org/";
32 const char kProbeURLWithBadResponse[] = "http://bad.org/"; 24 const char kProbeURLWithBadResponse[] = "http://bad.org/";
33 const char kProbeURLWithNoResponse[] = "http://no.org/"; 25 const char kProbeURLWithNoResponse[] = "http://no.org/";
34 const char kWarmupURLWithNoContentResponse[] = "http://warm.org/"; 26 const char kWarmupURLWithNoContentResponse[] = "http://warm.org/";
35 27
36 } // namespace 28 } // namespace
37 29
38 namespace data_reduction_proxy { 30 namespace data_reduction_proxy {
39 31
40 class DataReductionProxySettingsTest 32 class DataReductionProxySettingsTest
41 : public ConcreteDataReductionProxySettingsTest< 33 : public ConcreteDataReductionProxySettingsTest<
42 DataReductionProxySettings> { 34 DataReductionProxySettings> {
43 }; 35 };
44 36
45
46 TEST_F(DataReductionProxySettingsTest, TestAuthenticationInit) {
47 net::HttpAuthCache cache;
48 DataReductionProxyParams drp_params(
49 DataReductionProxyParams::kAllowed |
50 DataReductionProxyParams::kFallbackAllowed |
51 DataReductionProxyParams::kPromoAllowed);
52 drp_params.set_key(kDataReductionProxyKey);
53 DataReductionProxySettings::InitDataReductionAuthentication(
54 &cache, &drp_params);
55 DataReductionProxyParams::DataReductionProxyList proxies =
56 drp_params.GetAllowedProxies();
57 for (DataReductionProxyParams::DataReductionProxyList::iterator it =
58 proxies.begin(); it != proxies.end(); ++it) {
59 net::HttpAuthCache::Entry* entry = cache.LookupByPath(*it,
60 std::string("/"));
61 EXPECT_TRUE(entry != NULL);
62 EXPECT_EQ(net::HttpAuth::AUTH_SCHEME_SPDYPROXY, entry->scheme());
63 EXPECT_EQ("SpdyProxy", entry->auth_challenge().substr(0,9));
64 }
65 GURL bad_server = GURL("https://bad.proxy.com/");
66 net::HttpAuthCache::Entry* entry =
67 cache.LookupByPath(bad_server, std::string());
68 EXPECT_TRUE(entry == NULL);
69 }
70
71 TEST_F(DataReductionProxySettingsTest, TestGetDataReductionProxyOrigin) { 37 TEST_F(DataReductionProxySettingsTest, TestGetDataReductionProxyOrigin) {
72 // SetUp() adds the origin to the command line, which should be returned here. 38 // SetUp() adds the origin to the command line, which should be returned here.
73 std::string result = 39 std::string result =
74 settings_->params()->origin().spec(); 40 settings_->params()->origin().spec();
75 EXPECT_EQ(GURL(kDataReductionProxy), GURL(result)); 41 EXPECT_EQ(GURL(expected_params_->DefaultOrigin()), GURL(result));
76 } 42 }
77 43
78 TEST_F(DataReductionProxySettingsTest, TestGetDataReductionProxyDevOrigin) { 44 TEST_F(DataReductionProxySettingsTest, TestGetDataReductionProxyDevOrigin) {
79 CommandLine::ForCurrentProcess()->AppendSwitchASCII( 45 CommandLine::ForCurrentProcess()->AppendSwitchASCII(
80 switches::kDataReductionProxyDev, kDataReductionProxyDev); 46 switches::kDataReductionProxyDev, expected_params_->DefaultDevOrigin());
81 ResetSettings(true, true, false, true); 47 ResetSettings(true, true, false, true);
82 std::string result = 48 std::string result =
83 settings_->params()->origin().spec(); 49 settings_->params()->origin().spec();
84 EXPECT_EQ(GURL(kDataReductionProxyDev), GURL(result)); 50 EXPECT_EQ(GURL(expected_params_->DefaultDevOrigin()), GURL(result));
85 } 51 }
86 52
87 53
88 TEST_F(DataReductionProxySettingsTest, TestGetDataReductionProxies) { 54 TEST_F(DataReductionProxySettingsTest, TestGetDataReductionProxies) {
89 DataReductionProxyParams drp_params(
90 DataReductionProxyParams::kAllowed |
91 DataReductionProxyParams::kFallbackAllowed |
92 DataReductionProxyParams::kPromoAllowed);
93 DataReductionProxyParams::DataReductionProxyList proxies = 55 DataReductionProxyParams::DataReductionProxyList proxies =
94 drp_params.GetAllowedProxies(); 56 expected_params_->GetAllowedProxies();
95 57
96 unsigned int expected_proxy_size = 2u; 58 unsigned int expected_proxy_size = 2u;
97 EXPECT_EQ(expected_proxy_size, proxies.size()); 59 EXPECT_EQ(expected_proxy_size, proxies.size());
98 60
99 // Command line proxies have precedence, so even if there were other values 61 net::HostPortPair expected_origin =
100 // compiled in, these should be the ones in the list. 62 net::HostPortPair::FromURL(GURL(expected_params_->DefaultOrigin()));
101 EXPECT_EQ("foo.com", proxies[0].host()); 63 net::HostPortPair expected_fallback_origin =
102 EXPECT_EQ(443 ,proxies[0].EffectiveIntPort()); 64 net::HostPortPair::FromURL(
103 EXPECT_EQ("bar.com", proxies[1].host()); 65 GURL(expected_params_->DefaultFallbackOrigin()));
104 EXPECT_EQ(80, proxies[1].EffectiveIntPort()); 66 EXPECT_EQ(expected_origin.host(), proxies[0].host());
105 } 67 EXPECT_EQ(expected_origin.port() ,proxies[0].EffectiveIntPort());
106 68 EXPECT_EQ(expected_fallback_origin.host(), proxies[1].host());
107 TEST_F(DataReductionProxySettingsTest, TestAuthHashGeneration) { 69 EXPECT_EQ(expected_fallback_origin.port(), proxies[1].EffectiveIntPort());
108 std::string salt = "8675309"; // Jenny's number to test the hash generator.
109 std::string salted_key = salt + kDataReductionProxyKey + salt;
110 base::string16 expected_hash = base::UTF8ToUTF16(base::MD5String(salted_key));
111 EXPECT_EQ(expected_hash,
112 DataReductionProxySettings::AuthHashForSalt(
113 8675309, kDataReductionProxyKey));
114 } 70 }
115 71
116 TEST_F(DataReductionProxySettingsTest, TestSetProxyConfigs) { 72 TEST_F(DataReductionProxySettingsTest, TestSetProxyConfigs) {
73 TestDataReductionProxyParams drp_params(
74 DataReductionProxyParams::kAllowed |
75 DataReductionProxyParams::kFallbackAllowed |
76 DataReductionProxyParams::kPromoAllowed,
77 TestDataReductionProxyParams::HAS_EVERYTHING &
78 ~TestDataReductionProxyParams::HAS_DEV_ORIGIN);
117 CommandLine::ForCurrentProcess()->AppendSwitchASCII( 79 CommandLine::ForCurrentProcess()->AppendSwitchASCII(
118 switches::kDataReductionProxyAlt, kDataReductionProxyAlt); 80 switches::kDataReductionProxyAlt, drp_params.DefaultAltOrigin());
119 CommandLine::ForCurrentProcess()->AppendSwitchASCII( 81 CommandLine::ForCurrentProcess()->AppendSwitchASCII(
120 switches::kDataReductionProxyAltFallback, kDataReductionProxyAltFallback); 82 switches::kDataReductionProxyAltFallback,
83 drp_params.DefaultAltFallbackOrigin());
121 CommandLine::ForCurrentProcess()->AppendSwitchASCII( 84 CommandLine::ForCurrentProcess()->AppendSwitchASCII(
122 switches::kDataReductionSSLProxy, kDataReductionProxySSL); 85 switches::kDataReductionSSLProxy, drp_params.DefaultSSLOrigin());
123 ResetSettings(true, true, true, true); 86 ResetSettings(true, true, true, true);
124 TestDataReductionProxyConfig* config = 87 TestDataReductionProxyConfig* config =
125 static_cast<TestDataReductionProxyConfig*>( 88 static_cast<TestDataReductionProxyConfig*>(
126 settings_->configurator()); 89 settings_->configurator());
127 90
128 settings_->SetProxyConfigs(true, true, false, false); 91 settings_->SetProxyConfigs(true, true, false, false);
129 EXPECT_TRUE(config->enabled_); 92 EXPECT_TRUE(config->enabled_);
130 EXPECT_TRUE(net::HostPortPair::FromString(kDataReductionProxyAlt).Equals( 93 EXPECT_TRUE(net::HostPortPair::FromString(
131 net::HostPortPair::FromString(config->origin_))); 94 expected_params_->DefaultAltOrigin()).Equals(
132 EXPECT_TRUE( 95 net::HostPortPair::FromString(config->origin_)));
133 net::HostPortPair::FromString(kDataReductionProxyAltFallback).Equals( 96 EXPECT_TRUE(net::HostPortPair::FromString(
97 expected_params_->DefaultAltFallbackOrigin()).Equals(
134 net::HostPortPair::FromString(config->fallback_origin_))); 98 net::HostPortPair::FromString(config->fallback_origin_)));
135 EXPECT_TRUE(net::HostPortPair::FromString(kDataReductionProxySSL).Equals( 99 EXPECT_TRUE(net::HostPortPair::FromString(
136 net::HostPortPair::FromString(config->ssl_origin_))); 100 expected_params_->DefaultSSLOrigin()).Equals(
101 net::HostPortPair::FromString(config->ssl_origin_)));
137 102
138 settings_->SetProxyConfigs(true, false, false, false); 103 settings_->SetProxyConfigs(true, false, false, false);
139 EXPECT_TRUE(config->enabled_); 104 EXPECT_TRUE(config->enabled_);
140 EXPECT_TRUE(net::HostPortPair::FromString(kDataReductionProxy).Equals( 105 EXPECT_TRUE(net::HostPortPair::FromString(drp_params.DefaultOrigin()).Equals(
141 net::HostPortPair::FromString(config->origin_))); 106 net::HostPortPair::FromString(config->origin_)));
142 EXPECT_TRUE(net::HostPortPair::FromString(kDataReductionProxyFallback).Equals( 107 EXPECT_TRUE(net::HostPortPair::FromString(
143 net::HostPortPair::FromString(config->fallback_origin_))); 108 drp_params.DefaultFallbackOrigin()).Equals(
109 net::HostPortPair::FromString(config->fallback_origin_)));
144 EXPECT_EQ("", config->ssl_origin_); 110 EXPECT_EQ("", config->ssl_origin_);
145 111
146 settings_->SetProxyConfigs(false, true, false, false); 112 settings_->SetProxyConfigs(false, true, false, false);
147 EXPECT_FALSE(config->enabled_); 113 EXPECT_FALSE(config->enabled_);
148 EXPECT_EQ("", config->origin_); 114 EXPECT_EQ("", config->origin_);
149 EXPECT_EQ("", config->fallback_origin_); 115 EXPECT_EQ("", config->fallback_origin_);
150 EXPECT_EQ("", config->ssl_origin_); 116 EXPECT_EQ("", config->ssl_origin_);
151 117
152 settings_->SetProxyConfigs(false, false, false, false); 118 settings_->SetProxyConfigs(false, false, false, false);
153 EXPECT_FALSE(config->enabled_); 119 EXPECT_FALSE(config->enabled_);
(...skipping 16 matching lines...) Expand all
170 EXPECT_TRUE(settings_->IsDataReductionProxyEnabled()); 136 EXPECT_TRUE(settings_->IsDataReductionProxyEnabled());
171 EXPECT_FALSE(settings_->IsDataReductionProxyManaged()); 137 EXPECT_FALSE(settings_->IsDataReductionProxyManaged());
172 138
173 CheckOnPrefChange(true, true, true); 139 CheckOnPrefChange(true, true, true);
174 EXPECT_TRUE(settings_->IsDataReductionProxyEnabled()); 140 EXPECT_TRUE(settings_->IsDataReductionProxyEnabled());
175 EXPECT_TRUE(settings_->IsDataReductionProxyManaged()); 141 EXPECT_TRUE(settings_->IsDataReductionProxyManaged());
176 142
177 base::MessageLoop::current()->RunUntilIdle(); 143 base::MessageLoop::current()->RunUntilIdle();
178 } 144 }
179 145
180 TEST_F(DataReductionProxySettingsTest, TestAcceptableChallenges) {
181 typedef struct {
182 std::string host;
183 std::string realm;
184 bool expected_to_succeed;
185 } challenge_test;
186
187 challenge_test tests[] = {
188 {"foo.com:443", "", false}, // 0. No realm.
189 {"foo.com:443", "xxx", false}, // 1. Wrong realm.
190 {"foo.com:443", "spdyproxy", false}, // 2. Case matters.
191 {"foo.com:443", "SpdyProxy", true}, // 3. OK.
192 {"foo.com:443", "SpdyProxy1234567", true}, // 4. OK
193 {"bar.com:80", "SpdyProxy1234567", true}, // 5. OK.
194 {"foo.com:443", "SpdyProxyxxx", true}, // 6. OK
195 {"", "SpdyProxy1234567", false}, // 7. No challenger.
196 {"xxx.net:443", "SpdyProxy1234567", false}, // 8. Wrong host.
197 {"foo.com", "SpdyProxy1234567", false}, // 9. No port.
198 {"foo.com:80", "SpdyProxy1234567", false}, // 10.Wrong port.
199 {"bar.com:81", "SpdyProxy1234567", false}, // 11.Wrong port.
200 };
201
202 for (int i = 0; i <= 11; ++i) {
203 scoped_refptr<net::AuthChallengeInfo> auth_info(new net::AuthChallengeInfo);
204 auth_info->challenger = net::HostPortPair::FromString(tests[i].host);
205 auth_info->realm = tests[i].realm;
206 EXPECT_EQ(tests[i].expected_to_succeed,
207 settings_->IsAcceptableAuthChallenge(auth_info.get()));
208 }
209 }
210
211 TEST_F(DataReductionProxySettingsTest, TestChallengeTokens) {
212 typedef struct {
213 std::string realm;
214 bool expected_empty_token;
215 } token_test;
216
217 token_test tests[] = {
218 {"", true}, // 0. No realm.
219 {"xxx", true}, // 1. realm too short.
220 {"spdyproxy", true}, // 2. no salt.
221 {"SpdyProxyxxx", true}, // 3. Salt not an int.
222 {"SpdyProxy1234567", false}, // 4. OK
223 };
224
225 for (int i = 0; i <= 4; ++i) {
226 scoped_refptr<net::AuthChallengeInfo> auth_info(new net::AuthChallengeInfo);
227 auth_info->challenger =
228 net::HostPortPair::FromString(kDataReductionProxy);
229 auth_info->realm = tests[i].realm;
230 base::string16 token = settings_->GetTokenForAuthChallenge(auth_info.get());
231 EXPECT_EQ(tests[i].expected_empty_token, token.empty());
232 }
233 }
234
235 TEST_F(DataReductionProxySettingsTest, TestResetDataReductionStatistics) { 146 TEST_F(DataReductionProxySettingsTest, TestResetDataReductionStatistics) {
236 int64 original_content_length; 147 int64 original_content_length;
237 int64 received_content_length; 148 int64 received_content_length;
238 int64 last_update_time; 149 int64 last_update_time;
239 settings_->ResetDataReductionStatistics(); 150 settings_->ResetDataReductionStatistics();
240 settings_->GetContentLengths(kNumDaysInHistory, 151 settings_->GetContentLengths(kNumDaysInHistory,
241 &original_content_length, 152 &original_content_length,
242 &received_content_length, 153 &received_content_length,
243 &last_update_time); 154 &last_update_time);
244 EXPECT_EQ(0L, original_content_length); 155 EXPECT_EQ(0L, original_content_length);
(...skipping 172 matching lines...) Expand 10 before | Expand all | Expand 10 after
417 TEST_F(DataReductionProxySettingsTest, TestInitDataReductionProxyOff) { 328 TEST_F(DataReductionProxySettingsTest, TestInitDataReductionProxyOff) {
418 // InitDataReductionProxySettings with the preference off will directly call 329 // InitDataReductionProxySettings with the preference off will directly call
419 // LogProxyState. 330 // LogProxyState.
420 MockSettings* settings = static_cast<MockSettings*>(settings_.get()); 331 MockSettings* settings = static_cast<MockSettings*>(settings_.get());
421 EXPECT_CALL(*settings, RecordStartupState(PROXY_DISABLED)); 332 EXPECT_CALL(*settings, RecordStartupState(PROXY_DISABLED));
422 333
423 pref_service_.SetBoolean(prefs::kDataReductionProxyEnabled, false); 334 pref_service_.SetBoolean(prefs::kDataReductionProxyEnabled, false);
424 CheckInitDataReductionProxy(false); 335 CheckInitDataReductionProxy(false);
425 } 336 }
426 337
427 TEST_F(DataReductionProxySettingsTest, TestSetProxyFromCommandLine) { 338 TEST_F(DataReductionProxySettingsTest, TestEnableProxyFromCommandLine) {
428 MockSettings* settings = static_cast<MockSettings*>(settings_.get()); 339 MockSettings* settings = static_cast<MockSettings*>(settings_.get());
429 EXPECT_CALL(*settings, RecordStartupState(PROXY_ENABLED)); 340 EXPECT_CALL(*settings, RecordStartupState(PROXY_ENABLED));
430 341
431 CommandLine::ForCurrentProcess()->AppendSwitch( 342 CommandLine::ForCurrentProcess()->AppendSwitch(
432 switches::kEnableDataReductionProxy); 343 switches::kEnableDataReductionProxy);
433 CheckInitDataReductionProxy(true); 344 CheckInitDataReductionProxy(true);
434 } 345 }
435 346
436 TEST_F(DataReductionProxySettingsTest, TestGetDailyContentLengths) { 347 TEST_F(DataReductionProxySettingsTest, TestGetDailyContentLengths) {
437 DataReductionProxySettings::ContentLengthList result = 348 DataReductionProxySettings::ContentLengthList result =
(...skipping 27 matching lines...) Expand all
465 scoped_refptr<net::TestURLRequestContextGetter> request_context = 376 scoped_refptr<net::TestURLRequestContextGetter> request_context =
466 new net::TestURLRequestContextGetter(base::MessageLoopProxy::current()); 377 new net::TestURLRequestContextGetter(base::MessageLoopProxy::current());
467 settings_->InitDataReductionProxySettings(&pref_service_, 378 settings_->InitDataReductionProxySettings(&pref_service_,
468 &pref_service_, 379 &pref_service_,
469 request_context.get()); 380 request_context.get());
470 381
471 base::MessageLoop::current()->RunUntilIdle(); 382 base::MessageLoop::current()->RunUntilIdle();
472 } 383 }
473 384
474 } // namespace data_reduction_proxy 385 } // namespace data_reduction_proxy
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698