selftests: tls: add a test for timeo vs lock
authorJakub Kicinski <kuba@kernel.org>
Wed, 20 Jul 2022 20:37:01 +0000 (13:37 -0700)
committerJakub Kicinski <kuba@kernel.org>
Fri, 22 Jul 2022 01:58:11 +0000 (18:58 -0700)
Add a test for recv timeout. Place it in the tls_err
group, so it only runs for TLS 1.2 and 1.3 but not
for every AEAD out there.

Link: https://lore.kernel.org/r/20220720203701.2179034-2-kuba@kernel.org
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
tools/testing/selftests/net/tls.c

index dc26aae..4ecbac1 100644 (file)
@@ -1597,6 +1597,38 @@ TEST_F(tls_err, bad_cmsg)
        EXPECT_EQ(errno, EBADMSG);
 }
 
+TEST_F(tls_err, timeo)
+{
+       struct timeval tv = { .tv_usec = 10000, };
+       char buf[128];
+       int ret;
+
+       if (self->notls)
+               SKIP(return, "no TLS support");
+
+       ret = setsockopt(self->cfd2, SOL_SOCKET, SO_RCVTIMEO, &tv, sizeof(tv));
+       ASSERT_EQ(ret, 0);
+
+       ret = fork();
+       ASSERT_GE(ret, 0);
+
+       if (ret) {
+               usleep(1000); /* Give child a head start */
+
+               EXPECT_EQ(recv(self->cfd2, buf, sizeof(buf), 0), -1);
+               EXPECT_EQ(errno, EAGAIN);
+
+               EXPECT_EQ(recv(self->cfd2, buf, sizeof(buf), 0), -1);
+               EXPECT_EQ(errno, EAGAIN);
+
+               wait(&ret);
+       } else {
+               EXPECT_EQ(recv(self->cfd2, buf, sizeof(buf), 0), -1);
+               EXPECT_EQ(errno, EAGAIN);
+               exit(0);
+       }
+}
+
 TEST(non_established) {
        struct tls12_crypto_info_aes_gcm_256 tls12;
        struct sockaddr_in addr;