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