Chromium Code Reviews| Index: native_client_sdk/src/tests/nacl_io_test/socket_test.cc |
| diff --git a/native_client_sdk/src/tests/nacl_io_test/socket_test.cc b/native_client_sdk/src/tests/nacl_io_test/socket_test.cc |
| index 03d96375685ebef522042067da42e2b07fa74c6d..dfce2f15c3edf9fea6da686841d156c97a258de1 100644 |
| --- a/native_client_sdk/src/tests/nacl_io_test/socket_test.cc |
| +++ b/native_client_sdk/src/tests/nacl_io_test/socket_test.cc |
| @@ -244,8 +244,6 @@ TEST_F(SocketTest, Shutdown) { |
| } |
| 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.
|
| - EXPECT_LT(ki_socket(AF_UNIX, SOCK_STREAM, 0), 0); |
| - EXPECT_EQ(errno, EAFNOSUPPORT); |
| EXPECT_LT(ki_socket(AF_INET, SOCK_RAW, 0), 0); |
| EXPECT_EQ(errno, EPROTONOSUPPORT); |
| } |
| @@ -254,12 +252,81 @@ TEST_F(SocketTest, Socketpair) { |
| int sv[2]; |
| EXPECT_LT(ki_socketpair(AF_INET, SOCK_STREAM, 0, NULL), 0); |
| EXPECT_EQ(errno, EFAULT); |
| - EXPECT_LT(ki_socketpair(AF_UNIX, SOCK_STREAM, 0, sv), 0); |
| - EXPECT_EQ(errno, EAFNOSUPPORT); |
| EXPECT_LT(ki_socketpair(AF_INET, SOCK_STREAM, 0, sv), 0); |
| - EXPECT_EQ(errno, EPROTONOSUPPORT); |
| + EXPECT_EQ(errno, EOPNOTSUPP); |
| EXPECT_LT(ki_socketpair(AF_INET6, SOCK_STREAM, 0, sv), 0); |
| - EXPECT_EQ(errno, EPROTONOSUPPORT); |
| + EXPECT_EQ(errno, EOPNOTSUPP); |
| +} |
| + |
| +class UnixSocketTest : public ::testing::Test { |
| + public: |
| + UnixSocketTest() { sv_[0] = sv_[1] = -1; } |
| + |
| + void SetUp() { |
| + ASSERT_EQ(0, ki_push_state_for_testing()); |
| + ASSERT_EQ(0, ki_init(&kp_)); |
| + } |
| + |
| + void TearDown() { |
| + if (sv_[0] != -1) |
| + EXPECT_EQ(0, ki_close(sv_[0])); |
| + if (sv_[1] != -1) |
| + EXPECT_EQ(0, ki_close(sv_[1])); |
| + ki_uninit(); |
| + } |
| + |
| + protected: |
| + KernelProxy kp_; |
| + |
| + int sv_[2]; |
| +}; |
| + |
| +TEST_F(UnixSocketTest, Socket) { |
| + EXPECT_EQ(-1, ki_socket(AF_UNIX, SOCK_STREAM, 0)); |
| + EXPECT_EQ(EAFNOSUPPORT, errno); |
| +} |
| + |
| +TEST_F(UnixSocketTest, Socketpair) { |
| + errno = 0; |
| + EXPECT_EQ(0, ki_socketpair(AF_UNIX, SOCK_STREAM, 0, sv_)); |
| + EXPECT_EQ(0, errno); |
| + EXPECT_LE(0, sv_[0]); |
| + EXPECT_LE(0, sv_[1]); |
| +} |
| + |
| +TEST_F(UnixSocketTest, SendRecv) { |
| + char outbuf[256]; |
| + char inbuf[512]; |
| + |
| + memset(outbuf, 0xA5, sizeof(outbuf)); |
| + memset(inbuf, 0x3C, sizeof(inbuf)); |
| + |
| + EXPECT_EQ(0, ki_socketpair(AF_UNIX, SOCK_STREAM, 0, sv_)); |
| + |
| + int len1 = ki_send(sv_[0], outbuf, sizeof(outbuf), /* flags */ 0); |
| + EXPECT_EQ(sizeof(outbuf), len1); |
| + |
| + // The buffers should be different. |
| + EXPECT_NE(0, memcmp(outbuf, inbuf, sizeof(outbuf))); |
| + |
| + int len2 = ki_recv(sv_[1], inbuf, sizeof(inbuf), /* flags */ 0); |
| + EXPECT_EQ(sizeof(outbuf), len2); |
| + |
| + 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
|
| +} |
| + |
| +TEST_F(UnixSocketTest, RecvNonBlocking) { |
| + char buf[128]; |
| + |
| + EXPECT_EQ(0, ki_socketpair(AF_UNIX, SOCK_STREAM, 0, sv_)); |
| + |
| + EXPECT_EQ(-1, ki_recv(sv_[0], buf, sizeof(buf), MSG_DONTWAIT)); |
| + EXPECT_EQ(EAGAIN, errno); |
| + |
| + struct pollfd pollfd = {sv_[0], POLLIN | POLLOUT, 0}; |
| + EXPECT_EQ(1, ki_poll(&pollfd, 1, 0)); |
| + EXPECT_EQ(POLLOUT, pollfd.revents & POLLOUT); |
| + EXPECT_NE(POLLIN, pollfd.revents & POLLIN); |
| } |
| TEST(SocketUtilityFunctions, Htonl) { |