瀏覽代碼

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>
Albin Kerouanton 3 年之前
父節點
當前提交
c721bad8cc
共有 1 個文件被更改,包括 14 次插入0 次删除
  1. 14 0
      libnetwork/drivers/bridge/port_mapping_test.go

+ 14 - 0
libnetwork/drivers/bridge/port_mapping_test.go

@@ -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)
+}