Browse code

Add restrictions for default drivers/bridge name

- modified tests accordingly
- added extra tests for creating a couple of bridge nw and query them

Signed-off-by: Alessandro Boch <aboch@docker.com>

Alessandro Boch authored on 2015/06/09 00:24:43
Showing 8 changed files
... ...
@@ -246,7 +246,14 @@ func TestGetNetworksAndEndpoints(t *testing.T) {
246 246
 		t.Fatal(err)
247 247
 	}
248 248
 
249
-	nc := networkCreate{Name: "sh", NetworkType: bridgeNetType}
249
+	ops := options.Generic{
250
+		netlabel.GenericData: map[string]string{
251
+			"BridgeName":            "api_test_nw",
252
+			"AllowNonDefaultBridge": "true",
253
+		},
254
+	}
255
+
256
+	nc := networkCreate{Name: "sh", NetworkType: bridgeNetType, Options: ops}
250 257
 	body, err := json.Marshal(nc)
251 258
 	if err != nil {
252 259
 		t.Fatal(err)
... ...
@@ -166,8 +166,7 @@ func (c *networkConfiguration) Conflict(o *networkConfiguration) bool {
166 166
 	}
167 167
 
168 168
 	// They must be in different subnets
169
-
170
-	if (c.AddressIPv4 != nil && o.AddressIPv4.IP != nil) &&
169
+	if (c.AddressIPv4 != nil && o.AddressIPv4 != nil) &&
171 170
 		(c.AddressIPv4.Contains(o.AddressIPv4.IP) || o.AddressIPv4.Contains(c.AddressIPv4.IP)) {
172 171
 		return true
173 172
 	}
... ...
@@ -496,7 +495,7 @@ func (d *driver) CreateNetwork(id types.UUID, option map[string]interface{}) err
496 496
 		// Basically we are checking if the two original configs were both empty.
497 497
 		if nw.config.BridgeName == config.BridgeName {
498 498
 			d.Unlock()
499
-			return types.ForbiddenErrorf("conflicts with network %s (%s)", nw.id, nw.config.BridgeName)
499
+			return types.ForbiddenErrorf("conflicts with network %s (%s) by bridge name", nw.id, nw.config.BridgeName)
500 500
 		}
501 501
 		// If this network config specifies the AddressIPv4, we need
502 502
 		// to make sure it does not conflict with any previously allocated
... ...
@@ -507,7 +506,7 @@ func (d *driver) CreateNetwork(id types.UUID, option map[string]interface{}) err
507 507
 			if nw.bridge.bridgeIPv4.Contains(config.AddressIPv4.IP) ||
508 508
 				config.AddressIPv4.Contains(nw.bridge.bridgeIPv4.IP) {
509 509
 				d.Unlock()
510
-				return types.ForbiddenErrorf("conflicts with network %s (%s)", nw.id, nw.config.BridgeName)
510
+				return types.ForbiddenErrorf("conflicts with network %s (%s) by ip network", nw.id, nw.config.BridgeName)
511 511
 			}
512 512
 		}
513 513
 	}
... ...
@@ -595,6 +594,12 @@ func (d *driver) DeleteNetwork(nid types.UUID) error {
595 595
 		d.Unlock()
596 596
 		return types.InternalMaskableErrorf("network %s does not exist", nid)
597 597
 	}
598
+
599
+	if n.config.BridgeName == DefaultBridgeName {
600
+		d.Unlock()
601
+		return types.ForbiddenErrorf("default network of type \"%s\" cannot be deleted", networkType)
602
+	}
603
+
598 604
 	delete(d.networks, nid)
599 605
 	d.Unlock()
600 606
 
... ...
@@ -57,6 +57,22 @@ func TestCreate(t *testing.T) {
57 57
 	if err := d.CreateNetwork("dummy", genericOption); err != nil {
58 58
 		t.Fatalf("Failed to create bridge: %v", err)
59 59
 	}
60
+
61
+	err := d.CreateNetwork("dummy", genericOption)
62
+	if err == nil {
63
+		t.Fatalf("Expected bridge driver to refuse creation of second network with default name")
64
+	}
65
+	if _, ok := err.(types.ForbiddenError); !ok {
66
+		t.Fatalf("Creation of second network with default name failed with unexpected error type")
67
+	}
68
+
69
+	err = d.DeleteNetwork("dummy")
70
+	if err == nil {
71
+		t.Fatalf("deletion of network with default name should fail on this driver")
72
+	}
73
+	if _, ok := err.(types.ForbiddenError); !ok {
74
+		t.Fatalf("deletion of network with default name failed with unexpected error type")
75
+	}
60 76
 }
61 77
 
