+ known_bad_v4_cidr = [ ("24.261.119.0", 32), # 2nd octet too large
+ "", # empty string
+ "22.a.231.11/24", # contains alpha
+ "45.61.22.230.1/32", # too many octets
+ "70.140.81.0/34", # length too long
+ "3ffe:3c01:4::1/32" # ipv6
+ ]
+
+ def testCreateBadV4(self):
+ for c in self.known_bad_v4_cidr:
+ if type(c) == types.TupleType:
+ self.assertRaises(socket.error, Cidr.CidrV4, c[0], c[1])
+ else:
+ self.assertRaises(socket.error, Cidr.CidrV4, c)
+
+ known_bad_v6_cidr = [
+ ":/32",
+ ":::/64",
+ "1::2::3",
+ "::3::/128",
+ "12345::1",
+ "2001:100g::1/64",
+ "1:2:3:4:5:6:7:4.3.2.1",
+ "127.0.0.1/24"
+ ]
+
+ def testCreateBadV6(self):
+ for c in self.known_bad_v6_cidr:
+ self.assertRaises(socket.error, Cidr.CidrV6, c)
+
+ def testValidCidr(self):
+ for c in [ x[0] for x in self.known_good_v4_cidr ]:
+ if type(c) == types.TupleType:
+ c = "%s/%d" % (c[0], c[1])
+ res = Cidr.valid_cidr(c)
+ self.assert_(isinstance(res, Cidr.Cidr))
+ for c in [ x[0] for x in self.known_good_v6_cidr ]:
+ if type(c) == types.TupleType:
+ c = "%s/%d" % (c[0], c[1])
+ res = Cidr.valid_cidr(c)
+ self.assert_(isinstance(res, Cidr.Cidr))
+ for c in self.known_bad_v4_cidr:
+ if type(c) == types.TupleType:
+ c = "%s/%d" % (c[0], c[1])
+ if ':' in c:
+ continue
+ res = Cidr.valid_cidr(c)
+ self.assertEquals(res, False)
+ for c in self.known_bad_v6_cidr:
+ res = Cidr.valid_cidr(c)
+ if not ':' in c:
+ continue
+ self.failIf(res)
+
+class TestCidrSort(unittest.TestCase):
+
+ unsorted_list = [ "127.0.0.0/24",
+ "127.0.0.0/23",
+ "127.0.0.0/25",
+ "80.32.23.71/32",
+ "8.44.55.66/8",
+ "2001:2c01::1/64",
+ "3ffe:4::5",
+ "1:2:3:4:5:6:7:8/127" ]
+ sorted_list = [ "8.44.55.66/8",
+ "80.32.23.71/32",
+ "127.0.0.0/23",
+ "127.0.0.0/24",
+ "127.0.0.0/25",
+ "1:2:3:4:5:6:7:8/127",
+ "2001:2c01::1/64",
+ "3ffe:4::5" ]
+
+ def setUp(self):
+ self.unsorted_list = [ Cidr.new(x) for x in self.unsorted_list ]
+ self.sorted_list = [ Cidr.new(x) for x in self.sorted_list ]
+