def _test_is(self, method, yes, no): for value in yes: i = IP(value) self.assertTrue(getattr(i, method)()) for value in no: i = IP(value) self.assertFalse(getattr(i, method)())
def test_reverse_dns(self): expected = [ ('127.0.0.1', '1.0.0.127.in-addr.arpa'), ('0.0.0.0', '0.0.0.0.in-addr.arpa'), ('255.255.255.255', '255.255.255.255.in-addr.arpa'), ('1.2.3.4', '4.3.2.1.in-addr.arpa'), ('::', '0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.ip6.arpa'), ('2001:db8::', '0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.8.b.d.0.1.0.0.2.ip6.arpa'), ('ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff', 'f.f.f.f.f.f.f.f.f.f.f.f.f.f.f.f.f.f.f.f.f.f.f.f.f.f.f.f.f.f.f.f.ip6.arpa'), ] for value, output in expected: i = IP(value) self.assertEqual(i.reverse_dns(), output)
def test_reverse_dns_pieces(self): # This test is purposely short because test_reverse_dns() implicitly tests this. expected = [ ('1.2.3.4', '4.3.2.1'), ('123.234.56.67', '67.56.234.123'), ('2001:db8::', '0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.8.b.d.0.1.0.0.2'), ('1234:5678:9abc:def0::', '0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.f.e.d.c.b.a.9.8.7.6.5.4.3.2.1'), ] for value, output in expected: i = IP(value) self.assertEqual(i.reverse_dns_pieces(), output) for value, output in expected: i = IP(value) self.assertEqual(i.reverse_dns_pieces('suffix'), output + '.suffix')
def test_reverse_dns(self): expected = [ ('127.0.0.1', '1.0.0.127.in-addr.arpa'), ('0.0.0.0', '0.0.0.0.in-addr.arpa'), ('255.255.255.255', '255.255.255.255.in-addr.arpa'), ('1.2.3.4', '4.3.2.1.in-addr.arpa'), ('::', '0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.ip6.arpa' ), ('2001:db8::', '0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.8.b.d.0.1.0.0.2.ip6.arpa' ), ('ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff', 'f.f.f.f.f.f.f.f.f.f.f.f.f.f.f.f.f.f.f.f.f.f.f.f.f.f.f.f.f.f.f.f.ip6.arpa' ), ] for value, output in expected: i = IP(value) self.assertEqual(i.reverse_dns(), output)
def test_hex(self): expected = [ ('1.2.3.4', '0x01020304'), ('0.0.0.0', '0x00000000'), ('255.255.255.255', '0xffffffff'), ('::', '0x00000000000000000000000000000000'), ('2001:db8::', '0x20010db8000000000000000000000000'), ] for value, output in expected: self.assertEqual(hex(IP(value)), output)
def test_sub(self): sub_e = [ ('1.2.3.4', 1, '1.2.3.3'), ('255.255.255.255', 255, '255.255.255.0'), ('1.2.3.0', IPv4('0.0.0.255'), '1.2.2.1'), ('1.2.3.0', -1, '1.2.3.1'), ('::1', 1, '::'), ('1:2:3:4:5:6:7:8', IPv6('::5:6:7:8'), '1:2:3:4::'), ('2001:db8::', -1, '2001:db8::1'), ] for value, diff, output in sub_e: i = IP(value) p = i - diff self.assertEqual(p, IP(output)) invalid = [ ('0.0.0.0', 1), ('255.255.255.255', -1), ('::', 1), ('ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff', -1), ] for value, diff in invalid: i = IP(value) self.assertRaises(IPValidationError, lambda: i - diff)
def test_netmask(self): self.assertEqual(IPv4('1.2.3.4/32').netmask, Mask4(0xffffffff)) self.assertEqual(IPv4('1.2.3.4/24').netmask, Mask4(0xffffff00)) self.assertEqual(IPv4('1.2.3.4/0').netmask, Mask4(0)) self.assertEqual( IPv4('1.2.3.4/24').netmask, IP('1.2.3.4', '24').netmask) self.assertEqual(IPv4('1.2.3.4/32').netmask_int, 0xffffffff) self.assertEqual( IPv4('1.2.3.4/32').netmask_int, IP('1.2.3.4', '32').netmask_int) self.assertEqual(IPv4('1.2.3.4/24').netmask_int, 0xffffff00) self.assertEqual(IPv4('1.2.3.4/0').netmask_int, 0) self.assertEqual( IPv6('1:2:3:4:5:6:7:8/128').netmask, Mask6(0xffffffffffffffffffffffffffffffff)) self.assertEqual( IPv6('1:2:3:4:5:6:7:8/128').netmask, IP('1:2:3:4:5:6:7:8', '128').netmask) self.assertEqual( IPv6('1:2:3:4:5:6:7:8/64').netmask, Mask6(0xffffffffffffffff0000000000000000)) self.assertEqual(IPv6('1:2:3:4:5:6:7:8/0').netmask, Mask6(0)) self.assertEqual( IPv6('1:2:3:4:5:6:7:8/128').netmask_int, 0xffffffffffffffffffffffffffffffff) self.assertEqual( IPv6('1:2:3:4:5:6:7:8/64').netmask_int, 0xffffffffffffffff0000000000000000) self.assertEqual( IPv6('1:2:3:4:5:6:7:8/64').netmask_int, IP('1:2:3:4:5:6:7:8', '64').netmask_int) self.assertEqual(IPv6('1:2:3:4:5:6:7:8/0').netmask_int, 0)
def test_reverse_dns_pieces(self): # This test is purposely short because test_reverse_dns() implicitly tests this. expected = [ ('1.2.3.4', '4.3.2.1'), ('123.234.56.67', '67.56.234.123'), ('2001:db8::', '0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.8.b.d.0.1.0.0.2' ), ('1234:5678:9abc:def0::', '0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.f.e.d.c.b.a.9.8.7.6.5.4.3.2.1' ), ] for value, output in expected: i = IP(value) self.assertEqual(i.reverse_dns_pieces(), output) for value, output in expected: i = IP(value) self.assertEqual(i.reverse_dns_pieces('suffix'), output + '.suffix')
def test_pickle(self): for ip in valid_ips: self.assertEqual(IP(ip), pickle.loads(pickle.dumps(IP(ip)))) valid_cidrs = valid_v4_cidrs + valid_v6_cidrs for ip in valid_cidrs: self.assertEqual(IP(ip), pickle.loads(pickle.dumps(IP(ip))))
def test_forward_dns_rr_type(self): self.assertEqual(IP('::1').forward_dns_rr_type, 'AAAA') self.assertEqual(IP('127.0.0.1').forward_dns_rr_type, 'A')