| 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 e2d86d53bb8e23b81f83cccb358edccbc1c1a9dc..e739f74d24e28f6963ed7345494099c94f1b8f5e 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
|
| @@ -256,7 +256,7 @@ TEST_F(SocketTest, SocketpairUnsupported) {
|
| EXPECT_EQ(errno, EOPNOTSUPP);
|
| EXPECT_LT(ki_socketpair(AF_INET6, SOCK_STREAM, 0, sv), 0);
|
| EXPECT_EQ(errno, EOPNOTSUPP);
|
| - EXPECT_LT(ki_socketpair(AF_UNIX, SOCK_DGRAM, 0, sv), 0);
|
| + EXPECT_LT(ki_socketpair(AF_UNIX, SOCK_RAW, 0, sv), 0);
|
| EXPECT_EQ(errno, EPROTOTYPE);
|
| EXPECT_LT(ki_socketpair(AF_MAX, SOCK_STREAM, 0, sv), 0);
|
| EXPECT_EQ(errno, EAFNOSUPPORT);
|
| @@ -296,9 +296,15 @@ TEST_F(UnixSocketTest, Socketpair) {
|
| EXPECT_EQ(0, errno);
|
| EXPECT_LE(0, sv_[0]);
|
| EXPECT_LE(0, sv_[1]);
|
| +
|
| + errno = 0;
|
| + EXPECT_EQ(0, ki_socketpair(AF_UNIX, SOCK_DGRAM, 0, sv_));
|
| + EXPECT_EQ(0, errno);
|
| + EXPECT_LE(0, sv_[0]);
|
| + EXPECT_LE(0, sv_[1]);
|
| }
|
|
|
| -TEST_F(UnixSocketTest, SendRecv) {
|
| +TEST_F(UnixSocketTest, SendRecvStream) {
|
| char outbuf[256];
|
| char inbuf[512];
|
|
|
| @@ -318,7 +324,7 @@ TEST_F(UnixSocketTest, SendRecv) {
|
|
|
| EXPECT_EQ(0, memcmp(outbuf, inbuf, sizeof(outbuf)));
|
|
|
| - // A reader should block after to read at this point.
|
| + // A reader should block after trying to read at this point.
|
| EXPECT_EQ(-1, ki_recv(sv_[1], inbuf, sizeof(inbuf), MSG_DONTWAIT));
|
| EXPECT_EQ(EAGAIN, errno);
|
|
|
| @@ -338,7 +344,7 @@ TEST_F(UnixSocketTest, SendRecv) {
|
| EXPECT_EQ(EAGAIN, errno);
|
| }
|
|
|
| -TEST_F(UnixSocketTest, RecvNonBlocking) {
|
| +TEST_F(UnixSocketTest, RecvNonBlockingStream) {
|
| char buf[128];
|
|
|
| EXPECT_EQ(0, ki_socketpair(AF_UNIX, SOCK_STREAM, 0, sv_));
|
| @@ -352,6 +358,70 @@ TEST_F(UnixSocketTest, RecvNonBlocking) {
|
| EXPECT_NE(POLLIN, pollfd.revents & POLLIN);
|
| }
|
|
|
| +TEST_F(UnixSocketTest, SendRecvDgram) {
|
| + char outbuf1[256];
|
| + char outbuf2[128];
|
| + char inbuf[512];
|
| +
|
| + memset(outbuf1, 0xA4, sizeof(outbuf1));
|
| + memset(outbuf2, 0xA5, sizeof(outbuf2));
|
| + memset(inbuf, 0x3C, sizeof(inbuf));
|
| +
|
| + EXPECT_EQ(0, ki_socketpair(AF_UNIX, SOCK_DGRAM, 0, sv_));
|
| +
|
| + int len1 = ki_send(sv_[0], outbuf1, sizeof(outbuf1), /* flags */ 0);
|
| + EXPECT_EQ(sizeof(outbuf1), len1);
|
| +
|
| + // The buffers should be different.
|
| + EXPECT_NE(0, memcmp(outbuf1, inbuf, sizeof(outbuf1)));
|
| +
|
| + int len2 = ki_send(sv_[0], outbuf2, sizeof(outbuf2), /* flags */ 0);
|
| + EXPECT_EQ(sizeof(outbuf2), len2);
|
| +
|
| + // Make sure the datagram boundaries are respected.
|
| + len1 = ki_recv(sv_[1], inbuf, sizeof(inbuf), /* flags */ 0);
|
| + EXPECT_EQ(sizeof(outbuf1), len1);
|
| + EXPECT_EQ(0, memcmp(outbuf1, inbuf, sizeof(outbuf1)));
|
| +
|
| + len2 = ki_recv(sv_[1], inbuf, sizeof(inbuf), /* flags */ 0);
|
| + EXPECT_EQ(sizeof(outbuf2), len2);
|
| + EXPECT_EQ(0, memcmp(outbuf2, inbuf, sizeof(outbuf2)));
|
| +
|
| + // A reader should block after trying to read at this point.
|
| + EXPECT_EQ(-1, ki_recv(sv_[1], inbuf, sizeof(inbuf), MSG_DONTWAIT));
|
| + EXPECT_EQ(EAGAIN, errno);
|
| +
|
| + // Send a datagram larger than the recv buffer, and check for overflow.
|
| + memset(inbuf, 0x3C, sizeof(inbuf));
|
| + EXPECT_NE(0, memcmp(outbuf1, inbuf, sizeof(outbuf1)));
|
| + len1 = ki_send(sv_[1], outbuf1, sizeof(outbuf1), /* flags */ 0);
|
| + EXPECT_EQ(sizeof(outbuf1), len1);
|
| +
|
| + len2 = ki_recv(sv_[0], inbuf, 16, /* flags */ 0);
|
| + EXPECT_EQ(16, len2);
|
| + EXPECT_EQ(0, memcmp(outbuf1, inbuf, 16));
|
| + EXPECT_EQ(0x3C, inbuf[16]);
|
| +
|
| + // Verify that the remainder of the packet was discarded, and there
|
| + // is nothing left to receive.
|
| + EXPECT_EQ(-1, ki_recv(sv_[0], inbuf, sizeof(inbuf), MSG_DONTWAIT));
|
| + EXPECT_EQ(EAGAIN, errno);
|
| +}
|
| +
|
| +TEST_F(UnixSocketTest, RecvNonBlockingDgram) {
|
| + char buf[128];
|
| +
|
| + EXPECT_EQ(0, ki_socketpair(AF_UNIX, SOCK_DGRAM, 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) {
|
| uint32_t host_long = 0x44332211;
|
| uint32_t network_long = htonl(host_long);
|
|
|