github.com/rumpl/bof@v23.0.0-rc.2+incompatible/libnetwork/drvregistry/drvregistry_test.go (about)

     1  package drvregistry
     2  
     3  import (
     4  	"runtime"
     5  	"sort"
     6  	"testing"
     7  
     8  	"github.com/docker/docker/libnetwork/datastore"
     9  	"github.com/docker/docker/libnetwork/discoverapi"
    10  	"github.com/docker/docker/libnetwork/driverapi"
    11  	"github.com/docker/docker/libnetwork/ipamapi"
    12  	builtinIpam "github.com/docker/docker/libnetwork/ipams/builtin"
    13  	nullIpam "github.com/docker/docker/libnetwork/ipams/null"
    14  	remoteIpam "github.com/docker/docker/libnetwork/ipams/remote"
    15  	"gotest.tools/v3/assert"
    16  	is "gotest.tools/v3/assert/cmp"
    17  )
    18  
    19  const mockDriverName = "mock-driver"
    20  
    21  type mockDriver struct{}
    22  
    23  var md = mockDriver{}
    24  
    25  func mockDriverInit(reg driverapi.DriverCallback, opt map[string]interface{}) error {
    26  	return reg.RegisterDriver(mockDriverName, &md, driverapi.Capability{DataScope: datastore.LocalScope})
    27  }
    28  
    29  func (m *mockDriver) CreateNetwork(nid string, options map[string]interface{}, nInfo driverapi.NetworkInfo, ipV4Data, ipV6Data []driverapi.IPAMData) error {
    30  	return nil
    31  }
    32  
    33  func (m *mockDriver) DeleteNetwork(nid string) error {
    34  	return nil
    35  }
    36  
    37  func (m *mockDriver) CreateEndpoint(nid, eid string, ifInfo driverapi.InterfaceInfo, options map[string]interface{}) error {
    38  	return nil
    39  }
    40  
    41  func (m *mockDriver) DeleteEndpoint(nid, eid string) error {
    42  	return nil
    43  }
    44  
    45  func (m *mockDriver) EndpointOperInfo(nid, eid string) (map[string]interface{}, error) {
    46  	return nil, nil
    47  }
    48  
    49  func (m *mockDriver) Join(nid, eid string, sboxKey string, jinfo driverapi.JoinInfo, options map[string]interface{}) error {
    50  	return nil
    51  }
    52  
    53  func (m *mockDriver) Leave(nid, eid string) error {
    54  	return nil
    55  }
    56  
    57  func (m *mockDriver) DiscoverNew(dType discoverapi.DiscoveryType, data interface{}) error {
    58  	return nil
    59  }
    60  
    61  func (m *mockDriver) DiscoverDelete(dType discoverapi.DiscoveryType, data interface{}) error {
    62  	return nil
    63  }
    64  
    65  func (m *mockDriver) Type() string {
    66  	return mockDriverName
    67  }
    68  
    69  func (m *mockDriver) IsBuiltIn() bool {
    70  	return true
    71  }
    72  
    73  func (m *mockDriver) ProgramExternalConnectivity(nid, eid string, options map[string]interface{}) error {
    74  	return nil
    75  }
    76  
    77  func (m *mockDriver) RevokeExternalConnectivity(nid, eid string) error {
    78  	return nil
    79  }
    80  
    81  func (m *mockDriver) NetworkAllocate(id string, option map[string]string, ipV4Data, ipV6Data []driverapi.IPAMData) (map[string]string, error) {
    82  	return nil, nil
    83  }
    84  
    85  func (m *mockDriver) NetworkFree(id string) error {
    86  	return nil
    87  }
    88  
    89  func (m *mockDriver) EventNotify(etype driverapi.EventType, nid, tableName, key string, value []byte) {
    90  }
    91  
    92  func (m *mockDriver) DecodeTableEntry(tablename string, key string, value []byte) (string, map[string]string) {
    93  	return "", nil
    94  }
    95  
    96  func getNew(t *testing.T) *DrvRegistry {
    97  	reg, err := New(nil, nil, nil, nil, nil)
    98  	if err != nil {
    99  		t.Fatal(err)
   100  	}
   101  
   102  	err = initIPAMDrivers(reg, nil, nil)
   103  	if err != nil {
   104  		t.Fatal(err)
   105  	}
   106  	return reg
   107  }
   108  
   109  func initIPAMDrivers(r *DrvRegistry, lDs, gDs interface{}) error {
   110  	for _, fn := range [](func(ipamapi.Callback, interface{}, interface{}) error){
   111  		builtinIpam.Init,
   112  		remoteIpam.Init,
   113  		nullIpam.Init,
   114  	} {
   115  		if err := fn(r, lDs, gDs); err != nil {
   116  			return err
   117  		}
   118  	}
   119  
   120  	return nil
   121  }
   122  func TestNew(t *testing.T) {
   123  	getNew(t)
   124  }
   125  
   126  func TestAddDriver(t *testing.T) {
   127  	reg := getNew(t)
   128  
   129  	err := reg.AddDriver(mockDriverName, mockDriverInit, nil)
   130  	assert.NilError(t, err)
   131  }
   132  
   133  func TestAddDuplicateDriver(t *testing.T) {
   134  	reg := getNew(t)
   135  
   136  	err := reg.AddDriver(mockDriverName, mockDriverInit, nil)
   137  	assert.NilError(t, err)
   138  
   139  	// Try adding the same driver
   140  	err = reg.AddDriver(mockDriverName, mockDriverInit, nil)
   141  	assert.Check(t, is.ErrorContains(err, ""))
   142  }
   143  
   144  func TestIPAMDefaultAddressSpaces(t *testing.T) {
   145  	reg := getNew(t)
   146  
   147  	as1, as2, err := reg.IPAMDefaultAddressSpaces("default")
   148  	assert.NilError(t, err)
   149  	assert.Check(t, as1 != "")
   150  	assert.Check(t, as2 != "")
   151  }
   152  
   153  func TestDriver(t *testing.T) {
   154  	reg := getNew(t)
   155  
   156  	err := reg.AddDriver(mockDriverName, mockDriverInit, nil)
   157  	assert.NilError(t, err)
   158  
   159  	d, cap := reg.Driver(mockDriverName)
   160  	assert.Check(t, d != nil)
   161  	assert.Check(t, cap != nil)
   162  }
   163  
   164  func TestIPAM(t *testing.T) {
   165  	reg := getNew(t)
   166  
   167  	i, cap := reg.IPAM("default")
   168  	assert.Check(t, i != nil)
   169  	assert.Check(t, cap != nil)
   170  }
   171  
   172  func TestWalkIPAMs(t *testing.T) {
   173  	reg := getNew(t)
   174  
   175  	ipams := make([]string, 0, 2)
   176  	reg.WalkIPAMs(func(name string, driver ipamapi.Ipam, cap *ipamapi.Capability) bool {
   177  		ipams = append(ipams, name)
   178  		return false
   179  	})
   180  
   181  	sort.Strings(ipams)
   182  	expected := []string{"default", "null"}
   183  	if runtime.GOOS == "windows" {
   184  		expected = append(expected, "windows")
   185  	}
   186  	assert.Check(t, is.DeepEqual(ipams, expected))
   187  }
   188  
   189  func TestWalkDrivers(t *testing.T) {
   190  	reg := getNew(t)
   191  
   192  	err := reg.AddDriver(mockDriverName, mockDriverInit, nil)
   193  	assert.NilError(t, err)
   194  
   195  	var driverName string
   196  	reg.WalkDrivers(func(name string, driver driverapi.Driver, capability driverapi.Capability) bool {
   197  		driverName = name
   198  		return false
   199  	})
   200  
   201  	assert.Check(t, is.Equal(driverName, mockDriverName))
   202  }