summaryrefslogtreecommitdiffstats
path: root/net/test/test_server.cc
diff options
context:
space:
mode:
authorcbentzel@chromium.org <cbentzel@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2010-11-11 20:31:31 +0000
committercbentzel@chromium.org <cbentzel@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2010-11-11 20:31:31 +0000
commitfd6cfaf721f4da81f4fb19983b73f96c1005f0d8 (patch)
treee85638342ec6e69f72eee8522f4127dcd5dfbfe5 /net/test/test_server.cc
parent09c1973dd93208a0d1d96c8b095dcf9c7cb10043 (diff)
downloadchromium_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.cc75
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: