| package net |
| |
| import ( |
| "fmt" |
| "net" |
| "reflect" |
| "testing" |
| ) |
| |
| // TODO(cnicolaou): more unit tests for: |
| // Monitor/Publish network settings |
| // PublicIPState |
| // Empty |
| // Has |
| // First |
| // etc. |
| |
| func exampleIPState() { |
| ip4, ip6, err := ipState() |
| if err != nil { |
| panic("failed to find any network interfaces!") |
| } |
| for ifc, addrs := range ip4 { |
| for _, addr := range addrs { |
| fmt.Printf("ipv4: %s: %s", ifc, addr) |
| } |
| } |
| for ifc, addrs := range ip6 { |
| for _, addr := range addrs { |
| fmt.Printf("ipv6: %s: %s", ifc, addr) |
| } |
| } |
| } |
| |
| var ( |
| a = net.ParseIP("1.2.3.4") |
| b = net.ParseIP("1.2.3.5") |
| c = net.ParseIP("1.2.3.6") |
| d = net.ParseIP("1.2.3.7") |
| a6 = net.ParseIP("2001:4860:0:2001::68") |
| b6 = net.ParseIP("2001:4860:0:2001::69") |
| c6 = net.ParseIP("2001:4860:0:2001::70") |
| d6 = net.ParseIP("2001:4860:0:2001::71") |
| ) |
| |
| func TestRemoved(t *testing.T) { |
| aif := make(ipAndIf) |
| bif := make(ipAndIf) |
| aif["eth0"] = []net.IP{a, b, c, a6, b6, c6} |
| aif["eth1"] = []net.IP{a, b, c, a6, b6, c6} |
| |
| // no changes. |
| got, want := findRemoved(aif, aif), ipAndIf{} |
| if !reflect.DeepEqual(got, want) { |
| t.Errorf("got %s, want %s", got, want) |
| } |
| |
| // missing interfaces |
| got, want = findRemoved(aif, bif), aif |
| if !reflect.DeepEqual(got, want) { |
| t.Errorf("got %s, want %s", got, want) |
| } |
| |
| // missing some addresses on a single interface |
| bif["eth0"] = []net.IP{a, b, a6, b6} |
| got, want = findRemoved(aif, bif), ipAndIf{ |
| "eth0": []net.IP{c, c6}, |
| "eth1": aif["eth1"], |
| } |
| if !reflect.DeepEqual(got, want) { |
| t.Errorf("got %s, want %s", got, want) |
| } |
| |
| // change an address on a single interface |
| bif["eth0"] = []net.IP{a, b, c, a6, b6, c6} |
| bif["eth1"] = []net.IP{a, b, c, a6, b6, c6} |
| bif["eth1"][2] = d |
| got, want = findRemoved(aif, bif), ipAndIf{ |
| "eth1": []net.IP{c}, |
| } |
| if !reflect.DeepEqual(got, want) { |
| t.Errorf("got %s, want %s", got, want) |
| } |
| |
| // additions |
| bif["eth0"] = []net.IP{a, b, c, a6, b6, c6, d6} |
| bif["eth1"] = []net.IP{a, b, c, a6, b6, c6, d6} |
| got, want = findRemoved(aif, bif), ipAndIf{} |
| if !reflect.DeepEqual(got, want) { |
| t.Errorf("got %s, want %s", got, want) |
| } |
| } |
| |
| func TestAdded(t *testing.T) { |
| aif := make(ipAndIf) |
| bif := make(ipAndIf) |
| aif["eth0"] = []net.IP{a, b, c, a6, b6, c6} |
| |
| // no changes. |
| got, want := findAdded(aif, aif), ipAndIf{} |
| if !reflect.DeepEqual(got, want) { |
| t.Errorf("got %s, want %s", got, want) |
| } |
| |
| // added interface |
| bif["eth0"] = []net.IP{a, b, c, a6, b6, c6} |
| bif["eth1"] = []net.IP{a, b, c, a6, b6, c6} |
| got, want = findAdded(aif, bif), ipAndIf{ |
| "eth1": []net.IP{a, b, c, a6, b6, c6}} |
| if !reflect.DeepEqual(got, want) { |
| t.Errorf("got %s, want %s", got, want) |
| } |
| |
| // added some address on a single interface |
| bif["eth0"] = []net.IP{a, b, c, d, a6, b6, c6, d6} |
| delete(bif, "eth1") |
| got, want = findAdded(aif, bif), ipAndIf{ |
| "eth0": []net.IP{d, d6}} |
| if !reflect.DeepEqual(got, want) { |
| t.Errorf("got %s, want %s", got, want) |
| } |
| |
| // removals |
| bif["eth0"] = []net.IP{a, b, c, b6} |
| got, want = findAdded(aif, bif), ipAndIf{} |
| if !reflect.DeepEqual(got, want) { |
| t.Errorf("got %s, want %s", got, want) |
| } |
| } |