123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119 |
- package driverapi
- import (
- "encoding/json"
- "net"
- "testing"
- _ "github.com/docker/libnetwork/testutils"
- "github.com/docker/libnetwork/types"
- )
- func TestIPDataMarshalling(t *testing.T) {
- i := &IPAMData{
- AddressSpace: "giallo",
- Pool: &net.IPNet{IP: net.IP{10, 10, 10, 8}, Mask: net.IPMask{255, 255, 255, 0}},
- Gateway: &net.IPNet{IP: net.IP{10, 10, 10, 254}, Mask: net.IPMask{255, 255, 255, 0}},
- AuxAddresses: map[string]*net.IPNet{
- "ip1": &net.IPNet{IP: net.IP{10, 10, 10, 1}, Mask: net.IPMask{255, 255, 255, 0}},
- "ip2": &net.IPNet{IP: net.IP{10, 10, 10, 2}, Mask: net.IPMask{255, 255, 255, 0}},
- },
- }
- b, err := json.Marshal(i)
- if err != nil {
- t.Fatal(err)
- }
- ii := &IPAMData{}
- err = json.Unmarshal(b, &ii)
- if err != nil {
- t.Fatal(err)
- }
- if i.AddressSpace != ii.AddressSpace || !types.CompareIPNet(i.Pool, ii.Pool) ||
- !types.CompareIPNet(i.Gateway, ii.Gateway) ||
- !compareAddresses(i.AuxAddresses, ii.AuxAddresses) {
- t.Fatalf("JSON marsh/unmarsh failed.\nOriginal:\n%s\nDecoded:\n%s", i, ii)
- }
- }
- func compareAddresses(a, b map[string]*net.IPNet) bool {
- if len(a) != len(b) {
- return false
- }
- if len(a) > 0 {
- for k := range a {
- if !types.CompareIPNet(a[k], b[k]) {
- return false
- }
- }
- }
- return true
- }
- func TestValidateAndIsV6(t *testing.T) {
- var err error
- i := &IPAMData{
- Pool: &net.IPNet{IP: net.IP{10, 10, 10, 8}, Mask: net.IPMask{255, 255, 255, 0}},
- Gateway: &net.IPNet{IP: net.IP{10, 10, 10, 254}, Mask: net.IPMask{255, 255, 255, 0}},
- AuxAddresses: map[string]*net.IPNet{
- "ip1": &net.IPNet{IP: net.IP{10, 10, 10, 1}, Mask: net.IPMask{255, 255, 255, 0}},
- "ip2": &net.IPNet{IP: net.IP{10, 10, 10, 2}, Mask: net.IPMask{255, 255, 255, 0}},
- },
- }
- // Check ip version
- if i.IsV6() {
- t.Fatalf("incorrect ip version returned")
- }
- orig := i.Pool
- if i.Pool, err = types.ParseCIDR("2003::33/64"); err != nil {
- t.Fatal(err)
- }
- if !i.IsV6() {
- t.Fatalf("incorrect ip version returned")
- }
- i.Pool = orig
- // valid ip data
- if err = i.Validate(); err != nil {
- t.Fatal(err)
- }
- // incongruent gw ver
- if i.Gateway, err = types.ParseCIDR("2001::45/65"); err != nil {
- t.Fatal(err)
- }
- if err = i.Validate(); err == nil {
- t.Fatalf("expected error but succeded")
- }
- i.Gateway = nil
- // incongruent secondary ip ver
- if i.AuxAddresses["ip2"], err = types.ParseCIDR("2002::44/80"); err != nil {
- t.Fatal(err)
- }
- if err = i.Validate(); err == nil {
- t.Fatalf("expected error but succeded")
- }
- delete(i.AuxAddresses, "ip2")
- // gw outside pool
- if i.Gateway, err = types.ParseCIDR("10.10.15.254/24"); err != nil {
- t.Fatal(err)
- }
- if err = i.Validate(); err == nil {
- t.Fatalf("expected error but succeded")
- }
- i.Gateway = nil
- // sec ip outside of pool
- if i.AuxAddresses["ip1"], err = types.ParseCIDR("10.10.2.1/24"); err != nil {
- t.Fatal(err)
- }
- if err = i.Validate(); err == nil {
- t.Fatalf("expected error but succeded")
- }
- }
|