Fix flaky TestPortMappingV6Config

Since moby/libnetwork#2635 has been merged, allocatePortsInternal()
checks if IPv6 is enabled by calling IsV6Listenable(). This function
calls `net.Listen("tcp6", "[::1]:0")` and returns false when
net.Listen() fails.

TestPortMappingV6Config() starts by setting up a new net ns to run into
it. The loopback interface is not bring up in this net ns, thus
net.Listen() fails and IsV6Listenable() returns false. This change takes
care of bringing loopback iface up right after moving to the new net ns.

This test has been reported has flaky on s390x in #42468. For some
reason, this test seems to be consistently green on the CI (on amd64
arch) and when running `hack/test/unit` locally. However it consistently
fails when running `TESTFLAGS='-shuffle on' hack/test/unit` locally.

Signed-off-by: Albin Kerouanton <albinker@gmail.com>
This commit is contained in:
Albin Kerouanton 2021-11-15 00:34:40 +01:00
parent df7bba7dbc
commit c721bad8cc
No known key found for this signature in database
GPG Key ID: 630B8E1DCBDB1864
1 changed files with 14 additions and 0 deletions

View File

@ -8,6 +8,7 @@ import (
"testing"
"github.com/docker/docker/libnetwork/netlabel"
"github.com/docker/docker/libnetwork/ns"
"github.com/docker/docker/libnetwork/testutils"
"github.com/docker/docker/libnetwork/types"
"github.com/docker/docker/pkg/reexec"
@ -101,6 +102,10 @@ func TestPortMappingConfig(t *testing.T) {
func TestPortMappingV6Config(t *testing.T) {
defer testutils.SetupTestOSContext(t)()
if err := loopbackUp(); err != nil {
t.Fatalf("Could not bring loopback iface up: %v", err)
}
d := newDriver()
config := &configuration{
@ -169,3 +174,12 @@ func TestPortMappingV6Config(t *testing.T) {
t.Fatal(err)
}
}
func loopbackUp() error {
nlHandle := ns.NlHandle()
iface, err := nlHandle.LinkByName("lo")
if err != nil {
return err
}
return nlHandle.LinkSetUp(iface)
}