libnetwork_test.go 6.2 KB

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