diff options
author | cbentzel@chromium.org <cbentzel@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2010-11-11 20:31:31 +0000 |
---|---|---|
committer | cbentzel@chromium.org <cbentzel@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2010-11-11 20:31:31 +0000 |
commit | fd6cfaf721f4da81f4fb19983b73f96c1005f0d8 (patch) | |
tree | e85638342ec6e69f72eee8522f4127dcd5dfbfe5 /net/test/test_server.cc | |
parent | 09c1973dd93208a0d1d96c8b095dcf9c7cb10043 (diff) | |
download | chromium_src-fd6cfaf721f4da81f4fb19983b73f96c1005f0d8.zip chromium_src-fd6cfaf721f4da81f4fb19983b73f96c1005f0d8.tar.gz chromium_src-fd6cfaf721f4da81f4fb19983b73f96c1005f0d8.tar.bz2 |
testserver.py listens on ephemeral ports by default.
If --port is specified on the command line, testserver.py will listen on that port, otherwise it will listen on an ephemeral port. If --startup_pipe is specified, the port number is written to the pipe as a 2 byte unsigned int in host order.
TestServer spawns testserver.py to listen on an ephemeral port and reads the port value from the pipe. A fixed port can not be specified.
BUG=56814
TEST=try bots pass
Review URL: http://codereview.chromium.org/4733005
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@65843 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'net/test/test_server.cc')
-rw-r--r-- | net/test/test_server.cc | 75 |
1 files changed, 18 insertions, 57 deletions
diff --git a/net/test/test_server.cc b/net/test/test_server.cc index 5d197b9..9a89cc9 100644 --- a/net/test/test_server.cc +++ b/net/test/test_server.cc @@ -41,59 +41,6 @@ const int kServerConnectionAttempts = 10; // Connection timeout in milliseconds for tests. const int kServerConnectionTimeoutMs = 1000; -const char kTestServerShardFlag[] = "test-server-shard"; - -int GetHTTPSPortBase(const TestServer::HTTPSOptions& options) { - if (options.request_client_certificate) - return 9543; - - switch (options.server_certificate) { - case TestServer::HTTPSOptions::CERT_OK: - return 9443; - case TestServer::HTTPSOptions::CERT_MISMATCHED_NAME: - return 9643; - case TestServer::HTTPSOptions::CERT_EXPIRED: - // TODO(phajdan.jr): Some tests rely on this hardcoded value. - // Some uses of this are actually in .html/.js files. - return 9666; - default: - NOTREACHED(); - } - return -1; -} - -int GetPortBase(TestServer::Type type, - const TestServer::HTTPSOptions& options) { - switch (type) { - case TestServer::TYPE_FTP: - return 3117; - case TestServer::TYPE_HTTP: - return 1337; - case TestServer::TYPE_HTTPS: - return GetHTTPSPortBase(options); - default: - NOTREACHED(); - } - return -1; -} - -int GetPort(TestServer::Type type, - const TestServer::HTTPSOptions& options) { - int port = GetPortBase(type, options); - if (CommandLine::ForCurrentProcess()->HasSwitch(kTestServerShardFlag)) { - std::string shard_str(CommandLine::ForCurrentProcess()->GetSwitchValueASCII( - kTestServerShardFlag)); - int shard = -1; - if (base::StringToInt(shard_str, &shard)) { - port += shard; - } else { - LOG(FATAL) << "Got invalid " << kTestServerShardFlag << " flag value. " - << "An integer is expected."; - } - } - return port; -} - std::string GetHostname(TestServer::Type type, const TestServer::HTTPSOptions& options) { if (type == TestServer::TYPE_HTTPS && @@ -139,13 +86,16 @@ FilePath TestServer::HTTPSOptions::GetCertificateFile() const { } TestServer::TestServer(Type type, const FilePath& document_root) - : type_(type) { + : type_(type), + started_(false) { Init(document_root); } TestServer::TestServer(const HTTPSOptions& https_options, const FilePath& document_root) - : https_options_(https_options), type_(TYPE_HTTPS) { + : https_options_(https_options), + type_(TYPE_HTTPS), + started_(false) { Init(document_root); } @@ -157,8 +107,11 @@ TestServer::~TestServer() { } void TestServer::Init(const FilePath& document_root) { - host_port_pair_ = HostPortPair(GetHostname(type_, https_options_), - GetPort(type_, https_options_)); + // At this point, the port that the testserver will listen on is unknown. + // The testserver will listen on an ephemeral port, and write the port + // number out over a pipe that this TestServer object will read from. Once + // that is complete, the host_port_pair_ will contain the actual port. + host_port_pair_ = HostPortPair(GetHostname(type_, https_options_), 0); process_handle_ = base::kNullProcessHandle; FilePath src_dir; @@ -203,6 +156,7 @@ bool TestServer::Start() { return false; } + started_ = true; return true; } @@ -210,6 +164,8 @@ bool TestServer::Stop() { if (!process_handle_) return true; + started_ = false; + // First check if the process has already terminated. bool ret = base::WaitForSingleProcess(process_handle_, 0); if (!ret) @@ -225,6 +181,11 @@ bool TestServer::Stop() { return ret; } +const HostPortPair& TestServer::host_port_pair() const { + DCHECK(started_); + return host_port_pair_; +} + std::string TestServer::GetScheme() const { switch (type_) { case TYPE_FTP: |