427ad30c05
Perhaps the testutils package in the past had an `init()` function to set up specific things, but it no longer has. so these imports were doing nothing. Signed-off-by: Sebastiaan van Stijn <github@gone.nl>
202 lines
4.8 KiB
Go
202 lines
4.8 KiB
Go
package drvregistry
|
|
|
|
import (
|
|
"runtime"
|
|
"sort"
|
|
"testing"
|
|
|
|
"github.com/docker/docker/libnetwork/datastore"
|
|
"github.com/docker/docker/libnetwork/discoverapi"
|
|
"github.com/docker/docker/libnetwork/driverapi"
|
|
"github.com/docker/docker/libnetwork/ipamapi"
|
|
builtinIpam "github.com/docker/docker/libnetwork/ipams/builtin"
|
|
nullIpam "github.com/docker/docker/libnetwork/ipams/null"
|
|
remoteIpam "github.com/docker/docker/libnetwork/ipams/remote"
|
|
"gotest.tools/v3/assert"
|
|
is "gotest.tools/v3/assert/cmp"
|
|
)
|
|
|
|
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{}, nInfo driverapi.NetworkInfo, 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) IsBuiltIn() bool {
|
|
return true
|
|
}
|
|
|
|
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 (m *mockDriver) EventNotify(etype driverapi.EventType, nid, tableName, key string, value []byte) {
|
|
}
|
|
|
|
func (m *mockDriver) DecodeTableEntry(tablename string, key string, value []byte) (string, map[string]string) {
|
|
return "", nil
|
|
}
|
|
|
|
func getNew(t *testing.T) *DrvRegistry {
|
|
reg, err := New(nil, nil, nil, nil, nil)
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
|
|
err = initIPAMDrivers(reg, nil, nil)
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
return reg
|
|
}
|
|
|
|
func initIPAMDrivers(r *DrvRegistry, lDs, gDs interface{}) error {
|
|
for _, fn := range [](func(ipamapi.Callback, interface{}, interface{}) error){
|
|
builtinIpam.Init,
|
|
remoteIpam.Init,
|
|
nullIpam.Init,
|
|
} {
|
|
if err := fn(r, lDs, gDs); err != nil {
|
|
return err
|
|
}
|
|
}
|
|
|
|
return nil
|
|
}
|
|
func TestNew(t *testing.T) {
|
|
getNew(t)
|
|
}
|
|
|
|
func TestAddDriver(t *testing.T) {
|
|
reg := getNew(t)
|
|
|
|
err := reg.AddDriver(mockDriverName, mockDriverInit, nil)
|
|
assert.NilError(t, err)
|
|
}
|
|
|
|
func TestAddDuplicateDriver(t *testing.T) {
|
|
reg := getNew(t)
|
|
|
|
err := reg.AddDriver(mockDriverName, mockDriverInit, nil)
|
|
assert.NilError(t, err)
|
|
|
|
// Try adding the same driver
|
|
err = reg.AddDriver(mockDriverName, mockDriverInit, nil)
|
|
assert.Check(t, is.ErrorContains(err, ""))
|
|
}
|
|
|
|
func TestIPAMDefaultAddressSpaces(t *testing.T) {
|
|
reg := getNew(t)
|
|
|
|
as1, as2, err := reg.IPAMDefaultAddressSpaces("default")
|
|
assert.NilError(t, err)
|
|
assert.Check(t, as1 != "")
|
|
assert.Check(t, as2 != "")
|
|
}
|
|
|
|
func TestDriver(t *testing.T) {
|
|
reg := getNew(t)
|
|
|
|
err := reg.AddDriver(mockDriverName, mockDriverInit, nil)
|
|
assert.NilError(t, err)
|
|
|
|
d, cap := reg.Driver(mockDriverName)
|
|
assert.Check(t, d != nil)
|
|
assert.Check(t, cap != nil)
|
|
}
|
|
|
|
func TestIPAM(t *testing.T) {
|
|
reg := getNew(t)
|
|
|
|
i, cap := reg.IPAM("default")
|
|
assert.Check(t, i != nil)
|
|
assert.Check(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)
|
|
expected := []string{"default", "null"}
|
|
if runtime.GOOS == "windows" {
|
|
expected = append(expected, "windows")
|
|
}
|
|
assert.Check(t, is.DeepEqual(ipams, expected))
|
|
}
|
|
|
|
func TestWalkDrivers(t *testing.T) {
|
|
reg := getNew(t)
|
|
|
|
err := reg.AddDriver(mockDriverName, mockDriverInit, nil)
|
|
assert.NilError(t, err)
|
|
|
|
var driverName string
|
|
reg.WalkDrivers(func(name string, driver driverapi.Driver, capability driverapi.Capability) bool {
|
|
driverName = name
|
|
return false
|
|
})
|
|
|
|
assert.Check(t, is.Equal(driverName, mockDriverName))
|
|
}
|