| Index: net/udp/udp_socket_unittest.cc
|
| diff --git a/net/udp/udp_socket_unittest.cc b/net/udp/udp_socket_unittest.cc
|
| index c92bf2b35d100c4466a5ee262f2f1665bf065e46..ae32eac4f52b646d7ffdf553bf1f4042b4855db3 100644
|
| --- a/net/udp/udp_socket_unittest.cc
|
| +++ b/net/udp/udp_socket_unittest.cc
|
| @@ -9,6 +9,7 @@
|
|
|
| #include "base/basictypes.h"
|
| #include "base/bind.h"
|
| +#include "base/memory/weak_ptr.h"
|
| #include "base/metrics/histogram.h"
|
| #include "base/stl_util.h"
|
| #include "net/base/io_buffer.h"
|
| @@ -27,9 +28,7 @@ namespace {
|
|
|
| class UDPSocketTest : public PlatformTest {
|
| public:
|
| - UDPSocketTest()
|
| - : buffer_(new IOBufferWithSize(kMaxRead)) {
|
| - }
|
| + UDPSocketTest() : buffer_(new IOBufferWithSize(kMaxRead)) {}
|
|
|
| // Blocks until data is read from the socket.
|
| std::string RecvFromSocket(UDPServerSocket* socket) {
|
| @@ -112,22 +111,27 @@ class UDPSocketTest : public PlatformTest {
|
| return bytes_sent;
|
| }
|
|
|
| + // Creates and address from an ip/port and returns it in |address|.
|
| + void CreateUDPAddress(std::string ip_str, uint16 port, IPEndPoint* address) {
|
| + IPAddressNumber ip_number;
|
| + bool rv = ParseIPLiteralToNumber(ip_str, &ip_number);
|
| + if (!rv)
|
| + return;
|
| + *address = IPEndPoint(ip_number, port);
|
| + }
|
| +
|
| + // Run unit test for a connection test.
|
| + // |use_nonblocking_io| is used to switch between overlapped and non-blocking
|
| + // IO on Windows. It has no effect in other ports.
|
| + void ConnectTest(bool use_nonblocking_io);
|
| +
|
| protected:
|
| static const int kMaxRead = 1024;
|
| scoped_refptr<IOBufferWithSize> buffer_;
|
| IPEndPoint recv_from_address_;
|
| };
|
|
|
| -// Creates and address from an ip/port and returns it in |address|.
|
| -void CreateUDPAddress(std::string ip_str, uint16 port, IPEndPoint* address) {
|
| - IPAddressNumber ip_number;
|
| - bool rv = ParseIPLiteralToNumber(ip_str, &ip_number);
|
| - if (!rv)
|
| - return;
|
| - *address = IPEndPoint(ip_number, port);
|
| -}
|
| -
|
| -TEST_F(UDPSocketTest, Connect) {
|
| +void UDPSocketTest::ConnectTest(bool use_nonblocking_io) {
|
| const uint16 kPort = 9999;
|
| std::string simple_message("hello world!");
|
|
|
| @@ -137,6 +141,10 @@ TEST_F(UDPSocketTest, Connect) {
|
| CapturingNetLog server_log;
|
| scoped_ptr<UDPServerSocket> server(
|
| new UDPServerSocket(&server_log, NetLog::Source()));
|
| +#if defined(OS_WIN)
|
| + if (use_nonblocking_io)
|
| + server->UseNonBlockingIO();
|
| +#endif
|
| server->AllowAddressReuse();
|
| int rv = server->Listen(bind_address);
|
| ASSERT_EQ(OK, rv);
|
| @@ -146,10 +154,13 @@ TEST_F(UDPSocketTest, Connect) {
|
| CreateUDPAddress("127.0.0.1", kPort, &server_address);
|
| CapturingNetLog client_log;
|
| scoped_ptr<UDPClientSocket> client(
|
| - new UDPClientSocket(DatagramSocket::DEFAULT_BIND,
|
| - RandIntCallback(),
|
| - &client_log,
|
| - NetLog::Source()));
|
| + new UDPClientSocket(DatagramSocket::DEFAULT_BIND, RandIntCallback(),
|
| + &client_log, NetLog::Source()));
|
| +#if defined(OS_WIN)
|
| + if (use_nonblocking_io)
|
| + client->UseNonBlockingIO();
|
| +#endif
|
| +
|
| rv = client->Connect(server_address);
|
| EXPECT_EQ(OK, rv);
|
|
|
| @@ -177,33 +188,43 @@ TEST_F(UDPSocketTest, Connect) {
|
| CapturingNetLog::CapturedEntryList server_entries;
|
| server_log.GetEntries(&server_entries);
|
| EXPECT_EQ(4u, server_entries.size());
|
| - EXPECT_TRUE(LogContainsBeginEvent(
|
| - server_entries, 0, NetLog::TYPE_SOCKET_ALIVE));
|
| + EXPECT_TRUE(
|
| + LogContainsBeginEvent(server_entries, 0, NetLog::TYPE_SOCKET_ALIVE));
|
| EXPECT_TRUE(LogContainsEvent(
|
| server_entries, 1, NetLog::TYPE_UDP_BYTES_RECEIVED, NetLog::PHASE_NONE));
|
| - EXPECT_TRUE(LogContainsEvent(
|
| - server_entries, 2, NetLog::TYPE_UDP_BYTES_SENT, NetLog::PHASE_NONE));
|
| - EXPECT_TRUE(LogContainsEndEvent(
|
| - server_entries, 3, NetLog::TYPE_SOCKET_ALIVE));
|
| + EXPECT_TRUE(LogContainsEvent(server_entries, 2, NetLog::TYPE_UDP_BYTES_SENT,
|
| + NetLog::PHASE_NONE));
|
| + EXPECT_TRUE(
|
| + LogContainsEndEvent(server_entries, 3, NetLog::TYPE_SOCKET_ALIVE));
|
|
|
| // Check the client's log.
|
| CapturingNetLog::CapturedEntryList client_entries;
|
| client_log.GetEntries(&client_entries);
|
| EXPECT_EQ(6u, client_entries.size());
|
| - EXPECT_TRUE(LogContainsBeginEvent(
|
| - client_entries, 0, NetLog::TYPE_SOCKET_ALIVE));
|
| - EXPECT_TRUE(LogContainsBeginEvent(
|
| - client_entries, 1, NetLog::TYPE_UDP_CONNECT));
|
| - EXPECT_TRUE(LogContainsEndEvent(
|
| - client_entries, 2, NetLog::TYPE_UDP_CONNECT));
|
| - EXPECT_TRUE(LogContainsEvent(
|
| - client_entries, 3, NetLog::TYPE_UDP_BYTES_SENT, NetLog::PHASE_NONE));
|
| + EXPECT_TRUE(
|
| + LogContainsBeginEvent(client_entries, 0, NetLog::TYPE_SOCKET_ALIVE));
|
| + EXPECT_TRUE(
|
| + LogContainsBeginEvent(client_entries, 1, NetLog::TYPE_UDP_CONNECT));
|
| + EXPECT_TRUE(LogContainsEndEvent(client_entries, 2, NetLog::TYPE_UDP_CONNECT));
|
| + EXPECT_TRUE(LogContainsEvent(client_entries, 3, NetLog::TYPE_UDP_BYTES_SENT,
|
| + NetLog::PHASE_NONE));
|
| EXPECT_TRUE(LogContainsEvent(
|
| client_entries, 4, NetLog::TYPE_UDP_BYTES_RECEIVED, NetLog::PHASE_NONE));
|
| - EXPECT_TRUE(LogContainsEndEvent(
|
| - client_entries, 5, NetLog::TYPE_SOCKET_ALIVE));
|
| + EXPECT_TRUE(
|
| + LogContainsEndEvent(client_entries, 5, NetLog::TYPE_SOCKET_ALIVE));
|
| }
|
|
|
| +TEST_F(UDPSocketTest, Connect) {
|
| + // The variable |use_nonblocking_io| has no effect in non-Windows ports.
|
| + ConnectTest(false);
|
| +}
|
| +
|
| +#if defined(OS_WIN)
|
| +TEST_F(UDPSocketTest, ConnectNonBlocking) {
|
| + ConnectTest(true);
|
| +}
|
| +#endif
|
| +
|
| #if defined(OS_MACOSX)
|
| // UDPSocketPrivate_Broadcast is disabled for OSX because it requires
|
| // root permissions on OSX 10.7+.
|
|
|