selftests/tls: Fix recv(MSG_PEEK) & splice() test cases
authorVakul Garg <vakul.garg@nxp.com>
Fri, 28 Sep 2018 16:18:08 +0000 (21:48 +0530)
committerDavid S. Miller <davem@davemloft.net>
Tue, 2 Oct 2018 06:18:15 +0000 (23:18 -0700)
TLS test cases splice_from_pipe, send_and_splice &
recv_peek_multiple_records expect to receive a given nummber of bytes
and then compare them against the number of bytes which were sent.
Therefore, system call recv() must not return before receiving the
requested number of bytes, otherwise the subsequent memcmp() fails.
This patch passes MSG_WAITALL flag to recv() so that it does not return
prematurely before requested number of bytes are copied to receive
buffer.

Signed-off-by: Vakul Garg <vakul.garg@nxp.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
tools/testing/selftests/net/tls.c

index 11d54c36ae49a019d940d1902ce5632c7282a7a2..fac68d710f3599f312625be3106e9d14d6c7a353 100644 (file)
@@ -288,7 +288,7 @@ TEST_F(tls, splice_from_pipe)
        ASSERT_GE(pipe(p), 0);
        EXPECT_GE(write(p[1], mem_send, send_len), 0);
        EXPECT_GE(splice(p[0], NULL, self->fd, NULL, send_len, 0), 0);
-       EXPECT_GE(recv(self->cfd, mem_recv, send_len, 0), 0);
+       EXPECT_EQ(recv(self->cfd, mem_recv, send_len, MSG_WAITALL), send_len);
        EXPECT_EQ(memcmp(mem_send, mem_recv, send_len), 0);
 }
 
@@ -322,13 +322,13 @@ TEST_F(tls, send_and_splice)
 
        ASSERT_GE(pipe(p), 0);
        EXPECT_EQ(send(self->fd, test_str, send_len2, 0), send_len2);
-       EXPECT_NE(recv(self->cfd, buf, send_len2, 0), -1);
+       EXPECT_EQ(recv(self->cfd, buf, send_len2, MSG_WAITALL), send_len2);
        EXPECT_EQ(memcmp(test_str, buf, send_len2), 0);
 
        EXPECT_GE(write(p[1], mem_send, send_len), send_len);
        EXPECT_GE(splice(p[0], NULL, self->fd, NULL, send_len, 0), send_len);
 
-       EXPECT_GE(recv(self->cfd, mem_recv, send_len, 0), 0);
+       EXPECT_EQ(recv(self->cfd, mem_recv, send_len, MSG_WAITALL), send_len);
        EXPECT_EQ(memcmp(mem_send, mem_recv, send_len), 0);
 }
 
@@ -516,17 +516,17 @@ TEST_F(tls, recv_peek_multiple_records)
        len = strlen(test_str_second) + 1;
        EXPECT_EQ(send(self->fd, test_str_second, len, 0), len);
 
-       len = sizeof(buf);
+       len = strlen(test_str_first);
        memset(buf, 0, len);
-       EXPECT_NE(recv(self->cfd, buf, len, MSG_PEEK), -1);
+       EXPECT_EQ(recv(self->cfd, buf, len, MSG_PEEK | MSG_WAITALL), len);
 
        /* MSG_PEEK can only peek into the current record. */
-       len = strlen(test_str_first) + 1;
+       len = strlen(test_str_first);
        EXPECT_EQ(memcmp(test_str_first, buf, len), 0);
 
-       len = sizeof(buf);
+       len = strlen(test_str) + 1;
        memset(buf, 0, len);
-       EXPECT_NE(recv(self->cfd, buf, len, 0), -1);
+       EXPECT_EQ(recv(self->cfd, buf, len, MSG_WAITALL), len);
 
        /* Non-MSG_PEEK will advance strparser (and therefore record)
         * however.
@@ -543,9 +543,9 @@ TEST_F(tls, recv_peek_multiple_records)
        len = strlen(test_str_second) + 1;
        EXPECT_EQ(send(self->fd, test_str_second, len, 0), len);
 
-       len = sizeof(buf);
+       len = strlen(test_str) + 1;
        memset(buf, 0, len);
-       EXPECT_NE(recv(self->cfd, buf, len, MSG_PEEK), -1);
+       EXPECT_EQ(recv(self->cfd, buf, len, MSG_PEEK | MSG_WAITALL), len);
 
        len = strlen(test_str) + 1;
        EXPECT_EQ(memcmp(test_str, buf, len), 0);