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 }