Skip to content

Commit 1e4e033

Browse files
committed
btf_unit_test: Add test02_should_fail
Signed-off-by: Jesper Dangaard Brouer <[email protected]>
1 parent 7409814 commit 1e4e033

File tree

1 file changed

+60
-14
lines changed

1 file changed

+60
-14
lines changed

AF_XDP-interaction/btf_unit_test.c

Lines changed: 60 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -62,21 +62,30 @@ struct xdp_hints_mark {
6262
} xdp_hints_mark = { 0 };
6363

6464
struct xsk_btf_info *setup_btf_info(struct btf *btf,
65-
const char *struct_name)
65+
const char *struct_name,
66+
int *errval)
6667
{
6768
struct xsk_btf_info *xbi = NULL;
6869
int err;
6970

7071
err = xsk_btf__init_xdp_hint(btf, struct_name, &xbi);
7172
if (err) {
72-
fprintf(stderr, "WARN(%d): Cannot BTF locate valid struct:%s\n",
73-
err, struct_name);
73+
if (errval) {
74+
/* Expect caller to handle err detection */
75+
*errval = err;
76+
} else {
77+
fprintf(stderr,
78+
"WARN(%d): Cannot BTF locate valid struct:%s\n",
79+
err, struct_name);
80+
}
7481
return NULL;
7582
}
7683

77-
if (verbose)
78-
printf("Setup BTF based XDP hints for struct: %s\n",
79-
struct_name);
84+
if (verbose) {
85+
int btf_id = xsk_btf__btf_type_id(xbi);
86+
printf("Setup BTF based XDP hints for (btf_id:%d) struct: %s\n",
87+
btf_id, struct_name);
88+
}
8089

8190
return xbi;
8291
}
@@ -86,7 +95,7 @@ int init_btf_info_via_bpf_object(struct bpf_object *bpf_obj)
8695
struct btf *btf = bpf_object__btf(bpf_obj);
8796
struct xsk_btf_info *xbi;
8897

89-
xbi = setup_btf_info(btf, "xdp_hints_rx_time");
98+
xbi = setup_btf_info(btf, "xdp_hints_rx_time", NULL);
9099
if (xbi) {
91100
/* Lookup info on required member "rx_ktime" */
92101
if (!xsk_btf__field_member("rx_ktime", xbi,
@@ -100,7 +109,7 @@ int init_btf_info_via_bpf_object(struct bpf_object *bpf_obj)
100109
}
101110
/* Remember to cleanup later: xsk_btf__free_xdp_hint(xbi); */
102111

103-
xbi = setup_btf_info(btf, "xdp_hints_mark");
112+
xbi = setup_btf_info(btf, "xdp_hints_mark", NULL);
104113
if (xbi) {
105114
if (!xsk_btf__field_member("mark", xbi, &xdp_hints_mark.mark))
106115
return -EBADSLT;
@@ -135,20 +144,57 @@ int test01_normal()
135144
return EXIT_OK;
136145
}
137146

138-
int main(int argc, char **argv)
147+
int test02_should_fail()
139148
{
140149
struct bpf_object *bpf_obj;
141-
int err;
142-
143-
err = test01_normal();
144-
if (err != EXIT_OK)
145-
return err;
150+
struct xsk_btf_info *xbi;
151+
struct btf *btf;
152+
int errval = 0;
153+
int ret = EXIT_OK;
154+
const char *xdp_hint_name = "xdp_hints_fail001";
146155

147156
bpf_obj = load_bpf_object("btf_unit_test_bpf.o");
148157
if (!bpf_obj)
149158
return EXIT_FAIL_BPF;
159+
160+
btf = bpf_object__btf(bpf_obj);
161+
162+
xbi = setup_btf_info(btf, xdp_hint_name, &errval);
163+
if (xbi) {
164+
/* Unexpected success - as hints layout should be invalid */
165+
printf(" - Unexpected success in test that should fail\n");
166+
xsk_btf__free_xdp_hint(xbi);
167+
ret = EXIT_FAIL_BPF;
168+
goto out;
169+
}
170+
if (errval != -EOVERFLOW) {
171+
/* Expecting failure with EOVERFLOW as btf_id not last member */
172+
printf("Unexpect FAIL - with errno:%d\n", errval);
173+
ret = EXIT_FAIL_BTF;
174+
goto out;
175+
}
176+
if (verbose) {
177+
printf("SUCCESS - "
178+
"detect btf_id not last member in struct %s\n",
179+
xdp_hint_name);
180+
}
181+
182+
out:
150183
bpf_object__close(bpf_obj);
184+
return ret;
185+
}
151186

187+
int main(int argc, char **argv)
188+
{
189+
int err;
190+
191+
err = test01_normal();
192+
if (err)
193+
return err;
194+
195+
err = test02_should_fail();
196+
if (err)
197+
return err;
152198

153199
return EXIT_OK;
154200
}

0 commit comments

Comments
 (0)