network_test.go 5.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209
  1. package bridge
  2. import (
  3. "testing"
  4. "github.com/docker/libnetwork/driverapi"
  5. "github.com/docker/libnetwork/netutils"
  6. "github.com/docker/libnetwork/pkg/netlabel"
  7. "github.com/vishvananda/netlink"
  8. )
  9. func TestLinkCreate(t *testing.T) {
  10. defer netutils.SetupTestNetNS(t)()
  11. _, d := New()
  12. dr := d.(*driver)
  13. mtu := 1490
  14. config := &Configuration{
  15. BridgeName: DefaultBridgeName,
  16. Mtu: mtu,
  17. EnableIPv6: true,
  18. }
  19. genericOption := make(map[string]interface{})
  20. genericOption[netlabel.GenericData] = config
  21. if err := d.Config(genericOption); err != nil {
  22. t.Fatalf("Failed to setup driver config: %v", err)
  23. }
  24. err := d.CreateNetwork("dummy", nil)
  25. if err != nil {
  26. t.Fatalf("Failed to create bridge: %v", err)
  27. }
  28. sinfo, err := d.CreateEndpoint("dummy", "", nil)
  29. if err != nil {
  30. if _, ok := err.(InvalidEndpointIDError); !ok {
  31. t.Fatalf("Failed with a wrong error :%s", err.Error())
  32. }
  33. } else {
  34. t.Fatalf("Failed to detect invalid config")
  35. }
  36. // Good endpoint creation
  37. sinfo, err = d.CreateEndpoint("dummy", "ep", nil)
  38. if err != nil {
  39. t.Fatalf("Failed to create a link: %s", err.Error())
  40. }
  41. // Verify sbox endoint interface inherited MTU value from bridge config
  42. sboxLnk, err := netlink.LinkByName(sinfo.Interfaces[0].SrcName)
  43. if err != nil {
  44. t.Fatal(err)
  45. }
  46. if mtu != sboxLnk.Attrs().MTU {
  47. t.Fatalf("Sandbox endpoint interface did not inherit bridge interface MTU config")
  48. }
  49. // TODO: if we could get peer name from (sboxLnk.(*netlink.Veth)).PeerName
  50. // then we could check the MTU on hostLnk as well.
  51. _, err = d.CreateEndpoint("dummy", "ep", nil)
  52. if err == nil {
  53. t.Fatalf("Failed to detect duplicate endpoint id on same network")
  54. }
  55. interfaces := sinfo.Interfaces
  56. if len(interfaces) != 1 {
  57. t.Fatalf("Expected exactly one interface. Instead got %d interface(s)", len(interfaces))
  58. }
  59. if interfaces[0].DstName == "" {
  60. t.Fatal("Invalid Dstname returned")
  61. }
  62. _, err = netlink.LinkByName(interfaces[0].SrcName)
  63. if err != nil {
  64. t.Fatalf("Could not find source link %s: %v", interfaces[0].SrcName, err)
  65. }
  66. n := dr.network
  67. ip := interfaces[0].Address.IP
  68. if !n.bridge.bridgeIPv4.Contains(ip) {
  69. t.Fatalf("IP %s is not a valid ip in the subnet %s", ip.String(), n.bridge.bridgeIPv4.String())
  70. }
  71. ip6 := interfaces[0].AddressIPv6.IP
  72. if !n.bridge.bridgeIPv6.Contains(ip6) {
  73. t.Fatalf("IP %s is not a valid ip in the subnet %s", ip6.String(), bridgeIPv6.String())
  74. }
  75. if !sinfo.Gateway.Equal(n.bridge.bridgeIPv4.IP) {
  76. t.Fatalf("Invalid default gateway. Expected %s. Got %s", n.bridge.bridgeIPv4.IP.String(),
  77. sinfo.Gateway.String())
  78. }
  79. if !sinfo.GatewayIPv6.Equal(n.bridge.bridgeIPv6.IP) {
  80. t.Fatalf("Invalid default gateway for IPv6. Expected %s. Got %s", n.bridge.bridgeIPv6.IP.String(),
  81. sinfo.GatewayIPv6.String())
  82. }
  83. }
  84. func TestLinkCreateTwo(t *testing.T) {
  85. defer netutils.SetupTestNetNS(t)()
  86. _, d := New()
  87. config := &Configuration{
  88. BridgeName: DefaultBridgeName,
  89. EnableIPv6: true}
  90. genericOption := make(map[string]interface{})
  91. genericOption[netlabel.GenericData] = config
  92. if err := d.Config(genericOption); err != nil {
  93. t.Fatalf("Failed to setup driver config: %v", err)
  94. }
  95. err := d.CreateNetwork("dummy", nil)
  96. if err != nil {
  97. t.Fatalf("Failed to create bridge: %v", err)
  98. }
  99. _, err = d.CreateEndpoint("dummy", "ep", nil)
  100. if err != nil {
  101. t.Fatalf("Failed to create a link: %s", err.Error())
  102. }
  103. _, err = d.CreateEndpoint("dummy", "ep", nil)
  104. if err != nil {
  105. if err != driverapi.ErrEndpointExists {
  106. t.Fatalf("Failed with a wrong error :%s", err.Error())
  107. }
  108. } else {
  109. t.Fatalf("Expected to fail while trying to add same endpoint twice")
  110. }
  111. }
  112. func TestLinkCreateNoEnableIPv6(t *testing.T) {
  113. defer netutils.SetupTestNetNS(t)()
  114. _, d := New()
  115. config := &Configuration{
  116. BridgeName: DefaultBridgeName}
  117. genericOption := make(map[string]interface{})
  118. genericOption[netlabel.GenericData] = config
  119. if err := d.Config(genericOption); err != nil {
  120. t.Fatalf("Failed to setup driver config: %v", err)
  121. }
  122. err := d.CreateNetwork("dummy", nil)
  123. if err != nil {
  124. t.Fatalf("Failed to create bridge: %v", err)
  125. }
  126. sinfo, err := d.CreateEndpoint("dummy", "ep", nil)
  127. if err != nil {
  128. t.Fatalf("Failed to create a link: %s", err.Error())
  129. }
  130. interfaces := sinfo.Interfaces
  131. if interfaces[0].AddressIPv6 != nil {
  132. t.Fatalf("Expectd IPv6 address to be nil when IPv6 is not enabled. Got IPv6 = %s", interfaces[0].AddressIPv6.String())
  133. }
  134. if sinfo.GatewayIPv6 != nil {
  135. t.Fatalf("Expected GatewayIPv6 to be nil when IPv6 is not enabled. Got GatewayIPv6 = %s", sinfo.GatewayIPv6.String())
  136. }
  137. }
  138. func TestLinkDelete(t *testing.T) {
  139. defer netutils.SetupTestNetNS(t)()
  140. _, d := New()
  141. config := &Configuration{
  142. BridgeName: DefaultBridgeName,
  143. EnableIPv6: true}
  144. genericOption := make(map[string]interface{})
  145. genericOption[netlabel.GenericData] = config
  146. if err := d.Config(genericOption); err != nil {
  147. t.Fatalf("Failed to setup driver config: %v", err)
  148. }
  149. err := d.CreateNetwork("dummy", nil)
  150. if err != nil {
  151. t.Fatalf("Failed to create bridge: %v", err)
  152. }
  153. _, err = d.CreateEndpoint("dummy", "ep1", nil)
  154. if err != nil {
  155. t.Fatalf("Failed to create a link: %s", err.Error())
  156. }
  157. err = d.DeleteEndpoint("dummy", "")
  158. if err != nil {
  159. if _, ok := err.(InvalidEndpointIDError); !ok {
  160. t.Fatalf("Failed with a wrong error :%s", err.Error())
  161. }
  162. } else {
  163. t.Fatalf("Failed to detect invalid config")
  164. }
  165. err = d.DeleteEndpoint("dummy", "ep1")
  166. if err != nil {
  167. t.Fatal(err)
  168. }
  169. err = d.DeleteEndpoint("dummy", "ep1")
  170. if err == nil {
  171. t.Fatal(err)
  172. }
  173. }