diff options
author | phajdan.jr@chromium.org <phajdan.jr@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2009-08-14 22:37:35 +0000 |
---|---|---|
committer | phajdan.jr@chromium.org <phajdan.jr@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2009-08-14 22:37:35 +0000 |
commit | b89290213d94169f8293f9bd7668550975281d45 (patch) | |
tree | 951d1218d6c660cd3cf94c9c67b8c9f193a536a8 /net/url_request | |
parent | 0c6da50c299be943b4c04a3953e0931734af7eaf (diff) | |
download | chromium_src-b89290213d94169f8293f9bd7668550975281d45.zip chromium_src-b89290213d94169f8293f9bd7668550975281d45.tar.gz chromium_src-b89290213d94169f8293f9bd7668550975281d45.tar.bz2 |
Speed up net_unittests a bit by re-using launched test server.
On POSIX it makes the server fork a separate process for each request for better
test isolation.
Starting with just few tests to limit impact of an eventual breakage. The results are promising.
TEST=none
BUG=none
Review URL: http://codereview.chromium.org/164522
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@23481 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'net/url_request')
-rw-r--r-- | net/url_request/url_request_unittest.cc | 46 | ||||
-rw-r--r-- | net/url_request/url_request_unittest.h | 29 |
2 files changed, 53 insertions, 22 deletions
diff --git a/net/url_request/url_request_unittest.cc b/net/url_request/url_request_unittest.cc index 50b647c..64da9fe 100644 --- a/net/url_request/url_request_unittest.cc +++ b/net/url_request/url_request_unittest.cc @@ -116,14 +116,28 @@ scoped_refptr<net::UploadData> CreateSimpleUploadData(const char* data) { class URLRequestTest : public PlatformTest { }; -TEST_F(URLRequestTest, ProxyTunnelRedirectTest) { +class URLRequestTestHTTP : public URLRequestTest { + protected: + static void SetUpTestCase() { + server_ = HTTPTestServer::CreateForkingServer(L""); + } + + static void TearDownTestCase() { + server_ = NULL; + } + + static scoped_refptr<HTTPTestServer> server_; +}; + +// static +scoped_refptr<HTTPTestServer> URLRequestTestHTTP::server_; + +TEST_F(URLRequestTestHTTP, ProxyTunnelRedirectTest) { // In this unit test, we're using the HTTPTestServer as a proxy server and // issuing a CONNECT request with the magic host name "www.redirect.com". // The HTTPTestServer will return a 302 response, which we should not // follow. - scoped_refptr<HTTPTestServer> server = - HTTPTestServer::CreateServer(L"", NULL); - ASSERT_TRUE(NULL != server.get()); + ASSERT_TRUE(NULL != server_.get()); TestDelegate d; { URLRequest r(GURL("https://www.redirect.com/"), &d); @@ -144,13 +158,11 @@ TEST_F(URLRequestTest, ProxyTunnelRedirectTest) { } } -TEST_F(URLRequestTest, UnexpectedServerAuthTest) { +TEST_F(URLRequestTestHTTP, UnexpectedServerAuthTest) { // In this unit test, we're using the HTTPTestServer as a proxy server and // issuing a CONNECT request with the magic host name "www.server-auth.com". // The HTTPTestServer will return a 401 response, which we should balk at. - scoped_refptr<HTTPTestServer> server = - HTTPTestServer::CreateServer(L"", NULL); - ASSERT_TRUE(NULL != server.get()); + ASSERT_TRUE(NULL != server_.get()); TestDelegate d; { URLRequest r(GURL("https://www.server-auth.com/"), &d); @@ -168,13 +180,11 @@ TEST_F(URLRequestTest, UnexpectedServerAuthTest) { } } -TEST_F(URLRequestTest, GetTest_NoCache) { - scoped_refptr<HTTPTestServer> server = - HTTPTestServer::CreateServer(L"", NULL); - ASSERT_TRUE(NULL != server.get()); +TEST_F(URLRequestTestHTTP, GetTest_NoCache) { + ASSERT_TRUE(NULL != server_.get()); TestDelegate d; { - TestURLRequest r(server->TestServerPage(""), &d); + TestURLRequest r(server_->TestServerPage(""), &d); r.Start(); EXPECT_TRUE(r.is_pending()); @@ -190,13 +200,11 @@ TEST_F(URLRequestTest, GetTest_NoCache) { #endif } -TEST_F(URLRequestTest, GetTest) { - scoped_refptr<HTTPTestServer> server = - HTTPTestServer::CreateServer(L"", NULL); - ASSERT_TRUE(NULL != server.get()); +TEST_F(URLRequestTestHTTP, GetTest) { + ASSERT_TRUE(NULL != server_.get()); TestDelegate d; { - TestURLRequest r(server->TestServerPage(""), &d); + TestURLRequest r(server_->TestServerPage(""), &d); r.Start(); EXPECT_TRUE(r.is_pending()); @@ -213,6 +221,8 @@ TEST_F(URLRequestTest, GetTest) { } TEST_F(URLRequestTest, QuitTest) { + // Don't use shared server here because we order it to quit. + // It would impact other tests. scoped_refptr<HTTPTestServer> server = HTTPTestServer::CreateServer(L"", NULL); ASSERT_TRUE(NULL != server.get()); diff --git a/net/url_request/url_request_unittest.h b/net/url_request/url_request_unittest.h index 03d678d..24714ce 100644 --- a/net/url_request/url_request_unittest.h +++ b/net/url_request/url_request_unittest.h @@ -242,6 +242,9 @@ class BaseTestServer : public base::RefCounted<BaseTestServer> { : launcher_(connection_attempts, connection_timeout) { } public: + void set_forking(bool forking) { + launcher_.set_forking(forking); + } // Used with e.g. HTTPTestServer::SendQuit() bool WaitToFinish(int milliseconds) { @@ -380,6 +383,18 @@ class HTTPTestServer : public BaseTestServer { loop, 10, 1000); } + static scoped_refptr<HTTPTestServer> CreateForkingServer( + const std::wstring& document_root) { + scoped_refptr<HTTPTestServer> test_server = + new HTTPTestServer(10, 1000); + test_server->set_forking(true); + FilePath no_cert; + FilePath docroot = FilePath::FromWStringHack(document_root); + if (!StartTestServer(test_server.get(), docroot, no_cert, std::wstring())) + return NULL; + return test_server; + } + static scoped_refptr<HTTPTestServer> CreateServerWithFileRootURL( const std::wstring& document_root, const std::wstring& file_root_url, @@ -391,14 +406,20 @@ class HTTPTestServer : public BaseTestServer { test_server->loop_ = loop; FilePath no_cert; FilePath docroot = FilePath::FromWStringHack(document_root); - if (!test_server->Start(net::TestServerLauncher::ProtoHTTP, - kDefaultHostName, kHTTPDefaultPort, - docroot, no_cert, file_root_url)) { + if (!StartTestServer(test_server.get(), docroot, no_cert, file_root_url)) return NULL; - } return test_server; } + static bool StartTestServer(HTTPTestServer* server, + const FilePath& document_root, + const FilePath& cert_path, + const std::wstring& file_root_url) { + return server->Start(net::TestServerLauncher::ProtoHTTP, kDefaultHostName, + kHTTPDefaultPort, document_root, cert_path, + file_root_url, "", ""); + } + // A subclass may wish to send the request in a different manner virtual bool MakeGETRequest(const std::string& page_name) { const GURL& url = TestServerPage(page_name); |