selftests: tls: make the new data_steal test less flaky
authorJakub Kicinski <kuba@kernel.org>
Thu, 14 Aug 2025 19:43:23 +0000 (12:43 -0700)
committerJakub Kicinski <kuba@kernel.org>
Sat, 16 Aug 2025 01:07:27 +0000 (18:07 -0700)
The CI has hit a couple of cases of:

  RUN           global.data_steal ...
 tls.c:2762:data_steal:Expected recv(cfd, buf2, sizeof(buf2), MSG_DONTWAIT) (20000) == -1 (-1)
 data_steal: Test terminated by timeout
          FAIL  global.data_steal

Looks like the 2msec sleep is not long enough. Make the sleep longer,
and then instead of second sleep wait for the thieving process to exit.
That way we can be sure it called recv() before us.

While at it also avoid trying to steal more than a record, this seems
to be causing issues in manual testing as well.

Fixes: d7e82594a45c ("selftests: tls: test TCP stealing data from under the TLS socket")
Link: https://patch.msgid.link/20250814194323.2014650-1-kuba@kernel.org
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
tools/testing/selftests/net/tls.c

index d8cfcf9bb82594ca078c998ce5849131bf46ade8..2b8387a83bc78e2abe4cee497d22cab7f841b4ef 100644 (file)
@@ -2748,17 +2748,18 @@ TEST(data_steal) {
        pid = fork();
        ASSERT_GE(pid, 0);
        if (!pid) {
-               EXPECT_EQ(recv(cfd, buf, sizeof(buf), MSG_WAITALL),
-                         sizeof(buf));
+               EXPECT_EQ(recv(cfd, buf, sizeof(buf) / 2, MSG_WAITALL),
+                         sizeof(buf) / 2);
                exit(!__test_passed(_metadata));
        }
 
-       usleep(2000);
+       usleep(10000);
        ASSERT_EQ(setsockopt(fd, SOL_TLS, TLS_TX, &tls, tls.len), 0);
        ASSERT_EQ(setsockopt(cfd, SOL_TLS, TLS_RX, &tls, tls.len), 0);
 
        EXPECT_EQ(send(fd, buf, sizeof(buf), 0), sizeof(buf));
-       usleep(2000);
+       EXPECT_EQ(wait(&status), pid);
+       EXPECT_EQ(status, 0);
        EXPECT_EQ(recv(cfd, buf2, sizeof(buf2), MSG_DONTWAIT), -1);
        /* Don't check errno, the error will be different depending
         * on what random bytes TLS interpreted as the record length.
@@ -2766,9 +2767,6 @@ TEST(data_steal) {
 
        close(fd);
        close(cfd);
-
-       EXPECT_EQ(wait(&status), pid);
-       EXPECT_EQ(status, 0);
 }
 
 static void __attribute__((constructor)) fips_check(void) {