2015-07-02 01:00:48 -04:00
|
|
|
package libnetwork
|
|
|
|
|
|
|
|
import (
|
|
|
|
"testing"
|
|
|
|
|
2015-09-18 17:00:36 -04:00
|
|
|
"github.com/docker/libnetwork/config"
|
2015-07-02 01:00:48 -04:00
|
|
|
"github.com/docker/libnetwork/netlabel"
|
|
|
|
"github.com/docker/libnetwork/options"
|
|
|
|
"github.com/docker/libnetwork/osl"
|
2015-09-07 13:33:28 -04:00
|
|
|
"github.com/docker/libnetwork/testutils"
|
2015-07-02 01:00:48 -04:00
|
|
|
)
|
|
|
|
|
2016-05-12 17:33:41 -04:00
|
|
|
func getTestEnv(t *testing.T, empty bool) (NetworkController, Network, Network) {
|
2015-09-18 17:00:36 -04:00
|
|
|
netType := "bridge"
|
2015-07-02 01:00:48 -04:00
|
|
|
|
|
|
|
option := options.Generic{
|
|
|
|
"EnableIPForwarding": true,
|
|
|
|
}
|
|
|
|
genericOption := make(map[string]interface{})
|
|
|
|
genericOption[netlabel.GenericData] = option
|
2015-09-18 17:00:36 -04:00
|
|
|
|
2015-09-16 07:42:35 -04:00
|
|
|
cfgOptions, err := OptionBoltdbWithRandomDBFile()
|
|
|
|
if err != nil {
|
|
|
|
t.Fatal(err)
|
|
|
|
}
|
|
|
|
c, err := New(append(cfgOptions, config.OptionDriverConfig(netType, genericOption))...)
|
2015-09-18 17:00:36 -04:00
|
|
|
if err != nil {
|
2015-07-02 01:00:48 -04:00
|
|
|
t.Fatal(err)
|
|
|
|
}
|
|
|
|
|
2016-05-12 17:33:41 -04:00
|
|
|
if empty {
|
|
|
|
return c, nil, nil
|
|
|
|
}
|
|
|
|
|
2015-07-02 01:00:48 -04:00
|
|
|
name1 := "test_nw_1"
|
|
|
|
netOption1 := options.Generic{
|
|
|
|
netlabel.GenericData: options.Generic{
|
2015-09-23 21:01:04 -04:00
|
|
|
"BridgeName": name1,
|
2015-07-02 01:00:48 -04:00
|
|
|
},
|
|
|
|
}
|
2016-02-29 14:49:04 -05:00
|
|
|
n1, err := c.NewNetwork(netType, name1, "", NetworkOptionGeneric(netOption1))
|
2015-07-02 01:00:48 -04:00
|
|
|
if err != nil {
|
|
|
|
t.Fatal(err)
|
|
|
|
}
|
|
|
|
|
|
|
|
name2 := "test_nw_2"
|
|
|
|
netOption2 := options.Generic{
|
|
|
|
netlabel.GenericData: options.Generic{
|
2015-09-23 21:01:04 -04:00
|
|
|
"BridgeName": name2,
|
2015-07-02 01:00:48 -04:00
|
|
|
},
|
|
|
|
}
|
2016-02-29 14:49:04 -05:00
|
|
|
n2, err := c.NewNetwork(netType, name2, "", NetworkOptionGeneric(netOption2))
|
2015-07-02 01:00:48 -04:00
|
|
|
if err != nil {
|
|
|
|
t.Fatal(err)
|
|
|
|
}
|
|
|
|
|
|
|
|
return c, n1, n2
|
|
|
|
}
|
|
|
|
|
|
|
|
func TestSandboxAddEmpty(t *testing.T) {
|
2016-05-12 17:33:41 -04:00
|
|
|
c, _, _ := getTestEnv(t, true)
|
|
|
|
ctrlr := c.(*controller)
|
2015-07-02 01:00:48 -04:00
|
|
|
|
|
|
|
sbx, err := ctrlr.NewSandbox("sandbox0")
|
|
|
|
if err != nil {
|
|
|
|
t.Fatal(err)
|
|
|
|
}
|
|
|
|
|
|
|
|
if err := sbx.Delete(); err != nil {
|
|
|
|
t.Fatal(err)
|
|
|
|
}
|
|
|
|
|
|
|
|
if len(ctrlr.sandboxes) != 0 {
|
|
|
|
t.Fatalf("controller sandboxes is not empty. len = %d", len(ctrlr.sandboxes))
|
|
|
|
}
|
|
|
|
|
|
|
|
osl.GC()
|
|
|
|
}
|
|
|
|
|
|
|
|
func TestSandboxAddMultiPrio(t *testing.T) {
|
2015-09-07 13:33:28 -04:00
|
|
|
if !testutils.IsRunningInContainer() {
|
|
|
|
defer testutils.SetupTestOSContext(t)()
|
2015-07-02 01:00:48 -04:00
|
|
|
}
|
|
|
|
|
2016-05-12 17:33:41 -04:00
|
|
|
c, nw, _ := getTestEnv(t, false)
|
2015-07-02 01:00:48 -04:00
|
|
|
ctrlr := c.(*controller)
|
|
|
|
|
|
|
|
sbx, err := ctrlr.NewSandbox("sandbox1")
|
|
|
|
if err != nil {
|
|
|
|
t.Fatal(err)
|
|
|
|
}
|
|
|
|
sid := sbx.ID()
|
|
|
|
|
|
|
|
ep1, err := nw.CreateEndpoint("ep1")
|
|
|
|
if err != nil {
|
|
|
|
t.Fatal(err)
|
|
|
|
}
|
|
|
|
ep2, err := nw.CreateEndpoint("ep2")
|
|
|
|
if err != nil {
|
|
|
|
t.Fatal(err)
|
|
|
|
}
|
|
|
|
ep3, err := nw.CreateEndpoint("ep3")
|
|
|
|
if err != nil {
|
|
|
|
t.Fatal(err)
|
|
|
|
}
|
|
|
|
|
|
|
|
if err := ep1.Join(sbx, JoinOptionPriority(ep1, 1)); err != nil {
|
|
|
|
t.Fatal(err)
|
|
|
|
}
|
|
|
|
|
|
|
|
if err := ep2.Join(sbx, JoinOptionPriority(ep2, 2)); err != nil {
|
|
|
|
t.Fatal(err)
|
|
|
|
}
|
|
|
|
|
|
|
|
if err := ep3.Join(sbx, JoinOptionPriority(ep3, 3)); err != nil {
|
|
|
|
t.Fatal(err)
|
|
|
|
}
|
|
|
|
|
2015-10-05 07:21:15 -04:00
|
|
|
if ctrlr.sandboxes[sid].endpoints[0].ID() != ep3.ID() {
|
2015-07-02 01:00:48 -04:00
|
|
|
t.Fatal("Expected ep3 to be at the top of the heap. But did not find ep3 at the top of the heap")
|
|
|
|
}
|
|
|
|
|
2016-01-25 19:23:00 -05:00
|
|
|
if len(sbx.Endpoints()) != 3 {
|
|
|
|
t.Fatal("Expected 3 endpoints to be connected to the sandbox.")
|
|
|
|
}
|
|
|
|
|
2015-07-02 01:00:48 -04:00
|
|
|
if err := ep3.Leave(sbx); err != nil {
|
|
|
|
t.Fatal(err)
|
|
|
|
}
|
2015-10-05 07:21:15 -04:00
|
|
|
if ctrlr.sandboxes[sid].endpoints[0].ID() != ep2.ID() {
|
2015-07-02 01:00:48 -04:00
|
|
|
t.Fatal("Expected ep2 to be at the top of the heap after removing ep3. But did not find ep2 at the top of the heap")
|
|
|
|
}
|
|
|
|
|
|
|
|
if err := ep2.Leave(sbx); err != nil {
|
|
|
|
t.Fatal(err)
|
|
|
|
}
|
2015-10-05 07:21:15 -04:00
|
|
|
if ctrlr.sandboxes[sid].endpoints[0].ID() != ep1.ID() {
|
2015-07-02 01:00:48 -04:00
|
|
|
t.Fatal("Expected ep1 to be at the top of the heap after removing ep2. But did not find ep1 at the top of the heap")
|
|
|
|
}
|
|
|
|
|
|
|
|
// Re-add ep3 back
|
|
|
|
if err := ep3.Join(sbx, JoinOptionPriority(ep3, 3)); err != nil {
|
|
|
|
t.Fatal(err)
|
|
|
|
}
|
|
|
|
|
2015-10-05 07:21:15 -04:00
|
|
|
if ctrlr.sandboxes[sid].endpoints[0].ID() != ep3.ID() {
|
2015-07-02 01:00:48 -04:00
|
|
|
t.Fatal("Expected ep3 to be at the top of the heap after adding ep3 back. But did not find ep3 at the top of the heap")
|
|
|
|
}
|
|
|
|
|
|
|
|
if err := sbx.Delete(); err != nil {
|
|
|
|
t.Fatal(err)
|
|
|
|
}
|
|
|
|
|
|
|
|
if len(ctrlr.sandboxes) != 0 {
|
|
|
|
t.Fatalf("controller sandboxes is not empty. len = %d", len(ctrlr.sandboxes))
|
|
|
|
}
|
|
|
|
|
|
|
|
osl.GC()
|
|
|
|
}
|
|
|
|
|
|
|
|
func TestSandboxAddSamePrio(t *testing.T) {
|
2015-09-07 13:33:28 -04:00
|
|
|
if !testutils.IsRunningInContainer() {
|
|
|
|
defer testutils.SetupTestOSContext(t)()
|
2015-07-02 01:00:48 -04:00
|
|
|
}
|
|
|
|
|
2016-05-12 17:33:41 -04:00
|
|
|
c, nw1, nw2 := getTestEnv(t, false)
|
2015-07-02 01:00:48 -04:00
|
|
|
|
|
|
|
ctrlr := c.(*controller)
|
|
|
|
|
|
|
|
sbx, err := ctrlr.NewSandbox("sandbox1")
|
|
|
|
if err != nil {
|
|
|
|
t.Fatal(err)
|
|
|
|
}
|
|
|
|
sid := sbx.ID()
|
|
|
|
|
|
|
|
ep1, err := nw1.CreateEndpoint("ep1")
|
|
|
|
if err != nil {
|
|
|
|
t.Fatal(err)
|
|
|
|
}
|
|
|
|
ep2, err := nw2.CreateEndpoint("ep2")
|
|
|
|
if err != nil {
|
|
|
|
t.Fatal(err)
|
|
|
|
}
|
|
|
|
|
|
|
|
if err := ep1.Join(sbx); err != nil {
|
|
|
|
t.Fatal(err)
|
|
|
|
}
|
|
|
|
|
|
|
|
if err := ep2.Join(sbx); err != nil {
|
|
|
|
t.Fatal(err)
|
|
|
|
}
|
|
|
|
|
2015-10-05 07:21:15 -04:00
|
|
|
if ctrlr.sandboxes[sid].endpoints[0].ID() != ep1.ID() {
|
2015-07-02 01:00:48 -04:00
|
|
|
t.Fatal("Expected ep1 to be at the top of the heap. But did not find ep1 at the top of the heap")
|
|
|
|
}
|
|
|
|
|
|
|
|
if err := ep1.Leave(sbx); err != nil {
|
|
|
|
t.Fatal(err)
|
|
|
|
}
|
|
|
|
|
2015-10-05 07:21:15 -04:00
|
|
|
if ctrlr.sandboxes[sid].endpoints[0].ID() != ep2.ID() {
|
2015-07-02 01:00:48 -04:00
|
|
|
t.Fatal("Expected ep2 to be at the top of the heap after removing ep3. But did not find ep2 at the top of the heap")
|
|
|
|
}
|
|
|
|
|
|
|
|
if err := ep2.Leave(sbx); err != nil {
|
|
|
|
t.Fatal(err)
|
|
|
|
}
|
|
|
|
|
|
|
|
if err := sbx.Delete(); err != nil {
|
|
|
|
t.Fatal(err)
|
|
|
|
}
|
|
|
|
|
|
|
|
if len(ctrlr.sandboxes) != 0 {
|
|
|
|
t.Fatalf("controller containers is not empty. len = %d", len(ctrlr.sandboxes))
|
|
|
|
}
|
|
|
|
|
|
|
|
osl.GC()
|
|
|
|
}
|