driverapi_test.go 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119
  1. package driverapi
  2. import (
  3. "encoding/json"
  4. "net"
  5. "testing"
  6. _ "github.com/docker/libnetwork/testutils"
  7. "github.com/docker/libnetwork/types"
  8. )
  9. func TestIPDataMarshalling(t *testing.T) {
  10. i := &IPAMData{
  11. AddressSpace: "giallo",
  12. Pool: &net.IPNet{IP: net.IP{10, 10, 10, 8}, Mask: net.IPMask{255, 255, 255, 0}},
  13. Gateway: &net.IPNet{IP: net.IP{10, 10, 10, 254}, Mask: net.IPMask{255, 255, 255, 0}},
  14. AuxAddresses: map[string]*net.IPNet{
  15. "ip1": &net.IPNet{IP: net.IP{10, 10, 10, 1}, Mask: net.IPMask{255, 255, 255, 0}},
  16. "ip2": &net.IPNet{IP: net.IP{10, 10, 10, 2}, Mask: net.IPMask{255, 255, 255, 0}},
  17. },
  18. }
  19. b, err := json.Marshal(i)
  20. if err != nil {
  21. t.Fatal(err)
  22. }
  23. ii := &IPAMData{}
  24. err = json.Unmarshal(b, &ii)
  25. if err != nil {
  26. t.Fatal(err)
  27. }
  28. if i.AddressSpace != ii.AddressSpace || !types.CompareIPNet(i.Pool, ii.Pool) ||
  29. !types.CompareIPNet(i.Gateway, ii.Gateway) ||
  30. !compareAddresses(i.AuxAddresses, ii.AuxAddresses) {
  31. t.Fatalf("JSON marsh/unmarsh failed.\nOriginal:\n%s\nDecoded:\n%s", i, ii)
  32. }
  33. }
  34. func compareAddresses(a, b map[string]*net.IPNet) bool {
  35. if len(a) != len(b) {
  36. return false
  37. }
  38. if len(a) > 0 {
  39. for k := range a {
  40. if !types.CompareIPNet(a[k], b[k]) {
  41. return false
  42. }
  43. }
  44. }
  45. return true
  46. }
  47. func TestValidateAndIsV6(t *testing.T) {
  48. var err error
  49. i := &IPAMData{
  50. Pool: &net.IPNet{IP: net.IP{10, 10, 10, 8}, Mask: net.IPMask{255, 255, 255, 0}},
  51. Gateway: &net.IPNet{IP: net.IP{10, 10, 10, 254}, Mask: net.IPMask{255, 255, 255, 0}},
  52. AuxAddresses: map[string]*net.IPNet{
  53. "ip1": &net.IPNet{IP: net.IP{10, 10, 10, 1}, Mask: net.IPMask{255, 255, 255, 0}},
  54. "ip2": &net.IPNet{IP: net.IP{10, 10, 10, 2}, Mask: net.IPMask{255, 255, 255, 0}},
  55. },
  56. }
  57. // Check ip version
  58. if i.IsV6() {
  59. t.Fatalf("incorrect ip version returned")
  60. }
  61. orig := i.Pool
  62. if i.Pool, err = types.ParseCIDR("2003::33/64"); err != nil {
  63. t.Fatal(err)
  64. }
  65. if !i.IsV6() {
  66. t.Fatalf("incorrect ip version returned")
  67. }
  68. i.Pool = orig
  69. // valid ip data
  70. if err = i.Validate(); err != nil {
  71. t.Fatal(err)
  72. }
  73. // incongruent gw ver
  74. if i.Gateway, err = types.ParseCIDR("2001::45/65"); err != nil {
  75. t.Fatal(err)
  76. }
  77. if err = i.Validate(); err == nil {
  78. t.Fatalf("expected error but succeded")
  79. }
  80. i.Gateway = nil
  81. // incongruent secondary ip ver
  82. if i.AuxAddresses["ip2"], err = types.ParseCIDR("2002::44/80"); err != nil {
  83. t.Fatal(err)
  84. }
  85. if err = i.Validate(); err == nil {
  86. t.Fatalf("expected error but succeded")
  87. }
  88. delete(i.AuxAddresses, "ip2")
  89. // gw outside pool
  90. if i.Gateway, err = types.ParseCIDR("10.10.15.254/24"); err != nil {
  91. t.Fatal(err)
  92. }
  93. if err = i.Validate(); err == nil {
  94. t.Fatalf("expected error but succeded")
  95. }
  96. i.Gateway = nil
  97. // sec ip outside of pool
  98. if i.AuxAddresses["ip1"], err = types.ParseCIDR("10.10.2.1/24"); err != nil {
  99. t.Fatal(err)
  100. }
  101. if err = i.Validate(); err == nil {
  102. t.Fatalf("expected error but succeded")
  103. }
  104. }