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