• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 // Copyright 2016 The Chromium Authors
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4 
5 #ifndef NET_HTTP_HTTP_STREAM_FACTORY_TEST_UTIL_H_
6 #define NET_HTTP_HTTP_STREAM_FACTORY_TEST_UTIL_H_
7 
8 #include <memory>
9 
10 #include "base/memory/ptr_util.h"
11 #include "base/memory/raw_ptr.h"
12 #include "net/http/http_stream.h"
13 #include "net/http/http_stream_factory.h"
14 #include "net/http/http_stream_factory_job.h"
15 #include "net/http/http_stream_factory_job_controller.h"
16 #include "net/http/http_stream_request.h"
17 #include "net/proxy_resolution/proxy_info.h"
18 #include "net/socket/next_proto.h"
19 #include "testing/gmock/include/gmock/gmock.h"
20 #include "url/scheme_host_port.h"
21 
22 using testing::_;
23 using testing::Invoke;
24 
25 namespace net {
26 
27 class HttpStreamFactoryPeer {
28  public:
AddJobController(HttpStreamFactory * factory,std::unique_ptr<HttpStreamFactory::JobController> job_controller)29   static void AddJobController(
30       HttpStreamFactory* factory,
31       std::unique_ptr<HttpStreamFactory::JobController> job_controller) {
32     factory->job_controller_set_.insert(std::move(job_controller));
33   }
34 
IsJobControllerDeleted(HttpStreamFactory * factory)35   static bool IsJobControllerDeleted(HttpStreamFactory* factory) {
36     return factory->job_controller_set_.empty();
37   }
38 
GetDefaultJobFactory(HttpStreamFactory * factory)39   static HttpStreamFactory::JobFactory* GetDefaultJobFactory(
40       HttpStreamFactory* factory) {
41     return factory->job_factory_.get();
42   }
43 };
44 
45 // This delegate does nothing when called.
46 class MockHttpStreamRequestDelegate : public HttpStreamRequest::Delegate {
47  public:
48   MockHttpStreamRequestDelegate();
49 
50   MockHttpStreamRequestDelegate(const MockHttpStreamRequestDelegate&) = delete;
51   MockHttpStreamRequestDelegate& operator=(
52       const MockHttpStreamRequestDelegate&) = delete;
53 
54   ~MockHttpStreamRequestDelegate() override;
55 
56   // std::unique_ptr is not copyable and therefore cannot be mocked.
57   MOCK_METHOD3(OnStreamReadyImpl,
58                void(const SSLConfig& used_ssl_config,
59                     const ProxyInfo& used_proxy_info,
60                     HttpStream* stream));
61 
OnStreamReady(const SSLConfig & used_ssl_config,const ProxyInfo & used_proxy_info,std::unique_ptr<HttpStream> stream)62   void OnStreamReady(const SSLConfig& used_ssl_config,
63                      const ProxyInfo& used_proxy_info,
64                      std::unique_ptr<HttpStream> stream) override {
65     OnStreamReadyImpl(used_ssl_config, used_proxy_info, stream.get());
66   }
67 
68   // std::unique_ptr is not copyable and therefore cannot be mocked.
OnBidirectionalStreamImplReady(const SSLConfig & used_ssl_config,const ProxyInfo & used_proxy_info,std::unique_ptr<BidirectionalStreamImpl> stream)69   void OnBidirectionalStreamImplReady(
70       const SSLConfig& used_ssl_config,
71       const ProxyInfo& used_proxy_info,
72       std::unique_ptr<BidirectionalStreamImpl> stream) override {}
73 
74   // std::unique_ptr is not copyable and therefore cannot be mocked.
OnWebSocketHandshakeStreamReady(const SSLConfig & used_ssl_config,const ProxyInfo & used_proxy_info,std::unique_ptr<WebSocketHandshakeStreamBase> stream)75   void OnWebSocketHandshakeStreamReady(
76       const SSLConfig& used_ssl_config,
77       const ProxyInfo& used_proxy_info,
78       std::unique_ptr<WebSocketHandshakeStreamBase> stream) override {}
79 
80   MOCK_METHOD5(OnStreamFailed,
81                void(int status,
82                     const NetErrorDetails& net_error_details,
83                     const SSLConfig& used_ssl_config,
84                     const ProxyInfo& used_proxy_info,
85                     ResolveErrorInfo resolve_error_info));
86 
87   MOCK_METHOD3(OnCertificateError,
88                void(int status,
89                     const SSLConfig& used_ssl_config,
90                     const SSLInfo& ssl_info));
91 
92   MOCK_METHOD4(OnNeedsProxyAuth,
93                void(const HttpResponseInfo& proxy_response,
94                     const SSLConfig& used_ssl_config,
95                     const ProxyInfo& used_proxy_info,
96                     HttpAuthController* auth_controller));
97 
98   MOCK_METHOD2(OnNeedsClientAuth,
99                void(const SSLConfig& used_ssl_config,
100                     SSLCertRequestInfo* cert_info));
101 
102   MOCK_METHOD0(OnQuicBroken, void());
103 };
104 
105 class MockHttpStreamFactoryJob : public HttpStreamFactory::Job {
106  public:
107   MockHttpStreamFactoryJob(HttpStreamFactory::Job::Delegate* delegate,
108                            HttpStreamFactory::JobType job_type,
109                            HttpNetworkSession* session,
110                            const HttpRequestInfo& request_info,
111                            RequestPriority priority,
112                            ProxyInfo proxy_info,
113                            const SSLConfig& server_ssl_config,
114                            const SSLConfig& proxy_ssl_config,
115                            url::SchemeHostPort destination,
116                            GURL origin_url,
117                            NextProto alternative_protocol,
118                            quic::ParsedQuicVersion quic_version,
119                            bool is_websocket,
120                            bool enable_ip_based_pooling,
121                            NetLog* net_log);
122 
123   ~MockHttpStreamFactoryJob() override;
124 
125   MOCK_METHOD0(Resume, void());
126 
127   MOCK_METHOD0(Orphan, void());
128 
129   void DoResume();
130 };
131 
132 // JobFactory for creating MockHttpStreamFactoryJobs.
133 class TestJobFactory : public HttpStreamFactory::JobFactory {
134  public:
135   TestJobFactory();
136   ~TestJobFactory() override;
137 
138   std::unique_ptr<HttpStreamFactory::Job> CreateJob(
139       HttpStreamFactory::Job::Delegate* delegate,
140       HttpStreamFactory::JobType job_type,
141       HttpNetworkSession* session,
142       const HttpRequestInfo& request_info,
143       RequestPriority priority,
144       const ProxyInfo& proxy_info,
145       const SSLConfig& server_ssl_config,
146       const SSLConfig& proxy_ssl_config,
147       url::SchemeHostPort destination,
148       GURL origin_url,
149       bool is_websocket,
150       bool enable_ip_based_pooling,
151       NetLog* net_log,
152       NextProto alternative_protocol,
153       quic::ParsedQuicVersion quic_version) override;
154 
main_job()155   MockHttpStreamFactoryJob* main_job() const { return main_job_; }
alternative_job()156   MockHttpStreamFactoryJob* alternative_job() const { return alternative_job_; }
dns_alpn_h3_job()157   MockHttpStreamFactoryJob* dns_alpn_h3_job() const { return dns_alpn_h3_job_; }
158 
159  private:
160   raw_ptr<MockHttpStreamFactoryJob> main_job_ = nullptr;
161   raw_ptr<MockHttpStreamFactoryJob> alternative_job_ = nullptr;
162   raw_ptr<MockHttpStreamFactoryJob> dns_alpn_h3_job_ = nullptr;
163 };
164 
165 }  // namespace net
166 
167 #endif  // NET_HTTP_HTTP_STREAM_FACTORY_TEST_UTIL_H_
168