Skip to content

Commit

Permalink
selftests/bpf: test_progs: remove global fail/success counts
Browse files Browse the repository at this point in the history
Now that we have a global per-test/per-environment state, there
is no longer need to have global fail/success counters (and there
is no need to save/get the diff before/after the test).

Introduce CHECK_FAIL macro (suggested by Andrii) and covert existing tests
to it. CHECK_FAIL uses new test__fail() to record the failure.

Cc: Andrii Nakryiko <andriin@fb.com>
Signed-off-by: Stanislav Fomichev <sdf@google.com>
Signed-off-by: Daniel Borkmann <daniel@iogearbox.net>
  • Loading branch information
fomichev authored and borkmann committed Aug 27, 2019
1 parent cd9c21d commit d38835b
Show file tree
Hide file tree
Showing 22 changed files with 60 additions and 123 deletions.
3 changes: 1 addition & 2 deletions tools/testing/selftests/bpf/prog_tests/bpf_obj_id.c
Expand Up @@ -48,8 +48,7 @@ void test_bpf_obj_id(void)
/* test_obj_id.o is a dumb prog. It should never fail
* to load.
*/
if (err)
error_cnt++;
CHECK_FAIL(err);
assert(!err);

/* Insert a magic value to the map */
Expand Down
9 changes: 1 addition & 8 deletions tools/testing/selftests/bpf/prog_tests/bpf_verif_scale.c
Expand Up @@ -28,8 +28,6 @@ static int check_load(const char *file, enum bpf_prog_type type)
attr.prog_flags = BPF_F_TEST_RND_HI32;
err = bpf_prog_load_xattr(&attr, &obj, &prog_fd);
bpf_object__close(obj);
if (err)
error_cnt++;
return err;
}

Expand Down Expand Up @@ -105,12 +103,7 @@ void test_bpf_verif_scale(void)
continue;

err = check_load(test->file, test->attach_type);
if (test->fails) { /* expected to fail */
if (err)
error_cnt--;
else
error_cnt++;
}
CHECK_FAIL(err && !test->fails);
}

if (env.verifier_stats)
Expand Down
4 changes: 1 addition & 3 deletions tools/testing/selftests/bpf/prog_tests/flow_dissector.c
Expand Up @@ -452,10 +452,8 @@ void test_flow_dissector(void)

err = bpf_flow_load(&obj, "./bpf_flow.o", "flow_dissector",
"jmp_table", "last_dissection", &prog_fd, &keys_fd);
if (err) {
error_cnt++;
if (CHECK_FAIL(err))
return;
}

for (i = 0; i < ARRAY_SIZE(tests); i++) {
struct bpf_flow_keys flow_keys;
Expand Down
3 changes: 0 additions & 3 deletions tools/testing/selftests/bpf/prog_tests/get_stack_raw_tp.c
Expand Up @@ -135,10 +135,7 @@ void test_get_stack_raw_tp(void)
exp_cnt -= err;
}

goto close_prog_noerr;
close_prog:
error_cnt++;
close_prog_noerr:
if (!IS_ERR_OR_NULL(link))
bpf_link__destroy(link);
if (!IS_ERR_OR_NULL(pb))
Expand Down
20 changes: 5 additions & 15 deletions tools/testing/selftests/bpf/prog_tests/global_data.c
Expand Up @@ -7,10 +7,8 @@ static void test_global_data_number(struct bpf_object *obj, __u32 duration)
uint64_t num;

map_fd = bpf_find_map(__func__, obj, "result_number");
if (map_fd < 0) {
error_cnt++;
if (CHECK_FAIL(map_fd < 0))
return;
}

