Skip to content

Commit

Permalink
Fix flaky TestPortMappingV6Config
Browse files Browse the repository at this point in the history
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 moby#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 <[email protected]>
  • Loading branch information
akerouanton committed Nov 14, 2021
1 parent df7bba7 commit 64f65e1
Showing 1 changed file with 14 additions and 0 deletions.
14 changes: 14 additions & 0 deletions libnetwork/drivers/bridge/port_mapping_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@
package bridge

import (
"github.com/docker/docker/libnetwork/ns"
"os"
"testing"

Expand Down Expand Up @@ -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{
Expand Down Expand Up @@ -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)
}

0 comments on commit 64f65e1

Please sign in to comment.