forked from Minki/linux
selftests/bpf: Add remaining ASSERT_xxx() variants
Add ASSERT_TRUE/ASSERT_FALSE for conditions calculated with custom logic to true/false. Also add remaining arithmetical assertions: - ASSERT_LE -- less than or equal; - ASSERT_GT -- greater than; - ASSERT_GE -- greater than or equal. This should cover most scenarios where people fall back to error-prone CHECK()s. Also extend ASSERT_ERR() to print out errno, in addition to direct error. Also convert few CHECK() instances to ensure new ASSERT_xxx() variants work as expected. Subsequent patch will also use ASSERT_TRUE/ASSERT_FALSE more extensively. Signed-off-by: Andrii Nakryiko <andrii@kernel.org> Signed-off-by: Alexei Starovoitov <ast@kernel.org> Acked-by: Lorenz Bauer <lmb@cloudflare.com> Link: https://lore.kernel.org/bpf/20210426192949.416837-2-andrii@kernel.org
This commit is contained in:
parent
87bd9e602e
commit
7a2fa70aaf
@ -77,7 +77,7 @@ static int test_btf_dump_case(int n, struct btf_dump_test_case *t)
|
||||
|
||||
snprintf(out_file, sizeof(out_file), "/tmp/%s.output.XXXXXX", t->file);
|
||||
fd = mkstemp(out_file);
|
||||
if (CHECK(fd < 0, "create_tmp", "failed to create file: %d\n", fd)) {
|
||||
if (!ASSERT_GE(fd, 0, "create_tmp")) {
|
||||
err = fd;
|
||||
goto done;
|
||||
}
|
||||
|
@ -6,8 +6,6 @@
|
||||
#include <test_progs.h>
|
||||
#include <bpf/btf.h>
|
||||
|
||||
static int duration = 0;
|
||||
|
||||
void test_btf_endian() {
|
||||
#if __BYTE_ORDER == __LITTLE_ENDIAN
|
||||
enum btf_endianness endian = BTF_LITTLE_ENDIAN;
|
||||
@ -71,7 +69,7 @@ void test_btf_endian() {
|
||||
|
||||
/* now modify original BTF */
|
||||
var_id = btf__add_var(btf, "some_var", BTF_VAR_GLOBAL_ALLOCATED, 1);
|
||||
CHECK(var_id <= 0, "var_id", "failed %d\n", var_id);
|
||||
ASSERT_GT(var_id, 0, "var_id");
|
||||
|
||||
btf__free(swap_btf);
|
||||
swap_btf = NULL;
|
||||
|
@ -54,7 +54,7 @@ void test_cgroup_link(void)
|
||||
|
||||
for (i = 0; i < cg_nr; i++) {
|
||||
cgs[i].fd = create_and_get_cgroup(cgs[i].path);
|
||||
if (CHECK(cgs[i].fd < 0, "cg_create", "fail: %d\n", cgs[i].fd))
|
||||
if (!ASSERT_GE(cgs[i].fd, 0, "cg_create"))
|
||||
goto cleanup;
|
||||
}
|
||||
|
||||
|
@ -134,7 +134,7 @@ void test_kfree_skb(void)
|
||||
/* make sure kfree_skb program was triggered
|
||||
* and it sent expected skb into ring buffer
|
||||
*/
|
||||
CHECK_FAIL(!passed);
|
||||
ASSERT_TRUE(passed, "passed");
|
||||
|
||||
err = bpf_map_lookup_elem(bpf_map__fd(global_data), &zero, test_ok);
|
||||
if (CHECK(err, "get_result",
|
||||
|
@ -160,11 +160,8 @@ int test_resolve_btfids(void)
|
||||
break;
|
||||
|
||||
if (i > 0) {
|
||||
ret = CHECK(test_set.ids[i - 1] > test_set.ids[i],
|
||||
"sort_check",
|
||||
"test_set is not sorted\n");
|
||||
if (ret)
|
||||
break;
|
||||
if (!ASSERT_LE(test_set.ids[i - 1], test_set.ids[i], "sort_check"))
|
||||
return -1;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -42,9 +42,7 @@ void test_snprintf_btf(void)
|
||||
* and it set expected return values from bpf_trace_printk()s
|
||||
* and all tests ran.
|
||||
*/
|
||||
if (CHECK(bss->ret <= 0,
|
||||
"bpf_snprintf_btf: got return value",
|
||||
"ret <= 0 %ld test %d\n", bss->ret, bss->ran_subtests))
|
||||
if (!ASSERT_GT(bss->ret, 0, "bpf_snprintf_ret"))
|
||||
goto cleanup;
|
||||
|
||||
if (CHECK(bss->ran_subtests == 0, "check if subtests ran",
|
||||
|
@ -130,6 +130,20 @@ extern int test__join_cgroup(const char *path);
|
||||
#define CHECK_ATTR(condition, tag, format...) \
|
||||
_CHECK(condition, tag, tattr.duration, format)
|
||||
|
||||
#define ASSERT_TRUE(actual, name) ({ \
|
||||
static int duration = 0; \
|
||||
bool ___ok = (actual); \
|
||||
CHECK(!___ok, (name), "unexpected %s: got FALSE\n", (name)); \
|
||||
___ok; \
|
||||
})
|
||||
|
||||
#define ASSERT_FALSE(actual, name) ({ \
|
||||
static int duration = 0; \
|
||||
bool ___ok = !(actual); \
|
||||
CHECK(!___ok, (name), "unexpected %s: got TRUE\n", (name)); \
|
||||
___ok; \
|
||||
})
|
||||
|
||||
#define ASSERT_EQ(actual, expected, name) ({ \
|
||||
static int duration = 0; \
|
||||
typeof(actual) ___act = (actual); \
|
||||
@ -163,6 +177,39 @@ extern int test__join_cgroup(const char *path);
|
||||
___ok; \
|
||||
})
|
||||
|
||||
#define ASSERT_LE(actual, expected, name) ({ \
|
||||
static int duration = 0; \
|
||||
typeof(actual) ___act = (actual); \
|
||||
typeof(expected) ___exp = (expected); \
|
||||
bool ___ok = ___act <= ___exp; \
|
||||
CHECK(!___ok, (name), \
|
||||
"unexpected %s: actual %lld > expected %lld\n", \
|
||||
(name), (long long)(___act), (long long)(___exp)); \
|
||||
___ok; \
|
||||
})
|
||||
|
||||
#define ASSERT_GT(actual, expected, name) ({ \
|
||||
static int duration = 0; \
|
||||
typeof(actual) ___act = (actual); \
|
||||
typeof(expected) ___exp = (expected); \
|
||||
bool ___ok = ___act > ___exp; \
|
||||
CHECK(!___ok, (name), \
|
||||
"unexpected %s: actual %lld <= expected %lld\n", \
|
||||
(name), (long long)(___act), (long long)(___exp)); \
|
||||
___ok; \
|
||||
})
|
||||
|
||||
#define ASSERT_GE(actual, expected, name) ({ \
|
||||
static int duration = 0; \
|
||||
typeof(actual) ___act = (actual); \
|
||||
typeof(expected) ___exp = (expected); \
|
||||
bool ___ok = ___act >= ___exp; \
|
||||
CHECK(!___ok, (name), \
|
||||
"unexpected %s: actual %lld < expected %lld\n", \
|
||||
(name), (long long)(___act), (long long)(___exp)); \
|
||||
___ok; \
|
||||
})
|
||||
|
||||
#define ASSERT_STREQ(actual, expected, name) ({ \
|
||||
static int duration = 0; \
|
||||
const char *___act = actual; \
|
||||
@ -178,7 +225,8 @@ extern int test__join_cgroup(const char *path);
|
||||
static int duration = 0; \
|
||||
long long ___res = (res); \
|
||||
bool ___ok = ___res == 0; \
|
||||
CHECK(!___ok, (name), "unexpected error: %lld\n", ___res); \
|
||||
CHECK(!___ok, (name), "unexpected error: %lld (errno %d)\n", \
|
||||
___res, errno); \
|
||||
___ok; \
|
||||
})
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user