diff options
author | phajdan.jr@chromium.org <phajdan.jr@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2013-05-23 17:13:06 +0000 |
---|---|---|
committer | phajdan.jr@chromium.org <phajdan.jr@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2013-05-23 17:13:06 +0000 |
commit | fa3406dabb6cc008b0191ec40291f7280f046594 (patch) | |
tree | a87c673662c2355667b8fd61bd0b41b8a89fbf90 /net/test | |
parent | b3fdf4d32044c6f8a20e1cb0a3bc99ea645331ad (diff) | |
download | chromium_src-fa3406dabb6cc008b0191ec40291f7280f046594.zip chromium_src-fa3406dabb6cc008b0191ec40291f7280f046594.tar.gz chromium_src-fa3406dabb6cc008b0191ec40291f7280f046594.tar.bz2 |
GTTF: Make EmbeddedTestServer use ephemeral port
instead of a fixed port with a retry loop.
This makes it more friendly to running tests in parallel,
and also just much more robust. Also simplifies the code.
BUG=none
R=satorux@chromium.org
Review URL: https://codereview.chromium.org/15433003
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@201832 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'net/test')
-rw-r--r-- | net/test/embedded_test_server/embedded_test_server.cc | 38 |
1 files changed, 17 insertions, 21 deletions
diff --git a/net/test/embedded_test_server/embedded_test_server.cc b/net/test/embedded_test_server/embedded_test_server.cc index deeed7d..ea1d8c5 100644 --- a/net/test/embedded_test_server/embedded_test_server.cc +++ b/net/test/embedded_test_server/embedded_test_server.cc @@ -13,6 +13,8 @@ #include "base/string_util.h" #include "base/stringprintf.h" #include "base/threading/thread_restrictions.h" +#include "net/base/ip_endpoint.h" +#include "net/base/net_errors.h" #include "net/test/embedded_test_server/http_connection.h" #include "net/test/embedded_test_server/http_request.h" #include "net/test/embedded_test_server/http_response.h" @@ -23,10 +25,6 @@ namespace test_server { namespace { -const int kPort = 8040; -const char kIp[] = "127.0.0.1"; -const int kRetries = 10; - // Callback to handle requests with default predefined response for requests // matching the address |url|. scoped_ptr<HttpResponse> HandleDefaultRequest(const GURL& url, @@ -106,7 +104,7 @@ bool EmbeddedTestServer::InitializeAndWaitUntilReady() { } run_loop.Run(); - return Started(); + return Started() && base_url_.is_valid(); } bool EmbeddedTestServer::ShutdownAndWaitUntilComplete() { @@ -129,22 +127,20 @@ void EmbeddedTestServer::InitializeOnIOThread() { DCHECK(io_thread_->BelongsToCurrentThread()); DCHECK(!Started()); - int retries_left = kRetries + 1; - int try_port = kPort; - - while (retries_left > 0) { - SocketDescriptor socket_descriptor = TCPListenSocket::CreateAndBind( - kIp, - try_port); - if (socket_descriptor != TCPListenSocket::kInvalidSocket) { - listen_socket_ = new HttpListenSocket(socket_descriptor, this); - listen_socket_->Listen(); - base_url_ = GURL(base::StringPrintf("http://%s:%d", kIp, try_port)); - port_ = try_port; - break; - } - retries_left--; - try_port++; + SocketDescriptor socket_descriptor = + TCPListenSocket::CreateAndBindAnyPort("127.0.0.1", &port_); + if (socket_descriptor == TCPListenSocket::kInvalidSocket) + return; + + listen_socket_ = new HttpListenSocket(socket_descriptor, this); + listen_socket_->Listen(); + + IPEndPoint address; + int result = listen_socket_->GetLocalAddress(&address); + if (result == OK) { + base_url_ = GURL(std::string("http://") + address.ToString()); + } else { + LOG(ERROR) << "GetLocalAddress failed: " << ErrorToString(result); } } |