selftests/tls: add test for poll() with data in TLS ULP
authorJakub Kicinski <jakub.kicinski@netronome.com>
Thu, 4 Jul 2019 21:50:37 +0000 (14:50 -0700)
committerDavid S. Miller <davem@davemloft.net>
Sun, 7 Jul 2019 21:11:45 +0000 (14:11 -0700)
Add a test which checks if leftover record data in TLS
layer correctly wakes up poll().

Signed-off-by: Jakub Kicinski <jakub.kicinski@netronome.com>
Reviewed-by: Dirk van der Merwe <dirk.vandermerwe@netronome.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
tools/testing/selftests/net/tls.c

index 278c861..090fff9 100644 (file)
@@ -644,6 +644,32 @@ TEST_F(tls, poll_wait)
        EXPECT_EQ(recv(self->cfd, recv_mem, send_len, MSG_WAITALL), send_len);
 }
 
+TEST_F(tls, poll_wait_split)
+{
+       struct pollfd fd = { 0, 0, 0 };
+       char send_mem[20] = {};
+       char recv_mem[15];
+
+       fd.fd = self->cfd;
+       fd.events = POLLIN;
+       /* Send 20 bytes */
+       EXPECT_EQ(send(self->fd, send_mem, sizeof(send_mem), 0),
+                 sizeof(send_mem));
+       /* Poll with inf. timeout */
+       EXPECT_EQ(poll(&fd, 1, -1), 1);
+       EXPECT_EQ(fd.revents & POLLIN, 1);
+       EXPECT_EQ(recv(self->cfd, recv_mem, sizeof(recv_mem), MSG_WAITALL),
+                 sizeof(recv_mem));
+
+       /* Now the remaining 5 bytes of record data are in TLS ULP */
+       fd.fd = self->cfd;
+       fd.events = POLLIN;
+       EXPECT_EQ(poll(&fd, 1, -1), 1);
+       EXPECT_EQ(fd.revents & POLLIN, 1);
+       EXPECT_EQ(recv(self->cfd, recv_mem, sizeof(recv_mem), 0),
+                 sizeof(send_mem) - sizeof(recv_mem));
+}
+
 TEST_F(tls, blocking)
 {
        size_t data = 100000;