test_abstract.py 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115
  1. # Copyright (c) Twisted Matrix Laboratories.
  2. # See LICENSE for details.
  3. """
  4. Tests for generic file descriptor based reactor support code.
  5. """
  6. from __future__ import division, absolute_import
  7. from twisted.trial.unittest import TestCase
  8. from twisted.internet.abstract import isIPAddress
  9. from socket import AF_IPX
  10. class AddressTests(TestCase):
  11. """
  12. Tests for address-related functionality.
  13. """
  14. def test_decimalDotted(self):
  15. """
  16. L{isIPAddress} should return C{True} for any decimal dotted
  17. representation of an IPv4 address.
  18. """
  19. self.assertTrue(isIPAddress('0.1.2.3'))
  20. self.assertTrue(isIPAddress('252.253.254.255'))
  21. def test_shortDecimalDotted(self):
  22. """
  23. L{isIPAddress} should return C{False} for a dotted decimal
  24. representation with fewer or more than four octets.
  25. """
  26. self.assertFalse(isIPAddress('0'))
  27. self.assertFalse(isIPAddress('0.1'))
  28. self.assertFalse(isIPAddress('0.1.2'))
  29. self.assertFalse(isIPAddress('0.1.2.3.4'))
  30. def test_invalidLetters(self):
  31. """
  32. L{isIPAddress} should return C{False} for any non-decimal dotted
  33. representation including letters.
  34. """
  35. self.assertFalse(isIPAddress('a.2.3.4'))
  36. self.assertFalse(isIPAddress('1.b.3.4'))
  37. def test_invalidPunctuation(self):
  38. """
  39. L{isIPAddress} should return C{False} for a string containing
  40. strange punctuation.
  41. """
  42. self.assertFalse(isIPAddress(','))
  43. self.assertFalse(isIPAddress('1,2'))
  44. self.assertFalse(isIPAddress('1,2,3'))
  45. self.assertFalse(isIPAddress('1.,.3,4'))
  46. def test_emptyString(self):
  47. """
  48. L{isIPAddress} should return C{False} for the empty string.
  49. """
  50. self.assertFalse(isIPAddress(''))
  51. def test_invalidNegative(self):
  52. """
  53. L{isIPAddress} should return C{False} for negative decimal values.
  54. """
  55. self.assertFalse(isIPAddress('-1'))
  56. self.assertFalse(isIPAddress('1.-2'))
  57. self.assertFalse(isIPAddress('1.2.-3'))
  58. self.assertFalse(isIPAddress('1.2.-3.4'))
  59. def test_invalidPositive(self):
  60. """
  61. L{isIPAddress} should return C{False} for a string containing
  62. positive decimal values greater than 255.
  63. """
  64. self.assertFalse(isIPAddress('256.0.0.0'))
  65. self.assertFalse(isIPAddress('0.256.0.0'))
  66. self.assertFalse(isIPAddress('0.0.256.0'))
  67. self.assertFalse(isIPAddress('0.0.0.256'))
  68. self.assertFalse(isIPAddress('256.256.256.256'))
  69. def test_unicodeAndBytes(self):
  70. """
  71. L{isIPAddress} evaluates ASCII-encoded bytes as well as text.
  72. """
  73. self.assertFalse(isIPAddress(b'256.0.0.0'))
  74. self.assertFalse(isIPAddress(u'256.0.0.0'))
  75. self.assertTrue(isIPAddress(b'252.253.254.255'))
  76. self.assertTrue(isIPAddress(u'252.253.254.255'))
  77. def test_nonIPAddressFamily(self):
  78. """
  79. All address families other than C{AF_INET} and C{AF_INET6} result in a
  80. L{ValueError} being raised.
  81. """
  82. self.assertRaises(ValueError, isIPAddress, b'anything', AF_IPX)
  83. def test_nonASCII(self):
  84. """
  85. All IP addresses must be encodable as ASCII; non-ASCII should result in
  86. a L{False} result.
  87. """
  88. self.assertFalse(isIPAddress(b'\xff.notascii'))
  89. self.assertFalse(isIPAddress(u'\u4321.notascii'))