Chromium Code Reviews| Index: net/http/http_network_layer_unittest.cc |
| diff --git a/net/http/http_network_layer_unittest.cc b/net/http/http_network_layer_unittest.cc |
| index e0ecb53604a942c72c45347896511cc73128f2bb..1ec7667dd5891108fb4cc402f778d6d6b75adc4c 100644 |
| --- a/net/http/http_network_layer_unittest.cc |
| +++ b/net/http/http_network_layer_unittest.cc |
| @@ -476,31 +476,57 @@ TEST_F(HttpNetworkLayerTest, ServerOneProxyNoDirectBypassFixed) { |
| TestProxyFallbackFail(1u, bad_proxy, ""); |
| } |
| -TEST_F(HttpNetworkLayerTest, ServerFallbackOn5xxError) { |
| +TEST_F(HttpNetworkLayerTest, ServerFallbackOn4xxAnd5xxErrors) { |
| // Verify that "500 Internal Server Error", "502 Bad Gateway", and |
| // "503 Service Unavailable" via the data reduction proxy induce proxy |
| // fallback to a second proxy, if configured. |
| + // Verify that 4xx responses bypass both data reduction proxies, when |
| + // the proxy originates them. |
| + |
| // To configure this test, we need to wire up a custom proxy service to use |
| - // a pair of proxies. We'll induce fallback via the first and return |
| - // the expected data via the second. |
| + // a pair or triplet of proxies. We'll induce fallback via the first and |
| + // return the expected data via the second, or third if the first two are |
| + // both bypassed. |
| std::string data_reduction_proxy( |
| HostPortPair::FromURL(GURL(SPDY_PROXY_AUTH_ORIGIN)).ToString()); |
| - std::string pac_string = base::StringPrintf( |
| - "PROXY %s; PROXY good:8080", data_reduction_proxy.data()); |
| + std::string data_reduction_proxy_fallback; |
| + size_t data_reduction_proxy_count = 1u; |
| +#if defined(DATA_REDUCTION_FALLBACK_HOST) |
| + data_reduction_proxy_fallback = |
| + HostPortPair::FromURL(GURL(DATA_REDUCTION_FALLBACK_HOST)).ToString(); |
| + data_reduction_proxy_count = 2u; |
| +#endif |
| - std::string headers[] = { |
| - "HTTP/1.1 500 Internal Server Error\r\n\r\n", |
| - "HTTP/1.1 502 Bad Gateway\r\n\r\n", |
| - "HTTP/1.1 503 Service Unavailable\r\n\r\n" |
| + |
| + const struct { |
| + const char* headers; |
| + size_t expected_proxies_on_retry_list; |
| + } tests[] = { |
| + { "HTTP/1.1 500 Internal Server Error\r\n\r\n", 1u }, |
| + { "HTTP/1.1 502 Bad Gateway\r\n\r\n", 1u }, |
| + { "HTTP/1.1 503 Service Unavailable\r\n\r\n", 1u }, |
| + { "HTTP/1.1 414 Request-URI Too Long\r\nServer: GFE/2.0\r\n\r\n", |
| + data_reduction_proxy_count } |
| }; |
| - for (size_t i = 0; i < arraysize(headers); ++i) { |
| + for (size_t i = 0; i < ARRAYSIZE_UNSAFE(tests); ++i) { |
| + //std::string pac_string = base::StringPrintf( |
|
Matt Welsh
2014/05/23 23:56:30
remove comments?
bengr
2014/05/24 01:22:02
Done.
|
| + // "PROXY %s; PROXY good:8080", data_reduction_proxy.data()); |
| + std::string pac_string; |
| + if (tests[i].expected_proxies_on_retry_list == 1u) { |
| + pac_string = base::StringPrintf( |
| + "PROXY %s; PROXY good:8080", data_reduction_proxy.data()); |
| + } else { |
| + pac_string = base::StringPrintf( |
| + "PROXY %s; PROXY %s; PROXY good:8080", data_reduction_proxy.data(), |
| + data_reduction_proxy_fallback.data()); |
| + } |
| ConfigureTestDependencies( |
| ProxyService::CreateFixedFromPacResult(pac_string)); |
| MockRead data_reads[] = { |
| - MockRead(headers[i].c_str()), |
| + MockRead(tests[i].headers), |
| MockRead("Bypass message"), |
| MockRead(SYNCHRONOUS, OK), |
| }; |
| @@ -559,7 +585,8 @@ TEST_F(HttpNetworkLayerTest, ServerFallbackOn5xxError) { |
| EXPECT_TRUE(trans->GetResponseInfo()->headers->HasHeaderValue( |
| "server", "not-proxy")); |
| // We should also observe the data reduction proxy in the retry list. |
| - ASSERT_EQ(1u, proxy_service_->proxy_retry_info().size()); |
| + ASSERT_EQ(tests[i].expected_proxies_on_retry_list, |
| + proxy_service_->proxy_retry_info().size()); |
| EXPECT_EQ(data_reduction_proxy, |
| (*proxy_service_->proxy_retry_info().begin()).first); |
| } |
| @@ -671,6 +698,24 @@ TEST_F(HttpNetworkLayerTest, ServerFallbackWithNoViaHeader) { |
| arraysize(data_reads), 1u); |
| } |
| +TEST_F(HttpNetworkLayerTest, NoServerFallbackWith4xxFromOrigin) { |
| + // Verify that Chrome will not be induced to bypass the data reduction proxy |
| + // when the data reduction proxy via header is absent on a 4xx. |
| + std::string chrome_proxy = GetDataReductionProxy(); |
| + ConfigureTestDependencies(ProxyService::CreateFixedFromPacResult( |
| + "PROXY " + chrome_proxy + "; PROXY good:8080")); |
| + |
| + MockRead data_reads[] = { |
| + MockRead("HTTP/1.1 414 Request-URI Too Long\r\n" |
| + "Connection: keep-alive\r\n\r\n"), |
| + MockRead(SYNCHRONOUS, OK), |
| + }; |
| + |
| + TestProxyFallbackByMethodWithMockReads(chrome_proxy, std::string(), |
| + data_reads, arraysize(data_reads), |
| + "GET", std::string(), false, 0); |
| +} |
| + |
| TEST_F(HttpNetworkLayerTest, NoServerFallbackWith304Response) { |
| // Verify that Chrome will not be induced to bypass the data reduction proxy |
| // when the data reduction proxy via header is absent on a 304. |