struct {
char *name;
Expand Down Expand Up @@ -44,10 +42,8 @@ static void test_global_data_string(struct bpf_object *obj, __u32 duration)
char str[32];

map_fd = bpf_find_map(__func__, obj, "result_string");
if (map_fd < 0) {
error_cnt++;
if (CHECK_FAIL(map_fd < 0))
return;
}

struct {
char *name;
Expand Down Expand Up @@ -81,10 +77,8 @@ static void test_global_data_struct(struct bpf_object *obj, __u32 duration)
struct foo val;

map_fd = bpf_find_map(__func__, obj, "result_struct");
if (map_fd < 0) {
error_cnt++;
if (CHECK_FAIL(map_fd < 0))
return;
}

struct {
char *name;
Expand Down Expand Up @@ -112,16 +106,12 @@ static void test_global_data_rdonly(struct bpf_object *obj, __u32 duration)
__u8 *buff;

map = bpf_object__find_map_by_name(obj, "test_glo.rodata");
if (!map || !bpf_map__is_internal(map)) {
error_cnt++;
if (CHECK_FAIL(!map || !bpf_map__is_internal(map)))
return;
}

map_fd = bpf_map__fd(map);
if (map_fd < 0) {
error_cnt++;
if (CHECK_FAIL(map_fd < 0))
return;
}

buff = malloc(bpf_map__def(map)->value_size);
if (buff)
Expand Down
9 changes: 3 additions & 6 deletions tools/testing/selftests/bpf/prog_tests/l4lb_all.c
Expand Up @@ -30,10 +30,8 @@ static void test_l4lb(const char *file)
u32 *magic = (u32 *)buf;

err = bpf_prog_load(file, BPF_PROG_TYPE_SCHED_CLS, &obj, &prog_fd);
if (err) {
error_cnt++;
if (CHECK_FAIL(err))
return;
}

map_fd = bpf_find_map(__func__, obj, "vip_map");
if (map_fd < 0)
Expand Down Expand Up @@ -72,10 +70,9 @@ static void test_l4lb(const char *file)
bytes += stats[i].bytes;
pkts += stats[i].pkts;
}
if (bytes != MAGIC_BYTES * NUM_ITER * 2 || pkts != NUM_ITER * 2) {
error_cnt++;
if (CHECK_FAIL(bytes != MAGIC_BYTES * NUM_ITER * 2 ||
pkts != NUM_ITER * 2))
printf("test_l4lb:FAIL:stats %lld %lld\n", bytes, pkts);
}
out:
bpf_object__close(obj);
}
Expand Down
17 changes: 6 additions & 11 deletions tools/testing/selftests/bpf/prog_tests/map_lock.c
Expand Up @@ -8,14 +8,12 @@ static void *parallel_map_access(void *arg)

for (i = 0; i < 10000; i++) {
err = bpf_map_lookup_elem_flags(map_fd, &key, vars, BPF_F_LOCK);
if (err) {
if (CHECK_FAIL(err)) {
printf("lookup failed\n");
error_cnt++;
goto out;
}
if (vars[0] != 0) {
if (CHECK_FAIL(vars[0] != 0)) {
printf("lookup #%d var[0]=%d\n", i, vars[0]);
error_cnt++;
goto out;
}
rnd = vars[1];
Expand All @@ -24,7 +22,7 @@ static void *parallel_map_access(void *arg)
continue;
printf("lookup #%d var[1]=%d var[%d]=%d\n",
i, rnd, j, vars[j]);
error_cnt++;
CHECK_FAIL(vars[j] != rnd);
goto out;
}
}
Expand All @@ -42,15 +40,15 @@ void test_map_lock(void)
void *ret;

err = bpf_prog_load(file, BPF_PROG_TYPE_CGROUP_SKB, &obj, &prog_fd);
if (err) {
if (CHECK_FAIL(err)) {
printf("test_map_lock:bpf_prog_load errno %d\n", errno);
goto close_prog;
}
map_fd[0] = bpf_find_map(__func__, obj, "hash_map");
if (map_fd[0] < 0)
if (CHECK_FAIL(map_fd[0] < 0))
goto close_prog;
map_fd[1] = bpf_find_map(__func__, obj, "array_map");
if (map_fd[1] < 0)
if (CHECK_FAIL(map_fd[1] < 0))
goto close_prog;

bpf_map_update_elem(map_fd[0], &key, vars, BPF_F_LOCK);
Expand All @@ -67,9 +65,6 @@ void test_map_lock(void)
for (i = 4; i < 6; i++)
assert(pthread_join(thread_id[i], &ret) == 0 &&
ret == (void *)&map_fd[i - 4]);
goto close_prog_noerr;
close_prog:
error_cnt++;
close_prog_noerr:
bpf_object__close(obj);
}
4 changes: 1 addition & 3 deletions tools/testing/selftests/bpf/prog_tests/pkt_access.c
Expand Up @@ -9,10 +9,8 @@ void test_pkt_access(void)
int err, prog_fd;

err = bpf_prog_load(file, BPF_PROG_TYPE_SCHED_CLS, &obj, &prog_fd);
if (err) {
error_cnt++;
if (CHECK_FAIL(err))
return;
}

err = bpf_prog_test_run(prog_fd, 100000, &pkt_v4, sizeof(pkt_v4),
NULL, NULL, &retval, &duration);
Expand Down
4 changes: 1 addition & 3 deletions tools/testing/selftests/bpf/prog_tests/pkt_md_access.c
Expand Up @@ -9,10 +9,8 @@ void test_pkt_md_access(void)
int err, prog_fd;

err = bpf_prog_load(file, BPF_PROG_TYPE_SCHED_CLS, &obj, &prog_fd);
if (err) {
error_cnt++;
if (CHECK_FAIL(err))
return;
}

err = bpf_prog_test_run(prog_fd, 10, &pkt_v4, sizeof(pkt_v4),
NULL, NULL, &retval, &duration);
Expand Down
8 changes: 2 additions & 6 deletions tools/testing/selftests/bpf/prog_tests/queue_stack_map.c
Expand Up @@ -27,10 +27,8 @@ static void test_queue_stack_map_by_type(int type)
return;

err = bpf_prog_load(file, BPF_PROG_TYPE_SCHED_CLS, &obj, &prog_fd);
if (err) {
error_cnt++;
if (CHECK_FAIL(err))
return;
}

map_in_fd = bpf_find_map(__func__, obj, "map_in");
if (map_in_fd < 0)
Expand All @@ -43,10 +41,8 @@ static void test_queue_stack_map_by_type(int type)
/* Push 32 elements to the input map */
for (i = 0; i < MAP_SIZE; i++) {
err = bpf_map_update_elem(map_in_fd, NULL, &vals[i], 0);
if (err) {
error_cnt++;
if (CHECK_FAIL(err))
goto out;
}
}

/* The eBPF program pushes iph.saddr in the output map,
Expand Down
4 changes: 1 addition & 3 deletions tools/testing/selftests/bpf/prog_tests/reference_tracking.c
Expand Up @@ -10,10 +10,8 @@ void test_reference_tracking(void)
int err = 0;

obj = bpf_object__open(file);
if (IS_ERR(obj)) {
error_cnt++;
if (CHECK_FAIL(IS_ERR(obj)))
return;
}

bpf_object__for_each_program(prog, obj) {
const char *title;
Expand Down
6 changes: 2 additions & 4 deletions tools/testing/selftests/bpf/prog_tests/spinlock.c
Expand Up @@ -11,7 +11,7 @@ void test_spinlock(void)
void *ret;

err = bpf_prog_load(file, BPF_PROG_TYPE_CGROUP_SKB, &obj, &prog_fd);
if (err) {
if (CHECK_FAIL(err)) {
printf("test_spin_lock:bpf_prog_load errno %d\n", errno);
goto close_prog;
}
Expand All @@ -21,9 +21,7 @@ void test_spinlock(void)
for (i = 0; i < 4; i++)
assert(pthread_join(thread_id[i], &ret) == 0 &&
ret == (void *)&prog_fd);
goto close_prog_noerr;

close_prog:
error_cnt++;
close_prog_noerr:
bpf_object__close(obj);
}
17 changes: 7 additions & 10 deletions tools/testing/selftests/bpf/prog_tests/stacktrace_map.c
Expand Up @@ -26,19 +26,19 @@ void test_stacktrace_map(void)

/* find map fds */
control_map_fd = bpf_find_map(__func__, obj, "control_map");
if (control_map_fd < 0)
if (CHECK_FAIL(control_map_fd < 0))
goto disable_pmu;

stackid_hmap_fd = bpf_find_map(__func__, obj, "stackid_hmap");
if (stackid_hmap_fd < 0)
if (CHECK_FAIL(stackid_hmap_fd < 0))
goto disable_pmu;

stackmap_fd = bpf_find_map(__func__, obj, "stackmap");
if (stackmap_fd < 0)
if (CHECK_FAIL(stackmap_fd < 0))
goto disable_pmu;

stack_amap_fd = bpf_find_map(__func__, obj, "stack_amap");
if (stack_amap_fd < 0)
if (CHECK_FAIL(stack_amap_fd < 0))
goto disable_pmu;

/* give some time for bpf program run */
Expand All @@ -55,23 +55,20 @@ void test_stacktrace_map(void)
err = compare_map_keys(stackid_hmap_fd, stackmap_fd);
if (CHECK(err, "compare_map_keys stackid_hmap vs. stackmap",
"err %d errno %d\n", err, errno))
goto disable_pmu_noerr;
goto disable_pmu;

err = compare_map_keys(stackmap_fd, stackid_hmap_fd);
if (CHECK(err, "compare_map_keys stackmap vs. stackid_hmap",
"err %d errno %d\n", err, errno))
goto disable_pmu_noerr;
goto disable_pmu;

stack_trace_len = PERF_MAX_STACK_DEPTH * sizeof(__u64);
err = compare_stack_ips(stackmap_fd, stack_amap_fd, stack_trace_len);
if (CHECK(err, "compare_stack_ips stackmap vs. stack_amap",
"err %d errno %d\n", err, errno))
goto disable_pmu_noerr;
goto disable_pmu;

goto disable_pmu_noerr;
disable_pmu:
error_cnt++;
disable_pmu_noerr:
bpf_link__destroy(link);
close_prog:
bpf_object__close(obj);
Expand Down
Expand Up @@ -26,15 +26,15 @@ void test_stacktrace_map_raw_tp(void)

/* find map fds */
control_map_fd = bpf_find_map(__func__, obj, "control_map");
if (control_map_fd < 0)
if (CHECK_FAIL(control_map_fd < 0))
goto close_prog;

stackid_hmap_fd = bpf_find_map(__func__, obj, "stackid_hmap");
if (stackid_hmap_fd < 0)
if (CHECK_FAIL(stackid_hmap_fd < 0))
goto close_prog;

stackmap_fd = bpf_find_map(__func__, obj, "stackmap");
if (stackmap_fd < 0)
if (CHECK_FAIL(stackmap_fd < 0))
goto close_prog;

/* give some time for bpf program run */
Expand All @@ -58,10 +58,7 @@ void test_stacktrace_map_raw_tp(void)
"err %d errno %d\n", err, errno))
goto close_prog;

