libnetwork_test.go 6.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301
  1. package libnetwork_test
  2. import (
  3. "net"
  4. "testing"
  5. log "github.com/Sirupsen/logrus"
  6. "github.com/docker/libnetwork"
  7. "github.com/docker/libnetwork/netutils"
  8. "github.com/docker/libnetwork/pkg/options"
  9. )
  10. const (
  11. netType = "bridge"
  12. bridgeName = "dockertest0"
  13. )
  14. func createTestNetwork(networkType, networkName string, option options.Generic) (libnetwork.Network, error) {
  15. controller := libnetwork.New()
  16. err := controller.ConfigureNetworkDriver(networkType, option)
  17. if err != nil {
  18. return nil, err
  19. }
  20. network, err := controller.NewNetwork(networkType, networkName, "")
  21. if err != nil {
  22. return nil, err
  23. }
  24. return network, nil
  25. }
  26. func Testbridge(t *testing.T) {
  27. defer netutils.SetupTestNetNS(t)()
  28. ip, subnet, err := net.ParseCIDR("192.168.100.1/24")
  29. if err != nil {
  30. t.Fatal(err)
  31. }
  32. subnet.IP = ip
  33. ip, cidr, err := net.ParseCIDR("192.168.100.2/28")
  34. if err != nil {
  35. t.Fatal(err)
  36. }
  37. cidr.IP = ip
  38. ip, cidrv6, err := net.ParseCIDR("fe90::1/96")
  39. if err != nil {
  40. t.Fatal(err)
  41. }
  42. cidrv6.IP = ip
  43. log.Debug("Adding a bridge")
  44. option := options.Generic{
  45. "BridgeName": bridgeName,
  46. "AddressIPv4": subnet,
  47. "FixedCIDR": cidr,
  48. "FixedCIDRv6": cidrv6,
  49. "EnableIPv6": true,
  50. "EnableIPTables": true,
  51. "EnableIPMasquerade": true,
  52. "EnableICC": true,
  53. "EnableIPForwarding": true,
  54. "AllowNonDefaultBridge": true}
  55. network, err := createTestNetwork(netType, "testnetwork", option)
  56. if err != nil {
  57. t.Fatal(err)
  58. }
  59. ep, err := network.CreateEndpoint("testep", "sb1", nil)
  60. if err != nil {
  61. t.Fatal(err)
  62. }
  63. epList := network.Endpoints()
  64. if len(epList) != 1 {
  65. t.Fatal(err)
  66. }
  67. if ep != epList[0] {
  68. t.Fatal(err)
  69. }
  70. if err := ep.Delete(); err != nil {
  71. t.Fatal(err)
  72. }
  73. if err := network.Delete(); err != nil {
  74. t.Fatal(err)
  75. }
  76. }
  77. func TestUnknownDriver(t *testing.T) {
  78. defer netutils.SetupTestNetNS(t)()
  79. _, err := createTestNetwork("unknowndriver", "testnetwork", options.Generic{})
  80. if err == nil {
  81. t.Fatal("Expected to fail. But instead succeeded")
  82. }
  83. if _, ok := err.(libnetwork.NetworkTypeError); !ok {
  84. t.Fatalf("Did not fail with expected error. Actual error: %v", err)
  85. }
  86. }
  87. func TestNilDriver(t *testing.T) {
  88. controller := libnetwork.New()
  89. option := options.Generic{}
  90. _, err := controller.NewNetwork("framerelay", "dummy", option)
  91. if err == nil {
  92. t.Fatal("Expected to fail. But instead succeeded")
  93. }
  94. if err != libnetwork.ErrInvalidNetworkDriver {
  95. t.Fatalf("Did not fail with expected error. Actual error: %v", err)
  96. }
  97. }
  98. func TestNoInitDriver(t *testing.T) {
  99. controller := libnetwork.New()
  100. option := options.Generic{}
  101. _, err := controller.NewNetwork("ppp", "dummy", option)
  102. if err == nil {
  103. t.Fatal("Expected to fail. But instead succeeded")
  104. }
  105. if err != libnetwork.ErrInvalidNetworkDriver {
  106. t.Fatalf("Did not fail with expected error. Actual error: %v", err)
  107. }
  108. }
  109. func TestDuplicateNetwork(t *testing.T) {
  110. defer netutils.SetupTestNetNS(t)()
  111. controller := libnetwork.New()
  112. option := options.Generic{}
  113. err := controller.ConfigureNetworkDriver(netType, option)
  114. if err != nil {
  115. t.Fatal(err)
  116. }
  117. _, err = controller.NewNetwork(netType, "testnetwork", "")
  118. if err != nil {
  119. t.Fatal(err)
  120. }
  121. _, err = controller.NewNetwork(netType, "testnetwork", "")
  122. if err == nil {
  123. t.Fatal("Expected to fail. But instead succeeded")
  124. }
  125. if _, ok := err.(libnetwork.NetworkNameError); !ok {
  126. t.Fatalf("Did not fail with expected error. Actual error: %v", err)
  127. }
  128. }
  129. func TestNetworkName(t *testing.T) {
  130. networkName := "testnetwork"
  131. n, err := createTestNetwork(netType, networkName, options.Generic{})
  132. if err != nil {
  133. t.Fatal(err)
  134. }
  135. if n.Name() != networkName {
  136. t.Fatalf("Expected network name %s, got %s", networkName, n.Name())
  137. }
  138. }
  139. func TestNetworkType(t *testing.T) {
  140. networkType := netType
  141. n, err := createTestNetwork(networkType, "testnetwork", options.Generic{})
  142. if err != nil {
  143. t.Fatal(err)
  144. }
  145. if n.Type() != networkType {
  146. t.Fatalf("Expected network type %s, got %s", networkType, n.Type())
  147. }
  148. }
  149. func TestNetworkID(t *testing.T) {
  150. networkType := netType
  151. n, err := createTestNetwork(networkType, "testnetwork", options.Generic{})
  152. if err != nil {
  153. t.Fatal(err)
  154. }
  155. if n.ID() == "" {
  156. t.Fatal("Expected non-empty network id")
  157. }
  158. }
  159. func TestDeleteNetworkWithActiveEndpoints(t *testing.T) {
  160. defer netutils.SetupTestNetNS(t)()
  161. option := options.Generic{
  162. "BridgeName": bridgeName,
  163. "AllowNonDefaultBridge": true}
  164. network, err := createTestNetwork(netType, "testnetwork", option)
  165. if err != nil {
  166. t.Fatal(err)
  167. }
  168. ep, err := network.CreateEndpoint("testep", "sb2", nil)
  169. if err != nil {
  170. t.Fatal(err)
  171. }
  172. err = network.Delete()
  173. if err == nil {
  174. t.Fatal("Expected to fail. But instead succeeded")
  175. }
  176. if _, ok := err.(*libnetwork.ActiveEndpointsError); !ok {
  177. t.Fatalf("Did not fail with expected error. Actual error: %v", err)
  178. }
  179. // Done testing. Now cleanup.
  180. if err := ep.Delete(); err != nil {
  181. t.Fatal(err)
  182. }
  183. if err := network.Delete(); err != nil {
  184. t.Fatal(err)
  185. }
  186. }
  187. func TestUnknownNetwork(t *testing.T) {
  188. defer netutils.SetupTestNetNS(t)()
  189. option := options.Generic{
  190. "BridgeName": bridgeName,
  191. "AllowNonDefaultBridge": true}
  192. network, err := createTestNetwork(netType, "testnetwork", option)
  193. if err != nil {
  194. t.Fatal(err)
  195. }
  196. err = network.Delete()
  197. if err != nil {
  198. t.Fatal(err)
  199. }
  200. err = network.Delete()
  201. if err == nil {
  202. t.Fatal("Expected to fail. But instead succeeded")
  203. }
  204. if _, ok := err.(*libnetwork.UnknownNetworkError); !ok {
  205. t.Fatalf("Did not fail with expected error. Actual error: %v", err)
  206. }
  207. }
  208. func TestUnknownEndpoint(t *testing.T) {
  209. defer netutils.SetupTestNetNS(t)()
  210. ip, subnet, err := net.ParseCIDR("192.168.100.1/24")
  211. if err != nil {
  212. t.Fatal(err)
  213. }
  214. subnet.IP = ip
  215. option := options.Generic{
  216. "BridgeName": bridgeName,
  217. "AddressIPv4": subnet,
  218. "AllowNonDefaultBridge": true}
  219. network, err := createTestNetwork(netType, "testnetwork", option)
  220. if err != nil {
  221. t.Fatal(err)
  222. }
  223. ep, err := network.CreateEndpoint("testep", "sb1", nil)
  224. if err != nil {
  225. t.Fatal(err)
  226. }
  227. err = ep.Delete()
  228. if err != nil {
  229. t.Fatal(err)
  230. }
  231. err = ep.Delete()
  232. if err == nil {
  233. t.Fatal("Expected to fail. But instead succeeded")
  234. }
  235. if _, ok := err.(*libnetwork.UnknownEndpointError); !ok {
  236. t.Fatalf("Did not fail with expected error. Actual error: %v", err)
  237. }
  238. // Done testing. Now cleanup
  239. if err := network.Delete(); err != nil {
  240. t.Fatal(err)
  241. }
  242. }