123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202 |
- 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))
- }
|