package libnetworkimport ("fmt""testing""github.com/docker/libnetwork/config""github.com/docker/libnetwork/ipamapi""github.com/docker/libnetwork/netlabel""github.com/docker/libnetwork/options""github.com/docker/libnetwork/osl""github.com/docker/libnetwork/testutils")func getTestEnv(t *testing.T, opts ...[]NetworkOption) (NetworkController, []Network) {netType := "bridge"option := options.Generic{"EnableIPForwarding": true,}genericOption := make(map[string]interface{})genericOption[netlabel.GenericData] = optioncfgOptions, err := OptionBoltdbWithRandomDBFile()if err != nil {t.Fatal(err)}c, err := New(append(cfgOptions, config.OptionDriverConfig(netType, genericOption))...)if err != nil {t.Fatal(err)}if len(opts) == 0 {return c, nil}nwList := make([]Network, 0, len(opts))for i, opt := range opts {name := fmt.Sprintf("test_nw_%d", i)netOption := options.Generic{netlabel.GenericData: options.Generic{"BridgeName": name,},}newOptions := make([]NetworkOption, 1, len(opt)+1)newOptions[0] = NetworkOptionGeneric(netOption)newOptions = append(newOptions, opt...)n, err := c.NewNetwork(netType, name, "", newOptions...)if err != nil {t.Fatal(err)}nwList = append(nwList, n)}return c, nwList}func TestSandboxAddEmpty(t *testing.T) {c, _ := getTestEnv(t)ctrlr := c.(*controller)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()}// // If different priorities are specified, internal option and ipv6 addresses mustn't influence endpoint orderfunc TestSandboxAddMultiPrio(t *testing.T) {if !testutils.IsRunningInContainer() {defer testutils.SetupTestOSContext(t)()}opts := [][]NetworkOption{{NetworkOptionEnableIPv6(true), NetworkOptionIpam(ipamapi.DefaultIPAM, "", nil, []*IpamConf{{PreferredPool: "fe90::/64"}}, nil)},{NetworkOptionInternalNetwork()},{},}c, nws := getTestEnv(t, opts...)ctrlr := c.(*controller)sbx, err := ctrlr.NewSandbox("sandbox1")if err != nil {t.Fatal(err)}sid := sbx.ID()ep1, err := nws[0].CreateEndpoint("ep1")if err != nil {t.Fatal(err)}ep2, err := nws[1].CreateEndpoint("ep2")if err != nil {t.Fatal(err)}ep3, err := nws[2].CreateEndpoint("ep3")if err != nil {t.Fatal(err)}if err := ep1.Join(sbx, JoinOptionPriority(1)); err != nil {t.Fatal(err)}if err := ep2.Join(sbx, JoinOptionPriority(2)); err != nil {t.Fatal(err)}if err := ep3.Join(sbx, JoinOptionPriority(3)); err != nil {t.Fatal(err)}if ctrlr.sandboxes[sid].endpoints[0].ID() != ep3.ID() {t.Fatal("Expected ep3 to be at the top of the heap. But did not find ep3 at the top of the heap")}if len(sbx.Endpoints()) != 3 {t.Fatal("Expected 3 endpoints to be connected to the sandbox.")}if err := ep3.Leave(sbx); err != nil {t.Fatal(err)}if ctrlr.sandboxes[sid].endpoints[0].ID() != ep2.ID() {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 ctrlr.sandboxes[sid].endpoints[0].ID() != ep1.ID() {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 backif err := ep3.Join(sbx, JoinOptionPriority(3)); err != nil {t.Fatal(err)}if ctrlr.sandboxes[sid].endpoints[0].ID() != ep3.ID() {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) {if !testutils.IsRunningInContainer() {defer testutils.SetupTestOSContext(t)()}opts := [][]NetworkOption{{},{},{NetworkOptionEnableIPv6(true), NetworkOptionIpam(ipamapi.DefaultIPAM, "", nil, []*IpamConf{{PreferredPool: "fe90::/64"}}, nil)},{NetworkOptionInternalNetwork()},}c, nws := getTestEnv(t, opts...)ctrlr := c.(*controller)sbx, err := ctrlr.NewSandbox("sandbox1")if err != nil {t.Fatal(err)}sid := sbx.ID()epNw1, err := nws[1].CreateEndpoint("ep1")if err != nil {t.Fatal(err)}epIPv6, err := nws[2].CreateEndpoint("ep2")if err != nil {t.Fatal(err)}epInternal, err := nws[3].CreateEndpoint("ep3")if err != nil {t.Fatal(err)}epNw0, err := nws[0].CreateEndpoint("ep4")if err != nil {t.Fatal(err)}if err := epNw1.Join(sbx); err != nil {t.Fatal(err)}if err := epIPv6.Join(sbx); err != nil {t.Fatal(err)}if err := epInternal.Join(sbx); err != nil {t.Fatal(err)}if err := epNw0.Join(sbx); err != nil {t.Fatal(err)}// order should now be: epIPv6, epNw0, epNw1, epInternalif len(sbx.Endpoints()) != 4 {t.Fatal("Expected 4 endpoints to be connected to the sandbox.")}// IPv6 has precedence over IPv4if ctrlr.sandboxes[sid].endpoints[0].ID() != epIPv6.ID() {t.Fatal("Expected epIPv6 to be at the top of the heap. But did not find epIPv6 at the top of the heap")}// internal network has lowest precedenceif ctrlr.sandboxes[sid].endpoints[3].ID() != epInternal.ID() {t.Fatal("Expected epInternal to be at the bottom of the heap. But did not find epInternal at the bottom of the heap")}if err := epIPv6.Leave(sbx); err != nil {t.Fatal(err)}// 'test_nw_0' has precedence over 'test_nw_1'if ctrlr.sandboxes[sid].endpoints[0].ID() != epNw0.ID() {t.Fatal("Expected epNw0 to be at the top of the heap after removing epIPv6. But did not find epNw0 at the top of the heap")}if err := epNw1.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()}
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。