Index: net/websockets/websocket_stream_test.cc |
diff --git a/net/websockets/websocket_stream_test.cc b/net/websockets/websocket_stream_test.cc |
index 0fdc34b93bba51aef06abaf6a4c3fb468d9dae93..6fdd0ac894e86b6a12b5d5c562e9a058c85ff1e8 100644 |
--- a/net/websockets/websocket_stream_test.cc |
+++ b/net/websockets/websocket_stream_test.cc |
@@ -31,6 +31,7 @@ |
#include "net/websockets/websocket_handshake_request_info.h" |
#include "net/websockets/websocket_handshake_response_info.h" |
#include "net/websockets/websocket_handshake_stream_create_helper.h" |
+#include "net/websockets/websocket_stream_test_util.h" |
#include "net/websockets/websocket_test_util.h" |
#include "testing/gtest/include/gtest/gtest.h" |
#include "url/gurl.h" |
@@ -39,25 +40,6 @@ |
namespace net { |
namespace { |
-typedef std::pair<std::string, std::string> HeaderKeyValuePair; |
- |
-std::vector<HeaderKeyValuePair> ToVector(const HttpRequestHeaders& headers) { |
- HttpRequestHeaders::Iterator it(headers); |
- std::vector<HeaderKeyValuePair> result; |
- while (it.GetNext()) |
- result.push_back(HeaderKeyValuePair(it.name(), it.value())); |
- return result; |
-} |
- |
-std::vector<HeaderKeyValuePair> ToVector(const HttpResponseHeaders& headers) { |
- void* iter = NULL; |
- std::string name, value; |
- std::vector<HeaderKeyValuePair> result; |
- while (headers.EnumerateHeaderLines(&iter, &name, &value)) |
- result.push_back(HeaderKeyValuePair(name, value)); |
- return result; |
-} |
- |
// Simple builder for a DeterministicSocketData object to save repetitive code. |
// It always sets the connect data to MockConnect(SYNCHRONOUS, OK), so it cannot |
// be used in tests where the connect fails. In practice, those tests never have |
@@ -88,25 +70,9 @@ class MockWeakTimer : public base::MockTimer, |
: MockTimer(retain_user_task, is_repeating) {} |
}; |
-// A sub-class of WebSocketHandshakeStreamCreateHelper which always sets a |
-// deterministic key to use in the WebSocket handshake. |
-class DeterministicKeyWebSocketHandshakeStreamCreateHelper |
- : public WebSocketHandshakeStreamCreateHelper { |
- public: |
- DeterministicKeyWebSocketHandshakeStreamCreateHelper( |
- WebSocketStream::ConnectDelegate* connect_delegate, |
- const std::vector<std::string>& requested_subprotocols) |
- : WebSocketHandshakeStreamCreateHelper(connect_delegate, |
- requested_subprotocols) {} |
- |
- void OnStreamCreated(WebSocketBasicHandshakeStream* stream) override { |
- stream->SetWebSocketKeyForTesting("dGhlIHNhbXBsZSBub25jZQ=="); |
- } |
-}; |
- |
-class WebSocketStreamCreateTest : public ::testing::Test { |
+class WebSocketStreamCreateTest : public ::testing::Test, |
+ public WebSocketStreamCreateTestBase { |
public: |
- WebSocketStreamCreateTest() : has_failed_(false), ssl_fatal_(false) {} |
~WebSocketStreamCreateTest() override { |
// Permit any endpoint locks to be released. |
stream_request_.reset(); |
@@ -161,100 +127,6 @@ class WebSocketStreamCreateTest : public ::testing::Test { |
void AddRawExpectations(scoped_ptr<DeterministicSocketData> socket_data) { |
url_request_context_host_.AddRawExpectations(socket_data.Pass()); |
} |
- |
- // A wrapper for CreateAndConnectStreamForTesting that knows about our default |
- // parameters. |
- void CreateAndConnectStream(const std::string& socket_url, |
- const std::vector<std::string>& sub_protocols, |
- const std::string& origin, |
- scoped_ptr<base::Timer> timer) { |
- for (size_t i = 0; i < ssl_data_.size(); ++i) { |
- scoped_ptr<SSLSocketDataProvider> ssl_data(ssl_data_[i]); |
- ssl_data_[i] = NULL; |
- url_request_context_host_.AddSSLSocketDataProvider(ssl_data.Pass()); |
- } |
- ssl_data_.clear(); |
- scoped_ptr<WebSocketStream::ConnectDelegate> connect_delegate( |
- new TestConnectDelegate(this)); |
- WebSocketStream::ConnectDelegate* delegate = connect_delegate.get(); |
- scoped_ptr<WebSocketHandshakeStreamCreateHelper> create_helper( |
- new DeterministicKeyWebSocketHandshakeStreamCreateHelper( |
- delegate, sub_protocols)); |
- stream_request_ = ::net::CreateAndConnectStreamForTesting( |
- GURL(socket_url), |
- create_helper.Pass(), |
- url::Origin(origin), |
- url_request_context_host_.GetURLRequestContext(), |
- BoundNetLog(), |
- connect_delegate.Pass(), |
- timer ? timer.Pass() : scoped_ptr<base::Timer>( |
- new base::Timer(false, false))); |
- } |
- |
- static void RunUntilIdle() { base::RunLoop().RunUntilIdle(); } |
- |
- // A simple function to make the tests more readable. Creates an empty vector. |
- static std::vector<std::string> NoSubProtocols() { |
- return std::vector<std::string>(); |
- } |
- |
- const std::string& failure_message() const { return failure_message_; } |
- bool has_failed() const { return has_failed_; } |
- |
- class TestConnectDelegate : public WebSocketStream::ConnectDelegate { |
- public: |
- explicit TestConnectDelegate(WebSocketStreamCreateTest* owner) |
- : owner_(owner) {} |
- |
- void OnSuccess(scoped_ptr<WebSocketStream> stream) override { |
- stream.swap(owner_->stream_); |
- } |
- |
- void OnFailure(const std::string& message) override { |
- owner_->has_failed_ = true; |
- owner_->failure_message_ = message; |
- } |
- |
- void OnStartOpeningHandshake( |
- scoped_ptr<WebSocketHandshakeRequestInfo> request) override { |
- // Can be called multiple times (in the case of HTTP auth). Last call |
- // wins. |
- owner_->request_info_ = request.Pass(); |
- } |
- void OnFinishOpeningHandshake( |
- scoped_ptr<WebSocketHandshakeResponseInfo> response) override { |
- if (owner_->response_info_) |
- ADD_FAILURE(); |
- owner_->response_info_ = response.Pass(); |
- } |
- void OnSSLCertificateError( |
- scoped_ptr<WebSocketEventInterface::SSLErrorCallbacks> |
- ssl_error_callbacks, |
- const SSLInfo& ssl_info, |
- bool fatal) override { |
- owner_->ssl_error_callbacks_ = ssl_error_callbacks.Pass(); |
- owner_->ssl_info_ = ssl_info; |
- owner_->ssl_fatal_ = fatal; |
- } |
- |
- private: |
- WebSocketStreamCreateTest* owner_; |
- }; |
- |
- WebSocketTestURLRequestContextHost url_request_context_host_; |
- scoped_ptr<WebSocketStreamRequest> stream_request_; |
- // Only set if the connection succeeded. |
- scoped_ptr<WebSocketStream> stream_; |
- // Only set if the connection failed. |
- std::string failure_message_; |
- bool has_failed_; |
- scoped_ptr<WebSocketHandshakeRequestInfo> request_info_; |
- scoped_ptr<WebSocketHandshakeResponseInfo> response_info_; |
- scoped_ptr<WebSocketEventInterface::SSLErrorCallbacks> ssl_error_callbacks_; |
- SSLInfo ssl_info_; |
- bool ssl_fatal_; |
- ScopedVector<SSLSocketDataProvider> ssl_data_; |
- ScopedWebSocketEndpointZeroUnlockDelay zero_unlock_delay_; |
}; |
// There are enough tests of the Sec-WebSocket-Extensions header that they |