def test_create_reverses_should_use_explicit_name(self): r = self.z.create_reverse_zones( {'212.122.41.128/25': '128-25.41.122.212.in-addr.arpa.'}) z = r[ip.IPNetwork('212.122.41.128/25')] self.assertEqual(z.name, '128-25.41.122.212.in-addr.arpa') self.assertEqual(z.origin, '128-25.41.122.212.in-addr.arpa') self.assertEqual(z.prefix, ip.IPNetwork('212.122.41.128/25'))
def test_add_ptr_strips_prefix(self): z = ReverseZone('1.0.1.0.8.4.2.0.2.0.a.2.ip6.arpa', ip.IPNetwork('2a02:238:101::/48')) z.add_ptr(ip.IPAddress('2a02:248:101:63::5b'), 'vm00') self.assertEqual( RR.PTR('b.5.0.0.0.0.0.0.0.0.0.0.0.0.0.0.3.6.0.0', 'vm00'), z.records[0])
def validate(self, value): """ ensure valid ip network """ super(IPNetworkField, self).validate(value) try: ip.IPNetwork(value) except (ip.AddrFormatError, ValueError): raise ValidationError(_('Invalid ip network'))
def enumerate_reverse_zones(self, netlist): """Generates (prefix, ReverseZone) pairs for all configured zones.""" for prefix, name in netlist.items(): prefix = ip.IPNetwork(prefix) default_name = self.default_reverse_name(prefix) yield (prefix, ReverseZone((name or default_name).rstrip('.'), prefix=prefix, strip_suffix=default_name, parent_zones=self))
def rand_ipv6_ip(network=False): """This uses the IPv6 documentation range of 2001:DB8::/32""" ran_add = ["%x" % random.randrange(0, 16**4) for i in range(6)] address = "2001:0DB8:" + ":".join(ran_add) if network: mask_length = six.text_type(random.randint(32, 128)) address = '/'.join((address, mask_length)) ip_network = ip.IPNetwork(address) return '/'.join((six.text_type(ip_network.network), mask_length)) return address
def rand_ip(network=False): """This uses the TEST-NET-3 range of reserved IP addresses. Using this range, which are reserved solely for use in documentation and example source code, should avoid any potential conflicts in real-world testing. """ test_net_3 = '203.0.113.' address = test_net_3 + six.text_type(random.randint(0, 255)) if network: mask_length = six.text_type(random.randint(24, 32)) address = '/'.join((address, mask_length)) ip_network = ip.IPNetwork(address) return '/'.join((six.text_type(ip_network.network), mask_length)) return address
def test_add_reverse_to_correct_zone(self): self.z.add_reverse(ip.IPAddress('2a02:248:101:63::5b'), 'vm00.ipv6') self.assertEqual( 'vm00.ipv6.gocept.net.', self.z.reverse_zones[ip.IPNetwork( '2a02:248:101::/48')].records[0].value)
def test_default_ipv6_reverse_name(self): self.assertEqual( '1.0.1.0.8.4.2.0.2.0.a.2.ip6.arpa.', self.z.default_reverse_name(ip.IPNetwork('2a02:248:101::/48')))
def test_default_ipv4_reverse_name(self): self.assertEqual( '16.172.in-addr.arpa.', self.z.default_reverse_name(ip.IPNetwork('172.16.0.0/16')))
def test_create_implicit_ipv4_reverse_zone_name(self): r = self.z.create_reverse_zones({'195.62.125.0/24': ''}) zone = r[ip.IPNetwork('195.62.125.0/24')] self.assertEqual(zone.name, '125.62.195.in-addr.arpa') self.assertEqual(zone.origin, '125.62.195.in-addr.arpa') self.assertEqual(zone.prefix, ip.IPNetwork('195.62.125.0/24'))
def test_add_pre_strips_correct_prefix_for_cidr_zones(self): z = ReverseZone('128-25.41.122.212.in-addr.arpa', prefix=ip.IPNetwork('212.122.41.128/25'), strip_suffix='41.122.212.in-addr.arpa') z.add_ptr(ip.IPAddress('212.122.41.152'), 'rt.gocept.com.') self.assertEqual(RR.PTR('152', 'rt.gocept.com.'), z.records[0])
def test_reverse_zone_is_public(self): r = ReverseZone('125.62.195.in-addr.arpa', ip.IPNetwork('195.62.125.0/24')) self.assertFalse(r.private)
def test_reverse_zone_is_private(self): r = ReverseZone('22.172.in-addr.arpa', ip.IPNetwork('172.22.0.0/16')) self.assertTrue(r.private)
def to_internal_value(self, value): try: return ip.IPNetwork(value) except (ip.AddrFormatError, ValueError): raise ValidationError(_('Invalid ip network'))