* [PATCH mptcp-next 01/11] Squash to "selftests/bpf: Add bpf scheduler test" - fix
2024-03-28 9:49 [PATCH mptcp-next 00/11] refactor mptcp bpf tests Geliang Tang
@ 2024-03-28 9:49 ` Geliang Tang
2024-03-28 9:49 ` [PATCH mptcp-next 02/11] selftests/bpf: Refactor mptcp_sock test Geliang Tang
` (10 subsequent siblings)
11 siblings, 0 replies; 13+ messages in thread
From: Geliang Tang @ 2024-03-28 9:49 UTC (permalink / raw)
To: mptcp; +Cc: Geliang Tang
From: Geliang Tang <tanggeliang@kylinos.cn>
BPF tests fail sometimes with "bytes != total_bytes" errors:
# test_default:PASS:sched_init:default 0 nsec
# send_data:PASS:pthread_create 0 nsec
# send_data:FAIL:recv 936000 != 10485760 nr_recv:-1 errno:11
# default: 3041 ms
# server:FAIL:send 7579500 != 10485760 nr_sent:-1 errno:11
# send_data:FAIL:pthread_join thread_ret:-11 \
test_default:PASS:has_bytes_sent addr_1 0 nsec
# test_default:PASS:has_bytes_sent addr_2 0 nsec
# close_netns:PASS:setns 0 nsec
Here errno 11 is EAGAIN, sending should continue in this case, not break.
This patch makes BPF tests stable.
Signed-off-by: Geliang Tang <tanggeliang@kylinos.cn>
---
tools/testing/selftests/bpf/prog_tests/mptcp.c | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/tools/testing/selftests/bpf/prog_tests/mptcp.c b/tools/testing/selftests/bpf/prog_tests/mptcp.c
index 6e28215d7404..7fec91ab19cf 100644
--- a/tools/testing/selftests/bpf/prog_tests/mptcp.c
+++ b/tools/testing/selftests/bpf/prog_tests/mptcp.c
@@ -353,7 +353,7 @@ static void *server(void *arg)
while (bytes < total_bytes && !READ_ONCE(stop)) {
nr_sent = send(fd, &batch,
MIN(total_bytes - bytes, sizeof(batch)), 0);
- if (nr_sent == -1 && errno == EINTR)
+ if (nr_sent == -1 && (errno == EINTR || errno == EAGAIN))
continue;
if (nr_sent == -1) {
err = -errno;
@@ -397,7 +397,7 @@ static void send_data(int lfd, int fd, char *msg)
while (bytes < total_bytes && !READ_ONCE(stop)) {
nr_recv = recv(fd, &batch,
MIN(total_bytes - bytes, sizeof(batch)), 0);
- if (nr_recv == -1 && errno == EINTR)
+ if (nr_recv == -1 && (errno == EINTR || errno == EAGAIN))
continue;
if (nr_recv == -1)
break;
--
2.40.1
^ permalink raw reply related [flat|nested] 13+ messages in thread* [PATCH mptcp-next 02/11] selftests/bpf: Refactor mptcp_sock test
2024-03-28 9:49 [PATCH mptcp-next 00/11] refactor mptcp bpf tests Geliang Tang
2024-03-28 9:49 ` [PATCH mptcp-next 01/11] Squash to "selftests/bpf: Add bpf scheduler test" - fix Geliang Tang
@ 2024-03-28 9:49 ` Geliang Tang
2024-03-28 9:50 ` [PATCH mptcp-next 03/11] selftests/bpf: Refactor mptcpify test Geliang Tang
` (9 subsequent siblings)
11 siblings, 0 replies; 13+ messages in thread
From: Geliang Tang @ 2024-03-28 9:49 UTC (permalink / raw)
To: mptcp; +Cc: Geliang Tang
From: Geliang Tang <tanggeliang@kylinos.cn>
This patch refactors mptcp_sock test, renames "base" to "mptcp_sock",
extracts a new helper run_mptcp_sock() to start servers and run tests,
moves all test skeleton operations, __open_and_load, __attach and
__destroy from run_test() into test_mptcp_sock().
This prepares for the later unification of all MPTCP tests using a macro.
Signed-off-by: Geliang Tang <tanggeliang@kylinos.cn>
---
.../testing/selftests/bpf/prog_tests/mptcp.c | 63 +++++++++++--------
1 file changed, 36 insertions(+), 27 deletions(-)
diff --git a/tools/testing/selftests/bpf/prog_tests/mptcp.c b/tools/testing/selftests/bpf/prog_tests/mptcp.c
index 7fec91ab19cf..4f0bcaf39886 100644
--- a/tools/testing/selftests/bpf/prog_tests/mptcp.c
+++ b/tools/testing/selftests/bpf/prog_tests/mptcp.c
@@ -159,18 +159,10 @@ static int verify_msk(int map_fd, int client_fd, __u32 token)
return err;
}
-static int run_test(int cgroup_fd, int server_fd, bool is_mptcp)
+static int run_test(int cgroup_fd, int server_fd,
+ struct mptcp_sock *sock_skel, bool is_mptcp)
{
int client_fd, prog_fd, map_fd, err;
- struct mptcp_sock *sock_skel;
-
- sock_skel = mptcp_sock__open_and_load();
- if (!ASSERT_OK_PTR(sock_skel, "skel_open_load"))
- return libbpf_get_error(sock_skel);
-
- err = mptcp_sock__attach(sock_skel);
- if (!ASSERT_OK(err, "skel_attach"))
- goto out;
prog_fd = bpf_program__fd(sock_skel->progs._sockops);
map_fd = bpf_map__fd(sock_skel->maps.socket_storage_map);
@@ -190,29 +182,19 @@ static int run_test(int cgroup_fd, int server_fd, bool is_mptcp)
close(client_fd);
out:
- mptcp_sock__destroy(sock_skel);
return err;
}
-static void test_base(void)
+static void run_mptcp_sock(int cgroup_fd, struct mptcp_sock *skel)
{
- struct nstoken *nstoken = NULL;
- int server_fd, cgroup_fd;
-
- cgroup_fd = test__join_cgroup("/mptcp");
- if (!ASSERT_GE(cgroup_fd, 0, "test__join_cgroup"))
- return;
-
- nstoken = create_netns();
- if (!ASSERT_OK_PTR(nstoken, "create_netns"))
- goto fail;
+ int server_fd;
/* without MPTCP */
server_fd = start_server(AF_INET, SOCK_STREAM, NULL, 0, 0);
if (!ASSERT_GE(server_fd, 0, "start_server"))
goto with_mptcp;
- ASSERT_OK(run_test(cgroup_fd, server_fd, false), "run_test tcp");
+ ASSERT_OK(run_test(cgroup_fd, server_fd, skel, false), "run_test tcp");
close(server_fd);
@@ -220,14 +202,41 @@ static void test_base(void)
/* with MPTCP */
server_fd = start_mptcp_server(AF_INET, NULL, 0, 0);
if (!ASSERT_GE(server_fd, 0, "start_mptcp_server"))
- goto fail;
+ return;
- ASSERT_OK(run_test(cgroup_fd, server_fd, true), "run_test mptcp");
+ ASSERT_OK(run_test(cgroup_fd, server_fd, skel, true), "run_test mptcp");
close(server_fd);
+}
+
+static void test_mptcp_sock(void)
+{
+ struct nstoken *nstoken = NULL;
+ struct mptcp_sock *sock_skel;
+ int cgroup_fd, err;
+
+ cgroup_fd = test__join_cgroup("/mptcp");
+ if (!ASSERT_GE(cgroup_fd, 0, "test__join_cgroup"))
+ return;
+
+ sock_skel = mptcp_sock__open_and_load();
+ if (!ASSERT_OK_PTR(sock_skel, "skel_open_load"))
+ goto out;
+
+ err = mptcp_sock__attach(sock_skel);
+ if (!ASSERT_OK(err, "skel_attach"))
+ goto out;
+
+ nstoken = create_netns();
+ if (!ASSERT_OK_PTR(nstoken, "create_netns"))
+ goto fail;
+
+ run_mptcp_sock(cgroup_fd, sock_skel);
fail:
cleanup_netns(nstoken);
+ mptcp_sock__destroy(sock_skel);
+out:
close(cgroup_fd);
}
@@ -653,8 +662,8 @@ static void test_burst(void)
void test_mptcp(void)
{
- if (test__start_subtest("base"))
- test_base();
+ if (test__start_subtest("mptcp_sock"))
+ test_mptcp_sock();
if (test__start_subtest("mptcpify"))
test_mptcpify();
if (test__start_subtest("default"))
--
2.40.1
^ permalink raw reply related [flat|nested] 13+ messages in thread* [PATCH mptcp-next 03/11] selftests/bpf: Refactor mptcpify test
2024-03-28 9:49 [PATCH mptcp-next 00/11] refactor mptcp bpf tests Geliang Tang
2024-03-28 9:49 ` [PATCH mptcp-next 01/11] Squash to "selftests/bpf: Add bpf scheduler test" - fix Geliang Tang
2024-03-28 9:49 ` [PATCH mptcp-next 02/11] selftests/bpf: Refactor mptcp_sock test Geliang Tang
@ 2024-03-28 9:50 ` Geliang Tang
2024-03-28 9:50 ` [PATCH mptcp-next 04/11] selftests/bpf: Add MPTCP_BASE_TEST macro Geliang Tang
` (8 subsequent siblings)
11 siblings, 0 replies; 13+ messages in thread
From: Geliang Tang @ 2024-03-28 9:50 UTC (permalink / raw)
To: mptcp; +Cc: Geliang Tang
From: Geliang Tang <tanggeliang@kylinos.cn>
This patch refactors mptcpify test, moves all test skeleton operations,
__open_and_load, __attach and __destroy from run_mptcpify() into
test_mptcpify().
This prepares for the later unification of all MPTCP tests using a macro.
Signed-off-by: Geliang Tang <tanggeliang@kylinos.cn>
---
.../testing/selftests/bpf/prog_tests/mptcp.c | 39 +++++++++----------
1 file changed, 18 insertions(+), 21 deletions(-)
diff --git a/tools/testing/selftests/bpf/prog_tests/mptcp.c b/tools/testing/selftests/bpf/prog_tests/mptcp.c
index 4f0bcaf39886..cc91acfa3e52 100644
--- a/tools/testing/selftests/bpf/prog_tests/mptcp.c
+++ b/tools/testing/selftests/bpf/prog_tests/mptcp.c
@@ -279,61 +279,58 @@ static int verify_mptcpify(int server_fd, int client_fd)
return err;
}
-static int run_mptcpify(int cgroup_fd)
+static void run_mptcpify(int cgroup_fd, struct mptcpify *skel)
{
int server_fd, client_fd, err = 0;
- struct mptcpify *mptcpify_skel;
-
- mptcpify_skel = mptcpify__open_and_load();
- if (!ASSERT_OK_PTR(mptcpify_skel, "skel_open_load"))
- return libbpf_get_error(mptcpify_skel);
-
- err = mptcpify__attach(mptcpify_skel);
- if (!ASSERT_OK(err, "skel_attach"))
- goto out;
/* without MPTCP */
server_fd = start_server(AF_INET, SOCK_STREAM, NULL, 0, 0);
- if (!ASSERT_GE(server_fd, 0, "start_server")) {
- err = -EIO;
- goto out;
- }
+ if (!ASSERT_GE(server_fd, 0, "start_server"))
+ return;
client_fd = connect_to_fd(server_fd, 0);
- if (!ASSERT_GE(client_fd, 0, "connect to fd")) {
- err = -EIO;
+ if (!ASSERT_GE(client_fd, 0, "connect to fd"))
goto close_server;
- }
send_byte(client_fd);
err = verify_mptcpify(server_fd, client_fd);
+ ASSERT_OK(err, "verify_mptcpify");
close(client_fd);
close_server:
close(server_fd);
-out:
- mptcpify__destroy(mptcpify_skel);
- return err;
}
static void test_mptcpify(void)
{
struct nstoken *nstoken = NULL;
+ struct mptcpify *mptcpify_skel;
int cgroup_fd;
+ int err;
cgroup_fd = test__join_cgroup("/mptcpify");
if (!ASSERT_GE(cgroup_fd, 0, "test__join_cgroup"))
return;
+ mptcpify_skel = mptcpify__open_and_load();
+ if (!ASSERT_OK_PTR(mptcpify_skel, "skel_open_load"))
+ goto out;
+
+ err = mptcpify__attach(mptcpify_skel);
+ if (!ASSERT_OK(err, "skel_attach"))
+ goto out;
+
nstoken = create_netns();
if (!ASSERT_OK_PTR(nstoken, "create_netns"))
goto fail;
- ASSERT_OK(run_mptcpify(cgroup_fd), "run_mptcpify");
+ run_mptcpify(cgroup_fd, mptcpify_skel);
fail:
cleanup_netns(nstoken);
+ mptcpify__destroy(mptcpify_skel);
+out:
close(cgroup_fd);
}
--
2.40.1
^ permalink raw reply related [flat|nested] 13+ messages in thread* [PATCH mptcp-next 04/11] selftests/bpf: Add MPTCP_BASE_TEST macro
2024-03-28 9:49 [PATCH mptcp-next 00/11] refactor mptcp bpf tests Geliang Tang
` (2 preceding siblings ...)
2024-03-28 9:50 ` [PATCH mptcp-next 03/11] selftests/bpf: Refactor mptcpify test Geliang Tang
@ 2024-03-28 9:50 ` Geliang Tang
2024-03-28 9:50 ` [PATCH mptcp-next 05/11] selftests/bpf: Add RUN_MPTCP_TEST macro Geliang Tang
` (7 subsequent siblings)
11 siblings, 0 replies; 13+ messages in thread
From: Geliang Tang @ 2024-03-28 9:50 UTC (permalink / raw)
To: mptcp; +Cc: Geliang Tang
From: Geliang Tang <tanggeliang@kylinos.cn>
This patch adds a macro MPTCP_BASE_TEST to unify all MPTCP tests.
test_mptcp_sock() can be replaced by MPTCP_BASE_TEST(mptcp_sock),
and test_mptcpify() can be replaced by MPTCP_BASE_TEST(mptcpify).
Signed-off-by: Geliang Tang <tanggeliang@kylinos.cn>
---
.../testing/selftests/bpf/prog_tests/mptcp.c | 93 +++++++------------
1 file changed, 33 insertions(+), 60 deletions(-)
diff --git a/tools/testing/selftests/bpf/prog_tests/mptcp.c b/tools/testing/selftests/bpf/prog_tests/mptcp.c
index cc91acfa3e52..ac3886983ce1 100644
--- a/tools/testing/selftests/bpf/prog_tests/mptcp.c
+++ b/tools/testing/selftests/bpf/prog_tests/mptcp.c
@@ -209,37 +209,40 @@ static void run_mptcp_sock(int cgroup_fd, struct mptcp_sock *skel)
close(server_fd);
}
-static void test_mptcp_sock(void)
-{
- struct nstoken *nstoken = NULL;
- struct mptcp_sock *sock_skel;
- int cgroup_fd, err;
-
- cgroup_fd = test__join_cgroup("/mptcp");
- if (!ASSERT_GE(cgroup_fd, 0, "test__join_cgroup"))
- return;
-
- sock_skel = mptcp_sock__open_and_load();
- if (!ASSERT_OK_PTR(sock_skel, "skel_open_load"))
- goto out;
-
- err = mptcp_sock__attach(sock_skel);
- if (!ASSERT_OK(err, "skel_attach"))
- goto out;
-
- nstoken = create_netns();
- if (!ASSERT_OK_PTR(nstoken, "create_netns"))
- goto fail;
-
- run_mptcp_sock(cgroup_fd, sock_skel);
-
-fail:
- cleanup_netns(nstoken);
- mptcp_sock__destroy(sock_skel);
-out:
- close(cgroup_fd);
+#define MPTCP_BASE_TEST(name) \
+static void test_##name(void) \
+{ \
+ struct nstoken *nstoken; \
+ struct name *skel; \
+ int cgroup_fd, err; \
+ \
+ cgroup_fd = test__join_cgroup("/" #name); \
+ if (!ASSERT_GE(cgroup_fd, 0, "test__join_cgroup")) \
+ return; \
+ \
+ skel = name##__open_and_load(); \
+ if (!ASSERT_OK_PTR(skel, "skel_open_load")) \
+ goto out; \
+ \
+ err = name##__attach(skel); \
+ if (!ASSERT_OK(err, "skel_attach")) \
+ goto out; \
+ \
+ nstoken = create_netns(); \
+ if (!ASSERT_OK_PTR(nstoken, "create_netns")) \
+ goto fail; \
+ \
+ run_##name(cgroup_fd, skel); \
+ \
+fail: \
+ cleanup_netns(nstoken); \
+ name##__destroy(skel); \
+out: \
+ close(cgroup_fd); \
}
+MPTCP_BASE_TEST(mptcp_sock);
+
static void send_byte(int fd)
{
char b = 0x55;
@@ -302,37 +305,7 @@ static void run_mptcpify(int cgroup_fd, struct mptcpify *skel)
close(server_fd);
}
-static void test_mptcpify(void)
-{
- struct nstoken *nstoken = NULL;
- struct mptcpify *mptcpify_skel;
- int cgroup_fd;
- int err;
-
- cgroup_fd = test__join_cgroup("/mptcpify");
- if (!ASSERT_GE(cgroup_fd, 0, "test__join_cgroup"))
- return;
-
- mptcpify_skel = mptcpify__open_and_load();
- if (!ASSERT_OK_PTR(mptcpify_skel, "skel_open_load"))
- goto out;
-
- err = mptcpify__attach(mptcpify_skel);
- if (!ASSERT_OK(err, "skel_attach"))
- goto out;
-
- nstoken = create_netns();
- if (!ASSERT_OK_PTR(nstoken, "create_netns"))
- goto fail;
-
- run_mptcpify(cgroup_fd, mptcpify_skel);
-
-fail:
- cleanup_netns(nstoken);
- mptcpify__destroy(mptcpify_skel);
-out:
- close(cgroup_fd);
-}
+MPTCP_BASE_TEST(mptcpify);
static const unsigned int total_bytes = 10 * 1024 * 1024;
static int stop, duration;
--
2.40.1
^ permalink raw reply related [flat|nested] 13+ messages in thread* [PATCH mptcp-next 05/11] selftests/bpf: Add RUN_MPTCP_TEST macro
2024-03-28 9:49 [PATCH mptcp-next 00/11] refactor mptcp bpf tests Geliang Tang
` (3 preceding siblings ...)
2024-03-28 9:50 ` [PATCH mptcp-next 04/11] selftests/bpf: Add MPTCP_BASE_TEST macro Geliang Tang
@ 2024-03-28 9:50 ` Geliang Tang
2024-03-28 9:50 ` [PATCH mptcp-next 06/11] Squash to "selftests/bpf: Add bpf scheduler test" Geliang Tang
` (6 subsequent siblings)
11 siblings, 0 replies; 13+ messages in thread
From: Geliang Tang @ 2024-03-28 9:50 UTC (permalink / raw)
To: mptcp; +Cc: Geliang Tang
From: Geliang Tang <tanggeliang@kylinos.cn>
Each MPTCP subtest tests test__start_subtest(suffix), then invokes
test_suffix(). It makes sense to add a new macro RUN_MPTCP_TEST to
simpolify the code.
Signed-off-by: Geliang Tang <tanggeliang@kylinos.cn>
---
tools/testing/selftests/bpf/prog_tests/mptcp.c | 12 ++++++++----
1 file changed, 8 insertions(+), 4 deletions(-)
diff --git a/tools/testing/selftests/bpf/prog_tests/mptcp.c b/tools/testing/selftests/bpf/prog_tests/mptcp.c
index ac3886983ce1..b8ec11552e2c 100644
--- a/tools/testing/selftests/bpf/prog_tests/mptcp.c
+++ b/tools/testing/selftests/bpf/prog_tests/mptcp.c
@@ -630,12 +630,16 @@ static void test_burst(void)
mptcp_bpf_burst__destroy(burst_skel);
}
+#define RUN_MPTCP_TEST(suffix) \
+do { \
+ if (test__start_subtest(#suffix)) \
+ test_##suffix(); \
+} while (0)
+
void test_mptcp(void)
{
- if (test__start_subtest("mptcp_sock"))
- test_mptcp_sock();
- if (test__start_subtest("mptcpify"))
- test_mptcpify();
+ RUN_MPTCP_TEST(mptcp_sock);
+ RUN_MPTCP_TEST(mptcpify);
if (test__start_subtest("default"))
test_default();
if (test__start_subtest("first"))
--
2.40.1
^ permalink raw reply related [flat|nested] 13+ messages in thread* [PATCH mptcp-next 06/11] Squash to "selftests/bpf: Add bpf scheduler test"
2024-03-28 9:49 [PATCH mptcp-next 00/11] refactor mptcp bpf tests Geliang Tang
` (4 preceding siblings ...)
2024-03-28 9:50 ` [PATCH mptcp-next 05/11] selftests/bpf: Add RUN_MPTCP_TEST macro Geliang Tang
@ 2024-03-28 9:50 ` Geliang Tang
2024-03-28 9:50 ` [PATCH mptcp-next 07/11] Squash to "selftests/bpf: Add bpf_first test" Geliang Tang
` (5 subsequent siblings)
11 siblings, 0 replies; 13+ messages in thread
From: Geliang Tang @ 2024-03-28 9:50 UTC (permalink / raw)
To: mptcp; +Cc: Geliang Tang
From: Geliang Tang <tanggeliang@kylinos.cn>
Some cleanups.
Use ASSERT_EQ and ASSERT_OK like below commit:
selftests/bpf: Replaces the usage of CHECK calls for ASSERTs in bpf_tcp_ca
Use newly added endpoint_init and _ss_search helpers.
Add send_data_and_verify helper.
Signed-off-by: Geliang Tang <tanggeliang@kylinos.cn>
---
.../testing/selftests/bpf/prog_tests/mptcp.c | 63 ++++++++++++-------
1 file changed, 39 insertions(+), 24 deletions(-)
diff --git a/tools/testing/selftests/bpf/prog_tests/mptcp.c b/tools/testing/selftests/bpf/prog_tests/mptcp.c
index b8ec11552e2c..c400dbaccc10 100644
--- a/tools/testing/selftests/bpf/prog_tests/mptcp.c
+++ b/tools/testing/selftests/bpf/prog_tests/mptcp.c
@@ -5,7 +5,6 @@
#include <linux/const.h>
#include <netinet/in.h>
#include <test_progs.h>
-#include <time.h>
#include "cgroup_helpers.h"
#include "network_helpers.h"
#include "mptcp_sock.skel.h"
@@ -308,7 +307,7 @@ static void run_mptcpify(int cgroup_fd, struct mptcpify *skel)
MPTCP_BASE_TEST(mptcpify);
static const unsigned int total_bytes = 10 * 1024 * 1024;
-static int stop, duration;
+static int stop;
static void *server(void *arg)
{
@@ -341,8 +340,7 @@ static void *server(void *arg)
bytes += nr_sent;
}
- CHECK(bytes != total_bytes, "send", "%zd != %u nr_sent:%zd errno:%d\n",
- bytes, total_bytes, nr_sent, errno);
+ ASSERT_EQ(bytes, total_bytes, "send");
done:
if (fd >= 0)
@@ -365,11 +363,12 @@ static void send_data(int lfd, int fd, char *msg)
int err;
WRITE_ONCE(stop, 0);
+
if (clock_gettime(CLOCK_MONOTONIC, &start) < 0)
return;
err = pthread_create(&srv_thread, NULL, server, (void *)(long)lfd);
- if (CHECK(err != 0, "pthread_create", "err:%d errno:%d\n", err, errno))
+ if (!ASSERT_OK(err, "pthread_create"))
return;
/* recv total_bytes */
@@ -387,17 +386,13 @@ static void send_data(int lfd, int fd, char *msg)
return;
delta_ms = (end.tv_sec - start.tv_sec) * 1000 + (end.tv_nsec - start.tv_nsec) / 1000000;
-
- CHECK(bytes != total_bytes, "recv", "%zd != %u nr_recv:%zd errno:%d\n",
- bytes, total_bytes, nr_recv, errno);
-
printf("%s: %u ms\n", msg, delta_ms);
- WRITE_ONCE(stop, 1);
+ ASSERT_EQ(bytes, total_bytes, "recv");
+ WRITE_ONCE(stop, 1);
pthread_join(srv_thread, &thread_ret);
- CHECK(IS_ERR(thread_ret), "pthread_join", "thread_ret:%ld",
- PTR_ERR(thread_ret));
+ ASSERT_OK(IS_ERR(thread_ret), "thread_ret");
}
#define ADDR_1 "10.0.1.1"
@@ -425,32 +420,53 @@ static struct nstoken *sched_init(char *flags, char *sched)
return NULL;
}
-static int has_bytes_sent(char *addr)
+static int has_bytes_sent(char *dst)
{
char cmd[128];
snprintf(cmd, sizeof(cmd), "ip netns exec %s ss -it src %s sport %d dst %s | %s",
- NS_TEST, ADDR_1, PORT_1, addr, "grep -q bytes_sent:");
+ NS_TEST, ADDR_1, PORT_1, dst, "grep -q bytes_sent:");
return system(cmd);
}
-static void test_default(void)
+static void send_data_and_verify(char *msg, int addr1, int addr2)
{
int server_fd, client_fd;
- struct nstoken *nstoken;
- nstoken = sched_init("subflow", "default");
- if (!ASSERT_OK_PTR(nstoken, "sched_init:default"))
- goto fail;
server_fd = start_mptcp_server(AF_INET, ADDR_1, PORT_1, 0);
+ if (!ASSERT_NEQ(server_fd, -1, "start_mptcp_server"))
+ return;
+
client_fd = connect_to_fd(server_fd, 0);
+ if (!ASSERT_NEQ(client_fd, -1, "connect_to_fd")) {
+ close(server_fd);
+ return;
+ }
- send_data(server_fd, client_fd, "default");
- ASSERT_OK(has_bytes_sent(ADDR_1), "has_bytes_sent addr_1");
- ASSERT_OK(has_bytes_sent(ADDR_2), "has_bytes_sent addr_2");
+ send_data(server_fd, client_fd, msg);
+ if (addr1)
+ ASSERT_OK(has_bytes_sent(ADDR_1), "Should have bytes_sent on addr1");
+ else
+ ASSERT_GT(has_bytes_sent(ADDR_1), 0, "Shouldn't have bytes_sent on addr1");
+ if (addr2)
+ ASSERT_OK(has_bytes_sent(ADDR_2), "Should have bytes_sent on addr2");
+ else
+ ASSERT_GT(has_bytes_sent(ADDR_2), 0, "Shouldn't have bytes_sent on addr2");
close(client_fd);
close(server_fd);
+}
+
+static void test_default(void)
+{
+ struct nstoken *nstoken;
+
+ nstoken = sched_init("subflow", "default");
+ if (!ASSERT_OK_PTR(nstoken, "sched_init:default"))
+ goto fail;
+
+ send_data_and_verify("default", 1, 1);
+
fail:
cleanup_netns(nstoken);
}
@@ -640,8 +656,7 @@ void test_mptcp(void)
{
RUN_MPTCP_TEST(mptcp_sock);
RUN_MPTCP_TEST(mptcpify);
- if (test__start_subtest("default"))
- test_default();
+ RUN_MPTCP_TEST(default);
if (test__start_subtest("first"))
test_first();
if (test__start_subtest("bkup"))
--
2.40.1
^ permalink raw reply related [flat|nested] 13+ messages in thread* [PATCH mptcp-next 07/11] Squash to "selftests/bpf: Add bpf_first test"
2024-03-28 9:49 [PATCH mptcp-next 00/11] refactor mptcp bpf tests Geliang Tang
` (5 preceding siblings ...)
2024-03-28 9:50 ` [PATCH mptcp-next 06/11] Squash to "selftests/bpf: Add bpf scheduler test" Geliang Tang
@ 2024-03-28 9:50 ` Geliang Tang
2024-03-28 9:50 ` [PATCH mptcp-next 08/11] Squash to "selftests/bpf: Add bpf_bkup test" Geliang Tang
` (4 subsequent siblings)
11 siblings, 0 replies; 13+ messages in thread
From: Geliang Tang @ 2024-03-28 9:50 UTC (permalink / raw)
To: mptcp; +Cc: Geliang Tang
From: Geliang Tang <tanggeliang@kylinos.cn>
Add MPTCP_SCHED_TEST macro.
Signed-off-by: Geliang Tang <tanggeliang@kylinos.cn>
---
.../testing/selftests/bpf/prog_tests/mptcp.c | 66 +++++++++----------
1 file changed, 31 insertions(+), 35 deletions(-)
diff --git a/tools/testing/selftests/bpf/prog_tests/mptcp.c b/tools/testing/selftests/bpf/prog_tests/mptcp.c
index c400dbaccc10..8d67e1715485 100644
--- a/tools/testing/selftests/bpf/prog_tests/mptcp.c
+++ b/tools/testing/selftests/bpf/prog_tests/mptcp.c
@@ -471,41 +471,38 @@ static void test_default(void)
cleanup_netns(nstoken);
}
-static void test_first(void)
-{
- struct mptcp_bpf_first *first_skel;
- int server_fd, client_fd;
- struct nstoken *nstoken;
- struct bpf_link *link;
-
- first_skel = mptcp_bpf_first__open_and_load();
- if (!ASSERT_OK_PTR(first_skel, "bpf_first__open_and_load"))
- return;
-
- link = bpf_map__attach_struct_ops(first_skel->maps.first);
- if (!ASSERT_OK_PTR(link, "bpf_map__attach_struct_ops")) {
- mptcp_bpf_first__destroy(first_skel);
- return;
- }
-
- nstoken = sched_init("subflow", "bpf_first");
- if (!ASSERT_OK_PTR(nstoken, "sched_init:bpf_first"))
- goto fail;
- server_fd = start_mptcp_server(AF_INET, ADDR_1, PORT_1, 0);
- client_fd = connect_to_fd(server_fd, 0);
-
- send_data(server_fd, client_fd, "bpf_first");
- ASSERT_OK(has_bytes_sent(ADDR_1), "has_bytes_sent addr_1");
- ASSERT_GT(has_bytes_sent(ADDR_2), 0, "has_bytes_sent addr_2");
-
- close(client_fd);
- close(server_fd);
-fail:
- cleanup_netns(nstoken);
- bpf_link__destroy(link);
- mptcp_bpf_first__destroy(first_skel);
+#define MPTCP_SCHED_TEST(name, addr1, addr2) \
+static void test_##name(void) \
+{ \
+ struct mptcp_bpf_##name *skel; \
+ struct nstoken *nstoken; \
+ struct bpf_link *link; \
+ struct bpf_map *map; \
+ \
+ skel = mptcp_bpf_##name##__open_and_load(); \
+ if (!ASSERT_OK_PTR(skel, "open_and_load:" #name)) \
+ return; \
+ \
+ map = bpf_object__find_map_by_name(skel->obj, #name); \
+ link = bpf_map__attach_struct_ops(map); \
+ if (!ASSERT_OK_PTR(link, "attach_struct_ops:" #name)) \
+ goto fail; \
+ \
+ nstoken = sched_init("subflow", "bpf_" #name); \
+ if (!ASSERT_OK_PTR(nstoken, "sched_init:" #name)) \
+ goto out; \
+ \
+ send_data_and_verify(#name, atoi(#addr1), atoi(#addr2));\
+ \
+ cleanup_netns(nstoken); \
+out: \
+ bpf_link__destroy(link); \
+fail: \
+ mptcp_bpf_##name##__destroy(skel); \
}
+MPTCP_SCHED_TEST(first, 1, 0);
+
static void test_bkup(void)
{
struct mptcp_bpf_bkup *bkup_skel;
@@ -657,8 +654,7 @@ void test_mptcp(void)
RUN_MPTCP_TEST(mptcp_sock);
RUN_MPTCP_TEST(mptcpify);
RUN_MPTCP_TEST(default);
- if (test__start_subtest("first"))
- test_first();
+ RUN_MPTCP_TEST(first);
if (test__start_subtest("bkup"))
test_bkup();
if (test__start_subtest("rr"))
--
2.40.1
^ permalink raw reply related [flat|nested] 13+ messages in thread* [PATCH mptcp-next 08/11] Squash to "selftests/bpf: Add bpf_bkup test"
2024-03-28 9:49 [PATCH mptcp-next 00/11] refactor mptcp bpf tests Geliang Tang
` (6 preceding siblings ...)
2024-03-28 9:50 ` [PATCH mptcp-next 07/11] Squash to "selftests/bpf: Add bpf_first test" Geliang Tang
@ 2024-03-28 9:50 ` Geliang Tang
2024-03-28 9:50 ` [PATCH mptcp-next 09/11] Squash to "selftests/bpf: Add bpf_rr test" Geliang Tang
` (3 subsequent siblings)
11 siblings, 0 replies; 13+ messages in thread
From: Geliang Tang @ 2024-03-28 9:50 UTC (permalink / raw)
To: mptcp; +Cc: Geliang Tang
From: Geliang Tang <tanggeliang@kylinos.cn>
Use MPTCP_SCHED_TEST and RUN_MPTCP_TEST.
Signed-off-by: Geliang Tang <tanggeliang@kylinos.cn>
---
.../testing/selftests/bpf/prog_tests/mptcp.c | 39 +------------------
1 file changed, 2 insertions(+), 37 deletions(-)
diff --git a/tools/testing/selftests/bpf/prog_tests/mptcp.c b/tools/testing/selftests/bpf/prog_tests/mptcp.c
index 8d67e1715485..3c547f38badf 100644
--- a/tools/testing/selftests/bpf/prog_tests/mptcp.c
+++ b/tools/testing/selftests/bpf/prog_tests/mptcp.c
@@ -502,41 +502,7 @@ fail: \
}
MPTCP_SCHED_TEST(first, 1, 0);
-
-static void test_bkup(void)
-{
- struct mptcp_bpf_bkup *bkup_skel;
- int server_fd, client_fd;
- struct nstoken *nstoken;
- struct bpf_link *link;
-
- bkup_skel = mptcp_bpf_bkup__open_and_load();
- if (!ASSERT_OK_PTR(bkup_skel, "bpf_bkup__open_and_load"))
- return;
-
- link = bpf_map__attach_struct_ops(bkup_skel->maps.bkup);
- if (!ASSERT_OK_PTR(link, "bpf_map__attach_struct_ops")) {
- mptcp_bpf_bkup__destroy(bkup_skel);
- return;
- }
-
- nstoken = sched_init("subflow backup", "bpf_bkup");
- if (!ASSERT_OK_PTR(nstoken, "sched_init:bpf_bkup"))
- goto fail;
- server_fd = start_mptcp_server(AF_INET, ADDR_1, PORT_1, 0);
- client_fd = connect_to_fd(server_fd, 0);
-
- send_data(server_fd, client_fd, "bpf_bkup");
- ASSERT_OK(has_bytes_sent(ADDR_1), "has_bytes_sent addr_1");
- ASSERT_GT(has_bytes_sent(ADDR_2), 0, "has_bytes_sent addr_2");
-
- close(client_fd);
- close(server_fd);
-fail:
- cleanup_netns(nstoken);
- bpf_link__destroy(link);
- mptcp_bpf_bkup__destroy(bkup_skel);
-}
+MPTCP_SCHED_TEST(bkup, 1, 0);
static void test_rr(void)
{
@@ -655,8 +621,7 @@ void test_mptcp(void)
RUN_MPTCP_TEST(mptcpify);
RUN_MPTCP_TEST(default);
RUN_MPTCP_TEST(first);
- if (test__start_subtest("bkup"))
- test_bkup();
+ RUN_MPTCP_TEST(bkup);
if (test__start_subtest("rr"))
test_rr();
if (test__start_subtest("red"))
--
2.40.1
^ permalink raw reply related [flat|nested] 13+ messages in thread* [PATCH mptcp-next 09/11] Squash to "selftests/bpf: Add bpf_rr test"
2024-03-28 9:49 [PATCH mptcp-next 00/11] refactor mptcp bpf tests Geliang Tang
` (7 preceding siblings ...)
2024-03-28 9:50 ` [PATCH mptcp-next 08/11] Squash to "selftests/bpf: Add bpf_bkup test" Geliang Tang
@ 2024-03-28 9:50 ` Geliang Tang
2024-03-28 9:50 ` [PATCH mptcp-next 10/11] Squash to "selftests/bpf: Add bpf_red test" Geliang Tang
` (2 subsequent siblings)
11 siblings, 0 replies; 13+ messages in thread
From: Geliang Tang @ 2024-03-28 9:50 UTC (permalink / raw)
To: mptcp; +Cc: Geliang Tang
From: Geliang Tang <tanggeliang@kylinos.cn>
Use MPTCP_SCHED_TEST and RUN_MPTCP_TEST.
Signed-off-by: Geliang Tang <tanggeliang@kylinos.cn>
---
.../testing/selftests/bpf/prog_tests/mptcp.c | 39 +------------------
1 file changed, 2 insertions(+), 37 deletions(-)
diff --git a/tools/testing/selftests/bpf/prog_tests/mptcp.c b/tools/testing/selftests/bpf/prog_tests/mptcp.c
index 3c547f38badf..8f41007fc3b4 100644
--- a/tools/testing/selftests/bpf/prog_tests/mptcp.c
+++ b/tools/testing/selftests/bpf/prog_tests/mptcp.c
@@ -503,41 +503,7 @@ fail: \
MPTCP_SCHED_TEST(first, 1, 0);
MPTCP_SCHED_TEST(bkup, 1, 0);
-
-static void test_rr(void)
-{
- struct mptcp_bpf_rr *rr_skel;
- int server_fd, client_fd;
- struct nstoken *nstoken;
- struct bpf_link *link;
-
- rr_skel = mptcp_bpf_rr__open_and_load();
- if (!ASSERT_OK_PTR(rr_skel, "bpf_rr__open_and_load"))
- return;
-
- link = bpf_map__attach_struct_ops(rr_skel->maps.rr);
- if (!ASSERT_OK_PTR(link, "bpf_map__attach_struct_ops")) {
- mptcp_bpf_rr__destroy(rr_skel);
- return;
- }
-
- nstoken = sched_init("subflow", "bpf_rr");
- if (!ASSERT_OK_PTR(nstoken, "sched_init:bpf_rr"))
- goto fail;
- server_fd = start_mptcp_server(AF_INET, ADDR_1, PORT_1, 0);
- client_fd = connect_to_fd(server_fd, 0);
-
- send_data(server_fd, client_fd, "bpf_rr");
- ASSERT_OK(has_bytes_sent(ADDR_1), "has_bytes_sent addr 1");
- ASSERT_OK(has_bytes_sent(ADDR_2), "has_bytes_sent addr 2");
-
- close(client_fd);
- close(server_fd);
-fail:
- cleanup_netns(nstoken);
- bpf_link__destroy(link);
- mptcp_bpf_rr__destroy(rr_skel);
-}
+MPTCP_SCHED_TEST(rr, 1, 1);
static void test_red(void)
{
@@ -622,8 +588,7 @@ void test_mptcp(void)
RUN_MPTCP_TEST(default);
RUN_MPTCP_TEST(first);
RUN_MPTCP_TEST(bkup);
- if (test__start_subtest("rr"))
- test_rr();
+ RUN_MPTCP_TEST(rr);
if (test__start_subtest("red"))
test_red();
if (test__start_subtest("burst"))
--
2.40.1
^ permalink raw reply related [flat|nested] 13+ messages in thread* [PATCH mptcp-next 10/11] Squash to "selftests/bpf: Add bpf_red test"
2024-03-28 9:49 [PATCH mptcp-next 00/11] refactor mptcp bpf tests Geliang Tang
` (8 preceding siblings ...)
2024-03-28 9:50 ` [PATCH mptcp-next 09/11] Squash to "selftests/bpf: Add bpf_rr test" Geliang Tang
@ 2024-03-28 9:50 ` Geliang Tang
2024-03-28 9:50 ` [PATCH mptcp-next 11/11] Squash to "selftests/bpf: Add bpf_burst test" Geliang Tang
2024-03-28 10:40 ` [PATCH mptcp-next 00/11] refactor mptcp bpf tests MPTCP CI
11 siblings, 0 replies; 13+ messages in thread
From: Geliang Tang @ 2024-03-28 9:50 UTC (permalink / raw)
To: mptcp; +Cc: Geliang Tang
From: Geliang Tang <tanggeliang@kylinos.cn>
Use MPTCP_SCHED_TEST and RUN_MPTCP_TEST.
Signed-off-by: Geliang Tang <tanggeliang@kylinos.cn>
---
.../testing/selftests/bpf/prog_tests/mptcp.c | 39 +------------------
1 file changed, 2 insertions(+), 37 deletions(-)
diff --git a/tools/testing/selftests/bpf/prog_tests/mptcp.c b/tools/testing/selftests/bpf/prog_tests/mptcp.c
index 8f41007fc3b4..572b6e5caa32 100644
--- a/tools/testing/selftests/bpf/prog_tests/mptcp.c
+++ b/tools/testing/selftests/bpf/prog_tests/mptcp.c
@@ -504,41 +504,7 @@ fail: \
MPTCP_SCHED_TEST(first, 1, 0);
MPTCP_SCHED_TEST(bkup, 1, 0);
MPTCP_SCHED_TEST(rr, 1, 1);
-
-static void test_red(void)
-{
- struct mptcp_bpf_red *red_skel;
- int server_fd, client_fd;
- struct nstoken *nstoken;
- struct bpf_link *link;
-
- red_skel = mptcp_bpf_red__open_and_load();
- if (!ASSERT_OK_PTR(red_skel, "bpf_red__open_and_load"))
- return;
-
- link = bpf_map__attach_struct_ops(red_skel->maps.red);
- if (!ASSERT_OK_PTR(link, "bpf_map__attach_struct_ops")) {
- mptcp_bpf_red__destroy(red_skel);
- return;
- }
-
- nstoken = sched_init("subflow", "bpf_red");
- if (!ASSERT_OK_PTR(nstoken, "sched_init:bpf_red"))
- goto fail;
- server_fd = start_mptcp_server(AF_INET, ADDR_1, PORT_1, 0);
- client_fd = connect_to_fd(server_fd, 0);
-
- send_data(server_fd, client_fd, "bpf_red");
- ASSERT_OK(has_bytes_sent(ADDR_1), "has_bytes_sent addr 1");
- ASSERT_OK(has_bytes_sent(ADDR_2), "has_bytes_sent addr 2");
-
- close(client_fd);
- close(server_fd);
-fail:
- cleanup_netns(nstoken);
- bpf_link__destroy(link);
- mptcp_bpf_red__destroy(red_skel);
-}
+MPTCP_SCHED_TEST(red, 1, 1);
static void test_burst(void)
{
@@ -589,8 +555,7 @@ void test_mptcp(void)
RUN_MPTCP_TEST(first);
RUN_MPTCP_TEST(bkup);
RUN_MPTCP_TEST(rr);
- if (test__start_subtest("red"))
- test_red();
+ RUN_MPTCP_TEST(red);
if (test__start_subtest("burst"))
test_burst();
}
--
2.40.1
^ permalink raw reply related [flat|nested] 13+ messages in thread* [PATCH mptcp-next 11/11] Squash to "selftests/bpf: Add bpf_burst test"
2024-03-28 9:49 [PATCH mptcp-next 00/11] refactor mptcp bpf tests Geliang Tang
` (9 preceding siblings ...)
2024-03-28 9:50 ` [PATCH mptcp-next 10/11] Squash to "selftests/bpf: Add bpf_red test" Geliang Tang
@ 2024-03-28 9:50 ` Geliang Tang
2024-03-28 10:40 ` [PATCH mptcp-next 00/11] refactor mptcp bpf tests MPTCP CI
11 siblings, 0 replies; 13+ messages in thread
From: Geliang Tang @ 2024-03-28 9:50 UTC (permalink / raw)
To: mptcp; +Cc: Geliang Tang
From: Geliang Tang <tanggeliang@kylinos.cn>
Use MPTCP_SCHED_TEST and RUN_MPTCP_TEST.
Signed-off-by: Geliang Tang <tanggeliang@kylinos.cn>
---
.../testing/selftests/bpf/prog_tests/mptcp.c | 39 +------------------
1 file changed, 2 insertions(+), 37 deletions(-)
diff --git a/tools/testing/selftests/bpf/prog_tests/mptcp.c b/tools/testing/selftests/bpf/prog_tests/mptcp.c
index 572b6e5caa32..ffdcfd094350 100644
--- a/tools/testing/selftests/bpf/prog_tests/mptcp.c
+++ b/tools/testing/selftests/bpf/prog_tests/mptcp.c
@@ -505,41 +505,7 @@ MPTCP_SCHED_TEST(first, 1, 0);
MPTCP_SCHED_TEST(bkup, 1, 0);
MPTCP_SCHED_TEST(rr, 1, 1);
MPTCP_SCHED_TEST(red, 1, 1);
-
-static void test_burst(void)
-{
- struct mptcp_bpf_burst *burst_skel;
- int server_fd, client_fd;
- struct nstoken *nstoken;
- struct bpf_link *link;
-
- burst_skel = mptcp_bpf_burst__open_and_load();
- if (!ASSERT_OK_PTR(burst_skel, "bpf_burst__open_and_load"))
- return;
-
- link = bpf_map__attach_struct_ops(burst_skel->maps.burst);
- if (!ASSERT_OK_PTR(link, "bpf_map__attach_struct_ops")) {
- mptcp_bpf_burst__destroy(burst_skel);
- return;
- }
-
- nstoken = sched_init("subflow", "bpf_burst");
- if (!ASSERT_OK_PTR(nstoken, "sched_init:bpf_burst"))
- goto fail;
- server_fd = start_mptcp_server(AF_INET, ADDR_1, PORT_1, 0);
- client_fd = connect_to_fd(server_fd, 0);
-
- send_data(server_fd, client_fd, "bpf_burst");
- ASSERT_OK(has_bytes_sent(ADDR_1), "has_bytes_sent addr 1");
- ASSERT_OK(has_bytes_sent(ADDR_2), "has_bytes_sent addr 2");
-
- close(client_fd);
- close(server_fd);
-fail:
- cleanup_netns(nstoken);
- bpf_link__destroy(link);
- mptcp_bpf_burst__destroy(burst_skel);
-}
+MPTCP_SCHED_TEST(burst, 1, 1);
#define RUN_MPTCP_TEST(suffix) \
do { \
@@ -556,6 +522,5 @@ void test_mptcp(void)
RUN_MPTCP_TEST(bkup);
RUN_MPTCP_TEST(rr);
RUN_MPTCP_TEST(red);
- if (test__start_subtest("burst"))
- test_burst();
+ RUN_MPTCP_TEST(burst);
}
--
2.40.1
^ permalink raw reply related [flat|nested] 13+ messages in thread* Re: [PATCH mptcp-next 00/11] refactor mptcp bpf tests
2024-03-28 9:49 [PATCH mptcp-next 00/11] refactor mptcp bpf tests Geliang Tang
` (10 preceding siblings ...)
2024-03-28 9:50 ` [PATCH mptcp-next 11/11] Squash to "selftests/bpf: Add bpf_burst test" Geliang Tang
@ 2024-03-28 10:40 ` MPTCP CI
11 siblings, 0 replies; 13+ messages in thread
From: MPTCP CI @ 2024-03-28 10:40 UTC (permalink / raw)
To: Geliang Tang; +Cc: mptcp
Hi Geliang,
Thank you for your modifications, that's great!
Our CI did some validations and here is its report:
- KVM Validation: normal: Success! ✅
- KVM Validation: debug: Unstable: 1 failed test(s): selftest_mptcp_join 🔴
- KVM Validation: btf (only bpftest_all): Success! ✅
- Task: https://github.com/multipath-tcp/mptcp_net-next/actions/runs/8465556663
Initiator: Patchew Applier
Commits: https://github.com/multipath-tcp/mptcp_net-next/commits/a52e0605049e
Patchwork: https://patchwork.kernel.org/project/mptcp/list/?series=839268
If there are some issues, you can reproduce them using the same environment as
the one used by the CI thanks to a docker image, e.g.:
$ cd [kernel source code]
$ docker run -v "${PWD}:${PWD}:rw" -w "${PWD}" --privileged --rm -it \
--pull always mptcp/mptcp-upstream-virtme-docker:latest \
auto-normal
For more details:
https://github.com/multipath-tcp/mptcp-upstream-virtme-docker
Please note that despite all the efforts that have been already done to have a
stable tests suite when executed on a public CI like here, it is possible some
reported issues are not due to your modifications. Still, do not hesitate to
help us improve that ;-)
Cheers,
MPTCP GH Action bot
Bot operated by Matthieu Baerts (NGI0 Core)
^ permalink raw reply [flat|nested] 13+ messages in thread