On 12/16/21 2:04 AM, Andrii Nakryiko wrote: > Add selftests for prog/map/prog+helper feature probing APIs. Prog and > map selftests are designed in such a way that they will always test all > the possible prog/map types, based on running kernel's vmlinux BTF enum > definition. This way we'll always be sure that when adding new BPF > program types or map types, libbpf will be always updated accordingly to > be able to feature-detect them. > > BPF prog_helper selftest will have to be manually extended with > interesting and important prog+helper combinations, it's easy, but can't > be completely automated. > > Signed-off-by: Andrii Nakryiko <andrii@xxxxxxxxxx> > --- [...] > + for (e = btf_enum(t), i = 0, n = btf_vlen(t); i < n; e++, i++) { > + const char *prog_type_name = btf__str_by_offset(btf, e->name_off); > + enum bpf_prog_type prog_type = (enum bpf_prog_type)e->val; > + int res; > + > + if (prog_type == BPF_PROG_TYPE_UNSPEC) > + continue; > + > + if (!test__start_subtest(prog_type_name)) > + continue; > + > + res = libbpf_probe_bpf_prog_type(prog_type, NULL); > + ASSERT_EQ(res, 1, prog_type_name); > + } I like how easy BTF makes this. Maybe worth trying to probe one-past-the-end of enum to confirm it fails as expected? Regardless, Acked-by: Dave Marchevsky <davemarchevsky@xxxxxx> > +cleanup: > + btf__free(btf); > +} [...]