def test_is_valid_ipv6_good_values(self):
     f = io.StringIO()
     with redirect_stdout(f):
         self.assertTrue(V.is_valid_ipv6("2001:1000:2:3:4:5:6:7"))
         self.assertTrue(V.is_valid_ipv6("2001:1000::1"))
         self.assertTrue(V.is_valid_ipv6("2001:ffff::0000:1"))
     self.assertEqual("", f.getvalue())
 def test_is_valid_ipv6_dubious_values(self):
     for dodgy, message in [
         ("2001::1", "Teredo address"),
         ("2001:1::1", "IETF protocol address"),
         ("2001:16::1", "ORCHID address"),
         ("2001:23::1", "ORCHIDv2 address"),
         ("2001:db8::3", "documentation address"),
         ("2002:123::456:1", "6to4 address"),
         ("::ffff:192.168.1.11", "mapped IPv4 address"),
     ]:
         f = io.StringIO()
         with redirect_stdout(f):
             self.assertTrue(V.is_valid_ipv6(dodgy), msg=dodgy)
         self.assertEqual(
             "*** Warning: {} is a {}\n".format(dodgy, message),
             f.getvalue(),
             msg=dodgy,
         )
 def test_is_valid_ipv6_bad_values(self):
     for dodgy, message in [
         ("::", "unspecified address"),
         ("::1:2:3:4:5:6", "reserved address"),
         ("0::1", "loopback address"),
         ("::1", "loopback address"),
         ("0:1:2::5", "reserved address"),
         ("64:ff9b:1::0000:1", "reserved address"),
         ("100:ffff::0000:1", "reserved address"),
         ("fe80:ffff::0000:1", "link-local address"),
         ("fc00:ffff::0000:1", "private address"),
         ("ff01:ffff::0000:1", "multicast address"),
         ("100::5123:214", "discard address"),
         ("9212:4f:8000::15:14a9", "reserved address"),
         ("FEC0::1234:5678:9ABC", "deprecated site-local address"),
     ]:
         f = io.StringIO()
         with redirect_stdout(f):
             self.assertFalse(V.is_valid_ipv6(dodgy), msg=dodgy)
         self.assertEqual(
             "*** Error: {} is a {}\n".format(dodgy, message),
             f.getvalue(),
             msg=dodgy,
         )
 def test_is_valid_ipv6_multiple_gaps(self):
     self.assertFalse(V.is_valid_ipv6("2001:::8"))
     self.assertFalse(V.is_valid_ipv6("2001:1:::3:4:5:6::7"))
 def test_is_valid_ipv6_reject_ipv4(self):
     self.assertFalse(V.is_valid_ipv6("192.168.1.2"))
 def test_is_valid_ipv6_too_long(self):
     self.assertFalse(V.is_valid_ipv6("2001:1:2:3:4:5:6:7:8"))
     self.assertFalse(V.is_valid_ipv6("2001:1:2:3:4:5:6::7:8"))
 def test_is_valid_ipv6_too_short(self):
     self.assertFalse(V.is_valid_ipv6("2001:1:2:3:4:5:6"))
     self.assertFalse(V.is_valid_ipv6("2001:1:2"))
     self.assertFalse(V.is_valid_ipv6("2001:1"))
     self.assertFalse(V.is_valid_ipv6("2001:"))
 def test_is_valid_ipv6_too_large(self):
     self.assertFalse(V.is_valid_ipv6("2001:b::10000:0"))
 def test_is_valid_ipv6_non_hex(self):
     self.assertFalse(V.is_valid_ipv6("2001:b::g:0"))
 def test_is_valid_ipv6_empty(self):
     self.assertFalse(V.is_valid_ipv6(""))