goto close_prog_noerr;
close_prog:
error_cnt++;
close_prog_noerr:
if (!IS_ERR_OR_NULL(link))
bpf_link__destroy(link);
bpf_object__close(obj);
Expand Down
3 changes: 0 additions & 3 deletions tools/testing/selftests/bpf/prog_tests/task_fd_query_rawtp.c
Expand Up @@ -70,9 +70,6 @@ void test_task_fd_query_rawtp(void)
if (CHECK(!err, "check_results", "fd_type %d len %u\n", fd_type, len))
goto close_prog;

goto close_prog_noerr;
close_prog:
error_cnt++;
close_prog_noerr:
bpf_object__close(obj);
}
5 changes: 0 additions & 5 deletions tools/testing/selftests/bpf/prog_tests/task_fd_query_tp.c
Expand Up @@ -62,14 +62,9 @@ static void test_task_fd_query_tp_core(const char *probe_name,
fd_type, buf))
goto close_pmu;

close(pmu_fd);
goto close_prog_noerr;

close_pmu:
close(pmu_fd);
close_prog:
error_cnt++;
close_prog_noerr:
bpf_object__close(obj);
}

Expand Down
4 changes: 1 addition & 3 deletions tools/testing/selftests/bpf/prog_tests/tcp_estats.c
Expand Up @@ -10,10 +10,8 @@ void test_tcp_estats(void)

err = bpf_prog_load(file, BPF_PROG_TYPE_TRACEPOINT, &obj, &prog_fd);
CHECK(err, "", "err %d errno %d\n", err, errno);
if (err) {
error_cnt++;
if (err)
return;
}

bpf_object__close(obj);
}

0 comments on commit d38835b

Please sign in to comment.