Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(961)

Unified Diff: native_client_sdk/src/tests/nacl_io_test/socket_test.cc

Issue 1679643002: nacl_io: Add SOCK_DGRAM support to socketpair() (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: code review feedback Created 4 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « native_client_sdk/src/libraries/nacl_io/socket/unix_node.cc ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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);
« no previous file with comments | « native_client_sdk/src/libraries/nacl_io/socket/unix_node.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698