mirror of
https://github.com/moby/moby.git
synced 2022-11-09 12:21:53 -05:00
![Jana Radhakrishnan](/assets/img/avatar_default.png)
Because overlay is a builtin driver and global allocation of overlay resources is probably going to happen in a different node (a single node) and the actual plumbing of the network is probably going to happen in all nodes, it makes sense to split the functionality of allocation into two different packages. The central component(this package) only implements the NetworkAllocate/Free apis while the distributed component(the existing overlay driver) implements the rest of the driver api. This way we can reduce the memory footprint overall. Signed-off-by: Jana Radhakrishnan <mrjana@docker.com>
169 lines
3.8 KiB
Go
169 lines
3.8 KiB
Go
package drvregistry
|
|
|
|
import (
|
|
"flag"
|
|
"sort"
|
|
"testing"
|
|
|
|
"github.com/docker/libnetwork/datastore"
|
|
"github.com/docker/libnetwork/discoverapi"
|
|
"github.com/docker/libnetwork/driverapi"
|
|
"github.com/docker/libnetwork/ipamapi"
|
|
"github.com/stretchr/testify/assert"
|
|
)
|
|
|
|
var runningInContainer = flag.Bool("incontainer", false,
|
|
"Indicates if the test is running in a container")
|
|
|
|
const mockDriverName = "mock-driver"
|
|
|
|
type mockDriver struct{}
|
|
|
|
var md = mockDriver{}
|
|
|
|
func mockDriverInit(reg driverapi.DriverCallback, opt map[string]interface{}) error {
|
|
return reg.RegisterDriver(mockDriverName, &md, driverapi.Capability{DataScope: datastore.LocalScope})
|
|
}
|
|
|
|
func (m *mockDriver) CreateNetwork(nid string, options map[string]interface{}, ipV4Data, ipV6Data []driverapi.IPAMData) error {
|
|
return nil
|
|
}
|
|
|
|
func (m *mockDriver) DeleteNetwork(nid string) error {
|
|
return nil
|
|
}
|
|
|
|
func (m *mockDriver) CreateEndpoint(nid, eid string, ifInfo driverapi.InterfaceInfo, options map[string]interface{}) error {
|
|
return nil
|
|
}
|
|
|
|
func (m *mockDriver) DeleteEndpoint(nid, eid string) error {
|
|
return nil
|
|
}
|
|
|
|
func (m *mockDriver) EndpointOperInfo(nid, eid string) (map[string]interface{}, error) {
|
|
return nil, nil
|
|
}
|
|
|
|
func (m *mockDriver) Join(nid, eid string, sboxKey string, jinfo driverapi.JoinInfo, options map[string]interface{}) error {
|
|
return nil
|
|
}
|
|
|
|
func (m *mockDriver) Leave(nid, eid string) error {
|
|
return nil
|
|
}
|
|
|
|
func (m *mockDriver) DiscoverNew(dType discoverapi.DiscoveryType, data interface{}) error {
|
|
return nil
|
|
}
|
|
|
|
func (m *mockDriver) DiscoverDelete(dType discoverapi.DiscoveryType, data interface{}) error {
|
|
return nil
|
|
}
|
|
|
|
func (m *mockDriver) Type() string {
|
|
return mockDriverName
|
|
}
|
|
|
|
func (m *mockDriver) ProgramExternalConnectivity(nid, eid string, options map[string]interface{}) error {
|
|
return nil
|
|
}
|
|
|
|
func (m *mockDriver) RevokeExternalConnectivity(nid, eid string) error {
|
|
return nil
|
|
}
|
|
|
|
func (m *mockDriver) NetworkAllocate(id string, option map[string]string, ipV4Data, ipV6Data []driverapi.IPAMData) (map[string]string, error) {
|
|
return nil, nil
|
|
}
|
|
|
|
func (m *mockDriver) NetworkFree(id string) error {
|
|
return nil
|
|
}
|
|
|
|
func getNew(t *testing.T) *DrvRegistry {
|
|
reg, err := New(nil, nil, nil, nil)
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
|
|
return reg
|
|
}
|
|
|
|
func TestNew(t *testing.T) {
|
|
getNew(t)
|
|
}
|
|
|
|
func TestAddDriver(t *testing.T) {
|
|
reg := getNew(t)
|
|
|
|
err := reg.AddDriver(mockDriverName, mockDriverInit, nil)
|
|
assert.NoError(t, err)
|
|
}
|
|
|
|
func TestAddDuplicateDriver(t *testing.T) {
|
|
reg := getNew(t)
|
|
|
|
err := reg.AddDriver(mockDriverName, mockDriverInit, nil)
|
|
assert.NoError(t, err)
|
|
|
|
// Try adding the same driver
|
|
err = reg.AddDriver(mockDriverName, mockDriverInit, nil)
|
|
assert.Error(t, err)
|
|
}
|
|
|
|
func TestIPAMDefaultAddressSpaces(t *testing.T) {
|
|
reg := getNew(t)
|
|
|
|
as1, as2, err := reg.IPAMDefaultAddressSpaces("default")
|
|
assert.NoError(t, err)
|
|
assert.NotEqual(t, as1, "")
|
|
assert.NotEqual(t, as2, "")
|
|
}
|
|
|
|
func TestDriver(t *testing.T) {
|
|
reg := getNew(t)
|
|
|
|
err := reg.AddDriver(mockDriverName, mockDriverInit, nil)
|
|
assert.NoError(t, err)
|
|
|
|
d, cap := reg.Driver(mockDriverName)
|
|
assert.NotEqual(t, d, nil)
|
|
assert.NotEqual(t, cap, nil)
|
|
}
|
|
|
|
func TestIPAM(t *testing.T) {
|
|
reg := getNew(t)
|
|
|
|
i, cap := reg.IPAM("default")
|
|
assert.NotEqual(t, i, nil)
|
|
assert.NotEqual(t, cap, nil)
|
|
}
|
|
|
|
func TestWalkIPAMs(t *testing.T) {
|
|
reg := getNew(t)
|
|
|
|
ipams := make([]string, 0, 2)
|
|
reg.WalkIPAMs(func(name string, driver ipamapi.Ipam, cap *ipamapi.Capability) bool {
|
|
ipams = append(ipams, name)
|
|
return false
|
|
})
|
|
|
|
sort.Strings(ipams)
|
|
assert.Equal(t, ipams, []string{"default", "null"})
|
|
}
|
|
|
|
func TestWalkDrivers(t *testing.T) {
|
|
reg := getNew(t)
|
|
|
|
err := reg.AddDriver(mockDriverName, mockDriverInit, nil)
|
|
assert.NoError(t, err)
|
|
|
|
var driverName string
|
|
reg.WalkDrivers(func(name string, driver driverapi.Driver, capability driverapi.Capability) bool {
|
|
driverName = name
|
|
return false
|
|
})
|
|
|
|
assert.Equal(t, driverName, mockDriverName)
|
|
}
|