OLD | NEW |
1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "net/socket/unix_domain_client_socket_posix.h" | 5 #include "net/socket/unix_domain_client_socket_posix.h" |
6 | 6 |
7 #include <unistd.h> | 7 #include <unistd.h> |
8 | 8 |
9 #include <memory> | 9 #include <memory> |
10 #include <utility> | 10 #include <utility> |
11 | 11 |
12 #include "base/bind.h" | 12 #include "base/bind.h" |
13 #include "base/files/file_path.h" | 13 #include "base/files/file_path.h" |
14 #include "base/files/scoped_temp_dir.h" | 14 #include "base/files/scoped_temp_dir.h" |
15 #include "base/posix/eintr_wrapper.h" | 15 #include "base/posix/eintr_wrapper.h" |
16 #include "net/base/io_buffer.h" | 16 #include "net/base/io_buffer.h" |
17 #include "net/base/net_errors.h" | 17 #include "net/base/net_errors.h" |
18 #include "net/base/sockaddr_storage.h" | 18 #include "net/base/sockaddr_storage.h" |
19 #include "net/base/test_completion_callback.h" | 19 #include "net/base/test_completion_callback.h" |
20 #include "net/socket/socket_posix.h" | 20 #include "net/socket/socket_posix.h" |
21 #include "net/socket/unix_domain_server_socket_posix.h" | 21 #include "net/socket/unix_domain_server_socket_posix.h" |
| 22 #include "net/test/gtest_util.h" |
| 23 #include "testing/gmock/include/gmock/gmock.h" |
22 #include "testing/gtest/include/gtest/gtest.h" | 24 #include "testing/gtest/include/gtest/gtest.h" |
23 | 25 |
| 26 using net::test::IsError; |
| 27 using net::test::IsOk; |
| 28 |
24 namespace net { | 29 namespace net { |
25 namespace { | 30 namespace { |
26 | 31 |
27 const char kSocketFilename[] = "socket_for_testing"; | 32 const char kSocketFilename[] = "socket_for_testing"; |
28 | 33 |
29 bool UserCanConnectCallback( | 34 bool UserCanConnectCallback( |
30 bool allow_user, const UnixDomainServerSocket::Credentials& credentials) { | 35 bool allow_user, const UnixDomainServerSocket::Credentials& credentials) { |
31 // Here peers are running in same process. | 36 // Here peers are running in same process. |
32 #if defined(OS_LINUX) || defined(OS_ANDROID) | 37 #if defined(OS_LINUX) || defined(OS_ANDROID) |
33 EXPECT_EQ(getpid(), credentials.process_id); | 38 EXPECT_EQ(getpid(), credentials.process_id); |
(...skipping 91 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
125 | 130 |
126 base::ScopedTempDir temp_dir_; | 131 base::ScopedTempDir temp_dir_; |
127 std::string socket_path_; | 132 std::string socket_path_; |
128 }; | 133 }; |
129 | 134 |
130 TEST_F(UnixDomainClientSocketTest, Connect) { | 135 TEST_F(UnixDomainClientSocketTest, Connect) { |
131 const bool kUseAbstractNamespace = false; | 136 const bool kUseAbstractNamespace = false; |
132 | 137 |
133 UnixDomainServerSocket server_socket(CreateAuthCallback(true), | 138 UnixDomainServerSocket server_socket(CreateAuthCallback(true), |
134 kUseAbstractNamespace); | 139 kUseAbstractNamespace); |
135 EXPECT_EQ(OK, server_socket.BindAndListen(socket_path_, /*backlog=*/1)); | 140 EXPECT_THAT(server_socket.BindAndListen(socket_path_, /*backlog=*/1), IsOk()); |
136 | 141 |
137 std::unique_ptr<StreamSocket> accepted_socket; | 142 std::unique_ptr<StreamSocket> accepted_socket; |
138 TestCompletionCallback accept_callback; | 143 TestCompletionCallback accept_callback; |
139 EXPECT_EQ(ERR_IO_PENDING, | 144 EXPECT_EQ(ERR_IO_PENDING, |
140 server_socket.Accept(&accepted_socket, accept_callback.callback())); | 145 server_socket.Accept(&accepted_socket, accept_callback.callback())); |
141 EXPECT_FALSE(accepted_socket); | 146 EXPECT_FALSE(accepted_socket); |
142 | 147 |
143 UnixDomainClientSocket client_socket(socket_path_, kUseAbstractNamespace); | 148 UnixDomainClientSocket client_socket(socket_path_, kUseAbstractNamespace); |
144 EXPECT_FALSE(client_socket.IsConnected()); | 149 EXPECT_FALSE(client_socket.IsConnected()); |
145 | 150 |
146 EXPECT_EQ(OK, ConnectSynchronously(&client_socket)); | 151 EXPECT_THAT(ConnectSynchronously(&client_socket), IsOk()); |
147 EXPECT_TRUE(client_socket.IsConnected()); | 152 EXPECT_TRUE(client_socket.IsConnected()); |
148 // Server has not yet been notified of the connection. | 153 // Server has not yet been notified of the connection. |
149 EXPECT_FALSE(accepted_socket); | 154 EXPECT_FALSE(accepted_socket); |
150 | 155 |
151 EXPECT_EQ(OK, accept_callback.WaitForResult()); | 156 EXPECT_THAT(accept_callback.WaitForResult(), IsOk()); |
152 EXPECT_TRUE(accepted_socket); | 157 EXPECT_TRUE(accepted_socket); |
153 EXPECT_TRUE(accepted_socket->IsConnected()); | 158 EXPECT_TRUE(accepted_socket->IsConnected()); |
154 } | 159 } |
155 | 160 |
156 TEST_F(UnixDomainClientSocketTest, ConnectWithSocketDescriptor) { | 161 TEST_F(UnixDomainClientSocketTest, ConnectWithSocketDescriptor) { |
157 const bool kUseAbstractNamespace = false; | 162 const bool kUseAbstractNamespace = false; |
158 | 163 |
159 UnixDomainServerSocket server_socket(CreateAuthCallback(true), | 164 UnixDomainServerSocket server_socket(CreateAuthCallback(true), |
160 kUseAbstractNamespace); | 165 kUseAbstractNamespace); |
161 EXPECT_EQ(OK, server_socket.BindAndListen(socket_path_, /*backlog=*/1)); | 166 EXPECT_THAT(server_socket.BindAndListen(socket_path_, /*backlog=*/1), IsOk()); |
162 | 167 |
163 SocketDescriptor accepted_socket_fd = kInvalidSocket; | 168 SocketDescriptor accepted_socket_fd = kInvalidSocket; |
164 TestCompletionCallback accept_callback; | 169 TestCompletionCallback accept_callback; |
165 EXPECT_EQ(ERR_IO_PENDING, | 170 EXPECT_EQ(ERR_IO_PENDING, |
166 server_socket.AcceptSocketDescriptor(&accepted_socket_fd, | 171 server_socket.AcceptSocketDescriptor(&accepted_socket_fd, |
167 accept_callback.callback())); | 172 accept_callback.callback())); |
168 EXPECT_EQ(kInvalidSocket, accepted_socket_fd); | 173 EXPECT_EQ(kInvalidSocket, accepted_socket_fd); |
169 | 174 |
170 UnixDomainClientSocket client_socket(socket_path_, kUseAbstractNamespace); | 175 UnixDomainClientSocket client_socket(socket_path_, kUseAbstractNamespace); |
171 EXPECT_FALSE(client_socket.IsConnected()); | 176 EXPECT_FALSE(client_socket.IsConnected()); |
172 | 177 |
173 EXPECT_EQ(OK, ConnectSynchronously(&client_socket)); | 178 EXPECT_THAT(ConnectSynchronously(&client_socket), IsOk()); |
174 EXPECT_TRUE(client_socket.IsConnected()); | 179 EXPECT_TRUE(client_socket.IsConnected()); |
175 // Server has not yet been notified of the connection. | 180 // Server has not yet been notified of the connection. |
176 EXPECT_EQ(kInvalidSocket, accepted_socket_fd); | 181 EXPECT_EQ(kInvalidSocket, accepted_socket_fd); |
177 | 182 |
178 EXPECT_EQ(OK, accept_callback.WaitForResult()); | 183 EXPECT_THAT(accept_callback.WaitForResult(), IsOk()); |
179 EXPECT_NE(kInvalidSocket, accepted_socket_fd); | 184 EXPECT_NE(kInvalidSocket, accepted_socket_fd); |
180 | 185 |
181 SocketDescriptor client_socket_fd = client_socket.ReleaseConnectedSocket(); | 186 SocketDescriptor client_socket_fd = client_socket.ReleaseConnectedSocket(); |
182 EXPECT_NE(kInvalidSocket, client_socket_fd); | 187 EXPECT_NE(kInvalidSocket, client_socket_fd); |
183 | 188 |
184 // Now, re-wrap client_socket_fd in a UnixDomainClientSocket and try a read | 189 // Now, re-wrap client_socket_fd in a UnixDomainClientSocket and try a read |
185 // to be sure it hasn't gotten accidentally closed. | 190 // to be sure it hasn't gotten accidentally closed. |
186 SockaddrStorage addr; | 191 SockaddrStorage addr; |
187 ASSERT_TRUE(UnixDomainClientSocket::FillAddress(socket_path_, false, &addr)); | 192 ASSERT_TRUE(UnixDomainClientSocket::FillAddress(socket_path_, false, &addr)); |
188 std::unique_ptr<SocketPosix> adopter(new SocketPosix); | 193 std::unique_ptr<SocketPosix> adopter(new SocketPosix); |
(...skipping 14 matching lines...) Expand all Loading... |
203 | 208 |
204 TEST_F(UnixDomainClientSocketTest, ConnectWithAbstractNamespace) { | 209 TEST_F(UnixDomainClientSocketTest, ConnectWithAbstractNamespace) { |
205 const bool kUseAbstractNamespace = true; | 210 const bool kUseAbstractNamespace = true; |
206 | 211 |
207 UnixDomainClientSocket client_socket(socket_path_, kUseAbstractNamespace); | 212 UnixDomainClientSocket client_socket(socket_path_, kUseAbstractNamespace); |
208 EXPECT_FALSE(client_socket.IsConnected()); | 213 EXPECT_FALSE(client_socket.IsConnected()); |
209 | 214 |
210 #if defined(OS_ANDROID) || defined(OS_LINUX) | 215 #if defined(OS_ANDROID) || defined(OS_LINUX) |
211 UnixDomainServerSocket server_socket(CreateAuthCallback(true), | 216 UnixDomainServerSocket server_socket(CreateAuthCallback(true), |
212 kUseAbstractNamespace); | 217 kUseAbstractNamespace); |
213 EXPECT_EQ(OK, server_socket.BindAndListen(socket_path_, /*backlog=*/1)); | 218 EXPECT_THAT(server_socket.BindAndListen(socket_path_, /*backlog=*/1), IsOk()); |
214 | 219 |
215 std::unique_ptr<StreamSocket> accepted_socket; | 220 std::unique_ptr<StreamSocket> accepted_socket; |
216 TestCompletionCallback accept_callback; | 221 TestCompletionCallback accept_callback; |
217 EXPECT_EQ(ERR_IO_PENDING, | 222 EXPECT_EQ(ERR_IO_PENDING, |
218 server_socket.Accept(&accepted_socket, accept_callback.callback())); | 223 server_socket.Accept(&accepted_socket, accept_callback.callback())); |
219 EXPECT_FALSE(accepted_socket); | 224 EXPECT_FALSE(accepted_socket); |
220 | 225 |
221 EXPECT_EQ(OK, ConnectSynchronously(&client_socket)); | 226 EXPECT_THAT(ConnectSynchronously(&client_socket), IsOk()); |
222 EXPECT_TRUE(client_socket.IsConnected()); | 227 EXPECT_TRUE(client_socket.IsConnected()); |
223 // Server has not yet beend notified of the connection. | 228 // Server has not yet beend notified of the connection. |
224 EXPECT_FALSE(accepted_socket); | 229 EXPECT_FALSE(accepted_socket); |
225 | 230 |
226 EXPECT_EQ(OK, accept_callback.WaitForResult()); | 231 EXPECT_THAT(accept_callback.WaitForResult(), IsOk()); |
227 EXPECT_TRUE(accepted_socket); | 232 EXPECT_TRUE(accepted_socket); |
228 EXPECT_TRUE(accepted_socket->IsConnected()); | 233 EXPECT_TRUE(accepted_socket->IsConnected()); |
229 #else | 234 #else |
230 EXPECT_EQ(ERR_ADDRESS_INVALID, ConnectSynchronously(&client_socket)); | 235 EXPECT_THAT(ConnectSynchronously(&client_socket), |
| 236 IsError(ERR_ADDRESS_INVALID)); |
231 #endif | 237 #endif |
232 } | 238 } |
233 | 239 |
234 TEST_F(UnixDomainClientSocketTest, ConnectToNonExistentSocket) { | 240 TEST_F(UnixDomainClientSocketTest, ConnectToNonExistentSocket) { |
235 const bool kUseAbstractNamespace = false; | 241 const bool kUseAbstractNamespace = false; |
236 | 242 |
237 UnixDomainClientSocket client_socket(socket_path_, kUseAbstractNamespace); | 243 UnixDomainClientSocket client_socket(socket_path_, kUseAbstractNamespace); |
238 EXPECT_FALSE(client_socket.IsConnected()); | 244 EXPECT_FALSE(client_socket.IsConnected()); |
239 EXPECT_EQ(ERR_FILE_NOT_FOUND, ConnectSynchronously(&client_socket)); | 245 EXPECT_THAT(ConnectSynchronously(&client_socket), |
| 246 IsError(ERR_FILE_NOT_FOUND)); |
240 } | 247 } |
241 | 248 |
242 TEST_F(UnixDomainClientSocketTest, | 249 TEST_F(UnixDomainClientSocketTest, |
243 ConnectToNonExistentSocketWithAbstractNamespace) { | 250 ConnectToNonExistentSocketWithAbstractNamespace) { |
244 const bool kUseAbstractNamespace = true; | 251 const bool kUseAbstractNamespace = true; |
245 | 252 |
246 UnixDomainClientSocket client_socket(socket_path_, kUseAbstractNamespace); | 253 UnixDomainClientSocket client_socket(socket_path_, kUseAbstractNamespace); |
247 EXPECT_FALSE(client_socket.IsConnected()); | 254 EXPECT_FALSE(client_socket.IsConnected()); |
248 | 255 |
249 TestCompletionCallback connect_callback; | 256 TestCompletionCallback connect_callback; |
250 #if defined(OS_ANDROID) || defined(OS_LINUX) | 257 #if defined(OS_ANDROID) || defined(OS_LINUX) |
251 EXPECT_EQ(ERR_CONNECTION_REFUSED, ConnectSynchronously(&client_socket)); | 258 EXPECT_THAT(ConnectSynchronously(&client_socket), |
| 259 IsError(ERR_CONNECTION_REFUSED)); |
252 #else | 260 #else |
253 EXPECT_EQ(ERR_ADDRESS_INVALID, ConnectSynchronously(&client_socket)); | 261 EXPECT_THAT(ConnectSynchronously(&client_socket), |
| 262 IsError(ERR_ADDRESS_INVALID)); |
254 #endif | 263 #endif |
255 } | 264 } |
256 | 265 |
257 TEST_F(UnixDomainClientSocketTest, DisconnectFromClient) { | 266 TEST_F(UnixDomainClientSocketTest, DisconnectFromClient) { |
258 UnixDomainServerSocket server_socket(CreateAuthCallback(true), false); | 267 UnixDomainServerSocket server_socket(CreateAuthCallback(true), false); |
259 EXPECT_EQ(OK, server_socket.BindAndListen(socket_path_, /*backlog=*/1)); | 268 EXPECT_THAT(server_socket.BindAndListen(socket_path_, /*backlog=*/1), IsOk()); |
260 std::unique_ptr<StreamSocket> accepted_socket; | 269 std::unique_ptr<StreamSocket> accepted_socket; |
261 TestCompletionCallback accept_callback; | 270 TestCompletionCallback accept_callback; |
262 EXPECT_EQ(ERR_IO_PENDING, | 271 EXPECT_EQ(ERR_IO_PENDING, |
263 server_socket.Accept(&accepted_socket, accept_callback.callback())); | 272 server_socket.Accept(&accepted_socket, accept_callback.callback())); |
264 UnixDomainClientSocket client_socket(socket_path_, false); | 273 UnixDomainClientSocket client_socket(socket_path_, false); |
265 EXPECT_EQ(OK, ConnectSynchronously(&client_socket)); | 274 EXPECT_THAT(ConnectSynchronously(&client_socket), IsOk()); |
266 | 275 |
267 EXPECT_EQ(OK, accept_callback.WaitForResult()); | 276 EXPECT_THAT(accept_callback.WaitForResult(), IsOk()); |
268 EXPECT_TRUE(accepted_socket->IsConnected()); | 277 EXPECT_TRUE(accepted_socket->IsConnected()); |
269 EXPECT_TRUE(client_socket.IsConnected()); | 278 EXPECT_TRUE(client_socket.IsConnected()); |
270 | 279 |
271 // Try to read data. | 280 // Try to read data. |
272 const int kReadDataSize = 10; | 281 const int kReadDataSize = 10; |
273 scoped_refptr<IOBuffer> read_buffer(new IOBuffer(kReadDataSize)); | 282 scoped_refptr<IOBuffer> read_buffer(new IOBuffer(kReadDataSize)); |
274 TestCompletionCallback read_callback; | 283 TestCompletionCallback read_callback; |
275 EXPECT_EQ(ERR_IO_PENDING, | 284 EXPECT_EQ(ERR_IO_PENDING, |
276 accepted_socket->Read( | 285 accepted_socket->Read( |
277 read_buffer.get(), kReadDataSize, read_callback.callback())); | 286 read_buffer.get(), kReadDataSize, read_callback.callback())); |
278 | 287 |
279 // Disconnect from client side. | 288 // Disconnect from client side. |
280 client_socket.Disconnect(); | 289 client_socket.Disconnect(); |
281 EXPECT_FALSE(client_socket.IsConnected()); | 290 EXPECT_FALSE(client_socket.IsConnected()); |
282 EXPECT_FALSE(accepted_socket->IsConnected()); | 291 EXPECT_FALSE(accepted_socket->IsConnected()); |
283 | 292 |
284 // Connection closed by peer. | 293 // Connection closed by peer. |
285 EXPECT_EQ(0 /* EOF */, read_callback.WaitForResult()); | 294 EXPECT_EQ(0 /* EOF */, read_callback.WaitForResult()); |
286 // Note that read callback won't be called when the connection is closed | 295 // Note that read callback won't be called when the connection is closed |
287 // locally before the peer closes it. SocketPosix just clears callbacks. | 296 // locally before the peer closes it. SocketPosix just clears callbacks. |
288 } | 297 } |
289 | 298 |
290 TEST_F(UnixDomainClientSocketTest, DisconnectFromServer) { | 299 TEST_F(UnixDomainClientSocketTest, DisconnectFromServer) { |
291 UnixDomainServerSocket server_socket(CreateAuthCallback(true), false); | 300 UnixDomainServerSocket server_socket(CreateAuthCallback(true), false); |
292 EXPECT_EQ(OK, server_socket.BindAndListen(socket_path_, /*backlog=*/1)); | 301 EXPECT_THAT(server_socket.BindAndListen(socket_path_, /*backlog=*/1), IsOk()); |
293 std::unique_ptr<StreamSocket> accepted_socket; | 302 std::unique_ptr<StreamSocket> accepted_socket; |
294 TestCompletionCallback accept_callback; | 303 TestCompletionCallback accept_callback; |
295 EXPECT_EQ(ERR_IO_PENDING, | 304 EXPECT_EQ(ERR_IO_PENDING, |
296 server_socket.Accept(&accepted_socket, accept_callback.callback())); | 305 server_socket.Accept(&accepted_socket, accept_callback.callback())); |
297 UnixDomainClientSocket client_socket(socket_path_, false); | 306 UnixDomainClientSocket client_socket(socket_path_, false); |
298 EXPECT_EQ(OK, ConnectSynchronously(&client_socket)); | 307 EXPECT_THAT(ConnectSynchronously(&client_socket), IsOk()); |
299 | 308 |
300 EXPECT_EQ(OK, accept_callback.WaitForResult()); | 309 EXPECT_THAT(accept_callback.WaitForResult(), IsOk()); |
301 EXPECT_TRUE(accepted_socket->IsConnected()); | 310 EXPECT_TRUE(accepted_socket->IsConnected()); |
302 EXPECT_TRUE(client_socket.IsConnected()); | 311 EXPECT_TRUE(client_socket.IsConnected()); |
303 | 312 |
304 // Try to read data. | 313 // Try to read data. |
305 const int kReadDataSize = 10; | 314 const int kReadDataSize = 10; |
306 scoped_refptr<IOBuffer> read_buffer(new IOBuffer(kReadDataSize)); | 315 scoped_refptr<IOBuffer> read_buffer(new IOBuffer(kReadDataSize)); |
307 TestCompletionCallback read_callback; | 316 TestCompletionCallback read_callback; |
308 EXPECT_EQ(ERR_IO_PENDING, | 317 EXPECT_EQ(ERR_IO_PENDING, |
309 client_socket.Read( | 318 client_socket.Read( |
310 read_buffer.get(), kReadDataSize, read_callback.callback())); | 319 read_buffer.get(), kReadDataSize, read_callback.callback())); |
311 | 320 |
312 // Disconnect from server side. | 321 // Disconnect from server side. |
313 accepted_socket->Disconnect(); | 322 accepted_socket->Disconnect(); |
314 EXPECT_FALSE(accepted_socket->IsConnected()); | 323 EXPECT_FALSE(accepted_socket->IsConnected()); |
315 EXPECT_FALSE(client_socket.IsConnected()); | 324 EXPECT_FALSE(client_socket.IsConnected()); |
316 | 325 |
317 // Connection closed by peer. | 326 // Connection closed by peer. |
318 EXPECT_EQ(0 /* EOF */, read_callback.WaitForResult()); | 327 EXPECT_EQ(0 /* EOF */, read_callback.WaitForResult()); |
319 // Note that read callback won't be called when the connection is closed | 328 // Note that read callback won't be called when the connection is closed |
320 // locally before the peer closes it. SocketPosix just clears callbacks. | 329 // locally before the peer closes it. SocketPosix just clears callbacks. |
321 } | 330 } |
322 | 331 |
323 TEST_F(UnixDomainClientSocketTest, ReadAfterWrite) { | 332 TEST_F(UnixDomainClientSocketTest, ReadAfterWrite) { |
324 UnixDomainServerSocket server_socket(CreateAuthCallback(true), false); | 333 UnixDomainServerSocket server_socket(CreateAuthCallback(true), false); |
325 EXPECT_EQ(OK, server_socket.BindAndListen(socket_path_, /*backlog=*/1)); | 334 EXPECT_THAT(server_socket.BindAndListen(socket_path_, /*backlog=*/1), IsOk()); |
326 std::unique_ptr<StreamSocket> accepted_socket; | 335 std::unique_ptr<StreamSocket> accepted_socket; |
327 TestCompletionCallback accept_callback; | 336 TestCompletionCallback accept_callback; |
328 EXPECT_EQ(ERR_IO_PENDING, | 337 EXPECT_EQ(ERR_IO_PENDING, |
329 server_socket.Accept(&accepted_socket, accept_callback.callback())); | 338 server_socket.Accept(&accepted_socket, accept_callback.callback())); |
330 UnixDomainClientSocket client_socket(socket_path_, false); | 339 UnixDomainClientSocket client_socket(socket_path_, false); |
331 EXPECT_EQ(OK, ConnectSynchronously(&client_socket)); | 340 EXPECT_THAT(ConnectSynchronously(&client_socket), IsOk()); |
332 | 341 |
333 EXPECT_EQ(OK, accept_callback.WaitForResult()); | 342 EXPECT_THAT(accept_callback.WaitForResult(), IsOk()); |
334 EXPECT_TRUE(accepted_socket->IsConnected()); | 343 EXPECT_TRUE(accepted_socket->IsConnected()); |
335 EXPECT_TRUE(client_socket.IsConnected()); | 344 EXPECT_TRUE(client_socket.IsConnected()); |
336 | 345 |
337 // Send data from client to server. | 346 // Send data from client to server. |
338 const int kWriteDataSize = 10; | 347 const int kWriteDataSize = 10; |
339 scoped_refptr<IOBuffer> write_buffer( | 348 scoped_refptr<IOBuffer> write_buffer( |
340 new StringIOBuffer(std::string(kWriteDataSize, 'd'))); | 349 new StringIOBuffer(std::string(kWriteDataSize, 'd'))); |
341 EXPECT_EQ( | 350 EXPECT_EQ( |
342 kWriteDataSize, | 351 kWriteDataSize, |
343 WriteSynchronously(&client_socket, write_buffer.get(), kWriteDataSize)); | 352 WriteSynchronously(&client_socket, write_buffer.get(), kWriteDataSize)); |
(...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
384 ReadSynchronously(&client_socket, read_buffer.get(), kReadBufferSize, 0)); | 393 ReadSynchronously(&client_socket, read_buffer.get(), kReadBufferSize, 0)); |
385 | 394 |
386 // Disconnect from server side after read-write. | 395 // Disconnect from server side after read-write. |
387 accepted_socket->Disconnect(); | 396 accepted_socket->Disconnect(); |
388 EXPECT_FALSE(accepted_socket->IsConnected()); | 397 EXPECT_FALSE(accepted_socket->IsConnected()); |
389 EXPECT_FALSE(client_socket.IsConnected()); | 398 EXPECT_FALSE(client_socket.IsConnected()); |
390 } | 399 } |
391 | 400 |
392 TEST_F(UnixDomainClientSocketTest, ReadBeforeWrite) { | 401 TEST_F(UnixDomainClientSocketTest, ReadBeforeWrite) { |
393 UnixDomainServerSocket server_socket(CreateAuthCallback(true), false); | 402 UnixDomainServerSocket server_socket(CreateAuthCallback(true), false); |
394 EXPECT_EQ(OK, server_socket.BindAndListen(socket_path_, /*backlog=*/1)); | 403 EXPECT_THAT(server_socket.BindAndListen(socket_path_, /*backlog=*/1), IsOk()); |
395 std::unique_ptr<StreamSocket> accepted_socket; | 404 std::unique_ptr<StreamSocket> accepted_socket; |
396 TestCompletionCallback accept_callback; | 405 TestCompletionCallback accept_callback; |
397 EXPECT_EQ(ERR_IO_PENDING, | 406 EXPECT_EQ(ERR_IO_PENDING, |
398 server_socket.Accept(&accepted_socket, accept_callback.callback())); | 407 server_socket.Accept(&accepted_socket, accept_callback.callback())); |
399 UnixDomainClientSocket client_socket(socket_path_, false); | 408 UnixDomainClientSocket client_socket(socket_path_, false); |
400 EXPECT_EQ(OK, ConnectSynchronously(&client_socket)); | 409 EXPECT_THAT(ConnectSynchronously(&client_socket), IsOk()); |
401 | 410 |
402 EXPECT_EQ(OK, accept_callback.WaitForResult()); | 411 EXPECT_THAT(accept_callback.WaitForResult(), IsOk()); |
403 EXPECT_TRUE(accepted_socket->IsConnected()); | 412 EXPECT_TRUE(accepted_socket->IsConnected()); |
404 EXPECT_TRUE(client_socket.IsConnected()); | 413 EXPECT_TRUE(client_socket.IsConnected()); |
405 | 414 |
406 // Wait for data from client. | 415 // Wait for data from client. |
407 const int kWriteDataSize = 10; | 416 const int kWriteDataSize = 10; |
408 const int kReadBufferSize = kWriteDataSize * 2; | 417 const int kReadBufferSize = kWriteDataSize * 2; |
409 const int kSmallReadBufferSize = kWriteDataSize / 3; | 418 const int kSmallReadBufferSize = kWriteDataSize / 3; |
410 // Read smaller than write data size first. | 419 // Read smaller than write data size first. |
411 scoped_refptr<IOBuffer> read_buffer(new IOBuffer(kReadBufferSize)); | 420 scoped_refptr<IOBuffer> read_buffer(new IOBuffer(kReadBufferSize)); |
412 TestCompletionCallback read_callback; | 421 TestCompletionCallback read_callback; |
(...skipping 27 matching lines...) Expand all Loading... |
440 accepted_socket.get(), read_buffer.get(), kReadBufferSize, 0)); | 449 accepted_socket.get(), read_buffer.get(), kReadBufferSize, 0)); |
441 | 450 |
442 // Disconnect from server side after read-write. | 451 // Disconnect from server side after read-write. |
443 accepted_socket->Disconnect(); | 452 accepted_socket->Disconnect(); |
444 EXPECT_FALSE(accepted_socket->IsConnected()); | 453 EXPECT_FALSE(accepted_socket->IsConnected()); |
445 EXPECT_FALSE(client_socket.IsConnected()); | 454 EXPECT_FALSE(client_socket.IsConnected()); |
446 } | 455 } |
447 | 456 |
448 } // namespace | 457 } // namespace |
449 } // namespace net | 458 } // namespace net |
OLD | NEW |