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

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

Issue 1335783005: [NaCl SDK] nacl_io: Add support for basic socketpairs. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Class renamed/cl-format applied. Created 5 years, 3 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
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) {

Powered by Google App Engine
This is Rietveld 408576698