62 78
 func TestCreateFail(t *testing.T) {
... ...
@@ -1,13 +1,18 @@
1 1
 package host
2 2
 
3 3
 import (
4
+	"sync"
5
+
4 6
 	"github.com/docker/libnetwork/driverapi"
5 7
 	"github.com/docker/libnetwork/types"
6 8
 )
7 9
 
8 10
 const networkType = "host"
9 11
 
10
-type driver struct{}
12
+type driver struct {
13
+	network types.UUID
14
+	sync.Mutex
15
+}
11 16
 
12 17
 // Init registers a new instance of host driver
13 18
 func Init(dc driverapi.DriverCallback) error {
... ...
@@ -19,11 +24,20 @@ func (d *driver) Config(option map[string]interface{}) error {
19 19
 }
20 20
 
21 21
 func (d *driver) CreateNetwork(id types.UUID, option map[string]interface{}) error {
22
+	d.Lock()
23
+	defer d.Unlock()
24
+
25
+	if d.network != "" {
26
+		return types.ForbiddenErrorf("only one instance of \"%s\" network is allowed", networkType)
27
+	}
28
+
29
+	d.network = id
30
+
22 31
 	return nil
23 32
 }
24 33
 
25 34
 func (d *driver) DeleteNetwork(nid types.UUID) error {
26
-	return nil
35
+	return types.ForbiddenErrorf("network of type \"%s\" cannot be deleted", networkType)
27 36
 }
28 37
 
29 38
 func (d *driver) CreateEndpoint(nid, eid types.UUID, epInfo driverapi.EndpointInfo, epOptions map[string]interface{}) error {
30 39
new file mode 100644
... ...
@@ -0,0 +1,50 @@
0
+package host
1
+
2
+import (
3
+	"testing"
4
+
5
+	_ "github.com/docker/libnetwork/netutils"
6
+	"github.com/docker/libnetwork/types"
7
+)
8
+
9
+func TestDriver(t *testing.T) {
10
+	d := &driver{}
11
+
12
+	if d.Type() != networkType {
13
+		t.Fatalf("Unexpected network type returned by driver")
14
+	}
15
+
16
+	err := d.CreateNetwork("first", nil)
17
+	if err != nil {
18
+		t.Fatal(err)
19
+	}
20
+
21
+	if d.network != "first" {
22
+		t.Fatalf("Unexpected network id stored")
23
+	}
24
+
25
+	err = d.CreateNetwork("second", nil)
26
+	if err == nil {
27
+		t.Fatalf("Second network creation should fail on this driver")
28
+	}
29
+	if _, ok := err.(types.ForbiddenError); !ok {
30
+		t.Fatalf("Second network creation failed with unexpected error type")
31
+	}
32
+
33
+	err = d.DeleteNetwork("first")
34
+	if err == nil {
35
+		t.Fatalf("network deletion should fail on this driver")
36
+	}
37
+	if _, ok := err.(types.ForbiddenError); !ok {
38
+		t.Fatalf("network deletion failed with unexpected error type")
39
+	}
40
+
41
+	// we don't really check if it is there or not, delete is not allowed for this driver, period.
42
+	err = d.DeleteNetwork("unknown")
43
+	if err == nil {
44
+		t.Fatalf("any network deletion should fail on this driver")
45
+	}
46
+	if _, ok := err.(types.ForbiddenError); !ok {
47
+		t.Fatalf("any network deletion failed with unexpected error type")
48
+	}
49
+}
... ...
@@ -1,13 +1,18 @@
1 1
 package null
2 2
 
3 3
 import (
4
+	"sync"
5
+
4 6
 	"github.com/docker/libnetwork/driverapi"
5 7
 	"github.com/docker/libnetwork/types"
6 8
 )
7 9
 
8 10
 const networkType = "null"
9 11
 
10
-type driver struct{}
12
+type driver struct {
13
+	network types.UUID
14
+	sync.Mutex
15
+}
11 16
 
12 17
 // Init registers a new instance of null driver
13 18
 func Init(dc driverapi.DriverCallback) error {
... ...
@@ -19,11 +24,20 @@ func (d *driver) Config(option map[string]interface{}) error {
19 19
 }
20 20
 
21 21
 func (d *driver) CreateNetwork(id types.UUID, option map[string]interface{}) error {
22
+	d.Lock()
23
+	defer d.Unlock()
24
+
25
+	if d.network != "" {
26
+		return types.ForbiddenErrorf("only one instance of \"%s\" network is allowed", networkType)
27
+	}
28
+
29
+	d.network = id
30
+
22 31
 	return nil
23 32
 }
24 33
 
25 34
 func (d *driver) DeleteNetwork(nid types.UUID) error {
26
-	return nil
35
+	return types.ForbiddenErrorf("network of type \"%s\" cannot be deleted", networkType)
27 36
 }
28 37
 
29 38
 func (d *driver) CreateEndpoint(nid, eid types.UUID, epInfo driverapi.EndpointInfo, epOptions map[string]interface{}) error {
30 39
new file mode 100644
... ...
@@ -0,0 +1,50 @@
0
+package null
1
+
2
+import (
3
+	"testing"
4
+
5
+	_ "github.com/docker/libnetwork/netutils"
6
+	"github.com/docker/libnetwork/types"
7
+)
8
+
9
+func TestDriver(t *testing.T) {
10
+	d := &driver{}
11
+
12
+	if d.Type() != networkType {
13
+		t.Fatalf("Unexpected network type returned by driver")
14
+	}
15
+
16
+	err := d.CreateNetwork("first", nil)
17
+	if err != nil {
18
+		t.Fatal(err)
19
+	}
20
+
21
+	if d.network != "first" {
22
+		t.Fatalf("Unexpected network id stored")
23
+	}
24
+
25
+	err = d.CreateNetwork("second", nil)
26
+	if err == nil {
27
+		t.Fatalf("Second network creation should fail on this driver")
28
+	}
29
+	if _, ok := err.(types.ForbiddenError); !ok {
30
+		t.Fatalf("Second network creation failed with unexpected error type")
31
+	}
32
+
33
+	err = d.DeleteNetwork("first")
34
+	if err == nil {
35
+		t.Fatalf("network deletion should fail on this driver")
36
+	}
37
+	if _, ok := err.(types.ForbiddenError); !ok {
38
+		t.Fatalf("network deletion failed with unexpected error type")
39
+	}
40
+
41
+	// we don't really check if it is there or not, delete is not allowed for this driver, period.
42
+	err = d.DeleteNetwork("unknown")
43
+	if err == nil {
44
+		t.Fatalf("any network deletion should fail on this driver")
45
+	}
46
+	if _, ok := err.(types.ForbiddenError); !ok {
47
+		t.Fatalf("any network deletion failed with unexpected error type")
48
+	}
49
+}
... ...
@@ -30,7 +30,6 @@ import (
30 30
 
31 31
 const (
32 32
 	bridgeNetType = "bridge"
33
-	bridgeName    = "docker0"
34 33
 )
35 34
 
36 35
 var controller libnetwork.NetworkController
... ...
@@ -97,7 +96,7 @@ func getPortMapping() []types.PortBinding {
97 97
 }
98 98
 
99 99
 func TestNull(t *testing.T) {
100
-	network, err := createTestNetwork("null", "testnetwork", options.Generic{})
100
+	network, err := createTestNetwork("null", "testnull", options.Generic{})
101 101
 	if err != nil {
102 102
 		t.Fatal(err)
103 103
 	}
... ...
@@ -124,13 +123,18 @@ func TestNull(t *testing.T) {
124 124
 		t.Fatal(err)
125 125
 	}
126 126
 
127
-	if err := network.Delete(); err != nil {
127
+	// host type is special network. Cannot be removed.
128
+	err = network.Delete()
129
+	if err == nil {
128 130
 		t.Fatal(err)
129 131
 	}
132
+	if _, ok := err.(types.ForbiddenError); !ok {
133
+		t.Fatalf("Unexpected error type")
134
+	}
130 135
 }
131 136
 
132 137
 func TestHost(t *testing.T) {
133
-	network, err := createTestNetwork("host", "testnetwork", options.Generic{})
138
+	network, err := createTestNetwork("host", "testhost", options.Generic{})
134 139
 	if err != nil {
135 140
 		t.Fatal(err)
136 141
 	}
... ...
@@ -205,9 +209,14 @@ func TestHost(t *testing.T) {
205 205
 		t.Fatal(err)
206 206
 	}
207 207
 
208
-	if err := network.Delete(); err != nil {
208
+	// host type is special network. Cannot be removed.
209
+	err = network.Delete()
210
+	if err == nil {
209 211
 		t.Fatal(err)
210 212
 	}
213
+	if _, ok := err.(types.ForbiddenError); !ok {
214
+		t.Fatalf("Unexpected error type")
215
+	}
211 216
 }
212 217
 
213 218
 func TestBridge(t *testing.T) {
... ...
@@ -237,7 +246,7 @@ func TestBridge(t *testing.T) {
237 237
 
238 238
 	netOption := options.Generic{
239 239
 		netlabel.GenericData: options.Generic{
240
-			"BridgeName":            bridgeName,
240
+			"BridgeName":            "testnetwork",
241 241
 			"AddressIPv4":           subnet,
242 242
 			"FixedCIDR":             cidr,
243 243
 			"FixedCIDRv6":           cidrv6,
... ...
@@ -316,17 +325,13 @@ func TestDuplicateNetwork(t *testing.T) {
316 316
 		defer netutils.SetupTestNetNS(t)()
317 317
 	}
318 318
 
319
-	n, err := controller.NewNetwork(bridgeNetType, "testnetwork", nil)
319
+	// Creating a default bridge name network (can't be removed)
320
+	_, err := controller.NewNetwork(bridgeNetType, "testdup")
320 321
 	if err != nil {
321 322
 		t.Fatal(err)
322 323
 	}
323
-	defer func() {
324
-		if err := n.Delete(); err != nil {
325
-			t.Fatal(err)
326
-		}
327
-	}()
328 324
 
329
-	_, err = controller.NewNetwork(bridgeNetType, "testnetwork")
325
+	_, err = controller.NewNetwork(bridgeNetType, "testdup")
330 326
 	if err == nil {
331 327
 		t.Fatal("Expected to fail. But instead succeeded")
332 328
 	}
... ...
@@ -341,7 +346,14 @@ func TestNetworkName(t *testing.T) {
341 341
 		defer netutils.SetupTestNetNS(t)()
342 342
 	}
343 343
 
344
-	_, err := createTestNetwork(bridgeNetType, "", options.Generic{})
344
+	netOption := options.Generic{
345
+		netlabel.GenericData: options.Generic{
346
+			"BridgeName":            "testnetwork",
347
+			"AllowNonDefaultBridge": true,
348
+		},
349
+	}
350
+
351
+	_, err := createTestNetwork(bridgeNetType, "", netOption)
345 352
 	if err == nil {
346 353
 		t.Fatal("Expected to fail. But instead succeeded")
347 354
 	}
... ...
@@ -351,7 +363,7 @@ func TestNetworkName(t *testing.T) {
351 351
 	}
352 352
 
353 353
 	networkName := "testnetwork"
354
-	n, err := createTestNetwork(bridgeNetType, networkName, options.Generic{})
354
+	n, err := createTestNetwork(bridgeNetType, networkName, netOption)
355 355
 	if err != nil {
356 356
 		t.Fatal(err)
357 357
 	}
... ...
@@ -371,7 +383,14 @@ func TestNetworkType(t *testing.T) {
371 371
 		defer netutils.SetupTestNetNS(t)()
372 372
 	}
373 373
 
374
-	n, err := createTestNetwork(bridgeNetType, "testnetwork", options.Generic{})
374
+	netOption := options.Generic{
375
+		netlabel.GenericData: options.Generic{
376
+			"BridgeName":            "testnetwork",
377
+			"AllowNonDefaultBridge": true,
378
+		},
379
+	}
380
+
381
+	n, err := createTestNetwork(bridgeNetType, "testnetwork", netOption)
375 382
 	if err != nil {
376 383
 		t.Fatal(err)
377 384
 	}
... ...
@@ -391,7 +410,14 @@ func TestNetworkID(t *testing.T) {
391 391
 		defer netutils.SetupTestNetNS(t)()
392 392
 	}
393 393
 
394
-	n, err := createTestNetwork(bridgeNetType, "testnetwork", options.Generic{})
394
+	netOption := options.Generic{
395
+		netlabel.GenericData: options.Generic{
396
+			"BridgeName":            "testnetwork",
397
+			"AllowNonDefaultBridge": true,
398
+		},
399
+	}
400
+
401
+	n, err := createTestNetwork(bridgeNetType, "testnetwork", netOption)
395 402
 	if err != nil {
396 403
 		t.Fatal(err)
397 404
 	}
... ...
@@ -412,7 +438,7 @@ func TestDeleteNetworkWithActiveEndpoints(t *testing.T) {
412 412
 	}
413 413
 
414 414
 	netOption := options.Generic{
415
-		"BridgeName":            bridgeName,
415
+		"BridgeName":            "testnetwork",
416 416
 		"AllowNonDefaultBridge": true}
417 417
 	option := options.Generic{
418 418
 		netlabel.GenericData: netOption,
... ...
@@ -453,7 +479,7 @@ func TestUnknownNetwork(t *testing.T) {
453 453
 	}
454 454
 
455 455
 	netOption := options.Generic{
456
-		"BridgeName":            bridgeName,
456
+		"BridgeName":            "testnetwork",
457 457
 		"AllowNonDefaultBridge": true}
458 458
 	option := options.Generic{
459 459
 		netlabel.GenericData: netOption,
... ...
@@ -491,7 +517,7 @@ func TestUnknownEndpoint(t *testing.T) {
491 491
 	subnet.IP = ip
492 492
 
493 493
 	netOption := options.Generic{
494
-		"BridgeName":            bridgeName,
494
+		"BridgeName":            "testnetwork",
495 495
 		"AddressIPv4":           subnet,
496 496
 		"AllowNonDefaultBridge": true}
497 497
 	option := options.Generic{
... ...
@@ -542,7 +568,14 @@ func TestNetworkEndpointsWalkers(t *testing.T) {
542 542
 	}
543 543
 
544 544
 	// Create network 1 and add 2 endpoint: ep11, ep12
545
-	net1, err := controller.NewNetwork(bridgeNetType, "network1")
545
+	netOption := options.Generic{
546
+		netlabel.GenericData: options.Generic{
547
+			"BridgeName":            "network1",
548
+			"AllowNonDefaultBridge": true,
549
+		},
550
+	}
551
+
552
+	net1, err := createTestNetwork(bridgeNetType, "network1", netOption)
546 553
 	if err != nil {
547 554
 		t.Fatal(err)
548 555
 	}
... ...
@@ -605,6 +638,31 @@ func TestNetworkEndpointsWalkers(t *testing.T) {
605 605
 		t.Fatal(err)
606 606
 	}
607 607
 
608
+	current := len(controller.Networks())
609
+
610
+	// Create network 2
611
+	netOption = options.Generic{
612
+		netlabel.GenericData: options.Generic{
613
+			"BridgeName":            "network2",
614
+			"AllowNonDefaultBridge": true,
615
+		},
616
+	}
617
+
618
+	net2, err := createTestNetwork(bridgeNetType, "network2", netOption)
619
+	if err != nil {
620
+		t.Fatal(err)
621
+	}
622
+	defer func() {
623
+		if err := net2.Delete(); err != nil {
624
+			t.Fatal(err)
625
+		}
626
+	}()
627
+
628
+	// Test Networks method
629
+	if len(controller.Networks()) != current+1 {
630
+		t.Fatalf("Did not find the expected number of networks")
631
+	}
632
+
608 633
 	// Test Network Walk method
609 634
 	var netName string
610 635
 	var netWanted libnetwork.Network
... ...
@@ -616,7 +674,7 @@ func TestNetworkEndpointsWalkers(t *testing.T) {
616 616
 		return false
617 617
 	}
618 618
 
619
-	// Look for network named "network1"
619
+	// Look for network named "network1" and "network2"
620 620
 	netName = "network1"
621 621
 	controller.WalkNetworks(nwWlk)
622 622
 	if netWanted == nil {
... ...
@@ -625,6 +683,15 @@ func TestNetworkEndpointsWalkers(t *testing.T) {
625 625
 	if net1 != netWanted {
626 626
 		t.Fatal(err)
627 627
 	}
628
+
629
+	netName = "network2"
630
+	controller.WalkNetworks(nwWlk)
631
+	if netWanted == nil {
632
+		t.Fatal(err)
633
+	}
634
+	if net2 != netWanted {
635
+		t.Fatal(err)
636
+	}
628 637
 }
629 638
 
630 639
 func TestDuplicateEndpoint(t *testing.T) {
... ...
@@ -632,7 +699,13 @@ func TestDuplicateEndpoint(t *testing.T) {
632 632
 		defer netutils.SetupTestNetNS(t)()
633 633
 	}
634 634
 
635
-	n, err := controller.NewNetwork(bridgeNetType, "testnetwork", nil)
635
+	netOption := options.Generic{
636
+		netlabel.GenericData: options.Generic{
637
+			"BridgeName":            "testnetwork",
638
+			"AllowNonDefaultBridge": true,
639
+		},
640
+	}
641
+	n, err := createTestNetwork(bridgeNetType, "testnetwork", netOption)
636 642
 	if err != nil {
637 643
 		t.Fatal(err)
638 644
 	}
... ...
@@ -677,7 +750,13 @@ func TestControllerQuery(t *testing.T) {
677 677
 	}
678 678
 
679 679
 	// Create network 1
680
-	net1, err := controller.NewNetwork(bridgeNetType, "network1")
680
+	netOption := options.Generic{
681
+		netlabel.GenericData: options.Generic{
682
+			"BridgeName":            "network1",
683
+			"AllowNonDefaultBridge": true,
684
+		},
685
+	}
686
+	net1, err := createTestNetwork(bridgeNetType, "network1", netOption)
681 687
 	if err != nil {
682 688
 		t.Fatal(err)
683 689
 	}
... ...
@@ -687,6 +766,23 @@ func TestControllerQuery(t *testing.T) {
687 687
 		}
688 688
 	}()
689 689
 
690
+	// Create network 2
691
+	netOption = options.Generic{
692
+		netlabel.GenericData: options.Generic{
693
+			"BridgeName":            "network2",
694
+			"AllowNonDefaultBridge": true,
695
+		},
696
+	}
697
+	net2, err := createTestNetwork(bridgeNetType, "network2", netOption)
698
+	if err != nil {
699
+		t.Fatal(err)
700
+	}
701
+	defer func() {
702
+		if err := net2.Delete(); err != nil {
703
+			t.Fatal(err)
704
+		}
705
+	}()
706
+
690 707
 	_, err = controller.NetworkByName("")
691 708
 	if err == nil {
692 709
 		t.Fatalf("NetworkByName() succeeded with invalid target name")
... ...
@@ -730,6 +826,26 @@ func TestControllerQuery(t *testing.T) {
730 730
 	if net1 != g {
731 731
 		t.Fatalf("NetworkByID() returned unexpected element: %v", g)
732 732
 	}
733
+
734
+	g, err = controller.NetworkByName("network2")
735
+	if err != nil {
736
+		t.Fatalf("Unexpected failure for NetworkByName(): %v", err)
737
+	}
738
+	if g == nil {
739
+		t.Fatalf("NetworkByName() did not find the network")
740
+	}
741
+
742
+	if g != net2 {
743
+		t.Fatalf("NetworkByName() returned the wrong network")
744
+	}
745
+
746
+	g, err = controller.NetworkByID(net2.ID())
747
+	if err != nil {
748
+		t.Fatalf("Unexpected failure for NetworkByID(): %v", err)
749
+	}
750
+	if net2 != g {
751
+		t.Fatalf("NetworkByID() returned unexpected element: %v", g)
752
+	}
733 753
 }
734 754
 
735 755
 func TestNetworkQuery(t *testing.T) {
... ...
@@ -738,7 +854,13 @@ func TestNetworkQuery(t *testing.T) {
738 738
 	}
739 739
 
740 740
 	// Create network 1 and add 2 endpoint: ep11, ep12
741
-	net1, err := controller.NewNetwork(bridgeNetType, "network1")
741
+	netOption := options.Generic{
742
+		netlabel.GenericData: options.Generic{
743
+			"BridgeName":            "network1",
744
+			"AllowNonDefaultBridge": true,
745
+		},
746
+	}
747
+	net1, err := createTestNetwork(bridgeNetType, "network1", netOption)
742 748
 	if err != nil {
743 749
 		t.Fatal(err)
744 750
 	}
... ...
@@ -853,7 +975,13 @@ func TestEndpointJoin(t *testing.T) {
853 853
 		defer netutils.SetupTestNetNS(t)()
854 854
 	}
855 855
 
856
-	n1, err := createTestNetwork(bridgeNetType, "testnetwork1", options.Generic{})
856
+	// Create network 1 and add 2 endpoint: ep11, ep12
857
+	n1, err := createTestNetwork(bridgeNetType, "testnetwork1", options.Generic{
858
+		netlabel.GenericData: options.Generic{
859
+			"BridgeName":            "testnetwork1",
860
+			"AllowNonDefaultBridge": true,
861
+		},
862
+	})
857 863
 	if err != nil {
858 864
 		t.Fatal(err)
859 865
 	}
... ...
@@ -894,12 +1022,14 @@ func TestEndpointJoin(t *testing.T) {
894 894
 		libnetwork.JoinOptionHostname("test"),
895 895
 		libnetwork.JoinOptionDomainname("docker.io"),
896 896
 		libnetwork.JoinOptionExtraHost("web", "192.168.0.1"))
897
+	runtime.LockOSThread()
897 898
 	if err != nil {
898 899
 		t.Fatal(err)
899 900
 	}
900 901
 
901 902
 	defer func() {
902 903
 		err = ep1.Leave(containerID)
904
+		runtime.LockOSThread()
903 905
 		if err != nil {
904 906
 			t.Fatal(err)
905 907
 		}
... ...
@@ -919,7 +1049,7 @@ func TestEndpointJoin(t *testing.T) {
919 919
 	n2, err := createTestNetwork(bridgeNetType, "testnetwork2",
920 920
 		options.Generic{
921 921
 			netlabel.GenericData: options.Generic{
922
-				"BridgeName":            "secondary",
922
+				"BridgeName":            "testnetwork2",
923 923
 				"AllowNonDefaultBridge": true,
924 924
 			},
925 925
 		})
... ...
@@ -962,7 +1092,12 @@ func TestEndpointJoinInvalidContainerId(t *testing.T) {
962 962
 		defer netutils.SetupTestNetNS(t)()
963 963
 	}
964 964
 
965
-	n, err := createTestNetwork(bridgeNetType, "testnetwork", options.Generic{})
965
+	n, err := createTestNetwork(bridgeNetType, "testnetwork", options.Generic{
966
+		netlabel.GenericData: options.Generic{
967
+			"BridgeName":            "testnetwork",
968
+			"AllowNonDefaultBridge": true,
969
+		},
970
+	})
966 971
 	if err != nil {
967 972
 		t.Fatal(err)
968 973
 	}
... ...
@@ -997,7 +1132,12 @@ func TestEndpointDeleteWithActiveContainer(t *testing.T) {
997 997
 		defer netutils.SetupTestNetNS(t)()
998 998
 	}
999 999
 
1000
-	n, err := createTestNetwork(bridgeNetType, "testnetwork", options.Generic{})
1000
+	n, err := createTestNetwork(bridgeNetType, "testnetwork", options.Generic{
1001
+		netlabel.GenericData: options.Generic{
1002
+			"BridgeName":            "testnetwork",
1003
+			"AllowNonDefaultBridge": true,
1004
+		},
1005
+	})
1001 1006
 	if err != nil {
1002 1007
 		t.Fatal(err)
1003 1008
 	}
... ...
@@ -1016,11 +1156,13 @@ func TestEndpointDeleteWithActiveContainer(t *testing.T) {
1016 1016
 		libnetwork.JoinOptionHostname("test"),
1017 1017
 		libnetwork.JoinOptionDomainname("docker.io"),
1018 1018
 		libnetwork.JoinOptionExtraHost("web", "192.168.0.1"))
1019
+	runtime.LockOSThread()
1019 1020
 	if err != nil {
1020 1021
 		t.Fatal(err)
1021 1022
 	}
1022 1023
 	defer func() {
1023 1024
 		err = ep.Leave(containerID)
1025
+		runtime.LockOSThread()
1024 1026
 		if err != nil {
1025 1027
 			t.Fatal(err)
1026 1028
 		}
... ...
@@ -1046,7 +1188,12 @@ func TestEndpointMultipleJoins(t *testing.T) {
1046 1046
 		defer netutils.SetupTestNetNS(t)()
1047 1047
 	}
1048 1048
 
1049
-	n, err := createTestNetwork(bridgeNetType, "testnetwork", options.Generic{})
1049
+	n, err := createTestNetwork(bridgeNetType, "testnetwork", options.Generic{
1050
+		netlabel.GenericData: options.Generic{
1051
+			"BridgeName":            "testnetwork",
1052
+			"AllowNonDefaultBridge": true,
1053
+		},
1054
+	})
1050 1055
 	if err != nil {
1051 1056
 		t.Fatal(err)
1052 1057
 	}
... ...
@@ -1070,12 +1217,13 @@ func TestEndpointMultipleJoins(t *testing.T) {
1070 1070
 		libnetwork.JoinOptionHostname("test"),
1071 1071
 		libnetwork.JoinOptionDomainname("docker.io"),
1072 1072
 		libnetwork.JoinOptionExtraHost("web", "192.168.0.1"))
1073
-
1073
+	runtime.LockOSThread()
1074 1074
 	if err != nil {
1075 1075
 		t.Fatal(err)
1076 1076
 	}
1077 1077
 	defer func() {
1078 1078
 		err = ep.Leave(containerID)
1079
+		runtime.LockOSThread()
1079 1080
 		if err != nil {
1080 1081
 			t.Fatal(err)
1081 1082
 		}
... ...
@@ -1096,7 +1244,12 @@ func TestEndpointInvalidLeave(t *testing.T) {
1096 1096
 		defer netutils.SetupTestNetNS(t)()
1097 1097
 	}
1098 1098
 
1099
-	n, err := createTestNetwork(bridgeNetType, "testnetwork", options.Generic{})
1099
+	n, err := createTestNetwork(bridgeNetType, "testnetwork", options.Generic{
1100
+		netlabel.GenericData: options.Generic{
1101
+			"BridgeName":            "testnetwork",
1102
+			"AllowNonDefaultBridge": true,
1103
+		},
1104
+	})
1100 1105
 	if err != nil {
1101 1106
 		t.Fatal(err)
1102 1107
 	}
... ...
@@ -1131,12 +1284,13 @@ func TestEndpointInvalidLeave(t *testing.T) {
1131 1131
 		libnetwork.JoinOptionHostname("test"),
1132 1132
 		libnetwork.JoinOptionDomainname("docker.io"),
1133 1133
 		libnetwork.JoinOptionExtraHost("web", "192.168.0.1"))
1134
-
1134
+	runtime.LockOSThread()
1135 1135
 	if err != nil {
1136 1136
 		t.Fatal(err)
1137 1137
 	}
1138 1138
 	defer func() {
1139 1139
 		err = ep.Leave(containerID)
1140
+		runtime.LockOSThread()
1140 1141
 		if err != nil {
1141 1142
 			t.Fatal(err)
1142 1143
 		}
... ...
@@ -1167,7 +1321,12 @@ func TestEndpointUpdateParent(t *testing.T) {
1167 1167
 		defer netutils.SetupTestNetNS(t)()
1168 1168
 	}
1169 1169
 
1170
-	n, err := createTestNetwork("bridge", "testnetwork", options.Generic{})
1170
+	n, err := createTestNetwork("bridge", "testnetwork", options.Generic{
1171
+		netlabel.GenericData: options.Generic{
1172
+			"BridgeName":            "testnetwork",
1173
+			"AllowNonDefaultBridge": true,
1174
+		},
1175
+	})
1171 1176
 	if err != nil {
1172 1177
 		t.Fatal(err)
1173 1178
 	}
... ...
@@ -1191,12 +1350,13 @@ func TestEndpointUpdateParent(t *testing.T) {
1191 1191
 		libnetwork.JoinOptionHostname("test1"),
1192 1192
 		libnetwork.JoinOptionDomainname("docker.io"),
1193 1193
 		libnetwork.JoinOptionExtraHost("web", "192.168.0.1"))
1194
-
1194
+	runtime.LockOSThread()
1195 1195
 	if err != nil {
1196 1196
 		t.Fatal(err)
1197 1197
 	}
1198 1198
 	defer func() {
1199 1199
 		err = ep1.Leave(containerID)
1200
+		runtime.LockOSThread()
1200 1201
 		if err != nil {
1201 1202
 			t.Fatal(err)
1202 1203
 		}
... ...
@@ -1217,13 +1377,14 @@ func TestEndpointUpdateParent(t *testing.T) {
1217 1217
 		libnetwork.JoinOptionDomainname("docker.io"),
1218 1218
 		libnetwork.JoinOptionHostsPath("/var/lib/docker/test_network/container2/hosts"),
1219 1219
 		libnetwork.JoinOptionParentUpdate(ep1.ID(), "web", "192.168.0.2"))
1220
-
1220
+	runtime.LockOSThread()
1221 1221
 	if err != nil {
1222 1222
 		t.Fatal(err)
1223 1223
 	}
1224 1224
 
1225 1225
 	defer func() {
1226 1226
 		err = ep2.Leave("container2")
1227
+		runtime.LockOSThread()
1227 1228
 		if err != nil {
1228 1229
 			t.Fatal(err)
1229 1230
 		}
... ...
@@ -1258,7 +1419,9 @@ func TestEnableIPv6(t *testing.T) {
1258 1258
 	netOption := options.Generic{
1259 1259
 		netlabel.EnableIPv6: true,
1260 1260
 		netlabel.GenericData: options.Generic{
1261
-			"FixedCIDRv6": cidrv6,
1261
+			"BridgeName":            "testnetwork",
1262
+			"FixedCIDRv6":           cidrv6,
1263
+			"AllowNonDefaultBridge": true,
1262 1264
 		},
1263 1265
 	}
1264 1266
 
... ...
@@ -1291,12 +1454,13 @@ func TestEnableIPv6(t *testing.T) {
1291 1291
 
1292 1292
 	err = ep1.Join(containerID,
1293 1293
 		libnetwork.JoinOptionResolvConfPath(resolvConfPath))
1294
-
1294
+	runtime.LockOSThread()
1295 1295
 	if err != nil {
1296 1296
 		t.Fatal(err)
1297 1297
 	}
1298 1298
 	defer func() {
1299 1299
 		err = ep1.Leave(containerID)
1300
+		runtime.LockOSThread()
1300 1301
 		if err != nil {
1301 1302
 			t.Fatal(err)
1302 1303
 		}
... ...
@@ -1339,7 +1503,13 @@ func TestResolvConf(t *testing.T) {
1339 1339
 		}
1340 1340
 	}()
1341 1341
 
1342
-	n, err := createTestNetwork("bridge", "testnetwork", options.Generic{})
1342
+	netOption := options.Generic{
1343
+		netlabel.GenericData: options.Generic{
1344
+			"BridgeName":            "testnetwork",
1345
+			"AllowNonDefaultBridge": true,
1346
+		},
1347
+	}
1348
+	n, err := createTestNetwork("bridge", "testnetwork", netOption)
1343 1349
 	if err != nil {
1344 1350
 		t.Fatal(err)
1345 1351
 	}
... ...
@@ -1368,11 +1538,13 @@ func TestResolvConf(t *testing.T) {
1368 1368
 
1369 1369
 	err = ep1.Join(containerID,
1370 1370
 		libnetwork.JoinOptionResolvConfPath(resolvConfPath))
1371
+	runtime.LockOSThread()
1371 1372
 	if err != nil {
1372 1373
 		t.Fatal(err)
1373 1374
 	}
1374 1375
 	defer func() {
1375 1376
 		err = ep1.Leave(containerID)
1377
+		runtime.LockOSThread()
1376 1378
 		if err != nil {
1377 1379
 			t.Fatal(err)
1378 1380
 		}
... ...
@@ -1398,6 +1570,7 @@ func TestResolvConf(t *testing.T) {
1398 1398
 	}
1399 1399
 
1400 1400
 	err = ep1.Leave(containerID)
1401
+	runtime.LockOSThread()
1401 1402
 	if err != nil {
1402 1403
 		t.Fatal(err)
1403 1404
 	}
... ...
@@ -1408,6 +1581,7 @@ func TestResolvConf(t *testing.T) {
1408 1408
 
1409 1409
 	err = ep1.Join(containerID,
1410 1410
 		libnetwork.JoinOptionResolvConfPath(resolvConfPath))
1411
+	runtime.LockOSThread()
1411 1412
 	if err != nil {
1412 1413
 		t.Fatal(err)
1413 1414
 	}
... ...
@@ -1426,12 +1600,14 @@ func TestResolvConf(t *testing.T) {
1426 1426
 	}
1427 1427
 
1428 1428
 	err = ep1.Leave(containerID)
1429
+	runtime.LockOSThread()
1429 1430
 	if err != nil {
1430 1431
 		t.Fatal(err)
1431 1432
 	}
1432 1433
 
1433 1434
 	err = ep1.Join(containerID,
1434 1435
 		libnetwork.JoinOptionResolvConfPath(resolvConfPath))
1436
+	runtime.LockOSThread()
1435 1437
 	if err != nil {
1436 1438
 		t.Fatal(err)
1437 1439
 	}
... ...
@@ -1584,7 +1760,13 @@ func createGlobalInstance(t *testing.T) {
1584 1584
 		}
1585 1585
 	}
1586 1586
 
1587
-	net, err := controller.NewNetwork(bridgeNetType, "network1")
1587
+	netOption := options.Generic{
1588
+		netlabel.GenericData: options.Generic{
1589
+			"BridgeName":            "network",
1590
+			"AllowNonDefaultBridge": true,
1591
+		},
1592
+	}
1593
+	net, err := createTestNetwork(bridgeNetType, "network", netOption)
1588 1594
 	if err != nil {
1589 1595
 		t.Fatal("new network")
1590 1596
 	}
... ...
@@ -1677,12 +1859,12 @@ func runParallelTests(t *testing.T, thrNumber int) {
1677 1677
 	}
1678 1678
 	defer netns.Set(origns)
1679 1679
 
1680
-	net, err := controller.NetworkByName("network1")
1680
+	net, err := controller.NetworkByName("network")
1681 1681
 	if err != nil {
1682 1682
 		t.Fatal(err)
1683 1683
 	}
1684 1684
 	if net == nil {
1685
-		t.Fatal("Could not find network1")
1685
+		t.Fatal("Could not find network")
1686 1686
 	}
1687 1687
 
1688 1688
 	ep, err := net.EndpointByName("ep1")