Subject: Re: [RFC] failing selftests/bpf/test_offload.py

From: Toke Høiland-Jørgensen <[email-masked]>
Date: Mon, 31 Jan 2022 14:15:07 +0100

Jiri Olsa <[email-masked]> writes:

> hi,
> I have failing test_offload.py with following output:
>
>   # ./test_offload.py
>   ...
>   Test bpftool bound info reporting (own ns)...
>   FAIL: 3 BPF maps loaded, expected 2
>     File "/root/bpf-next/tools/testing/selftests/bpf/./test_offload.py", line 1177, in <module>
>       check_dev_info(False, "")
>     File "/root/bpf-next/tools/testing/selftests/bpf/./test_offload.py", line 645, in check_dev_info
>       maps = bpftool_map_list(expected=2, ns=ns)
>     File "/root/bpf-next/tools/testing/selftests/bpf/./test_offload.py", line 190, in bpftool_map_list
>       fail(True, "%d BPF maps loaded, expected %d" %
>     File "/root/bpf-next/tools/testing/selftests/bpf/./test_offload.py", line 86, in fail
>       tb = "".join(traceback.extract_stack().format())
>
> it fails to detect maps from bpftool's feature detection,
> that did not make it yet through deferred removal
>
> with the fix below I have this subtest passed, but it fails
> further on:
>
>   # ./test_offload.py
>   ...
>   Test bpftool bound info reporting (own ns)...
>   Test bpftool bound info reporting (other ns)...
>   Test bpftool bound info reporting (remote ns)...
>   Test bpftool bound info reporting (back to own ns)...
>   Test bpftool bound info reporting (removed dev)...
>   Test map update (no flags)...
>   Test map update (exists)...
>   Test map update (noexist)...
>   Test map dump...
>   Test map dump...
>   Traceback (most recent call last):
>     File "/root/bpf-next/tools/testing/selftests/bpf/./test_offload.py", line 1251, in <module>
>       _, entries = bpftool("map dump id %d" % (m["id"]))
>     File "/root/bpf-next/tools/testing/selftests/bpf/./test_offload.py", line 169, in bpftool
>       return tool("bpftool", args, {"json":"-p"}, JSON=JSON, ns=ns,
>     File "/root/bpf-next/tools/testing/selftests/bpf/./test_offload.py", line 155, in tool
>       ret, stdout = cmd(ns + name + " " + params + args,
>     File "/root/bpf-next/tools/testing/selftests/bpf/./test_offload.py", line 109, in cmd
>       return cmd_result(proc, include_stderr=include_stderr, fail=fail)
>     File "/root/bpf-next/tools/testing/selftests/bpf/./test_offload.py", line 131, in cmd_result
>       raise Exception("Command failed: %s\n%s" % (proc.args, stderr))
>   Exception: Command failed: bpftool -p map dump id 4325
>
> the test seems to expect maps having BTF loaded, which for some reason
> did not happen, so the test fails with bpftool pretty dump fail
>
> the test loads the object with 'ip link ...', which I never touched,
> so I wanted ask first before I dive in, perhaps I miss some setup
>
> thoughts? ;-)

It looks like the test_offload.py has been using 'bpftool -p' since its
inception (in commit: 417ec26477a5 ("selftests/bpf: add offload test
based on netdevsim") introduced in December 2017), so this sounds like a
regression in bpftool?

-Toke