Add a test which checks if leftover record data in TLS
layer correctly wakes up poll().

Signed-off-by: Jakub Kicinski <[email protected]>
Reviewed-by: Dirk van der Merwe <[email protected]>
---
 tools/testing/selftests/net/tls.c | 26 ++++++++++++++++++++++++++
 1 file changed, 26 insertions(+)

diff --git a/tools/testing/selftests/net/tls.c 
b/tools/testing/selftests/net/tls.c
index 278c86134556..090fff9dbc48 100644
--- a/tools/testing/selftests/net/tls.c
+++ b/tools/testing/selftests/net/tls.c
@@ -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;
-- 
2.21.0

Reply via email to