diff options
Diffstat (limited to 'net/test')
-rw-r--r-- | net/test/test_server.cc | 27 | ||||
-rw-r--r-- | net/test/test_server.h | 4 | ||||
-rw-r--r-- | net/test/test_server_posix.cc | 24 | ||||
-rw-r--r-- | net/test/test_server_win.cc | 22 |
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; } |