C语言 如何通过eBPF的BCC接口为用python编写的eBPF程序编写单元测试?



我知道这是一个奇怪的问题,我可能在一个黯淡的话题中寻求帮助,因为在网上搜索了几天没有任何效果后,我决定向这个社区伸出援助之手…

所以我需要用BCC为python编写的eBPF程序编写单元测试

任何建议都将非常感谢,甚至指出我可以进一步寻找解决我目前面临的问题的见解的大致方向

下面是一个简单的例子:

from bcc import BPF
# define BPF program
prog = """
int hello(void *ctx) {
bpf_trace_printk("Hello, World!\n");
return 0;
}
"""
# load BPF program
b = BPF(text=prog)
b.attach_kprobe(event=b.get_syscall_fnname("clone"), fn_name="hello")
# header
print("%-18s %-16s %-6s %s" % ("TIME(s)", "COMM", "PID", "MESSAGE"))
# format output
while 1:
try:
(task, pid, cpu, flags, ts, msg) = b.trace_fields()
except ValueError:
continue
print("%-18.9f %-16s %-6d %s" % (ts, task, pid, msg))

我需要独立地对C代码和python代码进行单元测试,以查看它们的行为是否符合预期

您可以用通常的方式对Python逻辑进行单元测试。对于BPF部分,有两种方法:

  • 您使用另一个Python程序来加载和触发您编写的BPF程序。要触发您的程序,您可以使用BPF_PROG_TEST_RUN,或者您可以按照计划附加它并触发附加点(例如,如果程序附加到克隆(2)系统调用,则调用clone)。不可否认,这种方法看起来更像是端到端测试,而不是单元测试。
  • 将BPF程序拆分为头文件中的C函数。您编写一个C单元测试,其中包含该头文件,并使用输入来调用这些函数以进行检查。要做到这一点,您需要确保C函数不调用任何可能被编译为非BPF后端的特定于BPF的内容。考虑到地图和助手,这可能有点困难。

相关内容

  • 没有找到相关文章

最新更新