Merge pull request #391 from tangle329/master

Validate rangeStart and rangeEnd specified in conf
This commit is contained in:
Dan Williams 2017-04-24 22:00:07 -05:00 committed by GitHub
commit 21d96393ea
2 changed files with 46 additions and 24 deletions

View File

@ -57,13 +57,13 @@ func NewIPAllocator(conf *IPAMConfig, store backend.Store) (*IPAllocator, error)
start = ip.NextIP(start) start = ip.NextIP(start)
if conf.RangeStart != nil { if conf.RangeStart != nil {
if err := validateRangeIP(conf.RangeStart, (*net.IPNet)(&conf.Subnet), nil, nil); err != nil { if err := validateRangeIP(conf.RangeStart, (*net.IPNet)(&conf.Subnet), start, end); err != nil {
return nil, err return nil, err
} }
start = conf.RangeStart start = conf.RangeStart
} }
if conf.RangeEnd != nil { if conf.RangeEnd != nil {
if err := validateRangeIP(conf.RangeEnd, (*net.IPNet)(&conf.Subnet), start, nil); err != nil { if err := validateRangeIP(conf.RangeEnd, (*net.IPNet)(&conf.Subnet), start, end); err != nil {
return nil, err return nil, err
} }
end = conf.RangeEnd end = conf.RangeEnd

View File

@ -263,33 +263,55 @@ var _ = Describe("host-local ip allocator", func() {
}) })
It("RangeStart must be in the given subnet", func() { It("RangeStart must be in the given subnet", func() {
subnet, err := types.ParseCIDR("192.168.1.0/24") testcases := []struct {
Expect(err).ToNot(HaveOccurred()) name string
ipnet string
conf := IPAMConfig{ start string
Name: "test", }{
Type: "host-local", {"outside-subnet", "192.168.1.0/24", "10.0.0.1"},
Subnet: types.IPNet{IP: subnet.IP, Mask: subnet.Mask}, {"zero-ip", "10.1.0.0/16", "10.1.0.0"},
RangeStart: net.ParseIP("10.0.0.1"), }
for _, tc := range testcases {
subnet, err := types.ParseCIDR(tc.ipnet)
Expect(err).ToNot(HaveOccurred())
conf := IPAMConfig{
Name: tc.name,
Type: "host-local",
Subnet: types.IPNet{IP: subnet.IP, Mask: subnet.Mask},
RangeStart: net.ParseIP(tc.start),
}
store := fakestore.NewFakeStore(map[string]string{}, net.ParseIP(""))
_, err = NewIPAllocator(&conf, store)
Expect(err).To(HaveOccurred())
} }
store := fakestore.NewFakeStore(map[string]string{}, net.ParseIP(""))
_, err = NewIPAllocator(&conf, store)
Expect(err).To(HaveOccurred())
}) })
It("RangeEnd must be in the given subnet", func() { It("RangeEnd must be in the given subnet", func() {
subnet, err := types.ParseCIDR("192.168.1.0/24") testcases := []struct {
Expect(err).ToNot(HaveOccurred()) name string
ipnet string
conf := IPAMConfig{ end string
Name: "test", }{
Type: "host-local", {"outside-subnet", "192.168.1.0/24", "10.0.0.1"},
Subnet: types.IPNet{IP: subnet.IP, Mask: subnet.Mask}, {"broadcast-ip", "10.1.0.0/16", "10.1.255.255"},
RangeEnd: net.ParseIP("10.0.0.1"), }
for _, tc := range testcases {
subnet, err := types.ParseCIDR(tc.ipnet)
Expect(err).ToNot(HaveOccurred())
conf := IPAMConfig{
Name: tc.name,
Type: "host-local",
Subnet: types.IPNet{IP: subnet.IP, Mask: subnet.Mask},
RangeEnd: net.ParseIP(tc.end),
}
store := fakestore.NewFakeStore(map[string]string{}, net.ParseIP(""))
_, err = NewIPAllocator(&conf, store)
Expect(err).To(HaveOccurred())
} }
store := fakestore.NewFakeStore(map[string]string{}, net.ParseIP(""))
_, err = NewIPAllocator(&conf, store)
Expect(err).To(HaveOccurred())
}) })
It("RangeEnd must be after RangeStart in the given subnet", func() { It("RangeEnd must be after RangeStart in the given subnet", func() {