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

Side by Side Diff: net/http/http_server_properties_manager_unittest.cc

Issue 1216703002: Implement multiple alternative services per origin. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Nit. Created 5 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
« no previous file with comments | « net/http/http_server_properties_manager.cc ('k') | net/http/http_stream_factory.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 "net/http/http_server_properties_manager.h" 5 #include "net/http/http_server_properties_manager.h"
6 6
7 #include "base/basictypes.h" 7 #include "base/basictypes.h"
8 #include "base/json/json_writer.h" 8 #include "base/json/json_writer.h"
9 #include "base/message_loop/message_loop.h" 9 #include "base/message_loop/message_loop.h"
10 #include "base/prefs/pref_registry_simple.h" 10 #include "base/prefs/pref_registry_simple.h"
(...skipping 144 matching lines...) Expand 10 before | Expand all | Expand 10 after
155 void ExpectPrefsUpdateRepeatedly() { 155 void ExpectPrefsUpdateRepeatedly() {
156 EXPECT_CALL(*http_server_props_manager_, 156 EXPECT_CALL(*http_server_props_manager_,
157 UpdatePrefsFromCacheOnNetworkThread(_)) 157 UpdatePrefsFromCacheOnNetworkThread(_))
158 .WillRepeatedly( 158 .WillRepeatedly(
159 Invoke(http_server_props_manager_.get(), 159 Invoke(http_server_props_manager_.get(),
160 &TestingHttpServerPropertiesManager:: 160 &TestingHttpServerPropertiesManager::
161 UpdatePrefsFromCacheOnNetworkThreadConcrete)); 161 UpdatePrefsFromCacheOnNetworkThreadConcrete));
162 } 162 }
163 163
164 bool HasAlternativeService(const HostPortPair& server) { 164 bool HasAlternativeService(const HostPortPair& server) {
165 const AlternativeService alternative_service = 165 const AlternativeServiceVector alternative_service_vector =
166 http_server_props_manager_->GetAlternativeService(server); 166 http_server_props_manager_->GetAlternativeServices(server);
167 return alternative_service.protocol != UNINITIALIZED_ALTERNATE_PROTOCOL; 167 return !alternative_service_vector.empty();
168 } 168 }
169 169
170 //base::RunLoop loop_; 170 //base::RunLoop loop_;
171 TestingPrefServiceSimple pref_service_; 171 TestingPrefServiceSimple pref_service_;
172 scoped_ptr<TestingHttpServerPropertiesManager> http_server_props_manager_; 172 scoped_ptr<TestingHttpServerPropertiesManager> http_server_props_manager_;
173 173
174 private: 174 private:
175 DISALLOW_COPY_AND_ASSIGN(HttpServerPropertiesManagerTest); 175 DISALLOW_COPY_AND_ASSIGN(HttpServerPropertiesManagerTest);
176 }; 176 };
177 177
178 TEST_F(HttpServerPropertiesManagerTest, 178 TEST_F(HttpServerPropertiesManagerTest,
179 SingleUpdateForTwoSpdyServerPrefChanges) { 179 SingleUpdateForTwoSpdyServerPrefChanges) {
180 ExpectCacheUpdate(); 180 ExpectCacheUpdate();
181 181
182 // Set up the prefs for www.google.com:80 and mail.google.com:80 and then set 182 // Set up the prefs for www.google.com:80 and mail.google.com:80 and then set
183 // it twice. Only expect a single cache update. 183 // it twice. Only expect a single cache update.
184 184
185 base::DictionaryValue* server_pref_dict = new base::DictionaryValue; 185 base::DictionaryValue* server_pref_dict = new base::DictionaryValue;
186 HostPortPair google_server("www.google.com", 80); 186 HostPortPair google_server("www.google.com", 80);
187 HostPortPair mail_server("mail.google.com", 80); 187 HostPortPair mail_server("mail.google.com", 80);
188 188
189 // Set supports_spdy for www.google.com:80. 189 // Set supports_spdy for www.google.com:80.
190 server_pref_dict->SetBoolean("supports_spdy", true); 190 server_pref_dict->SetBoolean("supports_spdy", true);
191 191
192 // Set up alternative_service for www.google.com:80. 192 // Set up alternative_services for www.google.com:80.
193 base::DictionaryValue* alternative_service_dict = new base::DictionaryValue; 193 base::DictionaryValue* alternative_service_dict0 = new base::DictionaryValue;
194 alternative_service_dict->SetString("protocol_str", "npn-h2"); 194 alternative_service_dict0->SetInteger("port", 443);
195 alternative_service_dict->SetString("host", "maps.google.com"); 195 alternative_service_dict0->SetString("protocol_str", "npn-spdy/3");
196 alternative_service_dict->SetInteger("port", 443); 196 base::DictionaryValue* alternative_service_dict1 = new base::DictionaryValue;
197 alternative_service_dict1->SetInteger("port", 1234);
198 alternative_service_dict1->SetString("protocol_str", "quic");
197 base::ListValue* alternative_service_list = new base::ListValue; 199 base::ListValue* alternative_service_list = new base::ListValue;
198 alternative_service_list->Append(alternative_service_dict); 200 alternative_service_list->Append(alternative_service_dict0);
201 alternative_service_list->Append(alternative_service_dict1);
199 server_pref_dict->SetWithoutPathExpansion("alternative_service", 202 server_pref_dict->SetWithoutPathExpansion("alternative_service",
200 alternative_service_list); 203 alternative_service_list);
201 204
202 // Set up ServerNetworkStats for www.google.com:80. 205 // Set up ServerNetworkStats for www.google.com:80.
203 base::DictionaryValue* stats = new base::DictionaryValue; 206 base::DictionaryValue* stats = new base::DictionaryValue;
204 stats->SetInteger("srtt", 10); 207 stats->SetInteger("srtt", 10);
205 server_pref_dict->SetWithoutPathExpansion("network_stats", stats); 208 server_pref_dict->SetWithoutPathExpansion("network_stats", stats);
206 209
207 // Set the server preference for www.google.com:80. 210 // Set the server preference for www.google.com:80.
208 base::DictionaryValue* servers_dict = new base::DictionaryValue; 211 base::DictionaryValue* servers_dict = new base::DictionaryValue;
209 servers_dict->SetWithoutPathExpansion("www.google.com:80", server_pref_dict); 212 servers_dict->SetWithoutPathExpansion("www.google.com:80", server_pref_dict);
210 213
211 // Set the preference for mail.google.com server. 214 // Set the preference for mail.google.com server.
212 base::DictionaryValue* server_pref_dict1 = new base::DictionaryValue; 215 base::DictionaryValue* server_pref_dict1 = new base::DictionaryValue;
213 216
214 // Set supports_spdy for mail.google.com:80 217 // Set supports_spdy for mail.google.com:80
215 server_pref_dict1->SetBoolean("supports_spdy", true); 218 server_pref_dict1->SetBoolean("supports_spdy", true);
216 219
217 // Set up alternate_protocol for mail.google.com:80 to test migration to 220 // Set up alternate_protocol for mail.google.com:80 to test migration to
218 // alternative-service. 221 // alternative_service.
219 base::DictionaryValue* alternate_protocol_dict = new base::DictionaryValue; 222 base::DictionaryValue* alternate_protocol_dict = new base::DictionaryValue;
220 alternate_protocol_dict->SetString("protocol_str", "npn-spdy/3.1"); 223 alternate_protocol_dict->SetString("protocol_str", "npn-spdy/3.1");
221 alternate_protocol_dict->SetInteger("port", 444); 224 alternate_protocol_dict->SetInteger("port", 444);
222 server_pref_dict1->SetWithoutPathExpansion("alternate_protocol", 225 server_pref_dict1->SetWithoutPathExpansion("alternate_protocol",
223 alternate_protocol_dict); 226 alternate_protocol_dict);
224 227
225 // Set up ServerNetworkStats for mail.google.com:80. 228 // Set up ServerNetworkStats for mail.google.com:80.
226 base::DictionaryValue* stats1 = new base::DictionaryValue; 229 base::DictionaryValue* stats1 = new base::DictionaryValue;
227 stats1->SetInteger("srtt", 20); 230 stats1->SetInteger("srtt", 20);
228 server_pref_dict1->SetWithoutPathExpansion("network_stats", stats1); 231 server_pref_dict1->SetWithoutPathExpansion("network_stats", stats1);
(...skipping 23 matching lines...) Expand all
252 Mock::VerifyAndClearExpectations(http_server_props_manager_.get()); 255 Mock::VerifyAndClearExpectations(http_server_props_manager_.get());
253 256
254 // Verify SupportsSpdy. 257 // Verify SupportsSpdy.
255 EXPECT_TRUE( 258 EXPECT_TRUE(
256 http_server_props_manager_->SupportsRequestPriority(google_server)); 259 http_server_props_manager_->SupportsRequestPriority(google_server));
257 EXPECT_TRUE(http_server_props_manager_->SupportsRequestPriority(mail_server)); 260 EXPECT_TRUE(http_server_props_manager_->SupportsRequestPriority(mail_server));
258 EXPECT_FALSE(http_server_props_manager_->SupportsRequestPriority( 261 EXPECT_FALSE(http_server_props_manager_->SupportsRequestPriority(
259 HostPortPair::FromString("foo.google.com:1337"))); 262 HostPortPair::FromString("foo.google.com:1337")));
260 263
261 // Verify alternative service. 264 // Verify alternative service.
262 AlternativeService alternative_service = 265 const AlternativeServiceMap& map =
263 http_server_props_manager_->GetAlternativeService(google_server); 266 http_server_props_manager_->alternative_service_map();
264 EXPECT_EQ(NPN_SPDY_4, alternative_service.protocol); 267 ASSERT_EQ(2u, map.size());
265 EXPECT_EQ("maps.google.com", alternative_service.host); 268 AlternativeServiceMap::const_iterator map_it = map.begin();
266 EXPECT_EQ(443, alternative_service.port); 269 EXPECT_EQ("www.google.com", map_it->first.host());
267 alternative_service = 270 ASSERT_EQ(2u, map_it->second.size());
268 http_server_props_manager_->GetAlternativeService(mail_server); 271 EXPECT_EQ(NPN_SPDY_3, map_it->second[0].alternative_service.protocol);
269 EXPECT_EQ(NPN_SPDY_3_1, alternative_service.protocol); 272 EXPECT_TRUE(map_it->second[0].alternative_service.host.empty());
270 EXPECT_EQ("mail.google.com", alternative_service.host); 273 EXPECT_EQ(443, map_it->second[0].alternative_service.port);
271 EXPECT_EQ(444, alternative_service.port); 274 EXPECT_EQ(QUIC, map_it->second[1].alternative_service.protocol);
275 EXPECT_TRUE(map_it->second[1].alternative_service.host.empty());
276 EXPECT_EQ(1234, map_it->second[1].alternative_service.port);
277 ++map_it;
278 EXPECT_EQ("mail.google.com", map_it->first.host());
279 ASSERT_EQ(1u, map_it->second.size());
280 EXPECT_EQ(NPN_SPDY_3_1, map_it->second[0].alternative_service.protocol);
281 EXPECT_TRUE(map_it->second[0].alternative_service.host.empty());
282 EXPECT_EQ(444, map_it->second[0].alternative_service.port);
272 283
273 // Verify SupportsQuic. 284 // Verify SupportsQuic.
274 IPAddressNumber last_address; 285 IPAddressNumber last_address;
275 EXPECT_TRUE(http_server_props_manager_->GetSupportsQuic(&last_address)); 286 EXPECT_TRUE(http_server_props_manager_->GetSupportsQuic(&last_address));
276 EXPECT_EQ("127.0.0.1", IPAddressToString(last_address)); 287 EXPECT_EQ("127.0.0.1", IPAddressToString(last_address));
277 288
278 // Verify ServerNetworkStats. 289 // Verify ServerNetworkStats.
279 const ServerNetworkStats* stats2 = 290 const ServerNetworkStats* stats2 =
280 http_server_props_manager_->GetServerNetworkStats(google_server); 291 http_server_props_manager_->GetServerNetworkStats(google_server);
281 EXPECT_EQ(10, stats2->srtt.ToInternalValue()); 292 EXPECT_EQ(10, stats2->srtt.ToInternalValue());
282 const ServerNetworkStats* stats3 = 293 const ServerNetworkStats* stats3 =
283 http_server_props_manager_->GetServerNetworkStats(mail_server); 294 http_server_props_manager_->GetServerNetworkStats(mail_server);
284 EXPECT_EQ(20, stats3->srtt.ToInternalValue()); 295 EXPECT_EQ(20, stats3->srtt.ToInternalValue());
285 } 296 }
286 297
287 TEST_F(HttpServerPropertiesManagerTest, BadCachedHostPortPair) { 298 TEST_F(HttpServerPropertiesManagerTest, BadCachedHostPortPair) {
288 ExpectCacheUpdate(); 299 ExpectCacheUpdate();
289 // The prefs are automaticalls updated in the case corruption is detected. 300 // The prefs are automaticalls updated in the case corruption is detected.
290 ExpectPrefsUpdate(); 301 ExpectPrefsUpdate();
291 ExpectScheduleUpdatePrefsOnNetworkThread(); 302 ExpectScheduleUpdatePrefsOnNetworkThread();
292 303
293 base::DictionaryValue* server_pref_dict = new base::DictionaryValue; 304 base::DictionaryValue* server_pref_dict = new base::DictionaryValue;
294 305
295 // Set supports_spdy for www.google.com:65536. 306 // Set supports_spdy for www.google.com:65536.
296 server_pref_dict->SetBoolean("supports_spdy", true); 307 server_pref_dict->SetBoolean("supports_spdy", true);
297 308
298 // Set up alternative_service for www.google.com:65536. 309 // Set up alternative_service for www.google.com:65536.
299
300 base::DictionaryValue* alternative_service_dict = new base::DictionaryValue; 310 base::DictionaryValue* alternative_service_dict = new base::DictionaryValue;
301 alternative_service_dict->SetString("protocol_str", "npn-spdy/3"); 311 alternative_service_dict->SetString("protocol_str", "npn-spdy/3");
302 alternative_service_dict->SetInteger("port", 80); 312 alternative_service_dict->SetInteger("port", 80);
303 base::ListValue* alternative_service_list = new base::ListValue; 313 base::ListValue* alternative_service_list = new base::ListValue;
304 alternative_service_list->Append(alternative_service_dict); 314 alternative_service_list->Append(alternative_service_dict);
305 server_pref_dict->SetWithoutPathExpansion("alternative_service", 315 server_pref_dict->SetWithoutPathExpansion("alternative_service",
306 alternative_service_list); 316 alternative_service_list);
307 317
308 // Set up ServerNetworkStats for www.google.com:65536. 318 // Set up ServerNetworkStats for www.google.com:65536.
309 base::DictionaryValue* stats = new base::DictionaryValue; 319 base::DictionaryValue* stats = new base::DictionaryValue;
(...skipping 189 matching lines...) Expand 10 before | Expand all | Expand 10 after
499 base::RunLoop().RunUntilIdle(); 509 base::RunLoop().RunUntilIdle();
500 510
501 // Verify that there are no entries in the settings map. 511 // Verify that there are no entries in the settings map.
502 const SpdySettingsMap& spdy_settings_map2_ret = 512 const SpdySettingsMap& spdy_settings_map2_ret =
503 http_server_props_manager_->spdy_settings_map(); 513 http_server_props_manager_->spdy_settings_map();
504 ASSERT_EQ(0U, spdy_settings_map2_ret.size()); 514 ASSERT_EQ(0U, spdy_settings_map2_ret.size());
505 515
506 Mock::VerifyAndClearExpectations(http_server_props_manager_.get()); 516 Mock::VerifyAndClearExpectations(http_server_props_manager_.get());
507 } 517 }
508 518
509 TEST_F(HttpServerPropertiesManagerTest, GetAlternativeService) { 519 TEST_F(HttpServerPropertiesManagerTest, GetAlternativeServices) {
510 ExpectPrefsUpdate(); 520 ExpectPrefsUpdate();
511 ExpectScheduleUpdatePrefsOnNetworkThread(); 521 ExpectScheduleUpdatePrefsOnNetworkThread();
512 522
513 HostPortPair spdy_server_mail("mail.google.com", 80); 523 HostPortPair spdy_server_mail("mail.google.com", 80);
514 EXPECT_FALSE(HasAlternativeService(spdy_server_mail)); 524 EXPECT_FALSE(HasAlternativeService(spdy_server_mail));
515 AlternativeService alternative_service(NPN_SPDY_4, "mail.google.com", 443); 525 const AlternativeService alternative_service(NPN_SPDY_4, "mail.google.com",
526 443);
516 http_server_props_manager_->SetAlternativeService(spdy_server_mail, 527 http_server_props_manager_->SetAlternativeService(spdy_server_mail,
517 alternative_service, 1.0); 528 alternative_service, 1.0);
518 // ExpectScheduleUpdatePrefsOnNetworkThread() should be called only once. 529 // ExpectScheduleUpdatePrefsOnNetworkThread() should be called only once.
519 http_server_props_manager_->SetAlternativeService(spdy_server_mail, 530 http_server_props_manager_->SetAlternativeService(spdy_server_mail,
520 alternative_service, 1.0); 531 alternative_service, 1.0);
521 532
522 // Run the task. 533 // Run the task.
523 base::RunLoop().RunUntilIdle(); 534 base::RunLoop().RunUntilIdle();
524 Mock::VerifyAndClearExpectations(http_server_props_manager_.get()); 535 Mock::VerifyAndClearExpectations(http_server_props_manager_.get());
525 536
526 alternative_service = 537 AlternativeServiceVector alternative_service_vector =
527 http_server_props_manager_->GetAlternativeService(spdy_server_mail); 538 http_server_props_manager_->GetAlternativeServices(spdy_server_mail);
528 EXPECT_EQ(443, alternative_service.port); 539 ASSERT_EQ(1u, alternative_service_vector.size());
529 EXPECT_EQ(NPN_SPDY_4, alternative_service.protocol); 540 EXPECT_EQ(alternative_service, alternative_service_vector[0]);
530 } 541 }
531 542
532 TEST_F(HttpServerPropertiesManagerTest, ClearAlternativeService) { 543 TEST_F(HttpServerPropertiesManagerTest, SetAlternativeServices) {
533 ExpectPrefsUpdate(); 544 ExpectPrefsUpdate();
534 ExpectScheduleUpdatePrefsOnNetworkThread(); 545 ExpectScheduleUpdatePrefsOnNetworkThread();
535 546
547 HostPortPair spdy_server_mail("mail.google.com", 80);
548 EXPECT_FALSE(HasAlternativeService(spdy_server_mail));
549 AlternativeServiceInfoVector alternative_service_info_vector;
550 const AlternativeService alternative_service1(NPN_SPDY_4, "mail.google.com",
551 443);
552 alternative_service_info_vector.push_back(
553 AlternativeServiceInfo(alternative_service1, 1.0));
554 const AlternativeService alternative_service2(QUIC, "mail.google.com", 1234);
555 alternative_service_info_vector.push_back(
556 AlternativeServiceInfo(alternative_service2, 1.0));
557 http_server_props_manager_->SetAlternativeServices(
558 spdy_server_mail, alternative_service_info_vector);
559 // ExpectScheduleUpdatePrefsOnNetworkThread() should be called only once.
560 http_server_props_manager_->SetAlternativeServices(
561 spdy_server_mail, alternative_service_info_vector);
562
563 // Run the task.
564 base::RunLoop().RunUntilIdle();
565 Mock::VerifyAndClearExpectations(http_server_props_manager_.get());
566
567 AlternativeServiceVector alternative_service_vector =
568 http_server_props_manager_->GetAlternativeServices(spdy_server_mail);
569 ASSERT_EQ(2u, alternative_service_vector.size());
570 EXPECT_EQ(alternative_service1, alternative_service_vector[0]);
571 EXPECT_EQ(alternative_service2, alternative_service_vector[1]);
572 }
573
574 TEST_F(HttpServerPropertiesManagerTest, SetAlternativeServicesEmpty) {
575 HostPortPair spdy_server_mail("mail.google.com", 80);
576 EXPECT_FALSE(HasAlternativeService(spdy_server_mail));
577 const AlternativeService alternative_service(NPN_SPDY_4, "mail.google.com",
578 443);
579 http_server_props_manager_->SetAlternativeServices(
580 spdy_server_mail, AlternativeServiceInfoVector());
581 // ExpectScheduleUpdatePrefsOnNetworkThread() should not be called.
582
583 // Run the task.
584 base::RunLoop().RunUntilIdle();
585 Mock::VerifyAndClearExpectations(http_server_props_manager_.get());
586
587 EXPECT_FALSE(HasAlternativeService(spdy_server_mail));
588 }
589
590 TEST_F(HttpServerPropertiesManagerTest, ClearAlternativeServices) {
591 ExpectPrefsUpdate();
592 ExpectScheduleUpdatePrefsOnNetworkThread();
593
536 HostPortPair spdy_server_mail("mail.google.com", 80); 594 HostPortPair spdy_server_mail("mail.google.com", 80);
537 EXPECT_FALSE(HasAlternativeService(spdy_server_mail)); 595 EXPECT_FALSE(HasAlternativeService(spdy_server_mail));
538 AlternativeService alternative_service(NPN_SPDY_4, "mail.google.com", 443); 596 AlternativeService alternative_service(NPN_SPDY_4, "mail.google.com", 443);
539 http_server_props_manager_->SetAlternativeService(spdy_server_mail, 597 http_server_props_manager_->SetAlternativeService(spdy_server_mail,
540 alternative_service, 1.0); 598 alternative_service, 1.0);
541 ExpectScheduleUpdatePrefsOnNetworkThread(); 599 ExpectScheduleUpdatePrefsOnNetworkThread();
542 http_server_props_manager_->ClearAlternativeService(spdy_server_mail); 600 http_server_props_manager_->ClearAlternativeServices(spdy_server_mail);
543 // ExpectScheduleUpdatePrefsOnNetworkThread() should be called only once. 601 // ExpectScheduleUpdatePrefsOnNetworkThread() should be called only once.
544 http_server_props_manager_->ClearAlternativeService(spdy_server_mail); 602 http_server_props_manager_->ClearAlternativeServices(spdy_server_mail);
545 603
546 // Run the task. 604 // Run the task.
547 base::RunLoop().RunUntilIdle(); 605 base::RunLoop().RunUntilIdle();
548 Mock::VerifyAndClearExpectations(http_server_props_manager_.get()); 606 Mock::VerifyAndClearExpectations(http_server_props_manager_.get());
549 607
550 EXPECT_FALSE(HasAlternativeService(spdy_server_mail)); 608 EXPECT_FALSE(HasAlternativeService(spdy_server_mail));
551 } 609 }
552 610
553 TEST_F(HttpServerPropertiesManagerTest, ConfirmAlternativeService) { 611 TEST_F(HttpServerPropertiesManagerTest, ConfirmAlternativeService) {
554 ExpectPrefsUpdate(); 612 ExpectPrefsUpdate();
(...skipping 157 matching lines...) Expand 10 before | Expand all | Expand 10 after
712 // supports_quic and verify we have read supports_quic from prefs. 770 // supports_quic and verify we have read supports_quic from prefs.
713 TEST_F(HttpServerPropertiesManagerTest, BadSupportsQuic) { 771 TEST_F(HttpServerPropertiesManagerTest, BadSupportsQuic) {
714 ExpectCacheUpdate(); 772 ExpectCacheUpdate();
715 773
716 base::DictionaryValue* servers_dict = new base::DictionaryValue; 774 base::DictionaryValue* servers_dict = new base::DictionaryValue;
717 775
718 for (int i = 0; i < 200; ++i) { 776 for (int i = 0; i < 200; ++i) {
719 // Set up alternative_service for www.google.com:i. 777 // Set up alternative_service for www.google.com:i.
720 base::DictionaryValue* alternative_service_dict = new base::DictionaryValue; 778 base::DictionaryValue* alternative_service_dict = new base::DictionaryValue;
721 alternative_service_dict->SetString("protocol_str", "npn-h2"); 779 alternative_service_dict->SetString("protocol_str", "npn-h2");
722 alternative_service_dict->SetString("host", "");
723 alternative_service_dict->SetInteger("port", i); 780 alternative_service_dict->SetInteger("port", i);
724 base::ListValue* alternative_service_list = new base::ListValue; 781 base::ListValue* alternative_service_list = new base::ListValue;
725 alternative_service_list->Append(alternative_service_dict); 782 alternative_service_list->Append(alternative_service_dict);
726 base::DictionaryValue* server_pref_dict = new base::DictionaryValue; 783 base::DictionaryValue* server_pref_dict = new base::DictionaryValue;
727 server_pref_dict->SetWithoutPathExpansion("alternative_service", 784 server_pref_dict->SetWithoutPathExpansion("alternative_service",
728 alternative_service_list); 785 alternative_service_list);
729 servers_dict->SetWithoutPathExpansion(StringPrintf("www.google.com:%d", i), 786 servers_dict->SetWithoutPathExpansion(StringPrintf("www.google.com:%d", i),
730 server_pref_dict); 787 server_pref_dict);
731 } 788 }
732 789
(...skipping 19 matching lines...) Expand all
752 // Set up the pref. 809 // Set up the pref.
753 pref_service_.SetManagedPref(kTestHttpServerProperties, 810 pref_service_.SetManagedPref(kTestHttpServerProperties,
754 http_server_properties_dict); 811 http_server_properties_dict);
755 812
756 base::RunLoop().RunUntilIdle(); 813 base::RunLoop().RunUntilIdle();
757 Mock::VerifyAndClearExpectations(http_server_props_manager_.get()); 814 Mock::VerifyAndClearExpectations(http_server_props_manager_.get());
758 815
759 // Verify alternative service. 816 // Verify alternative service.
760 for (int i = 0; i < 200; ++i) { 817 for (int i = 0; i < 200; ++i) {
761 std::string server = StringPrintf("www.google.com:%d", i); 818 std::string server = StringPrintf("www.google.com:%d", i);
762 AlternativeService alternative_service = 819 AlternativeServiceVector alternative_service_vector =
763 http_server_props_manager_->GetAlternativeService( 820 http_server_props_manager_->GetAlternativeServices(
764 HostPortPair::FromString(server)); 821 HostPortPair::FromString(server));
765 EXPECT_EQ(i, alternative_service.port); 822 ASSERT_EQ(1u, alternative_service_vector.size());
766 EXPECT_EQ(NPN_SPDY_4, alternative_service.protocol); 823 EXPECT_EQ(NPN_SPDY_4, alternative_service_vector[0].protocol);
824 EXPECT_EQ(i, alternative_service_vector[0].port);
767 } 825 }
768 826
769 // Verify SupportsQuic. 827 // Verify SupportsQuic.
770 IPAddressNumber address; 828 IPAddressNumber address;
771 ASSERT_TRUE(http_server_props_manager_->GetSupportsQuic(&address)); 829 ASSERT_TRUE(http_server_props_manager_->GetSupportsQuic(&address));
772 EXPECT_EQ("127.0.0.1", IPAddressToString(address)); 830 EXPECT_EQ("127.0.0.1", IPAddressToString(address));
773 } 831 }
774 832
775 TEST_F(HttpServerPropertiesManagerTest, UpdateCacheWithPrefs) { 833 TEST_F(HttpServerPropertiesManagerTest, UpdateCacheWithPrefs) {
776 ExpectScheduleUpdatePrefsOnNetworkThreadRepeatedly(); 834 ExpectScheduleUpdatePrefsOnNetworkThreadRepeatedly();
777 835
778 const HostPortPair server_www("www.google.com", 80); 836 const HostPortPair server_www("www.google.com", 80);
779 const HostPortPair server_mail("mail.google.com", 80); 837 const HostPortPair server_mail("mail.google.com", 80);
780 838
781 // Set alternate protocol. 839 // Set alternate protocol.
782 AlternativeService www_altsvc(NPN_SPDY_4, "", 443); 840 AlternativeServiceInfoVector alternative_service_info_vector;
783 AlternativeService mail_altsvc(NPN_SPDY_3_1, "mail.google.com", 444); 841 AlternativeService www_alternative_service1(NPN_SPDY_4, "", 443);
784 http_server_props_manager_->SetAlternativeService(server_www, www_altsvc, 842 alternative_service_info_vector.push_back(
785 1.0); 843 AlternativeServiceInfo(www_alternative_service1, 1.0));
786 http_server_props_manager_->SetAlternativeService(server_mail, mail_altsvc, 844 AlternativeService www_alternative_service2(NPN_SPDY_4, "www.google.com",
787 0.2); 845 1234);
846 alternative_service_info_vector.push_back(
847 AlternativeServiceInfo(www_alternative_service2, 0.7));
848 http_server_props_manager_->SetAlternativeServices(
849 server_www, alternative_service_info_vector);
850
851 AlternativeService mail_alternative_service(NPN_SPDY_3_1, "foo.google.com",
852 444);
853 http_server_props_manager_->SetAlternativeService(
854 server_mail, mail_alternative_service, 0.2);
788 855
789 // Set ServerNetworkStats. 856 // Set ServerNetworkStats.
790 ServerNetworkStats stats; 857 ServerNetworkStats stats;
791 stats.srtt = base::TimeDelta::FromInternalValue(42); 858 stats.srtt = base::TimeDelta::FromInternalValue(42);
792 http_server_props_manager_->SetServerNetworkStats(server_mail, stats); 859 http_server_props_manager_->SetServerNetworkStats(server_mail, stats);
793 860
794 // Set SupportsQuic. 861 // Set SupportsQuic.
795 IPAddressNumber actual_address; 862 IPAddressNumber actual_address;
796 CHECK(ParseIPLiteralToNumber("127.0.0.1", &actual_address)); 863 CHECK(ParseIPLiteralToNumber("127.0.0.1", &actual_address));
797 http_server_props_manager_->SetSupportsQuic(true, actual_address); 864 http_server_props_manager_->SetSupportsQuic(true, actual_address);
798 865
799 // Update cache. 866 // Update cache.
800 ExpectPrefsUpdate(); 867 ExpectPrefsUpdate();
801 ExpectCacheUpdate(); 868 ExpectCacheUpdate();
802 http_server_props_manager_->ScheduleUpdateCacheOnPrefThread(); 869 http_server_props_manager_->ScheduleUpdateCacheOnPrefThread();
803 base::RunLoop().RunUntilIdle(); 870 base::RunLoop().RunUntilIdle();
804 871
805 // Verify preferences. 872 // Verify preferences.
806 const char expected_json[] = 873 const char expected_json[] =
807 "{\"servers\":{\"mail.google.com:80\":{\"alternative_service\":[{" 874 "{\"servers\":{\"mail.google.com:80\":{\"alternative_service\":[{"
808 "\"host\":" 875 "\"host\":\"foo.google.com\",\"port\":444,\"probability\":0.2,"
809 "\"mail.google.com\",\"port\":444,\"probability\":0.2,\"protocol_str\":" 876 "\"protocol_str\":\"npn-spdy/3.1\"}],\"network_stats\":{\"srtt\":42}},"
810 "\"npn-spdy/" 877 "\"www.google.com:80\":{\"alternative_service\":[{\"port\":443,"
811 "3.1\"}],\"network_stats\":{\"srtt\":42}},\"www.google.com:80\":" 878 "\"probability\":1.0,\"protocol_str\":\"npn-h2\"},"
812 "{\"alternative_service\":[{\"port\":443,\"probability\":1.0," 879 "{\"host\":\"www.google.com\",\"port\":1234,\"probability\":0.7,"
813 "\"protocol_str\":\"npn-h2\"}]}},\"supports_quic\":" 880 "\"protocol_str\":\"npn-h2\"}]}},\"supports_quic\":"
814 "{\"address\":\"127.0.0.1\",\"used_quic\":true},\"version\":3}"; 881 "{\"address\":\"127.0.0.1\",\"used_quic\":true},\"version\":3}";
815 882
816 const base::Value* http_server_properties = 883 const base::Value* http_server_properties =
817 pref_service_.GetUserPref(kTestHttpServerProperties); 884 pref_service_.GetUserPref(kTestHttpServerProperties);
818 ASSERT_NE(nullptr, http_server_properties); 885 ASSERT_NE(nullptr, http_server_properties);
819 std::string preferences_json; 886 std::string preferences_json;
820 EXPECT_TRUE( 887 EXPECT_TRUE(
821 base::JSONWriter::Write(*http_server_properties, &preferences_json)); 888 base::JSONWriter::Write(*http_server_properties, &preferences_json));
822 EXPECT_EQ(expected_json, preferences_json); 889 EXPECT_EQ(expected_json, preferences_json);
(...skipping 67 matching lines...) Expand 10 before | Expand all | Expand 10 after
890 // Run the task after shutdown, but before deletion. 957 // Run the task after shutdown, but before deletion.
891 base::RunLoop().RunUntilIdle(); 958 base::RunLoop().RunUntilIdle();
892 Mock::VerifyAndClearExpectations(http_server_props_manager_.get()); 959 Mock::VerifyAndClearExpectations(http_server_props_manager_.get());
893 http_server_props_manager_.reset(); 960 http_server_props_manager_.reset();
894 base::RunLoop().RunUntilIdle(); 961 base::RunLoop().RunUntilIdle();
895 } 962 }
896 963
897 } // namespace 964 } // namespace
898 965
899 } // namespace net 966 } // namespace net
OLDNEW
« no previous file with comments | « net/http/http_server_properties_manager.cc ('k') | net/http/http_stream_factory.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698