Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 // Copyright 2013 The Chromium Authors. All rights reserved. | 1 // Copyright 2013 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 <arpa/inet.h> | 5 #include <arpa/inet.h> |
| 6 #include <errno.h> | 6 #include <errno.h> |
| 7 #include <fcntl.h> | 7 #include <fcntl.h> |
| 8 #include <netinet/in.h> | 8 #include <netinet/in.h> |
| 9 #include <pthread.h> | 9 #include <pthread.h> |
| 10 #include <sys/types.h> | 10 #include <sys/types.h> |
| (...skipping 225 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 236 EXPECT_EQ(errno, ENOTSOCK); | 236 EXPECT_EQ(errno, ENOTSOCK); |
| 237 } | 237 } |
| 238 | 238 |
| 239 TEST_F(SocketTest, Shutdown) { | 239 TEST_F(SocketTest, Shutdown) { |
| 240 EXPECT_LT(ki_shutdown(-1, SHUT_RDWR), 0); | 240 EXPECT_LT(ki_shutdown(-1, SHUT_RDWR), 0); |
| 241 EXPECT_EQ(errno, EBADF); | 241 EXPECT_EQ(errno, EBADF); |
| 242 EXPECT_LT(ki_shutdown(0, SHUT_RDWR), 0); | 242 EXPECT_LT(ki_shutdown(0, SHUT_RDWR), 0); |
| 243 EXPECT_EQ(errno, ENOTSOCK); | 243 EXPECT_EQ(errno, ENOTSOCK); |
| 244 } | 244 } |
| 245 | 245 |
| 246 TEST_F(SocketTest, Socket) { | 246 TEST_F(SocketTest, Socket) { |
|
Sam Clegg
2015/09/22 17:53:44
Perhaps rename this test SocketUnsupported? And t
avallee
2015/09/22 20:25:06
Done.
| |
| 247 EXPECT_LT(ki_socket(AF_UNIX, SOCK_STREAM, 0), 0); | |
| 248 EXPECT_EQ(errno, EAFNOSUPPORT); | |
| 249 EXPECT_LT(ki_socket(AF_INET, SOCK_RAW, 0), 0); | 247 EXPECT_LT(ki_socket(AF_INET, SOCK_RAW, 0), 0); |
| 250 EXPECT_EQ(errno, EPROTONOSUPPORT); | 248 EXPECT_EQ(errno, EPROTONOSUPPORT); |
| 251 } | 249 } |
| 252 | 250 |
| 253 TEST_F(SocketTest, Socketpair) { | 251 TEST_F(SocketTest, Socketpair) { |
| 254 int sv[2]; | 252 int sv[2]; |
| 255 EXPECT_LT(ki_socketpair(AF_INET, SOCK_STREAM, 0, NULL), 0); | 253 EXPECT_LT(ki_socketpair(AF_INET, SOCK_STREAM, 0, NULL), 0); |
| 256 EXPECT_EQ(errno, EFAULT); | 254 EXPECT_EQ(errno, EFAULT); |
| 257 EXPECT_LT(ki_socketpair(AF_UNIX, SOCK_STREAM, 0, sv), 0); | |
| 258 EXPECT_EQ(errno, EAFNOSUPPORT); | |
| 259 EXPECT_LT(ki_socketpair(AF_INET, SOCK_STREAM, 0, sv), 0); | 255 EXPECT_LT(ki_socketpair(AF_INET, SOCK_STREAM, 0, sv), 0); |
| 260 EXPECT_EQ(errno, EPROTONOSUPPORT); | 256 EXPECT_EQ(errno, EOPNOTSUPP); |
| 261 EXPECT_LT(ki_socketpair(AF_INET6, SOCK_STREAM, 0, sv), 0); | 257 EXPECT_LT(ki_socketpair(AF_INET6, SOCK_STREAM, 0, sv), 0); |
| 262 EXPECT_EQ(errno, EPROTONOSUPPORT); | 258 EXPECT_EQ(errno, EOPNOTSUPP); |
| 259 } | |
| 260 | |
| 261 class UnixSocketTest : public ::testing::Test { | |
| 262 public: | |
| 263 UnixSocketTest() { sv_[0] = sv_[1] = -1; } | |
| 264 | |
| 265 void SetUp() { | |
| 266 ASSERT_EQ(0, ki_push_state_for_testing()); | |
| 267 ASSERT_EQ(0, ki_init(&kp_)); | |
| 268 } | |
| 269 | |
| 270 void TearDown() { | |
| 271 if (sv_[0] != -1) | |
| 272 EXPECT_EQ(0, ki_close(sv_[0])); | |
| 273 if (sv_[1] != -1) | |
| 274 EXPECT_EQ(0, ki_close(sv_[1])); | |
| 275 ki_uninit(); | |
| 276 } | |
| 277 | |
| 278 protected: | |
| 279 KernelProxy kp_; | |
| 280 | |
| 281 int sv_[2]; | |
| 282 }; | |
| 283 | |
| 284 TEST_F(UnixSocketTest, Socket) { | |
| 285 EXPECT_EQ(-1, ki_socket(AF_UNIX, SOCK_STREAM, 0)); | |
| 286 EXPECT_EQ(EAFNOSUPPORT, errno); | |
| 287 } | |
| 288 | |
| 289 TEST_F(UnixSocketTest, Socketpair) { | |
| 290 errno = 0; | |
| 291 EXPECT_EQ(0, ki_socketpair(AF_UNIX, SOCK_STREAM, 0, sv_)); | |
| 292 EXPECT_EQ(0, errno); | |
| 293 EXPECT_LE(0, sv_[0]); | |
| 294 EXPECT_LE(0, sv_[1]); | |
| 295 } | |
| 296 | |
| 297 TEST_F(UnixSocketTest, SendRecv) { | |
| 298 char outbuf[256]; | |
| 299 char inbuf[512]; | |
| 300 | |
| 301 memset(outbuf, 0xA5, sizeof(outbuf)); | |
| 302 memset(inbuf, 0x3C, sizeof(inbuf)); | |
| 303 | |
| 304 EXPECT_EQ(0, ki_socketpair(AF_UNIX, SOCK_STREAM, 0, sv_)); | |
| 305 | |
| 306 int len1 = ki_send(sv_[0], outbuf, sizeof(outbuf), /* flags */ 0); | |
| 307 EXPECT_EQ(sizeof(outbuf), len1); | |
| 308 | |
| 309 // The buffers should be different. | |
| 310 EXPECT_NE(0, memcmp(outbuf, inbuf, sizeof(outbuf))); | |
| 311 | |
| 312 int len2 = ki_recv(sv_[1], inbuf, sizeof(inbuf), /* flags */ 0); | |
| 313 EXPECT_EQ(sizeof(outbuf), len2); | |
| 314 | |
| 315 EXPECT_EQ(0, memcmp(outbuf, inbuf, sizeof(outbuf))); | |
|
Sam Clegg
2015/09/22 17:53:44
Perhaps confirm that ki_recv with MSG_DONTWAIT yie
avallee
2015/09/22 20:25:06
Added and sent data in the opposite direction as w
| |
| 316 } | |
| 317 | |
| 318 TEST_F(UnixSocketTest, RecvNonBlocking) { | |
| 319 char buf[128]; | |
| 320 | |
| 321 EXPECT_EQ(0, ki_socketpair(AF_UNIX, SOCK_STREAM, 0, sv_)); | |
| 322 | |
| 323 EXPECT_EQ(-1, ki_recv(sv_[0], buf, sizeof(buf), MSG_DONTWAIT)); | |
| 324 EXPECT_EQ(EAGAIN, errno); | |
| 325 | |
| 326 struct pollfd pollfd = {sv_[0], POLLIN | POLLOUT, 0}; | |
| 327 EXPECT_EQ(1, ki_poll(&pollfd, 1, 0)); | |
| 328 EXPECT_EQ(POLLOUT, pollfd.revents & POLLOUT); | |
| 329 EXPECT_NE(POLLIN, pollfd.revents & POLLIN); | |
| 263 } | 330 } |
| 264 | 331 |
| 265 TEST(SocketUtilityFunctions, Htonl) { | 332 TEST(SocketUtilityFunctions, Htonl) { |
| 266 uint32_t host_long = 0x44332211; | 333 uint32_t host_long = 0x44332211; |
| 267 uint32_t network_long = htonl(host_long); | 334 uint32_t network_long = htonl(host_long); |
| 268 uint8_t network_bytes[4]; | 335 uint8_t network_bytes[4]; |
| 269 memcpy(network_bytes, &network_long, 4); | 336 memcpy(network_bytes, &network_long, 4); |
| 270 EXPECT_EQ(network_bytes[0], 0x44); | 337 EXPECT_EQ(network_bytes[0], 0x44); |
| 271 EXPECT_EQ(network_bytes[1], 0x33); | 338 EXPECT_EQ(network_bytes[1], 0x33); |
| 272 EXPECT_EQ(network_bytes[2], 0x22); | 339 EXPECT_EQ(network_bytes[2], 0x22); |
| (...skipping 257 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 530 | 597 |
| 531 TEST(SocketUtilityFunctions, Ntohl) { | 598 TEST(SocketUtilityFunctions, Ntohl) { |
| 532 uint8_t network_bytes[4] = { 0x44, 0x33, 0x22, 0x11 }; | 599 uint8_t network_bytes[4] = { 0x44, 0x33, 0x22, 0x11 }; |
| 533 uint32_t network_long; | 600 uint32_t network_long; |
| 534 memcpy(&network_long, network_bytes, 4); | 601 memcpy(&network_long, network_bytes, 4); |
| 535 uint32_t host_long = ntohl(network_long); | 602 uint32_t host_long = ntohl(network_long); |
| 536 EXPECT_EQ(host_long, 0x44332211); | 603 EXPECT_EQ(host_long, 0x44332211); |
| 537 } | 604 } |
| 538 | 605 |
| 539 #endif // PROVIDES_SOCKETPAIR_API | 606 #endif // PROVIDES_SOCKETPAIR_API |
| OLD | NEW |