drvregistry_test.go 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169
  1. package drvregistry
  2. import (
  3. "flag"
  4. "sort"
  5. "testing"
  6. "github.com/docker/libnetwork/datastore"
  7. "github.com/docker/libnetwork/discoverapi"
  8. "github.com/docker/libnetwork/driverapi"
  9. "github.com/docker/libnetwork/ipamapi"
  10. "github.com/stretchr/testify/assert"
  11. )
  12. var runningInContainer = flag.Bool("incontainer", false,
  13. "Indicates if the test is running in a container")
  14. const mockDriverName = "mock-driver"
  15. type mockDriver struct{}
  16. var md = mockDriver{}
  17. func mockDriverInit(reg driverapi.DriverCallback, opt map[string]interface{}) error {
  18. return reg.RegisterDriver(mockDriverName, &md, driverapi.Capability{DataScope: datastore.LocalScope})
  19. }
  20. func (m *mockDriver) CreateNetwork(nid string, options map[string]interface{}, ipV4Data, ipV6Data []driverapi.IPAMData) error {
  21. return nil
  22. }
  23. func (m *mockDriver) DeleteNetwork(nid string) error {
  24. return nil
  25. }
  26. func (m *mockDriver) CreateEndpoint(nid, eid string, ifInfo driverapi.InterfaceInfo, options map[string]interface{}) error {
  27. return nil
  28. }
  29. func (m *mockDriver) DeleteEndpoint(nid, eid string) error {
  30. return nil
  31. }
  32. func (m *mockDriver) EndpointOperInfo(nid, eid string) (map[string]interface{}, error) {
  33. return nil, nil
  34. }
  35. func (m *mockDriver) Join(nid, eid string, sboxKey string, jinfo driverapi.JoinInfo, options map[string]interface{}) error {
  36. return nil
  37. }
  38. func (m *mockDriver) Leave(nid, eid string) error {
  39. return nil
  40. }
  41. func (m *mockDriver) DiscoverNew(dType discoverapi.DiscoveryType, data interface{}) error {
  42. return nil
  43. }
  44. func (m *mockDriver) DiscoverDelete(dType discoverapi.DiscoveryType, data interface{}) error {
  45. return nil
  46. }
  47. func (m *mockDriver) Type() string {
  48. return mockDriverName
  49. }
  50. func (m *mockDriver) ProgramExternalConnectivity(nid, eid string, options map[string]interface{}) error {
  51. return nil
  52. }
  53. func (m *mockDriver) RevokeExternalConnectivity(nid, eid string) error {
  54. return nil
  55. }
  56. func (m *mockDriver) NetworkAllocate(id string, option map[string]string, ipV4Data, ipV6Data []driverapi.IPAMData) (map[string]string, error) {
  57. return nil, nil
  58. }
  59. func (m *mockDriver) NetworkFree(id string) error {
  60. return nil
  61. }
  62. func getNew(t *testing.T) *DrvRegistry {
  63. reg, err := New(nil, nil, nil, nil)
  64. if err != nil {
  65. t.Fatal(err)
  66. }
  67. return reg
  68. }
  69. func TestNew(t *testing.T) {
  70. getNew(t)
  71. }
  72. func TestAddDriver(t *testing.T) {
  73. reg := getNew(t)
  74. err := reg.AddDriver(mockDriverName, mockDriverInit, nil)
  75. assert.NoError(t, err)
  76. }
  77. func TestAddDuplicateDriver(t *testing.T) {
  78. reg := getNew(t)
  79. err := reg.AddDriver(mockDriverName, mockDriverInit, nil)
  80. assert.NoError(t, err)
  81. // Try adding the same driver
  82. err = reg.AddDriver(mockDriverName, mockDriverInit, nil)
  83. assert.Error(t, err)
  84. }
  85. func TestIPAMDefaultAddressSpaces(t *testing.T) {
  86. reg := getNew(t)
  87. as1, as2, err := reg.IPAMDefaultAddressSpaces("default")
  88. assert.NoError(t, err)
  89. assert.NotEqual(t, as1, "")
  90. assert.NotEqual(t, as2, "")
  91. }
  92. func TestDriver(t *testing.T) {
  93. reg := getNew(t)
  94. err := reg.AddDriver(mockDriverName, mockDriverInit, nil)
  95. assert.NoError(t, err)
  96. d, cap := reg.Driver(mockDriverName)
  97. assert.NotEqual(t, d, nil)
  98. assert.NotEqual(t, cap, nil)
  99. }
  100. func TestIPAM(t *testing.T) {
  101. reg := getNew(t)
  102. i, cap := reg.IPAM("default")
  103. assert.NotEqual(t, i, nil)
  104. assert.NotEqual(t, cap, nil)
  105. }
  106. func TestWalkIPAMs(t *testing.T) {
  107. reg := getNew(t)
  108. ipams := make([]string, 0, 2)
  109. reg.WalkIPAMs(func(name string, driver ipamapi.Ipam, cap *ipamapi.Capability) bool {
  110. ipams = append(ipams, name)
  111. return false
  112. })
  113. sort.Strings(ipams)
  114. assert.Equal(t, ipams, []string{"default", "null"})
  115. }
  116. func TestWalkDrivers(t *testing.T) {
  117. reg := getNew(t)
  118. err := reg.AddDriver(mockDriverName, mockDriverInit, nil)
  119. assert.NoError(t, err)
  120. var driverName string
  121. reg.WalkDrivers(func(name string, driver driverapi.Driver, capability driverapi.Capability) bool {
  122. driverName = name
  123. return false
  124. })
  125. assert.Equal(t, driverName, mockDriverName)
  126. }