@@ -8,13 +8,13 @@ import (
88 "net/http/httptest"
99 "os"
1010 "path/filepath"
11+ "sync"
1112 "testing"
1213
1314 "github.com/docker/docker/libnetwork"
1415 "github.com/docker/docker/libnetwork/config"
1516 "github.com/docker/docker/libnetwork/datastore"
1617 "github.com/docker/docker/libnetwork/driverapi"
17- "github.com/docker/docker/libnetwork/drivers/bridge"
1818 "github.com/docker/docker/libnetwork/ipamapi"
1919 "github.com/docker/docker/libnetwork/netlabel"
2020 "github.com/docker/docker/libnetwork/options"
@@ -23,7 +23,6 @@ import (
2323 "github.com/docker/docker/pkg/plugins"
2424 "github.com/docker/docker/pkg/reexec"
2525 "github.com/sirupsen/logrus"
26- "github.com/vishvananda/netns"
2726)
2827
2928const (
@@ -201,14 +200,36 @@ func TestBridge(t *testing.T) {
201200 t .Fatalf ("Unexpected format for port mapping in endpoint operational data" )
202201 }
203202 expectedLen := 10
204- if ! bridge . IsV6Listenable () {
203+ if ! isV6Listenable () {
205204 expectedLen = 5
206205 }
207206 if len (pm ) != expectedLen {
208207 t .Fatalf ("Incomplete data for port mapping in endpoint operational data: %d" , len (pm ))
209208 }
210209}
211210
211+ var (
212+ v6ListenableCached bool
213+ v6ListenableOnce sync.Once
214+ )
215+
216+ // This is copied from the bridge driver package b/c the bridge driver is not platform agnostic.
217+ func isV6Listenable () bool {
218+ v6ListenableOnce .Do (func () {
219+ ln , err := net .Listen ("tcp6" , "[::1]:0" )
220+ if err != nil {
221+ // When the kernel was booted with `ipv6.disable=1`,
222+ // we get err "listen tcp6 [::1]:0: socket: address family not supported by protocol"
223+ // https://github.com/moby/moby/issues/42288
224+ logrus .Debugf ("port_mapping: v6Listenable=false (%v)" , err )
225+ } else {
226+ v6ListenableCached = true
227+ ln .Close ()
228+ }
229+ })
230+ return v6ListenableCached
231+ }
232+
212233func TestUnknownDriver (t * testing.T ) {
213234 if ! testutils .IsRunningInContainer () {
214235 defer testutils .SetupTestOSContext (t )()
@@ -1411,11 +1432,9 @@ func TestValidRemoteDriver(t *testing.T) {
14111432}
14121433
14131434var (
1414- start = make (chan struct {})
1415- done = make (chan chan struct {}, numThreads - 1 )
1416- origins = netns .None ()
1417- testns = netns .None ()
1418- sboxes = make ([]libnetwork.Sandbox , numThreads )
1435+ start = make (chan struct {})
1436+ done = make (chan chan struct {}, numThreads - 1 )
1437+ sboxes = make ([]libnetwork.Sandbox , numThreads )
14191438)
14201439
14211440const (
@@ -1426,65 +1445,6 @@ const (
14261445 debug = false
14271446)
14281447
1429- func createGlobalInstance (t * testing.T ) {
1430- var err error
1431- defer close (start )
1432-
1433- origins , err = netns .Get ()
1434- if err != nil {
1435- t .Fatal (err )
1436- }
1437-
1438- if testutils .IsRunningInContainer () {
1439- testns = origins
1440- } else {
1441- testns , err = netns .New ()
1442- if err != nil {
1443- t .Fatal (err )
1444- }
1445- }
1446-
1447- netOption := options.Generic {
1448- netlabel .GenericData : options.Generic {
1449- "BridgeName" : "network" ,
1450- },
1451- }
1452-
1453- net1 , err := controller .NetworkByName ("testhost" )
1454- if err != nil {
1455- t .Fatal (err )
1456- }
1457-
1458- net2 , err := createTestNetwork ("bridge" , "network2" , netOption , nil , nil )
1459- if err != nil {
1460- t .Fatal (err )
1461- }
1462-
1463- _ , err = net1 .CreateEndpoint ("pep1" )
1464- if err != nil {
1465- t .Fatal (err )
1466- }
1467-
1468- _ , err = net2 .CreateEndpoint ("pep2" )
1469- if err != nil {
1470- t .Fatal (err )
1471- }
1472-
1473- _ , err = net2 .CreateEndpoint ("pep3" )
1474- if err != nil {
1475- t .Fatal (err )
1476- }
1477-
1478- if sboxes [first - 1 ], err = controller .NewSandbox (fmt .Sprintf ("%drace" , first ), libnetwork .OptionUseDefaultSandbox ()); err != nil {
1479- t .Fatal (err )
1480- }
1481- for thd := first + 1 ; thd <= last ; thd ++ {
1482- if sboxes [thd - 1 ], err = controller .NewSandbox (fmt .Sprintf ("%drace" , thd )); err != nil {
1483- t .Fatal (err )
1484- }
1485- }
1486- }
1487-
14881448func debugf (format string , a ... interface {}) {
14891449 if debug {
14901450 fmt .Printf (format , a ... )
0 commit comments