drvregistry_test.go 4.8 KB

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