func toIPRange(dest string) (garden.IPRange, error) { idx := strings.IndexAny(dest, "-/") // Not a range or a CIDR if idx == -1 { ip := net.ParseIP(dest) if ip == nil { return garden.IPRange{}, ErrIPRangeConversionFailed } return garden.IPRangeFromIP(ip), nil } // We have a CIDR if dest[idx] == '/' { _, ipNet, err := net.ParseCIDR(dest) if err != nil { return garden.IPRange{}, ErrIPRangeConversionFailed } return garden.IPRangeFromIPNet(ipNet), nil } // We have an IP range firstIP := net.ParseIP(dest[:idx]) secondIP := net.ParseIP(dest[idx+1:]) if firstIP == nil || secondIP == nil { return garden.IPRange{}, ErrIPRangeConversionFailed } return garden.IPRange{Start: firstIP, End: secondIP}, nil }
var _ = Describe("NetOutRule helper functions", func() { Describe("IPRangeFromIP", func() { It("Creates an IPRange with the Start and End set to the passed IP", func() { r := garden.IPRangeFromIP(net.ParseIP("1.2.3.4")) Ω(r.Start).Should(Equal(net.ParseIP("1.2.3.4"))) Ω(r.End).Should(Equal(r.Start)) }) }) Describe("IPRangeFromIPNet", func() { It("Creates an IPRange with the Start and End set to the extent of the IPNet", func() { ip, cidr, err := net.ParseCIDR("1.2.3.0/24") Ω(err).Should(Succeed()) r := garden.IPRangeFromIPNet(cidr) Ω(r.Start.String()).Should(Equal(ip.String())) Ω(r.End.String()).Should(Equal("1.2.3.255")) }) }) Describe("PortRangeFromPort", func() { It("Creates an PortRange with the Start and End set to the passed port", func() { r := garden.PortRangeFromPort(2) Ω(r.Start).Should(Equal(uint16(2))) Ω(r.End).Should(Equal(r.Start)) }) }) Describe("ICMPControlCode", func() { It("returns an ICMPCode with the passed uint8", func() {