| OLD | NEW |
| 1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2011 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/proxy/proxy_service.h" | 5 #include "net/proxy/proxy_service.h" |
| 6 | 6 |
| 7 #include <vector> | 7 #include <vector> |
| 8 | 8 |
| 9 #include "base/format_macros.h" | 9 #include "base/format_macros.h" |
| 10 #include "base/logging.h" | 10 #include "base/logging.h" |
| (...skipping 523 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 534 EXPECT_EQ("foopy1:8080", info.proxy_server().ToURI()); | 534 EXPECT_EQ("foopy1:8080", info.proxy_server().ToURI()); |
| 535 | 535 |
| 536 // Fake an error on the proxy. | 536 // Fake an error on the proxy. |
| 537 TestCompletionCallback callback2; | 537 TestCompletionCallback callback2; |
| 538 rv = service.ReconsiderProxyAfterError(url, &info, &callback2, NULL, | 538 rv = service.ReconsiderProxyAfterError(url, &info, &callback2, NULL, |
| 539 BoundNetLog()); | 539 BoundNetLog()); |
| 540 EXPECT_EQ(OK, rv); | 540 EXPECT_EQ(OK, rv); |
| 541 | 541 |
| 542 // The second proxy should be specified. | 542 // The second proxy should be specified. |
| 543 EXPECT_EQ("foopy2:9090", info.proxy_server().ToURI()); | 543 EXPECT_EQ("foopy2:9090", info.proxy_server().ToURI()); |
| 544 // Report back that the second proxy worked. This will globally mark the |
| 545 // first proxy as bad. |
| 546 service.ReportSuccess(info); |
| 544 | 547 |
| 545 TestCompletionCallback callback3; | 548 TestCompletionCallback callback3; |
| 546 rv = service.ResolveProxy(url, &info, &callback3, NULL, BoundNetLog()); | 549 rv = service.ResolveProxy(url, &info, &callback3, NULL, BoundNetLog()); |
| 547 EXPECT_EQ(ERR_IO_PENDING, rv); | 550 EXPECT_EQ(ERR_IO_PENDING, rv); |
| 548 | 551 |
| 549 ASSERT_EQ(1u, resolver->pending_requests().size()); | 552 ASSERT_EQ(1u, resolver->pending_requests().size()); |
| 550 EXPECT_EQ(url, resolver->pending_requests()[0]->url()); | 553 EXPECT_EQ(url, resolver->pending_requests()[0]->url()); |
| 551 | 554 |
| 552 // Set the result in proxy resolver -- the second result is already known | 555 // Set the result in proxy resolver -- the second result is already known |
| 553 // to be bad, so we will not try to use it initially. | 556 // to be bad, so we will not try to use it initially. |
| (...skipping 23 matching lines...) Expand all Loading... |
| 577 | 580 |
| 578 // Fake another error, the last proxy is gone, the list should now be empty, | 581 // Fake another error, the last proxy is gone, the list should now be empty, |
| 579 // so there is nothing left to try. | 582 // so there is nothing left to try. |
| 580 TestCompletionCallback callback6; | 583 TestCompletionCallback callback6; |
| 581 rv = service.ReconsiderProxyAfterError(url, &info, &callback6, NULL, | 584 rv = service.ReconsiderProxyAfterError(url, &info, &callback6, NULL, |
| 582 BoundNetLog()); | 585 BoundNetLog()); |
| 583 EXPECT_EQ(ERR_FAILED, rv); | 586 EXPECT_EQ(ERR_FAILED, rv); |
| 584 EXPECT_FALSE(info.is_direct()); | 587 EXPECT_FALSE(info.is_direct()); |
| 585 EXPECT_TRUE(info.is_empty()); | 588 EXPECT_TRUE(info.is_empty()); |
| 586 | 589 |
| 590 // Look up proxies again |
| 591 TestCompletionCallback callback7; |
| 592 rv = service.ResolveProxy(url, &info, &callback7, NULL, BoundNetLog()); |
| 593 EXPECT_EQ(ERR_IO_PENDING, rv); |
| 594 |
| 595 ASSERT_EQ(1u, resolver->pending_requests().size()); |
| 596 EXPECT_EQ(url, resolver->pending_requests()[0]->url()); |
| 597 |
| 598 // This time, the first 3 results have been found to be bad, but only the |
| 599 // first proxy has been confirmed ... |
| 600 resolver->pending_requests()[0]->results()->UseNamedProxy( |
| 601 "foopy1:8080;foopy3:7070;foopy2:9090;foopy4:9091"); |
| 602 resolver->pending_requests()[0]->CompleteNow(OK); |
| 603 |
| 604 // ... therefore, we should see the second proxy first. |
| 605 EXPECT_EQ(OK, callback7.WaitForResult()); |
| 606 EXPECT_FALSE(info.is_direct()); |
| 607 EXPECT_EQ("foopy3:7070", info.proxy_server().ToURI()); |
| 608 |
| 587 // TODO(nsylvain): Test that the proxy can be retried after the delay. | 609 // TODO(nsylvain): Test that the proxy can be retried after the delay. |
| 588 } | 610 } |
| 589 | 611 |
| 590 // This test is similar to ProxyFallback, but this time we have an explicit | 612 // This test is similar to ProxyFallback, but this time we have an explicit |
| 591 // fallback choice to DIRECT. | 613 // fallback choice to DIRECT. |
| 592 TEST(ProxyServiceTest, ProxyFallbackToDirect) { | 614 TEST(ProxyServiceTest, ProxyFallbackToDirect) { |
| 593 MockProxyConfigService* config_service = | 615 MockProxyConfigService* config_service = |
| 594 new MockProxyConfigService("http://foopy/proxy.pac"); | 616 new MockProxyConfigService("http://foopy/proxy.pac"); |
| 595 | 617 |
| 596 MockAsyncProxyResolver* resolver = new MockAsyncProxyResolver; | 618 MockAsyncProxyResolver* resolver = new MockAsyncProxyResolver; |
| (...skipping 1273 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1870 log.GetEntries(&entries); | 1892 log.GetEntries(&entries); |
| 1871 | 1893 |
| 1872 EXPECT_TRUE(LogContainsEntryWithType(entries, 0, | 1894 EXPECT_TRUE(LogContainsEntryWithType(entries, 0, |
| 1873 NetLog::TYPE_PROXY_CONFIG_CHANGED)); | 1895 NetLog::TYPE_PROXY_CONFIG_CHANGED)); |
| 1874 ASSERT_EQ(13u, entries.size()); | 1896 ASSERT_EQ(13u, entries.size()); |
| 1875 for (size_t i = 1; i < entries.size(); ++i) | 1897 for (size_t i = 1; i < entries.size(); ++i) |
| 1876 EXPECT_NE(NetLog::TYPE_PROXY_CONFIG_CHANGED, entries[i].type); | 1898 EXPECT_NE(NetLog::TYPE_PROXY_CONFIG_CHANGED, entries[i].type); |
| 1877 } | 1899 } |
| 1878 | 1900 |
| 1879 } // namespace net | 1901 } // namespace net |
| OLD | NEW |