[RFC mptcp-next v10 12/14] selftests: tls: adjust timeouts and data for MPTCP

Geliang Tang posted 14 patches 4 days, 23 hours ago
There is a newer version of this series
[RFC mptcp-next v10 12/14] selftests: tls: adjust timeouts and data for MPTCP
Posted by Geliang Tang 4 days, 23 hours ago
From: Geliang Tang <tanggeliang@kylinos.cn>

MPTCP requires longer timeouts in poll/epoll tests due to subflow
establishment delays and slower state transitions. Increase timeout
values to prevent false failures.

Double the data size in nonblocking test to accommodate MPTCP's
multi-subflow behavior and ensure sufficient data for testing.

In shutdown_reuse tests, add a delay after shutdown to ensure sockets
transition to TCPF_CLOSE before bind() reuse.

Co-developed-by: Gang Yan <yangang@kylinos.cn>
Signed-off-by: Gang Yan <yangang@kylinos.cn>
Signed-off-by: Geliang Tang <tanggeliang@kylinos.cn>
---
 tools/testing/selftests/net/tls.c | 30 ++++++++++++++++++++----------
 1 file changed, 20 insertions(+), 10 deletions(-)

diff --git a/tools/testing/selftests/net/tls.c b/tools/testing/selftests/net/tls.c
index 539a2bbea103..24ed6deb40fd 100644
--- a/tools/testing/selftests/net/tls.c
+++ b/tools/testing/selftests/net/tls.c
@@ -1293,6 +1293,7 @@ TEST_F(tls, bidir)
 
 TEST_F(tls, pollin)
 {
+	int timeout = variant->mptcp ? 100 : 20;
 	char const *test_str = "test_poll";
 	struct pollfd fd = { 0, 0, 0 };
 	char buf[10];
@@ -1302,11 +1303,11 @@ TEST_F(tls, pollin)
 	fd.fd = self->cfd;
 	fd.events = POLLIN;
 
-	EXPECT_EQ(poll(&fd, 1, 20), 1);
+	EXPECT_EQ(poll(&fd, 1, timeout), 1);
 	EXPECT_EQ(fd.revents & POLLIN, 1);
 	EXPECT_EQ(recv(self->cfd, buf, send_len, MSG_WAITALL), send_len);
 	/* Test timing out */
-	EXPECT_EQ(poll(&fd, 1, 20), 0);
+	EXPECT_EQ(poll(&fd, 1, timeout), 0);
 }
 
 TEST_F(tls, poll_wait)
@@ -1398,6 +1399,9 @@ TEST_F(tls, nonblocking)
 	int flags;
 	int res;
 
+	if (variant->mptcp)
+		data *= 2;
+
 	flags = fcntl(self->fd, F_GETFL, 0);
 	fcntl(self->fd, F_SETFL, flags | O_NONBLOCK);
 	fcntl(self->cfd, F_SETFL, flags | O_NONBLOCK);
@@ -1677,6 +1681,9 @@ TEST_F(tls, shutdown_reuse)
 	shutdown(self->cfd, SHUT_RDWR);
 	close(self->cfd);
 
+	if (variant->mptcp)
+		usleep(500000);
+
 	addr.sin_family = AF_INET;
 	addr.sin_addr.s_addr = htonl(INADDR_ANY);
 	addr.sin_port = 0;
