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  }