예제 #1
0
파일: ipam.go 프로젝트: jak-atx/vic
func splitRange(parentRange *ip.Range, firstIP net.IP, lastIP net.IP) (before, reserved, after *ip.Range) {
	if !firstIP.Equal(parentRange.FirstIP) {
		before = ip.NewRange(parentRange.FirstIP, decrementIP4(firstIP))
	}
	if !lastIP.Equal(parentRange.LastIP) {
		after = ip.NewRange(incrementIP4(lastIP), parentRange.LastIP)
	}

	reserved = ip.NewRange(firstIP, lastIP)
	return
}
예제 #2
0
파일: create_test.go 프로젝트: kjplatz/vic
func TestParseContainerNetworkIPRanges(t *testing.T) {
	var tests = []struct {
		cps  []string
		iprs map[string][]*ip.Range
		err  error
	}{
		{[]string{""}, nil, fmt.Errorf("")},
		{[]string{"foo:"}, nil, fmt.Errorf("")},
		{[]string{":"}, nil, fmt.Errorf("")},
		{[]string{":10.10.10.10-24"}, nil, fmt.Errorf("")},
		{[]string{":foo"}, nil, fmt.Errorf("")},
		{[]string{"foo:10"}, nil, fmt.Errorf("")},
		{[]string{"foo:10.10.10.10-9"}, nil, fmt.Errorf("")},
		{[]string{"foo:10.10.10.10-10.10.10.9"}, nil, fmt.Errorf("")},
		{
			[]string{"foo:10.10.10.10-24"},
			map[string][]*ip.Range{"foo": []*ip.Range{ip.NewRange(net.ParseIP("10.10.10.10"), net.ParseIP("10.10.10.24"))}}, nil},
		{
			[]string{"foo:10.10.10.10-10.10.10.24"},
			map[string][]*ip.Range{"foo": []*ip.Range{ip.NewRange(net.ParseIP("10.10.10.10"), net.ParseIP("10.10.10.24"))}},
			nil,
		},
		{
			[]string{"foo:10.10.10.10-10.10.10.24", "foo:10.10.10.100-10.10.10.105"},
			map[string][]*ip.Range{
				"foo": []*ip.Range{
					ip.NewRange(net.ParseIP("10.10.10.10"), net.ParseIP("10.10.10.24")),
					ip.NewRange(net.ParseIP("10.10.10.100"), net.ParseIP("10.10.10.105")),
				},
			},
			nil,
		},
		{
			[]string{"foo:10.10.10.10-10.10.10.24", "bar:10.10.9.1-10.10.9.10"},
			map[string][]*ip.Range{
				"foo": []*ip.Range{ip.NewRange(net.ParseIP("10.10.10.10"), net.ParseIP("10.10.10.24"))},
				"bar": []*ip.Range{ip.NewRange(net.ParseIP("10.10.9.1"), net.ParseIP("10.10.9.10"))},
			},
			nil,
		},
	}

	for _, te := range tests {
		iprs, err := parseContainerNetworkIPRanges(te.cps)
		if te.err != nil {
			if err == nil {
				t.Fatalf("parseContainerNetworkIPRanges(%s) => (%v, nil) want (nil, err)", te.cps, iprs)
			}

			continue
		}

		if err != te.err ||
			len(iprs) != len(te.iprs) {
			t.Fatalf("parseContainerNetworkIPRanges(%s) => (%v, %s) want (%v, %s)", te.cps, iprs, err, te.iprs, te.err)
		}

		for v, ipr := range iprs {
			if ipr2, ok := te.iprs[v]; !ok {
				t.Fatalf("parseContainerNetworkIPRanges(%s) => (%v, %s) want (%v, %s)", te.cps, iprs, err, te.iprs, te.err)
			} else {
				for _, i := range ipr {
					found := false
					for _, i2 := range ipr2 {
						if i.Equal(i2) {
							found = true
							break
						}
					}

					if !found {
						t.Fatalf("parseContainerNetworkIPRanges(%s) => (%v, %s) want (%v, %s)", te.cps, iprs, err, te.iprs, te.err)
					}
				}
			}
		}
	}
}