Linux Audio

Check our new training course

Loading...
Note: File does not exist in v5.4.
  1// SPDX-License-Identifier: GPL-2.0
  2/* Copyright (c) 2022 Meta Platforms, Inc. and affiliates. */
  3
  4#include <test_progs.h>
  5#include <network_helpers.h>
  6
  7#include "rbtree.skel.h"
  8#include "rbtree_fail.skel.h"
  9#include "rbtree_btf_fail__wrong_node_type.skel.h"
 10#include "rbtree_btf_fail__add_wrong_type.skel.h"
 11
 12static void test_rbtree_add_nodes(void)
 13{
 14	LIBBPF_OPTS(bpf_test_run_opts, opts,
 15		    .data_in = &pkt_v4,
 16		    .data_size_in = sizeof(pkt_v4),
 17		    .repeat = 1,
 18	);
 19	struct rbtree *skel;
 20	int ret;
 21
 22	skel = rbtree__open_and_load();
 23	if (!ASSERT_OK_PTR(skel, "rbtree__open_and_load"))
 24		return;
 25
 26	ret = bpf_prog_test_run_opts(bpf_program__fd(skel->progs.rbtree_add_nodes), &opts);
 27	ASSERT_OK(ret, "rbtree_add_nodes run");
 28	ASSERT_OK(opts.retval, "rbtree_add_nodes retval");
 29	ASSERT_EQ(skel->data->less_callback_ran, 1, "rbtree_add_nodes less_callback_ran");
 30
 31	rbtree__destroy(skel);
 32}
 33
 34static void test_rbtree_add_nodes_nested(void)
 35{
 36	LIBBPF_OPTS(bpf_test_run_opts, opts,
 37		    .data_in = &pkt_v4,
 38		    .data_size_in = sizeof(pkt_v4),
 39		    .repeat = 1,
 40	);
 41	struct rbtree *skel;
 42	int ret;
 43
 44	skel = rbtree__open_and_load();
 45	if (!ASSERT_OK_PTR(skel, "rbtree__open_and_load"))
 46		return;
 47
 48	ret = bpf_prog_test_run_opts(bpf_program__fd(skel->progs.rbtree_add_nodes_nested), &opts);
 49	ASSERT_OK(ret, "rbtree_add_nodes_nested run");
 50	ASSERT_OK(opts.retval, "rbtree_add_nodes_nested retval");
 51	ASSERT_EQ(skel->data->less_callback_ran, 1, "rbtree_add_nodes_nested less_callback_ran");
 52
 53	rbtree__destroy(skel);
 54}
 55
 56static void test_rbtree_add_and_remove(void)
 57{
 58	LIBBPF_OPTS(bpf_test_run_opts, opts,
 59		    .data_in = &pkt_v4,
 60		    .data_size_in = sizeof(pkt_v4),
 61		    .repeat = 1,
 62	);
 63	struct rbtree *skel;
 64	int ret;
 65
 66	skel = rbtree__open_and_load();
 67	if (!ASSERT_OK_PTR(skel, "rbtree__open_and_load"))
 68		return;
 69
 70	ret = bpf_prog_test_run_opts(bpf_program__fd(skel->progs.rbtree_add_and_remove), &opts);
 71	ASSERT_OK(ret, "rbtree_add_and_remove");
 72	ASSERT_OK(opts.retval, "rbtree_add_and_remove retval");
 73	ASSERT_EQ(skel->data->removed_key, 5, "rbtree_add_and_remove first removed key");
 74
 75	rbtree__destroy(skel);
 76}
 77
 78static void test_rbtree_add_and_remove_array(void)
 79{
 80	LIBBPF_OPTS(bpf_test_run_opts, opts,
 81		    .data_in = &pkt_v4,
 82		    .data_size_in = sizeof(pkt_v4),
 83		    .repeat = 1,
 84	);
 85	struct rbtree *skel;
 86	int ret;
 87
 88	skel = rbtree__open_and_load();
 89	if (!ASSERT_OK_PTR(skel, "rbtree__open_and_load"))
 90		return;
 91
 92	ret = bpf_prog_test_run_opts(bpf_program__fd(skel->progs.rbtree_add_and_remove_array), &opts);
 93	ASSERT_OK(ret, "rbtree_add_and_remove_array");
 94	ASSERT_OK(opts.retval, "rbtree_add_and_remove_array retval");
 95
 96	rbtree__destroy(skel);
 97}
 98
 99static void test_rbtree_first_and_remove(void)
