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