diff options
Diffstat (limited to 'tools/testing/selftests/bpf/prog_tests/bpf_tcp_ca.c')
| -rw-r--r-- | tools/testing/selftests/bpf/prog_tests/bpf_tcp_ca.c | 44 | 
1 files changed, 44 insertions, 0 deletions
diff --git a/tools/testing/selftests/bpf/prog_tests/bpf_tcp_ca.c b/tools/testing/selftests/bpf/prog_tests/bpf_tcp_ca.c index 37c5494a0381..e25917f04602 100644 --- a/tools/testing/selftests/bpf/prog_tests/bpf_tcp_ca.c +++ b/tools/testing/selftests/bpf/prog_tests/bpf_tcp_ca.c @@ -6,6 +6,7 @@  #include <test_progs.h>  #include "bpf_dctcp.skel.h"  #include "bpf_cubic.skel.h" +#include "bpf_tcp_nogpl.skel.h"  #define min(a, b) ((a) < (b) ? (a) : (b)) @@ -227,10 +228,53 @@ static void test_dctcp(void)  	bpf_dctcp__destroy(dctcp_skel);  } +static char *err_str; +static bool found; + +static int libbpf_debug_print(enum libbpf_print_level level, +			      const char *format, va_list args) +{ +	char *log_buf; + +	if (level != LIBBPF_WARN || +	    strcmp(format, "libbpf: \n%s\n")) { +		vprintf(format, args); +		return 0; +	} + +	log_buf = va_arg(args, char *); +	if (!log_buf) +		goto out; +	if (err_str && strstr(log_buf, err_str) != NULL) +		found = true; +out: +	printf(format, log_buf); +	return 0; +} + +static void test_invalid_license(void) +{ +	libbpf_print_fn_t old_print_fn; +	struct bpf_tcp_nogpl *skel; + +	err_str = "struct ops programs must have a GPL compatible license"; +	found = false; +	old_print_fn = libbpf_set_print(libbpf_debug_print); + +	skel = bpf_tcp_nogpl__open_and_load(); +	ASSERT_NULL(skel, "bpf_tcp_nogpl"); +	ASSERT_EQ(found, true, "expected_err_msg"); + +	bpf_tcp_nogpl__destroy(skel); +	libbpf_set_print(old_print_fn); +} +  void test_bpf_tcp_ca(void)  {  	if (test__start_subtest("dctcp"))  		test_dctcp();  	if (test__start_subtest("cubic"))  		test_cubic(); +	if (test__start_subtest("invalid_license")) +		test_invalid_license();  }  | 
