summaryrefslogtreecommitdiffstats
path: root/net/test
diff options
context:
space:
mode:
Diffstat (limited to 'net/test')
-rw-r--r--net/test/test_server.cc27
-rw-r--r--net/test/test_server.h4
-rw-r--r--net/test/test_server_posix.cc24
-rw-r--r--net/test/test_server_win.cc22
4 files changed, 65 insertions, 12 deletions
diff --git a/net/test/test_server.cc b/net/test/test_server.cc
index 1ae2c5b..1fd20c9 100644
--- a/net/test/test_server.cc
+++ b/net/test/test_server.cc
@@ -17,11 +17,14 @@
#include "base/base64.h"
#include "base/command_line.h"
#include "base/debug/leak_annotations.h"
+#include "base/json/json_reader.h"
#include "base/file_util.h"
#include "base/logging.h"
#include "base/path_service.h"
+#include "base/scoped_ptr.h"
#include "base/string_number_conversions.h"
#include "base/utf_string_conversions.h"
+#include "base/values.h"
#include "googleurl/src/gurl.h"
#include "net/base/cert_test_util.h"
#include "net/base/host_port_pair.h"
@@ -378,4 +381,28 @@ bool TestServer::AddCommandLineArguments(CommandLine* command_line) const {
return true;
}
+bool TestServer::ParseServerData(const std::string& server_data) {
+ VLOG(1) << "Server data: " << server_data;
+ base::JSONReader json_reader;
+ scoped_ptr<Value> value(json_reader.JsonToValue(server_data, true, false));
+ if (!value.get() ||
+ !value->IsType(Value::TYPE_DICTIONARY)) {
+ LOG(ERROR) << "Could not parse server data: "
+ << json_reader.GetErrorMessage();
+ return false;
+ }
+ DictionaryValue* dict = static_cast<DictionaryValue*>(value.get());
+ int port = 0;
+ if (!dict->GetInteger("port", &port)) {
+ LOG(ERROR) << "Could not find port value";
+ return false;
+ }
+ if ((port <= 0) || (port >= kuint16max)) {
+ LOG(ERROR) << "Invalid port value: " << port;
+ return false;
+ }
+ host_port_pair_.set_port(port);
+ return true;
+}
+
} // namespace net
diff --git a/net/test/test_server.h b/net/test/test_server.h
index f819365..5c11038 100644
--- a/net/test/test_server.h
+++ b/net/test/test_server.h
@@ -146,6 +146,10 @@ class TestServer {
// Waits for the server to start. Returns true on success.
bool WaitToStart() WARN_UNUSED_RESULT;
+ // Parses the server data read from the test server. Returns true
+ // on success.
+ bool ParseServerData(const std::string& server_data) WARN_UNUSED_RESULT;
+
// Returns path to the root certificate.
FilePath GetRootCertificatePath();
diff --git a/net/test/test_server_posix.cc b/net/test/test_server_posix.cc
index f9c594d..43bdb10 100644
--- a/net/test/test_server_posix.cc
+++ b/net/test/test_server_posix.cc
@@ -139,15 +139,27 @@ bool TestServer::WaitToStart() {
base::TimeDelta remaining_time = base::TimeDelta::FromMilliseconds(
TestTimeouts::action_max_timeout_ms());
- // Try to read two bytes from the pipe indicating the ephemeral port number.
- uint16 port = 0;
- if (!ReadData(child_fd_, sizeof(port),
- reinterpret_cast<uint8*>(&port), &remaining_time)) {
- LOG(ERROR) << "Could not read port";
+ uint32 server_data_len = 0;
+ if (!ReadData(child_fd_, sizeof(server_data_len),
+ reinterpret_cast<uint8*>(&server_data_len),
+ &remaining_time)) {
+ LOG(ERROR) << "Could not read server_data_len";
+ return false;
+ }
+ std::string server_data(server_data_len, '\0');
+ if (!ReadData(child_fd_, server_data_len,
+ reinterpret_cast<uint8*>(&server_data[0]),
+ &remaining_time)) {
+ LOG(ERROR) << "Could not read server_data (" << server_data_len
+ << " bytes)";
+ return false;
+ }
+
+ if (!ParseServerData(server_data)) {
+ LOG(ERROR) << "Could not parse server_data: " << server_data;
return false;
}
- host_port_pair_.set_port(port);
return true;
}
diff --git a/net/test/test_server_win.cc b/net/test/test_server_win.cc
index 79eb8dd..e1c54e9 100644
--- a/net/test/test_server_win.cc
+++ b/net/test/test_server_win.cc
@@ -194,15 +194,25 @@ bool TestServer::WaitToStart() {
ScopedHandle read_fd(child_read_fd_.Take());
ScopedHandle write_fd(child_write_fd_.Take());
- // Try to read two bytes from the pipe indicating the ephemeral port number.
- uint16 port = 0;
- if (!ReadData(read_fd.Get(), write_fd.Get(), sizeof(port),
- reinterpret_cast<uint8*>(&port))) {
- LOG(ERROR) << "Could not read port";
+ uint32 server_data_len = 0;
+ if (!ReadData(read_fd.Get(), write_fd.Get(), sizeof(server_data_len),
+ reinterpret_cast<uint8*>(&server_data_len))) {
+ LOG(ERROR) << "Could not read server_data_len";
+ return false;
+ }
+ std::string server_data(server_data_len, '\0');
+ if (!ReadData(read_fd.Get(), write_fd.Get(), server_data_len,
+ reinterpret_cast<uint8*>(&server_data[0]))) {
+ LOG(ERROR) << "Could not read server_data (" << server_data_len
+ << " bytes)";
+ return false;
+ }
+
+ if (!ParseServerData(server_data)) {
+ LOG(ERROR) << "Could not parse server_data: " << server_data;
return false;
}
- host_port_pair_.set_port(port);
return true;
}