@@ -2725,6 +2732,7 @@ TEST_F(tls_err, timeo)
 
 TEST_F(tls_err, poll_partial_rec)
 {
+	int timeout = variant->mptcp ? 100 : 1;
 	struct pollfd pfd = { };
 	ssize_t rec_len;
 	char rec[256];
@@ -2735,7 +2743,7 @@ TEST_F(tls_err, poll_partial_rec)
 
 	pfd.fd = self->cfd2;
 	pfd.events = POLLIN;
-	EXPECT_EQ(poll(&pfd, 1, 1), 0);
+	EXPECT_EQ(poll(&pfd, 1, timeout), 0);
 
 	memrnd(buf, sizeof(buf));
 	EXPECT_EQ(send(self->fd, buf, sizeof(buf), 0), sizeof(buf));
@@ -2747,18 +2755,19 @@ TEST_F(tls_err, poll_partial_rec)
 	/* ... no full record should mean no POLLIN */
 	pfd.fd = self->cfd2;
 	pfd.events = POLLIN;
-	EXPECT_EQ(poll(&pfd, 1, 1), 0);
+	EXPECT_EQ(poll(&pfd, 1, timeout), 0);
 	/* Now write the rest, and it should all pop out of the other end. */
 	EXPECT_EQ(send(self->fd2, rec + 100, rec_len - 100, 0), rec_len - 100);
 	pfd.fd = self->cfd2;
 	pfd.events = POLLIN;
-	EXPECT_EQ(poll(&pfd, 1, 1), 1);
+	EXPECT_EQ(poll(&pfd, 1, timeout), 1);
 	EXPECT_EQ(recv(self->cfd2, rec, sizeof(rec), 0), sizeof(buf));
 	EXPECT_EQ(memcmp(buf, rec, sizeof(buf)), 0);
 }
 
 TEST_F(tls_err, epoll_partial_rec)
 {
+	int timeout = variant->mptcp ? 100 : 0;
 	struct epoll_event ev, events[10];
 	ssize_t rec_len;
 	char rec[256];
@@ -2776,7 +2785,7 @@ TEST_F(tls_err, epoll_partial_rec)
 	ev.data.fd = self->cfd2;
 	ASSERT_GE(epoll_ctl(epollfd, EPOLL_CTL_ADD, self->cfd2, &ev), 0);
 
-	EXPECT_EQ(epoll_wait(epollfd, events, 10, 0), 0);
+	EXPECT_EQ(epoll_wait(epollfd, events, 10, timeout), 0);
 
 	memrnd(buf, sizeof(buf));
 	EXPECT_EQ(send(self->fd, buf, sizeof(buf), 0), sizeof(buf));
@@ -2786,10 +2795,10 @@ TEST_F(tls_err, epoll_partial_rec)
 	/* Write 100B, not the full record ... */
 	EXPECT_EQ(send(self->fd2, rec, 100, 0), 100);
 	/* ... no full record should mean no POLLIN */
-	EXPECT_EQ(epoll_wait(epollfd, events, 10, 0), 0);
+	EXPECT_EQ(epoll_wait(epollfd, events, 10, timeout), 0);
 	/* Now write the rest, and it should all pop out of the other end. */
 	EXPECT_EQ(send(self->fd2, rec + 100, rec_len - 100, 0), rec_len - 100);
-	EXPECT_EQ(epoll_wait(epollfd, events, 10, 0), 1);
+	EXPECT_EQ(epoll_wait(epollfd, events, 10, timeout), 1);
 	EXPECT_EQ(recv(self->cfd2, rec, sizeof(rec), 0), sizeof(buf));
 	EXPECT_EQ(memcmp(buf, rec, sizeof(buf)), 0);
 
@@ -2798,6 +2807,7 @@ TEST_F(tls_err, epoll_partial_rec)
 
 TEST_F(tls_err, poll_partial_rec_async)
 {
+	int timeout = variant->mptcp ? 100 : 20;
 	struct pollfd pfd = { };
 	char token = '\0';
 	ssize_t rec_len;
@@ -2841,13 +2851,13 @@ TEST_F(tls_err, poll_partial_rec_async)
 		/* Child should sleep in poll(), never get a wake */
 		pfd.fd = self->cfd2;
 		pfd.events = POLLIN;
-		EXPECT_EQ(poll(&pfd, 1, 20), 0);
+		EXPECT_EQ(poll(&pfd, 1, timeout), 0);
 
 		EXPECT_EQ(write(p[1], &token, 1), 1); /* Barrier #1 */
 
 		pfd.fd = self->cfd2;
 		pfd.events = POLLIN;
-		EXPECT_EQ(poll(&pfd, 1, 20), 1);
+		EXPECT_EQ(poll(&pfd, 1, timeout), 1);
 
 		exit(!__test_passed(_metadata));
 	}
-- 
2.53.0