OLD | NEW |
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 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 "base/memory/scoped_vector.h" | 5 #include "base/memory/scoped_vector.h" |
6 #include "base/run_loop.h" | 6 #include "base/run_loop.h" |
7 #include "net/proxy/proxy_config_service.h" | 7 #include "net/proxy/proxy_config_service.h" |
8 #include "net/socket/socket_test_util.h" | 8 #include "net/socket/socket_test_util.h" |
| 9 #include "net/url_request/ftp_protocol_handler.h" |
9 #include "net/url_request/url_request.h" | 10 #include "net/url_request/url_request.h" |
10 #include "net/url_request/url_request_context.h" | 11 #include "net/url_request/url_request_context.h" |
| 12 #include "net/url_request/url_request_job_factory_impl.h" |
11 #include "net/url_request/url_request_status.h" | 13 #include "net/url_request/url_request_status.h" |
12 #include "net/url_request/url_request_test_util.h" | 14 #include "net/url_request/url_request_test_util.h" |
| 15 #include "testing/gmock/include/gmock/gmock.h" |
13 #include "testing/gtest/include/gtest/gtest.h" | 16 #include "testing/gtest/include/gtest/gtest.h" |
14 | 17 |
15 namespace net { | 18 namespace net { |
16 | 19 |
17 namespace { | 20 namespace { |
18 | 21 |
19 class SimpleProxyConfigService : public ProxyConfigService { | 22 class SimpleProxyConfigService : public ProxyConfigService { |
20 public: | 23 public: |
21 SimpleProxyConfigService() { | 24 SimpleProxyConfigService() { |
22 // Any FTP requests that ever go through HTTP paths are proxied requests. | 25 // Any FTP requests that ever go through HTTP paths are proxied requests. |
(...skipping 19 matching lines...) Expand all Loading... |
42 void IncrementConfigId() { | 45 void IncrementConfigId() { |
43 config_.set_id(config_.id() + 1); | 46 config_.set_id(config_.id() + 1); |
44 observer_->OnProxyConfigChanged(config_, ProxyConfigService::CONFIG_VALID); | 47 observer_->OnProxyConfigChanged(config_, ProxyConfigService::CONFIG_VALID); |
45 } | 48 } |
46 | 49 |
47 private: | 50 private: |
48 ProxyConfig config_; | 51 ProxyConfig config_; |
49 Observer* observer_; | 52 Observer* observer_; |
50 }; | 53 }; |
51 | 54 |
| 55 class MockFtpTransactionFactory : public FtpTransactionFactory { |
| 56 public: |
| 57 MOCK_METHOD0(CreateTransaction, FtpTransaction*()); |
| 58 MOCK_METHOD1(Suspend, void(bool suspend)); |
| 59 }; |
| 60 |
52 class FtpTestURLRequestContext : public TestURLRequestContext { | 61 class FtpTestURLRequestContext : public TestURLRequestContext { |
53 public: | 62 public: |
54 FtpTestURLRequestContext(ClientSocketFactory* socket_factory, | 63 FtpTestURLRequestContext(ClientSocketFactory* socket_factory, |
55 ProxyService* proxy_service, | 64 ProxyService* proxy_service, |
56 NetworkDelegate* network_delegate) | 65 NetworkDelegate* network_delegate, |
| 66 FtpTransactionFactory* ftp_transaction_factory) |
57 : TestURLRequestContext(true) { | 67 : TestURLRequestContext(true) { |
58 set_client_socket_factory(socket_factory); | 68 set_client_socket_factory(socket_factory); |
59 context_storage_.set_proxy_service(proxy_service); | 69 context_storage_.set_proxy_service(proxy_service); |
60 set_network_delegate(network_delegate); | 70 set_network_delegate(network_delegate); |
| 71 URLRequestJobFactoryImpl* job_factory = new URLRequestJobFactoryImpl; |
| 72 job_factory->SetProtocolHandler( |
| 73 "ftp", new FtpProtocolHandler(ftp_transaction_factory)); |
| 74 context_storage_.set_job_factory(job_factory); |
61 Init(); | 75 Init(); |
62 } | 76 } |
63 }; | 77 }; |
64 | 78 |
65 class URLRequestFtpJobTest : public testing::Test { | 79 class URLRequestFtpJobTest : public testing::Test { |
66 public: | 80 public: |
67 URLRequestFtpJobTest() | 81 URLRequestFtpJobTest() |
68 : proxy_service_(new ProxyService( | 82 : proxy_service_(new ProxyService( |
69 new SimpleProxyConfigService, NULL, NULL)), | 83 new SimpleProxyConfigService, NULL, NULL)), |
70 request_context_(&socket_factory_, | 84 request_context_(&socket_factory_, |
71 proxy_service_, | 85 proxy_service_, |
72 &network_delegate_) { | 86 &network_delegate_, |
| 87 &ftp_transaction_factory_) { |
73 } | 88 } |
74 | 89 |
75 virtual ~URLRequestFtpJobTest() { | 90 virtual ~URLRequestFtpJobTest() { |
76 // Clean up any remaining tasks that mess up unrelated tests. | 91 // Clean up any remaining tasks that mess up unrelated tests. |
77 base::RunLoop run_loop; | 92 base::RunLoop run_loop; |
78 run_loop.RunUntilIdle(); | 93 run_loop.RunUntilIdle(); |
79 } | 94 } |
80 | 95 |
81 void AddSocket(MockRead* reads, size_t reads_size, | 96 void AddSocket(MockRead* reads, size_t reads_size, |
82 MockWrite* writes, size_t writes_size) { | 97 MockWrite* writes, size_t writes_size) { |
83 DeterministicSocketData* socket_data = new DeterministicSocketData( | 98 DeterministicSocketData* socket_data = new DeterministicSocketData( |
84 reads, reads_size, writes, writes_size); | 99 reads, reads_size, writes, writes_size); |
85 socket_data->set_connect_data(MockConnect(SYNCHRONOUS, OK)); | 100 socket_data->set_connect_data(MockConnect(SYNCHRONOUS, OK)); |
86 socket_data->StopAfter(reads_size + writes_size - 1); | 101 socket_data->StopAfter(reads_size + writes_size - 1); |
87 socket_factory_.AddSocketDataProvider(socket_data); | 102 socket_factory_.AddSocketDataProvider(socket_data); |
88 | 103 |
89 socket_data_.push_back(socket_data); | 104 socket_data_.push_back(socket_data); |
90 } | 105 } |
91 | 106 |
92 URLRequestContext* request_context() { return &request_context_; } | 107 URLRequestContext* request_context() { return &request_context_; } |
93 TestNetworkDelegate* network_delegate() { return &network_delegate_; } | 108 TestNetworkDelegate* network_delegate() { return &network_delegate_; } |
94 DeterministicSocketData* socket_data(size_t index) { | 109 DeterministicSocketData* socket_data(size_t index) { |
95 return socket_data_[index]; | 110 return socket_data_[index]; |
96 } | 111 } |
97 | 112 |
98 private: | 113 private: |
99 ScopedVector<DeterministicSocketData> socket_data_; | 114 ScopedVector<DeterministicSocketData> socket_data_; |
100 DeterministicMockClientSocketFactory socket_factory_; | 115 DeterministicMockClientSocketFactory socket_factory_; |
101 TestNetworkDelegate network_delegate_; | 116 TestNetworkDelegate network_delegate_; |
| 117 ::testing::StrictMock<MockFtpTransactionFactory> ftp_transaction_factory_; |
102 | 118 |
103 // Owned by |request_context_|: | 119 // Owned by |request_context_|: |
104 ProxyService* proxy_service_; | 120 ProxyService* proxy_service_; |
105 | 121 |
106 FtpTestURLRequestContext request_context_; | 122 FtpTestURLRequestContext request_context_; |
107 }; | 123 }; |
108 | 124 |
109 TEST_F(URLRequestFtpJobTest, FtpProxyRequest) { | 125 TEST_F(URLRequestFtpJobTest, FtpProxyRequest) { |
110 MockWrite writes[] = { | 126 MockWrite writes[] = { |
111 MockWrite(ASYNC, 0, "GET ftp://ftp.example.com/ HTTP/1.1\r\n" | 127 MockWrite(ASYNC, 0, "GET ftp://ftp.example.com/ HTTP/1.1\r\n" |
(...skipping 239 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
351 EXPECT_TRUE(url_request2.status().is_success()); | 367 EXPECT_TRUE(url_request2.status().is_success()); |
352 EXPECT_EQ(2, network_delegate()->completed_requests()); | 368 EXPECT_EQ(2, network_delegate()->completed_requests()); |
353 EXPECT_EQ(0, network_delegate()->error_count()); | 369 EXPECT_EQ(0, network_delegate()->error_count()); |
354 EXPECT_FALSE(request_delegate2.auth_required_called()); | 370 EXPECT_FALSE(request_delegate2.auth_required_called()); |
355 EXPECT_EQ("test2.html", request_delegate2.data_received()); | 371 EXPECT_EQ("test2.html", request_delegate2.data_received()); |
356 } | 372 } |
357 | 373 |
358 } // namespace | 374 } // namespace |
359 | 375 |
360 } // namespace net | 376 } // namespace net |
OLD | NEW |