Index: net/proxy/proxy_list_unittest.cc |
diff --git a/net/proxy/proxy_list_unittest.cc b/net/proxy/proxy_list_unittest.cc |
index 0dbb53a2d03ff3537c623028ee2c98f9decfeecf..e98d9c519771f3b9f4b341bfb255d1932e498ca9 100644 |
--- a/net/proxy/proxy_list_unittest.cc |
+++ b/net/proxy/proxy_list_unittest.cc |
@@ -245,6 +245,66 @@ TEST(ProxyListTest, UpdateRetryInfoOnFallback) { |
EXPECT_TRUE(retry_info_map.end() == retry_info_map.find("foopy2:80")); |
EXPECT_TRUE(retry_info_map.end() == retry_info_map.find("foopy3:80")); |
} |
+ // If the bad proxy is already on the retry list, and the old retry info would |
+ // cause the proxy to be retried later than the newly specified retry info, |
+ // then the old retry info should be kept. |
+ { |
+ ProxyList list; |
+ ProxyRetryInfoMap retry_info_map; |
+ BoundNetLog net_log; |
+ list.SetFromPacString("PROXY foopy1:80;PROXY foopy2:80;PROXY foopy3:80"); |
+ |
+ // First, mark the proxy as bad for 60 seconds. |
+ list.UpdateRetryInfoOnFallback( |
+ &retry_info_map, base::TimeDelta::FromSeconds(60), true, |
+ std::vector<ProxyServer>(), ERR_PROXY_CONNECTION_FAILED, net_log); |
+ // Next, mark the same proxy as bad for 1 second. This call should have no |
+ // effect, since this would cause the bad proxy to be retried sooner than |
+ // the existing retry info. |
+ list.UpdateRetryInfoOnFallback(&retry_info_map, |
+ base::TimeDelta::FromSeconds(1), false, |
+ std::vector<ProxyServer>(), OK, net_log); |
+ EXPECT_TRUE(retry_info_map.end() != retry_info_map.find("foopy1:80")); |
+ EXPECT_EQ(ERR_PROXY_CONNECTION_FAILED, |
+ retry_info_map["foopy1:80"].net_error); |
+ EXPECT_TRUE(retry_info_map["foopy1:80"].try_while_bad); |
+ EXPECT_EQ(base::TimeDelta::FromSeconds(60), |
+ retry_info_map["foopy1:80"].current_delay); |
+ EXPECT_GT(retry_info_map["foopy1:80"].bad_until, |
+ base::TimeTicks::Now() + base::TimeDelta::FromSeconds(30)); |
+ EXPECT_TRUE(retry_info_map.end() == retry_info_map.find("foopy2:80")); |
+ EXPECT_TRUE(retry_info_map.end() == retry_info_map.find("foopy3:80")); |
+ } |
+ // If the bad proxy is already on the retry list, and the newly specified |
+ // retry info would cause the proxy to be retried later than the old retry |
+ // info, then the old retry info should be replaced with the new retry info. |
+ { |
+ ProxyList list; |
+ ProxyRetryInfoMap retry_info_map; |
+ BoundNetLog net_log; |
+ list.SetFromPacString("PROXY foopy1:80;PROXY foopy2:80;PROXY foopy3:80"); |
+ |
+ // First, mark the proxy as bad for 1 second. |
+ list.UpdateRetryInfoOnFallback(&retry_info_map, |
+ base::TimeDelta::FromSeconds(1), false, |
+ std::vector<ProxyServer>(), OK, net_log); |
+ // Next, mark the same proxy as bad for 60 seconds. This call should replace |
+ // the existing retry info with the new 60 second retry info. |
+ list.UpdateRetryInfoOnFallback( |
+ &retry_info_map, base::TimeDelta::FromSeconds(60), true, |
+ std::vector<ProxyServer>(), ERR_PROXY_CONNECTION_FAILED, net_log); |
+ |
+ EXPECT_TRUE(retry_info_map.end() != retry_info_map.find("foopy1:80")); |
+ EXPECT_EQ(ERR_PROXY_CONNECTION_FAILED, |
+ retry_info_map["foopy1:80"].net_error); |
+ EXPECT_TRUE(retry_info_map["foopy1:80"].try_while_bad); |
+ EXPECT_EQ(base::TimeDelta::FromSeconds(60), |
+ retry_info_map["foopy1:80"].current_delay); |
+ EXPECT_GT(retry_info_map["foopy1:80"].bad_until, |
+ base::TimeTicks::Now() + base::TimeDelta::FromSeconds(30)); |
+ EXPECT_TRUE(retry_info_map.end() == retry_info_map.find("foopy2:80")); |
+ EXPECT_TRUE(retry_info_map.end() == retry_info_map.find("foopy3:80")); |
+ } |
} |
} // namesapce |