123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155 |
- /*
- Copyright 2014 The Kubernetes Authors.
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
- http://www.apache.org/licenses/LICENSE-2.0
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
- */
- package sets
- import (
- "net"
- "reflect"
- "sort"
- "testing"
- )
- func parseIPNet(s string) *net.IPNet {
- _, net, err := net.ParseCIDR(s)
- if err != nil {
- panic(err)
- }
- return net
- }
- func TestIPNets(t *testing.T) {
- s := IPNet{}
- s2 := IPNet{}
- if len(s) != 0 {
- t.Errorf("Expected len=0: %d", len(s))
- }
- a := parseIPNet("1.0.0.0/8")
- b := parseIPNet("2.0.0.0/8")
- c := parseIPNet("3.0.0.0/8")
- d := parseIPNet("4.0.0.0/8")
- s.Insert(a, b)
- if len(s) != 2 {
- t.Errorf("Expected len=2: %d", len(s))
- }
- s.Insert(c)
- if s.Has(d) {
- t.Errorf("Unexpected contents: %#v", s)
- }
- if !s.Has(a) {
- t.Errorf("Missing contents: %#v", s)
- }
- s.Delete(a)
- if s.Has(a) {
- t.Errorf("Unexpected contents: %#v", s)
- }
- s.Insert(a)
- if s.HasAll(a, b, d) {
- t.Errorf("Unexpected contents: %#v", s)
- }
- if !s.HasAll(a, b) {
- t.Errorf("Missing contents: %#v", s)
- }
- s2.Insert(a, b, d)
- if s.IsSuperset(s2) {
- t.Errorf("Unexpected contents: %#v", s)
- }
- s2.Delete(d)
- if !s.IsSuperset(s2) {
- t.Errorf("Missing contents: %#v", s)
- }
- }
- func TestIPNetSetDeleteMultiples(t *testing.T) {
- s := IPNet{}
- a := parseIPNet("1.0.0.0/8")
- b := parseIPNet("2.0.0.0/8")
- c := parseIPNet("3.0.0.0/8")
- s.Insert(a, b, c)
- if len(s) != 3 {
- t.Errorf("Expected len=3: %d", len(s))
- }
- s.Delete(a, c)
- if len(s) != 1 {
- t.Errorf("Expected len=1: %d", len(s))
- }
- if s.Has(a) {
- t.Errorf("Unexpected contents: %#v", s)
- }
- if s.Has(c) {
- t.Errorf("Unexpected contents: %#v", s)
- }
- if !s.Has(b) {
- t.Errorf("Missing contents: %#v", s)
- }
- }
- func TestNewIPSet(t *testing.T) {
- s, err := ParseIPNets("1.0.0.0/8", "2.0.0.0/8", "3.0.0.0/8")
- if err != nil {
- t.Errorf("error parsing IPNets: %v", err)
- }
- if len(s) != 3 {
- t.Errorf("Expected len=3: %d", len(s))
- }
- a := parseIPNet("1.0.0.0/8")
- b := parseIPNet("2.0.0.0/8")
- c := parseIPNet("3.0.0.0/8")
- if !s.Has(a) || !s.Has(b) || !s.Has(c) {
- t.Errorf("Unexpected contents: %#v", s)
- }
- }
- func TestIPNetSetDifference(t *testing.T) {
- l, err := ParseIPNets("1.0.0.0/8", "2.0.0.0/8", "3.0.0.0/8")
- if err != nil {
- t.Errorf("error parsing IPNets: %v", err)
- }
- r, err := ParseIPNets("1.0.0.0/8", "2.0.0.0/8", "4.0.0.0/8", "5.0.0.0/8")
- if err != nil {
- t.Errorf("error parsing IPNets: %v", err)
- }
- c := l.Difference(r)
- d := r.Difference(l)
- if len(c) != 1 {
- t.Errorf("Expected len=1: %d", len(c))
- }
- if !c.Has(parseIPNet("3.0.0.0/8")) {
- t.Errorf("Unexpected contents: %#v", c)
- }
- if len(d) != 2 {
- t.Errorf("Expected len=2: %d", len(d))
- }
- if !d.Has(parseIPNet("4.0.0.0/8")) || !d.Has(parseIPNet("5.0.0.0/8")) {
- t.Errorf("Unexpected contents: %#v", d)
- }
- }
- func TestIPNetSetList(t *testing.T) {
- s, err := ParseIPNets("3.0.0.0/8", "1.0.0.0/8", "2.0.0.0/8")
- if err != nil {
- t.Errorf("error parsing IPNets: %v", err)
- }
- l := s.StringSlice()
- sort.Strings(l)
- if !reflect.DeepEqual(l, []string{"1.0.0.0/8", "2.0.0.0/8", "3.0.0.0/8"}) {
- t.Errorf("List gave unexpected result: %#v", l)
- }
- }
|