github.com/pwn-term/docker@v0.0.0-20210616085119-6e977cce2565/libnetwork/drivers/overlay/ovmanager/ovmanager_test.go (about) 1 package ovmanager 2 3 import ( 4 "fmt" 5 "net" 6 "strings" 7 "testing" 8 9 "github.com/docker/libnetwork/driverapi" 10 "github.com/docker/libnetwork/idm" 11 "github.com/docker/libnetwork/netlabel" 12 _ "github.com/docker/libnetwork/testutils" 13 "github.com/docker/libnetwork/types" 14 "gotest.tools/v3/assert" 15 is "gotest.tools/v3/assert/cmp" 16 ) 17 18 func newDriver(t *testing.T) *driver { 19 d := &driver{ 20 networks: networkTable{}, 21 } 22 23 vxlanIdm, err := idm.New(nil, "vxlan-id", vxlanIDStart, vxlanIDEnd) 24 assert.NilError(t, err) 25 26 d.vxlanIdm = vxlanIdm 27 return d 28 } 29 30 func parseCIDR(t *testing.T, ipnet string) *net.IPNet { 31 subnet, err := types.ParseCIDR(ipnet) 32 assert.NilError(t, err) 33 return subnet 34 } 35 36 func TestNetworkAllocateFree(t *testing.T) { 37 d := newDriver(t) 38 39 ipamData := []driverapi.IPAMData{ 40 { 41 Pool: parseCIDR(t, "10.1.1.0/24"), 42 }, 43 { 44 Pool: parseCIDR(t, "10.1.2.0/24"), 45 }, 46 } 47 48 vals, err := d.NetworkAllocate("testnetwork", nil, ipamData, nil) 49 assert.NilError(t, err) 50 51 vxlanIDs, ok := vals[netlabel.OverlayVxlanIDList] 52 assert.Check(t, is.Equal(true, ok)) 53 assert.Check(t, is.Len(strings.Split(vxlanIDs, ","), 2)) 54 55 err = d.NetworkFree("testnetwork") 56 assert.NilError(t, err) 57 } 58 59 func TestNetworkAllocateUserDefinedVNIs(t *testing.T) { 60 d := newDriver(t) 61 62 ipamData := []driverapi.IPAMData{ 63 { 64 Pool: parseCIDR(t, "10.1.1.0/24"), 65 }, 66 { 67 Pool: parseCIDR(t, "10.1.2.0/24"), 68 }, 69 } 70 71 options := make(map[string]string) 72 // Intentionally add mode vnis than subnets 73 options[netlabel.OverlayVxlanIDList] = fmt.Sprintf("%d,%d,%d", vxlanIDStart, vxlanIDStart+1, vxlanIDStart+2) 74 75 vals, err := d.NetworkAllocate("testnetwork", options, ipamData, nil) 76 assert.NilError(t, err) 77 78 vxlanIDs, ok := vals[netlabel.OverlayVxlanIDList] 79 assert.Check(t, is.Equal(true, ok)) 80 81 // We should only get exactly the same number of vnis as 82 // subnets. No more, no less, even if we passed more vnis. 83 assert.Check(t, is.Len(strings.Split(vxlanIDs, ","), 2)) 84 assert.Check(t, is.Equal(fmt.Sprintf("%d,%d", vxlanIDStart, vxlanIDStart+1), vxlanIDs)) 85 86 err = d.NetworkFree("testnetwork") 87 assert.NilError(t, err) 88 }