From 010077ba0fb53ef4b88cc5c8f03cd770481e7dd5 Mon Sep 17 00:00:00 2001 From: Cory Snider Date: Mon, 7 Nov 2022 19:13:05 -0500 Subject: [PATCH] libnet/d/bridge: fix race condition in test case TestCreateParallel, which was ostensibly added as a regression test for race conditions inside the bridge driver, contains a race condition. The getIPv4Data() calls race the network configuration and so will sometimes see the existing address assignments return IP address ranges which do not conflict with them. While normally a good thing, the test asserts that exactly one of the 100 networks is successfully created. Pass the same IPAM data when attempting to create every network to ensure that the address ranges conflict. Signed-off-by: Cory Snider --- libnetwork/drivers/bridge/bridge_test.go | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/libnetwork/drivers/bridge/bridge_test.go b/libnetwork/drivers/bridge/bridge_test.go index fe3cc50fa3..e6eb8d6717 100644 --- a/libnetwork/drivers/bridge/bridge_test.go +++ b/libnetwork/drivers/bridge/bridge_test.go @@ -1087,6 +1087,8 @@ func TestCreateParallel(t *testing.T) { t.Fatalf("Failed to setup driver config: %v", err) } + ipV4Data := getIPv4Data(t, "docker0") + ch := make(chan error, 100) for i := 0; i < 100; i++ { name := "net" + strconv.Itoa(i) @@ -1094,11 +1096,11 @@ func TestCreateParallel(t *testing.T) { config := &networkConfiguration{BridgeName: name} genericOption := make(map[string]interface{}) genericOption[netlabel.GenericData] = config - if err := d.CreateNetwork(name, genericOption, nil, getIPv4Data(t, "docker0"), nil); err != nil { + if err := d.CreateNetwork(name, genericOption, nil, ipV4Data, nil); err != nil { ch <- fmt.Errorf("failed to create %s", name) return } - if err := d.CreateNetwork(name, genericOption, nil, getIPv4Data(t, "docker0"), nil); err == nil { + if err := d.CreateNetwork(name, genericOption, nil, ipV4Data, nil); err == nil { ch <- fmt.Errorf("failed was able to create overlap %s", name) return }