diff options
Diffstat (limited to 'net/test/test_server_win.cc')
-rw-r--r-- | net/test/test_server_win.cc | 57 |
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() { |