OLD | NEW |
---|---|
(Empty) | |
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. | |
2 // Use of this source code is governed by a BSD-style license that can be | |
3 // found in the LICENSE file. | |
4 | |
5 #include "base/compiler_specific.h" | |
6 #include "base/scoped_ptr.h" | |
7 #include "net/base/ip_endpoint.h" | |
8 #include "net/base/net_errors.h" | |
9 #include "net/socket/tcp_server_socket.h" | |
willchan no longer on Chromium
2011/04/13 16:08:51
This include goes first.
Sergey Ulanov
2011/04/13 21:20:19
Done.
| |
10 #include "net/base/test_completion_callback.h" | |
11 #include "testing/gtest/include/gtest/gtest.h" | |
12 #include "testing/platform_test.h" | |
13 | |
14 namespace net { | |
15 | |
16 namespace { | |
17 int kListenBacklog = 5; | |
willchan no longer on Chromium
2011/04/13 16:08:51
const
Sergey Ulanov
2011/04/13 21:20:19
Done.
| |
18 } // namespace | |
willchan no longer on Chromium
2011/04/13 16:08:51
How about putting all of this test code in the ano
Sergey Ulanov
2011/04/13 21:20:19
Done.
| |
19 | |
20 class TCPServerSocketTest : public PlatformTest { | |
21 protected: | |
22 void SetUp() OVERRIDE { | |
23 socket_.reset(new TCPServerSocket(NULL, NetLog::Source())); | |
24 IPEndPoint address; | |
25 ParseAddress("127.0.0.1", 0, &address); | |
26 ASSERT_EQ(0, socket_->Listen(address, kListenBacklog)); | |
27 ASSERT_EQ(0, socket_->GetLocalAddress(&local_address_)); | |
28 } | |
29 | |
30 void ParseAddress(std::string ip_str, int port, IPEndPoint* address) { | |
31 IPAddressNumber ip_number; | |
32 bool rv = ParseIPLiteralToNumber(ip_str, &ip_number); | |
33 if (!rv) | |
34 return; | |
35 *address = IPEndPoint(ip_number, port); | |
36 } | |
37 | |
38 scoped_ptr<TCPServerSocket> socket_; | |
willchan no longer on Chromium
2011/04/13 16:08:51
Why are you using a scoped_ptr? Why not just direc
Sergey Ulanov
2011/04/13 21:20:19
Done.
| |
39 IPEndPoint local_address_; | |
40 }; | |
41 | |
42 TEST_F(TCPServerSocketTest, Accept) { | |
43 TestCompletionCallback connect_callback; | |
44 scoped_ptr<TCPClientSocket> connecting_socket( | |
willchan no longer on Chromium
2011/04/13 16:08:51
I don't see why you use a scoped_ptr here instead
Sergey Ulanov
2011/04/13 21:20:19
Done.
| |
45 new TCPClientSocket(AddressList(local_address_.address(), | |
46 local_address_.port(), false), | |
47 NULL, NetLog::Source())); | |
48 connecting_socket->Connect(&connect_callback); | |
49 | |
50 TestCompletionCallback accept_callback; | |
51 TCPClientSocket* accepted_socket; | |
52 IPEndPoint accepted_address; | |
53 int result = socket_->Accept(&accepted_socket, &accepted_address, | |
54 &accept_callback); | |
55 if (result == ERR_IO_PENDING) | |
56 result = accept_callback.WaitForResult(); | |
57 ASSERT_EQ(0, result); | |
willchan no longer on Chromium
2011/04/13 16:08:51
Use OK instead of 0.
Sergey Ulanov
2011/04/13 21:20:19
Done.
| |
58 | |
59 EXPECT_TRUE(accepted_socket != NULL); | |
60 // Both sockets should be on the loopback network interface. | |
61 EXPECT_EQ(accepted_address.address(), local_address_.address()); | |
62 | |
63 EXPECT_EQ(0, connect_callback.WaitForResult()); | |
willchan no longer on Chromium
2011/04/13 16:08:51
Ditto, please fix all other instances.
Sergey Ulanov
2011/04/13 21:20:19
Done.
| |
64 | |
65 delete accepted_socket; | |
66 } | |
67 | |
68 // Test Accept() callback. | |
69 TEST_F(TCPServerSocketTest, AcceptAsync) { | |
70 TestCompletionCallback accept_callback; | |
71 TCPClientSocket* accepted_socket; | |
72 IPEndPoint accepted_address; | |
73 | |
74 ASSERT_EQ(ERR_IO_PENDING, | |
75 socket_->Accept(&accepted_socket, &accepted_address, | |
76 &accept_callback)); | |
77 | |
78 TestCompletionCallback connect_callback; | |
79 scoped_ptr<TCPClientSocket> connecting_socket( | |
80 new TCPClientSocket(AddressList(local_address_.address(), | |
81 local_address_.port(), false), | |
82 NULL, NetLog::Source())); | |
83 connecting_socket->Connect(&connect_callback); | |
84 | |
85 EXPECT_EQ(0, connect_callback.WaitForResult()); | |
86 EXPECT_EQ(0, accept_callback.WaitForResult()); | |
87 | |
88 EXPECT_TRUE(accepted_socket != NULL); | |
89 | |
90 // Both sockets should be on the loopback network interface. | |
91 EXPECT_EQ(accepted_address.address(), local_address_.address()); | |
92 | |
93 delete accepted_socket; | |
94 } | |
95 | |
96 // Accept two connections simultaneously. | |
97 TEST_F(TCPServerSocketTest, Accept2Connections) { | |
98 TestCompletionCallback accept_callback; | |
99 TCPClientSocket* accepted_socket; | |
100 IPEndPoint accepted_address; | |
101 | |
102 ASSERT_EQ(ERR_IO_PENDING, | |
103 socket_->Accept(&accepted_socket, &accepted_address, | |
104 &accept_callback)); | |
105 | |
106 TestCompletionCallback connect_callback; | |
107 scoped_ptr<TCPClientSocket> connecting_socket( | |
108 new TCPClientSocket(AddressList(local_address_.address(), | |
109 local_address_.port(), false), | |
110 NULL, NetLog::Source())); | |
111 connecting_socket->Connect(&connect_callback); | |
112 | |
113 TestCompletionCallback connect_callback2; | |
114 scoped_ptr<TCPClientSocket> connecting_socket2( | |
115 new TCPClientSocket(AddressList(local_address_.address(), | |
116 local_address_.port(), false), | |
117 NULL, NetLog::Source())); | |
118 connecting_socket2->Connect(&connect_callback2); | |
119 | |
120 EXPECT_EQ(0, accept_callback.WaitForResult()); | |
121 | |
122 TestCompletionCallback accept_callback2; | |
123 TCPClientSocket* accepted_socket2; | |
124 IPEndPoint accepted_address2; | |
125 int result = socket_->Accept(&accepted_socket2, &accepted_address2, | |
126 &accept_callback2); | |
127 if (result == ERR_IO_PENDING) | |
128 result = accept_callback2.WaitForResult(); | |
129 ASSERT_EQ(0, result); | |
130 | |
131 EXPECT_EQ(0, connect_callback.WaitForResult()); | |
132 | |
133 EXPECT_TRUE(accepted_socket != NULL); | |
134 EXPECT_TRUE(accepted_socket2 != NULL); | |
135 EXPECT_NE(accepted_socket, accepted_socket2); | |
136 | |
137 EXPECT_EQ(accepted_address.address(), local_address_.address()); | |
138 EXPECT_EQ(accepted_address2.address(), local_address_.address()); | |
139 | |
140 delete accepted_socket; | |
141 delete accepted_socket2; | |
142 } | |
143 | |
144 | |
145 } // namespace net | |
OLD | NEW |