summaryrefslogtreecommitdiffstats
path: root/net/test/test_server_win.cc
diff options
context:
space:
mode:
Diffstat (limited to 'net/test/test_server_win.cc')
-rw-r--r--net/test/test_server_win.cc57
1 files changed, 26 insertions, 31 deletions
diff --git a/net/test/test_server_win.cc b/net/test/test_server_win.cc
index 0fa7003..64437cd 100644
--- a/net/test/test_server_win.cc
+++ b/net/test/test_server_win.cc
@@ -86,26 +86,6 @@ void UnblockPipe(HANDLE handle, bool* unblocked) {
*unblocked = true;
}
-// Given a file handle, reads into |buffer| until |bytes_max| bytes
-// has been read or an error has been encountered (which includes
-// |unblocked| being set to true; see UnblockPipe() above). Returns
-// true if the read was successful.
-bool ReadData(bool* unblocked, HANDLE fd, DWORD bytes_max, uint8* buffer) {
- DWORD bytes_read = 0;
- while (bytes_read < bytes_max) {
- DWORD num_bytes;
- if (!ReadFile(fd, buffer + bytes_read, bytes_max - bytes_read,
- &num_bytes, NULL))
- return false;
- if (num_bytes <= 0)
- return false;
- if (*unblocked)
- return false;
- bytes_read += num_bytes;
- }
- return true;
-}
-
} // namespace
namespace net {
@@ -166,9 +146,6 @@ bool TestServer::LaunchPython(const FilePath& testserver_path) {
}
bool TestServer::WaitToStart() {
- ScopedHandle read_fd(child_read_fd_.Take());
- ScopedHandle write_fd(child_write_fd_.Take());
-
base::Thread thread("test_server_watcher");
if (!thread.Start())
return false;
@@ -176,19 +153,37 @@ bool TestServer::WaitToStart() {
// Prepare a timeout in case the server fails to start.
bool unblocked = false;
thread.message_loop()->PostDelayedTask(FROM_HERE,
- NewRunnableFunction(UnblockPipe, write_fd.Get(), &unblocked),
+ NewRunnableFunction(UnblockPipe, child_write_fd_.Get(), &unblocked),
TestTimeouts::action_max_timeout_ms());
- uint32 server_data_len = 0;
- if (!ReadData(&unblocked, read_fd.Get(), sizeof(server_data_len),
- reinterpret_cast<uint8*>(&server_data_len)))
+ // Try to read two bytes from the pipe indicating the ephemeral port number.
+ uint16 port;
+ uint8* buffer = reinterpret_cast<uint8*>(&port);
+ DWORD bytes_read = 0;
+ DWORD bytes_max = sizeof(port);
+ while (bytes_read < bytes_max) {
+ DWORD num_bytes;
+ if (!ReadFile(child_read_fd_, buffer + bytes_read, bytes_max - bytes_read,
+ &num_bytes, NULL))
+ break;
+ if (num_bytes <= 0)
+ break;
+ bytes_read += num_bytes;
+ }
+ thread.Stop();
+ child_read_fd_.Close();
+ child_write_fd_.Close();
+
+ // If we hit the timeout, fail.
+ if (unblocked)
return false;
- std::string server_data(server_data_len, '\0');
- if (!ReadData(&unblocked, read_fd.Get(), server_data_len,
- reinterpret_cast<uint8*>(&server_data[0])))
+
+ // If not enough bytes were read, fail.
+ if (bytes_read < bytes_max)
return false;
- return ParseServerData(server_data);
+ host_port_pair_.set_port(port);
+ return true;
}
bool TestServer::CheckCATrusted() {