selftests/bpf: De-flake test_tcpbpf
authorStanislav Fomichev <sdf@google.com>
Wed, 4 Dec 2019 19:09:55 +0000 (11:09 -0800)
committerAlexei Starovoitov <ast@kernel.org>
Thu, 5 Dec 2019 02:01:05 +0000 (18:01 -0800)
commitef8c84effce3c7a0b8196fcda8f430c815ab511c
tree10cc86cc9c2f54f8bf93c7e8f6da1ccfafa6c719
parent6bf6affe18dafea6ef12036001162ac7f2dbf738
selftests/bpf: De-flake test_tcpbpf

It looks like BPF program that handles BPF_SOCK_OPS_STATE_CB state
can race with the bpf_map_lookup_elem("global_map"); I sometimes
see the failures in this test and re-running helps.

Since we know that we expect the callback to be called 3 times (one
time for listener socket, two times for both ends of the connection),
let's export this number and add simple retry logic around that.

Also, let's make EXPECT_EQ() not return on failure, but continue
evaluating all conditions; that should make potential debugging
easier.

With this fix in place I don't observe the flakiness anymore.

Signed-off-by: Stanislav Fomichev <sdf@google.com>
Signed-off-by: Alexei Starovoitov <ast@kernel.org>
Cc: Lawrence Brakmo <brakmo@fb.com>
Link: https://lore.kernel.org/bpf/20191204190955.170934-1-sdf@google.com
tools/testing/selftests/bpf/progs/test_tcpbpf_kern.c
tools/testing/selftests/bpf/test_tcpbpf.h
tools/testing/selftests/bpf/test_tcpbpf_user.c