• Eduard Zingerman's avatar
    selftests/bpf: Utility functions to capture libbpf log in test_progs · c8617e8b
    Eduard Zingerman authored
    Several test_progs tests already capture libbpf log in order to check
    for some expected output, e.g bpf_tcp_ca.c, kfunc_dynptr_param.c,
    log_buf.c and a few others.
    
    This commit provides a, hopefully, simple API to capture libbpf log
    w/o necessity to define new print callback in each test:
    
        /* Creates a global memstream capturing INFO and WARN level output
         * passed to libbpf_print_fn.
         * Returns 0 on success, negative value on failure.
         * On failure the description is printed using PRINT_FAIL and
         * current test case is marked as fail.
         */
        int start_libbpf_log_capture(void)
    
        /* Destroys global memstream created by start_libbpf_log_capture().
         * Returns a pointer to captured data which has to be freed.
         * Returned buffer is null terminated.
         */
        char *stop_libbpf_log_capture(void)
    
    The intended usage is as follows:
    
        if (start_libbpf_log_capture())
                return;
        use_libbpf();
        char *log = stop_libbpf_log_capture();
        ASSERT_HAS_SUBSTR(log, "... expected ...", "expected some message");
        free(log);
    
    As a safety measure, free(start_libbpf_log_capture()) is invoked in the
    epilogue of the test_progs.c:run_one_test().
    Signed-off-by: default avatarEduard Zingerman <eddyz87@gmail.com>
    Signed-off-by: default avatarAndrii Nakryiko <andrii@kernel.org>
    Link: https://lore.kernel.org/bpf/20240306104529.6453-6-eddyz87@gmail.com
    c8617e8b
test_progs.h 12 KB