100{
101	LIBBPF_OPTS(bpf_test_run_opts, opts,
102		    .data_in = &pkt_v4,
103		    .data_size_in = sizeof(pkt_v4),
104		    .repeat = 1,
105	);
106	struct rbtree *skel;
107	int ret;
108
109	skel = rbtree__open_and_load();
110	if (!ASSERT_OK_PTR(skel, "rbtree__open_and_load"))
111		return;
112
113	ret = bpf_prog_test_run_opts(bpf_program__fd(skel->progs.rbtree_first_and_remove), &opts);
114	ASSERT_OK(ret, "rbtree_first_and_remove");
115	ASSERT_OK(opts.retval, "rbtree_first_and_remove retval");
116	ASSERT_EQ(skel->data->first_data[0], 2, "rbtree_first_and_remove first rbtree_first()");
117	ASSERT_EQ(skel->data->removed_key, 1, "rbtree_first_and_remove first removed key");
118	ASSERT_EQ(skel->data->first_data[1], 4, "rbtree_first_and_remove second rbtree_first()");
119
120	rbtree__destroy(skel);
121}
122
123static void test_rbtree_api_release_aliasing(void)
124{
125	LIBBPF_OPTS(bpf_test_run_opts, opts,
126		    .data_in = &pkt_v4,
127		    .data_size_in = sizeof(pkt_v4),
128		    .repeat = 1,
129	);
130	struct rbtree *skel;
131	int ret;
132
133	skel = rbtree__open_and_load();
134	if (!ASSERT_OK_PTR(skel, "rbtree__open_and_load"))
135		return;
136
137	ret = bpf_prog_test_run_opts(bpf_program__fd(skel->progs.rbtree_api_release_aliasing), &opts);
138	ASSERT_OK(ret, "rbtree_api_release_aliasing");
139	ASSERT_OK(opts.retval, "rbtree_api_release_aliasing retval");
140	ASSERT_EQ(skel->data->first_data[0], 42, "rbtree_api_release_aliasing first rbtree_remove()");
141	ASSERT_EQ(skel->data->first_data[1], -1, "rbtree_api_release_aliasing second rbtree_remove()");
142
143	rbtree__destroy(skel);
144}
145
146void test_rbtree_success(void)
147{
148	if (test__start_subtest("rbtree_add_nodes"))
149		test_rbtree_add_nodes();
150	if (test__start_subtest("rbtree_add_nodes_nested"))
151		test_rbtree_add_nodes_nested();
152	if (test__start_subtest("rbtree_add_and_remove"))
153		test_rbtree_add_and_remove();
154	if (test__start_subtest("rbtree_add_and_remove_array"))
155		test_rbtree_add_and_remove_array();
156	if (test__start_subtest("rbtree_first_and_remove"))
157		test_rbtree_first_and_remove();
158	if (test__start_subtest("rbtree_api_release_aliasing"))
159		test_rbtree_api_release_aliasing();
160}
161
162#define BTF_FAIL_TEST(suffix)									\
163void test_rbtree_btf_fail__##suffix(void)							\
164{												\
165	struct rbtree_btf_fail__##suffix *skel;							\
166												\
167	skel = rbtree_btf_fail__##suffix##__open_and_load();					\
168	if (!ASSERT_ERR_PTR(skel,								\
169			    "rbtree_btf_fail__" #suffix "__open_and_load unexpected success"))	\
170		rbtree_btf_fail__##suffix##__destroy(skel);					\
171}
172
173#define RUN_BTF_FAIL_TEST(suffix)				\
174	if (test__start_subtest("rbtree_btf_fail__" #suffix))	\
175		test_rbtree_btf_fail__##suffix();
176
177BTF_FAIL_TEST(wrong_node_type);
178BTF_FAIL_TEST(add_wrong_type);
179
180void test_rbtree_btf_fail(void)
181{
182	RUN_BTF_FAIL_TEST(wrong_node_type);
183	RUN_BTF_FAIL_TEST(add_wrong_type);
184}
185
186void test_rbtree_fail(void)
187{
188	RUN_TESTS(rbtree_fail);
189}