| 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 |