Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

selftest: tcp: Define the reverse order bind() tests explicitly.

Currently, bind_wildcard.c calls bind() twice for two addresses and
checks the pre-defined errno against the 2nd call. Also, the two
bind() calls are swapped to cover various patterns how bind buckets
are created.

However, only testing two addresses is insufficient to detect regression.
So, we will add more bind() calls, and then, we need to define different
errno for each bind() per test case.

As a prepartion, let's define the reverse order bind() test cases as
fixtures.

No functional changes are intended.

Signed-off-by: Kuniyuki Iwashima <kuniyu@amazon.com>
Link: https://lore.kernel.org/r/20240326204251.51301-5-kuniyu@amazon.com
Signed-off-by: Jakub Kicinski <kuba@kernel.org>

authored by

Kuniyuki Iwashima and committed by
Jakub Kicinski
6f9bc755 c48baf56

+59 -8
+59 -8
tools/testing/selftests/net/bind_wildcard.c
··· 42 42 int expected_errno; 43 43 }; 44 44 45 + /* (IPv4, IPv6) */ 45 46 FIXTURE_VARIANT_ADD(bind_wildcard, v4_any_v6_any) 46 47 { 47 48 .family = {AF_INET, AF_INET6}, ··· 96 95 { 97 96 .family = {AF_INET, AF_INET6}, 98 97 .addr = {&in4addr_loopback, &in6addr_v4mapped_loopback}, 98 + .expected_errno = EADDRINUSE, 99 + }; 100 + 101 + /* (IPv6, IPv4) */ 102 + FIXTURE_VARIANT_ADD(bind_wildcard, v6_any_v4_any) 103 + { 104 + .family = {AF_INET6, AF_INET}, 105 + .addr = {&in6addr_any, &in4addr_any}, 106 + .expected_errno = EADDRINUSE, 107 + }; 108 + 109 + FIXTURE_VARIANT_ADD(bind_wildcard, v6_any_v4_local) 110 + { 111 + .family = {AF_INET6, AF_INET}, 112 + .addr = {&in6addr_any, &in4addr_loopback}, 113 + .expected_errno = EADDRINUSE, 114 + }; 115 + 116 + FIXTURE_VARIANT_ADD(bind_wildcard, v6_local_v4_any) 117 + { 118 + .family = {AF_INET6, AF_INET}, 119 + .addr = {&in6addr_loopback, &in4addr_any}, 120 + .expected_errno = 0, 121 + }; 122 + 123 + FIXTURE_VARIANT_ADD(bind_wildcard, v6_local_v4_local) 124 + { 125 + .family = {AF_INET6, AF_INET}, 126 + .addr = {&in6addr_loopback, &in4addr_loopback}, 127 + .expected_errno = 0, 128 + }; 129 + 130 + FIXTURE_VARIANT_ADD(bind_wildcard, v6_v4mapped_any_v4_any) 131 + { 132 + .family = {AF_INET6, AF_INET}, 133 + .addr = {&in6addr_v4mapped_any, &in4addr_any}, 134 + .expected_errno = EADDRINUSE, 135 + }; 136 + 137 + FIXTURE_VARIANT_ADD(bind_wildcard, v6_v4mapped_any_v4_local) 138 + { 139 + .family = {AF_INET6, AF_INET}, 140 + .addr = {&in6addr_v4mapped_any, &in4addr_loopback}, 141 + .expected_errno = EADDRINUSE, 142 + }; 143 + 144 + FIXTURE_VARIANT_ADD(bind_wildcard, v6_v4mapped_local_v4_any) 145 + { 146 + .family = {AF_INET6, AF_INET}, 147 + .addr = {&in6addr_v4mapped_loopback, &in4addr_any}, 148 + .expected_errno = EADDRINUSE, 149 + }; 150 + 151 + FIXTURE_VARIANT_ADD(bind_wildcard, v6_v4mapped_local_v4_local) 152 + { 153 + .family = {AF_INET6, AF_INET}, 154 + .addr = {&in6addr_v4mapped_loopback, &in4addr_loopback}, 99 155 .expected_errno = EADDRINUSE, 100 156 }; 101 157 ··· 225 167 close(fd[0]); 226 168 } 227 169 228 - TEST_F(bind_wildcard, v4_v6) 170 + TEST_F(bind_wildcard, plain) 229 171 { 230 172 bind_sockets(_metadata, self, variant->expected_errno, 231 173 &self->addr[0].addr, self->addrlen[0], 232 174 &self->addr[1].addr, self->addrlen[1]); 233 - } 234 - 235 - TEST_F(bind_wildcard, v6_v4) 236 - { 237 - bind_sockets(_metadata, self, variant->expected_errno, 238 - &self->addr[1].addr, self->addrlen[1], 239 - &self->addr[0].addr, self->addrlen[0]); 240 175 } 241 176 242 177 TEST_HARNESS_MAIN