Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1601)

Unified Diff: net/websockets/websocket_end_to_end_test.cc

Issue 992733002: Remove //net (except for Android test stuff) and sdch (Closed) Base URL: git@github.com:domokit/mojo.git@master
Patch Set: Created 5 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « net/websockets/websocket_deflater_test.cc ('k') | net/websockets/websocket_errors.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: net/websockets/websocket_end_to_end_test.cc
diff --git a/net/websockets/websocket_end_to_end_test.cc b/net/websockets/websocket_end_to_end_test.cc
deleted file mode 100644
index 1a3df040e9f429320a9c099f86ccc0edd046d0c7..0000000000000000000000000000000000000000
--- a/net/websockets/websocket_end_to_end_test.cc
+++ /dev/null
@@ -1,382 +0,0 @@
-// Copyright 2014 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-// End-to-end tests for WebSocket.
-//
-// A python server is (re)started for each test, which is moderately
-// inefficient. However, it makes these tests a good fit for scenarios which
-// require special server configurations.
-
-#include <string>
-
-#include "base/bind.h"
-#include "base/bind_helpers.h"
-#include "base/callback.h"
-#include "base/memory/scoped_ptr.h"
-#include "base/message_loop/message_loop.h"
-#include "base/run_loop.h"
-#include "net/base/auth.h"
-#include "net/base/network_delegate.h"
-#include "net/base/test_data_directory.h"
-#include "net/proxy/proxy_service.h"
-#include "net/test/spawned_test_server/spawned_test_server.h"
-#include "net/url_request/url_request_test_util.h"
-#include "net/websockets/websocket_channel.h"
-#include "net/websockets/websocket_event_interface.h"
-#include "testing/gtest/include/gtest/gtest.h"
-#include "url/origin.h"
-
-namespace net {
-
-namespace {
-
-static const char kEchoServer[] = "echo-with-no-extension";
-
-// An implementation of WebSocketEventInterface that waits for and records the
-// results of the connect.
-class ConnectTestingEventInterface : public WebSocketEventInterface {
- public:
- ConnectTestingEventInterface();
-
- void WaitForResponse();
-
- bool failed() const { return failed_; }
-
- // Only set if the handshake failed, otherwise empty.
- std::string failure_message() const;
-
- std::string selected_subprotocol() const;
-
- std::string extensions() const;
-
- // Implementation of WebSocketEventInterface.
- ChannelState OnAddChannelResponse(bool fail,
- const std::string& selected_subprotocol,
- const std::string& extensions) override;
-
- ChannelState OnDataFrame(bool fin,
- WebSocketMessageType type,
- const std::vector<char>& data) override;
-
- ChannelState OnFlowControl(int64 quota) override;
-
- ChannelState OnClosingHandshake() override;
-
- ChannelState OnDropChannel(bool was_clean,
- uint16 code,
- const std::string& reason) override;
-
- ChannelState OnFailChannel(const std::string& message) override;
-
- ChannelState OnStartOpeningHandshake(
- scoped_ptr<WebSocketHandshakeRequestInfo> request) override;
-
- ChannelState OnFinishOpeningHandshake(
- scoped_ptr<WebSocketHandshakeResponseInfo> response) override;
-
- ChannelState OnSSLCertificateError(
- scoped_ptr<SSLErrorCallbacks> ssl_error_callbacks,
- const GURL& url,
- const SSLInfo& ssl_info,
- bool fatal) override;
-
- private:
- void QuitNestedEventLoop();
-
- // failed_ is true if the handshake failed (ie. OnFailChannel was called).
- bool failed_;
- std::string selected_subprotocol_;
- std::string extensions_;
- std::string failure_message_;
- base::RunLoop run_loop_;
-
- DISALLOW_COPY_AND_ASSIGN(ConnectTestingEventInterface);
-};
-
-ConnectTestingEventInterface::ConnectTestingEventInterface() : failed_(true) {
-}
-
-void ConnectTestingEventInterface::WaitForResponse() {
- run_loop_.Run();
-}
-
-std::string ConnectTestingEventInterface::failure_message() const {
- return failure_message_;
-}
-
-std::string ConnectTestingEventInterface::selected_subprotocol() const {
- return selected_subprotocol_;
-}
-
-std::string ConnectTestingEventInterface::extensions() const {
- return extensions_;
-}
-
-// Make the function definitions below less verbose.
-typedef ConnectTestingEventInterface::ChannelState ChannelState;
-
-ChannelState ConnectTestingEventInterface::OnAddChannelResponse(
- bool fail,
- const std::string& selected_subprotocol,
- const std::string& extensions) {
- failed_ = fail;
- selected_subprotocol_ = selected_subprotocol;
- extensions_ = extensions;
- QuitNestedEventLoop();
- return fail ? CHANNEL_DELETED : CHANNEL_ALIVE;
-}
-
-ChannelState ConnectTestingEventInterface::OnDataFrame(
- bool fin,
- WebSocketMessageType type,
- const std::vector<char>& data) {
- return CHANNEL_ALIVE;
-}
-
-ChannelState ConnectTestingEventInterface::OnFlowControl(int64 quota) {
- return CHANNEL_ALIVE;
-}
-
-ChannelState ConnectTestingEventInterface::OnClosingHandshake() {
- return CHANNEL_ALIVE;
-}
-
-ChannelState ConnectTestingEventInterface::OnDropChannel(
- bool was_clean,
- uint16 code,
- const std::string& reason) {
- return CHANNEL_DELETED;
-}
-
-ChannelState ConnectTestingEventInterface::OnFailChannel(
- const std::string& message) {
- failed_ = true;
- failure_message_ = message;
- QuitNestedEventLoop();
- return CHANNEL_DELETED;
-}
-
-ChannelState ConnectTestingEventInterface::OnStartOpeningHandshake(
- scoped_ptr<WebSocketHandshakeRequestInfo> request) {
- return CHANNEL_ALIVE;
-}
-
-ChannelState ConnectTestingEventInterface::OnFinishOpeningHandshake(
- scoped_ptr<WebSocketHandshakeResponseInfo> response) {
- return CHANNEL_ALIVE;
-}
-
-ChannelState ConnectTestingEventInterface::OnSSLCertificateError(
- scoped_ptr<SSLErrorCallbacks> ssl_error_callbacks,
- const GURL& url,
- const SSLInfo& ssl_info,
- bool fatal) {
- base::MessageLoop::current()->PostTask(
- FROM_HERE, base::Bind(&SSLErrorCallbacks::CancelSSLRequest,
- base::Owned(ssl_error_callbacks.release()),
- ERR_SSL_PROTOCOL_ERROR, &ssl_info));
- return CHANNEL_ALIVE;
-}
-
-void ConnectTestingEventInterface::QuitNestedEventLoop() {
- run_loop_.Quit();
-}
-
-// A subclass of TestNetworkDelegate that additionally implements the
-// OnResolveProxy callback and records the information passed to it.
-class TestNetworkDelegateWithProxyInfo : public TestNetworkDelegate {
- public:
- TestNetworkDelegateWithProxyInfo() {}
-
- struct ResolvedProxyInfo {
- GURL url;
- ProxyInfo proxy_info;
- };
-
- const ResolvedProxyInfo& resolved_proxy_info() const {
- return resolved_proxy_info_;
- }
-
- protected:
- void OnResolveProxy(const GURL& url,
- int load_flags,
- const ProxyService& proxy_service,
- ProxyInfo* result) override {
- resolved_proxy_info_.url = url;
- resolved_proxy_info_.proxy_info = *result;
- }
-
- private:
- ResolvedProxyInfo resolved_proxy_info_;
-
- DISALLOW_COPY_AND_ASSIGN(TestNetworkDelegateWithProxyInfo);
-};
-
-class WebSocketEndToEndTest : public ::testing::Test {
- protected:
- WebSocketEndToEndTest()
- : event_interface_(new ConnectTestingEventInterface),
- network_delegate_(new TestNetworkDelegateWithProxyInfo),
- context_(true),
- channel_(make_scoped_ptr(event_interface_), &context_),
- initialised_context_(false) {}
-
- // Initialise the URLRequestContext. Normally done automatically by
- // ConnectAndWait(). This method is for the use of tests that need the
- // URLRequestContext initialised before calling ConnectAndWait().
- void InitialiseContext() {
- context_.set_network_delegate(network_delegate_.get());
- context_.Init();
- initialised_context_ = true;
- }
-
- // Send the connect request to |socket_url| and wait for a response. Returns
- // true if the handshake succeeded.
- bool ConnectAndWait(const GURL& socket_url) {
- if (!initialised_context_) {
- InitialiseContext();
- }
- std::vector<std::string> sub_protocols;
- url::Origin origin("http://localhost");
- channel_.SendAddChannelRequest(GURL(socket_url), sub_protocols, origin);
- event_interface_->WaitForResponse();
- return !event_interface_->failed();
- }
-
- ConnectTestingEventInterface* event_interface_; // owned by channel_
- scoped_ptr<TestNetworkDelegateWithProxyInfo> network_delegate_;
- TestURLRequestContext context_;
- WebSocketChannel channel_;
- bool initialised_context_;
-};
-
-// None of these tests work on Android.
-// TODO(ricea): Make these tests work on Android. See crbug.com/441711.
-#if defined(OS_ANDROID)
-#define DISABLED_ON_ANDROID(test) DISABLED_##test
-#else
-#define DISABLED_ON_ANDROID(test) test
-#endif
-
-// Basic test of connectivity. If this test fails, nothing else can be expected
-// to work.
-TEST_F(WebSocketEndToEndTest, DISABLED_ON_ANDROID(BasicSmokeTest)) {
- SpawnedTestServer ws_server(SpawnedTestServer::TYPE_WS,
- SpawnedTestServer::kLocalhost,
- GetWebSocketTestDataDirectory());
- ASSERT_TRUE(ws_server.Start());
- EXPECT_TRUE(ConnectAndWait(ws_server.GetURL(kEchoServer)));
-}
-
-// Test for issue crbug.com/433695 "Unencrypted WebSocket connection via
-// authenticated proxy times out"
-// TODO(ricea): Enable this when the issue is fixed.
-TEST_F(WebSocketEndToEndTest, DISABLED_HttpsProxyUnauthedFails) {
- SpawnedTestServer proxy_server(SpawnedTestServer::TYPE_BASIC_AUTH_PROXY,
- SpawnedTestServer::kLocalhost,
- base::FilePath());
- SpawnedTestServer ws_server(SpawnedTestServer::TYPE_WS,
- SpawnedTestServer::kLocalhost,
- GetWebSocketTestDataDirectory());
- ASSERT_TRUE(proxy_server.StartInBackground());
- ASSERT_TRUE(ws_server.StartInBackground());
- ASSERT_TRUE(proxy_server.BlockUntilStarted());
- ASSERT_TRUE(ws_server.BlockUntilStarted());
- std::string proxy_config =
- "https=" + proxy_server.host_port_pair().ToString();
- scoped_ptr<ProxyService> proxy_service(
- ProxyService::CreateFixed(proxy_config));
- ASSERT_TRUE(proxy_service);
- context_.set_proxy_service(proxy_service.get());
- EXPECT_FALSE(ConnectAndWait(ws_server.GetURL(kEchoServer)));
- EXPECT_EQ("Proxy authentication failed", event_interface_->failure_message());
-}
-
-TEST_F(WebSocketEndToEndTest, DISABLED_ON_ANDROID(HttpsWssProxyUnauthedFails)) {
- SpawnedTestServer proxy_server(SpawnedTestServer::TYPE_BASIC_AUTH_PROXY,
- SpawnedTestServer::kLocalhost,
- base::FilePath());
- SpawnedTestServer wss_server(SpawnedTestServer::TYPE_WSS,
- SpawnedTestServer::kLocalhost,
- GetWebSocketTestDataDirectory());
- ASSERT_TRUE(proxy_server.StartInBackground());
- ASSERT_TRUE(wss_server.StartInBackground());
- ASSERT_TRUE(proxy_server.BlockUntilStarted());
- ASSERT_TRUE(wss_server.BlockUntilStarted());
- std::string proxy_config =
- "https=" + proxy_server.host_port_pair().ToString();
- scoped_ptr<ProxyService> proxy_service(
- ProxyService::CreateFixed(proxy_config));
- ASSERT_TRUE(proxy_service);
- context_.set_proxy_service(proxy_service.get());
- EXPECT_FALSE(ConnectAndWait(wss_server.GetURL(kEchoServer)));
- EXPECT_EQ("Proxy authentication failed", event_interface_->failure_message());
-}
-
-// Regression test for crbug/426736 "WebSocket connections not using configured
-// system HTTPS Proxy".
-TEST_F(WebSocketEndToEndTest, DISABLED_ON_ANDROID(HttpsProxyUsed)) {
- SpawnedTestServer proxy_server(SpawnedTestServer::TYPE_BASIC_AUTH_PROXY,
- SpawnedTestServer::kLocalhost,
- base::FilePath());
- SpawnedTestServer ws_server(SpawnedTestServer::TYPE_WS,
- SpawnedTestServer::kLocalhost,
- GetWebSocketTestDataDirectory());
- ASSERT_TRUE(proxy_server.StartInBackground());
- ASSERT_TRUE(ws_server.StartInBackground());
- ASSERT_TRUE(proxy_server.BlockUntilStarted());
- ASSERT_TRUE(ws_server.BlockUntilStarted());
- std::string proxy_config = "https=" +
- proxy_server.host_port_pair().ToString() + ";" +
- "http=" + proxy_server.host_port_pair().ToString();
- scoped_ptr<ProxyService> proxy_service(
- ProxyService::CreateFixed(proxy_config));
- context_.set_proxy_service(proxy_service.get());
- InitialiseContext();
-
- // The test server doesn't have an unauthenticated proxy mode. WebSockets
- // cannot provide auth information that isn't already cached, so it's
- // necessary to preflight an HTTP request to authenticate against the proxy.
- GURL::Replacements replacements;
- replacements.SetSchemeStr("http");
- // It doesn't matter what the URL is, as long as it is an HTTP navigation.
- GURL http_page =
- ws_server.GetURL("connect_check.html").ReplaceComponents(replacements);
- TestDelegate delegate;
- delegate.set_credentials(
- AuthCredentials(base::ASCIIToUTF16("foo"), base::ASCIIToUTF16("bar")));
- {
- scoped_ptr<URLRequest> request(
- context_.CreateRequest(http_page, DEFAULT_PRIORITY, &delegate, NULL));
- request->Start();
- // TestDelegate exits the message loop when the request completes by
- // default.
- base::RunLoop().Run();
- EXPECT_TRUE(delegate.auth_required_called());
- }
-
- GURL ws_url = ws_server.GetURL(kEchoServer);
- EXPECT_TRUE(ConnectAndWait(ws_url));
- const TestNetworkDelegateWithProxyInfo::ResolvedProxyInfo& info =
- network_delegate_->resolved_proxy_info();
- EXPECT_EQ(ws_url, info.url);
- EXPECT_TRUE(info.proxy_info.is_http());
-}
-
-// This is a regression test for crbug.com/408061 Crash in
-// net::WebSocketBasicHandshakeStream::Upgrade.
-TEST_F(WebSocketEndToEndTest, DISABLED_ON_ANDROID(TruncatedResponse)) {
- SpawnedTestServer ws_server(SpawnedTestServer::TYPE_WS,
- SpawnedTestServer::kLocalhost,
- GetWebSocketTestDataDirectory());
- ASSERT_TRUE(ws_server.Start());
- InitialiseContext();
-
- GURL ws_url = ws_server.GetURL("truncated-headers");
- EXPECT_FALSE(ConnectAndWait(ws_url));
-}
-
-} // namespace
-
-} // namespace net
« no previous file with comments | « net/websockets/websocket_deflater_test.cc ('k') | net/websockets/websocket_errors.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698