Hello. It seems like before bpf_prog_test_run is called, you need to call bpf_prog_load. But in BPF CO-RE program, we already have <program>_bpf__open and <program>_bpf__load which basically does the same thing. My code look approximately like this: -----test1_load.c--------------- #include <cgreen/cgreen.h> Ensure(Load, load_test){ /* should I call bpf_prog_load here? */ bpf_prog_test_run(/* parameters */); /* what about bpf_object__close? */ } TestSuite *load_tests() { TestSuite *suite = create_test_suite(); return suite; } -----bpf_firewall.bpf.c--------- #include "vmlinux.h" #include <bpf/bpf_helpers.h> SEC("xdp_prog") int xdp_prog_main(struct xdp_md *ctx){ /* main program */ } char LICENSE[] SEC("license") = "GPL"; ------bpf_firewall.c--------------- #include <cgreen/cgreen.h> #include <bpf/libbpf.h> #include <bpf/bpf.h> #include "bpf_firewall.skel.h" TestSuite *load_tests(); int main(int argc, char **argv) { struct bpf_firewall_bpf *obj; int err = 0; obj = bpf_firewall_bpf__open(); err = bpf_firewall_bpf__load(obj); err = bpf_firewall_bpf__attach(obj); TestSuite *suite = create_test_suite(); add_suite(suite, load_tests()); run_test_suite(suite, create_text_reporter()); bpf_firewall_bpf__destroy(obj); return 0; } How do I implement bpf_prog_test_run with BPF CO-RE? Best regards, Poony.