[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <158939734350.15176.6643981099665208826.stgit@john-Precision-5820-Tower>
Date: Wed, 13 May 2020 12:15:43 -0700
From: John Fastabend <john.fastabend@...il.com>
To: lmb@...udflare.com, jakub@...udflare.com, daniel@...earbox.net
Cc: netdev@...r.kernel.org, bpf@...r.kernel.org,
john.fastabend@...il.com, ast@...nel.org
Subject: [bpf-next PATCH v2 11/12] bpf: selftests,
add blacklist to test_sockmap
This adds a blacklist to test_sockmap. For example, now we can run
all apply and cork tests except those with timeouts by doing,
$ ./test_sockmap --whitelist "apply,cork" --blacklist "hang"
Reviewed-by: Jakub Sitnicki <jakub@...udflare.com>
Signed-off-by: John Fastabend <john.fastabend@...il.com>
---
tools/testing/selftests/bpf/test_sockmap.c | 33 ++++++++++++++++++++++++++--
1 file changed, 31 insertions(+), 2 deletions(-)
diff --git a/tools/testing/selftests/bpf/test_sockmap.c b/tools/testing/selftests/bpf/test_sockmap.c
index 1b98e92..2ed2db6 100644
--- a/tools/testing/selftests/bpf/test_sockmap.c
+++ b/tools/testing/selftests/bpf/test_sockmap.c
@@ -108,6 +108,7 @@ static const struct option long_options[] = {
{"ktls", no_argument, &ktls, 1 },
{"peek", no_argument, &peek_flag, 1 },
{"whitelist", required_argument, NULL, 'n' },
+ {"blacklist", required_argument, NULL, 'b' },
{0, 0, NULL, 0 }
};
@@ -389,6 +390,7 @@ struct sockmap_options {
int rate;
char *map;
char *whitelist;
+ char *blacklist;
};
static int msg_loop_sendpage(int fd, int iov_length, int cnt,
@@ -1641,6 +1643,24 @@ static int check_whitelist(struct _test *t, struct sockmap_options *opt)
return -EINVAL;
}
+static int check_blacklist(struct _test *t, struct sockmap_options *opt)
+{
+ char *entry, *ptr;
+
+ if (!opt->blacklist)
+ return -EINVAL;
+ ptr = strdup(opt->blacklist);
+ if (!ptr)
+ return -ENOMEM;
+ entry = strtok(ptr, ",");
+ while (entry) {
+ if (strstr(opt->map, entry) != 0 || strstr(t->title, entry) != 0)
+ return 0;
+ entry = strtok(NULL, ",");
+ }
+ return -EINVAL;
+}
+
static int __test_selftests(int cg_fd, struct sockmap_options *opt)
{
int i, err;
@@ -1655,7 +1675,9 @@ static int __test_selftests(int cg_fd, struct sockmap_options *opt)
for (i = 0; i < sizeof(test)/sizeof(struct _test); i++) {
struct _test t = test[i];
- if (check_whitelist(&t, opt) < 0)
+ if (check_whitelist(&t, opt) != 0)
+ continue;
+ if (check_blacklist(&t, opt) == 0)
continue;
test_start_subtest(t.title, opt->map);
@@ -1696,7 +1718,7 @@ int main(int argc, char **argv)
int test = SELFTESTS;
bool cg_created = 0;
- while ((opt = getopt_long(argc, argv, ":dhv:c:r:i:l:t:p:q:n:",
+ while ((opt = getopt_long(argc, argv, ":dhv:c:r:i:l:t:p:q:n:b:",
long_options, &longindex)) != -1) {
switch (opt) {
case 's':
@@ -1769,6 +1791,11 @@ int main(int argc, char **argv)
options.whitelist = strdup(optarg);
if (!options.whitelist)
return -ENOMEM;
+ break;
+ case 'b':
+ options.blacklist = strdup(optarg);
+ if (!options.blacklist)
+ return -ENOMEM;
case 0:
break;
case 'h':
@@ -1823,6 +1850,8 @@ int main(int argc, char **argv)
out:
if (options.whitelist)
free(options.whitelist);
+ if (options.blacklist)
+ free(options.blacklist);
if (cg_created)
cleanup_cgroup_environment();
close(cg_fd);
Powered by blists - more mailing lists