rcode_python_test.py 6.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144
  1. # Copyright (C) 2010 Internet Systems Consortium.
  2. #
  3. # Permission to use, copy, modify, and distribute this software for any
  4. # purpose with or without fee is hereby granted, provided that the above
  5. # copyright notice and this permission notice appear in all copies.
  6. #
  7. # THE SOFTWARE IS PROVIDED "AS IS" AND INTERNET SYSTEMS CONSORTIUM
  8. # DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL
  9. # IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL
  10. # INTERNET SYSTEMS CONSORTIUM BE LIABLE FOR ANY SPECIAL, DIRECT,
  11. # INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING
  12. # FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT,
  13. # NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION
  14. # WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
  15. #
  16. # Tests for the rcode part of the pydnspp module
  17. #
  18. import unittest
  19. from pydnspp import *
  20. class RcodeTest(unittest.TestCase):
  21. def test_init(self):
  22. self.assertRaises(TypeError, Rcode, "wrong")
  23. self.assertEqual(0xfff, Rcode(0xfff).get_code()) # possible max code
  24. # should fail on attempt of construction with an out of range code
  25. self.assertRaises(OverflowError, Rcode, 0x1000)
  26. self.assertRaises(OverflowError, Rcode, 0xffff)
  27. # constructor with a pair of code portions
  28. self.assertEqual(3, Rcode(Rcode.NXDOMAIN_CODE, 0).get_code())
  29. self.assertEqual(Rcode.BADVERS_CODE, Rcode(0, 1).get_code())
  30. self.assertEqual(0xfff, Rcode(0xf, 0xff).get_code())
  31. self.assertRaises(OverflowError, Rcode, 0x10, 0xff)
  32. # Range check. We need to do this at the binding level, so we need
  33. # explicit tests for it.
  34. self.assertEqual(Rcode(0).get_code(), 0)
  35. self.assertEqual(Rcode(4095).get_code(), 4095)
  36. self.assertEqual(Rcode(0, 0).get_code(), 0)
  37. self.assertEqual(Rcode(0, 0).get_extended_code(), 0)
  38. self.assertEqual(Rcode(15, 255).get_code(), 4095)
  39. self.assertRaises(ValueError, Rcode, 65536)
  40. self.assertRaises(ValueError, Rcode, 0x10, 0x100)
  41. self.assertRaises(ValueError, Rcode, 0x100, 0x10)
  42. def test_constants(self):
  43. self.assertEqual(Rcode.NOERROR_CODE, Rcode(0).get_code())
  44. self.assertEqual(Rcode.FORMERR_CODE, Rcode(1).get_code())
  45. self.assertEqual(Rcode.NOTIMP_CODE, Rcode(4).get_code())
  46. self.assertEqual(Rcode.REFUSED_CODE, Rcode(5).get_code())
  47. self.assertEqual(Rcode.RESERVED15_CODE, Rcode(15).get_code())
  48. self.assertEqual(Rcode.BADVERS_CODE, Rcode(16).get_code())
  49. self.assertEqual(Rcode.NOERROR_CODE, Rcode.NOERROR.get_code())
  50. self.assertEqual(Rcode.FORMERR_CODE, Rcode.FORMERR.get_code())
  51. self.assertEqual(Rcode.NOTIMP_CODE, Rcode.NOTIMP.get_code())
  52. self.assertEqual(Rcode.REFUSED_CODE, Rcode.REFUSED.get_code())
  53. self.assertEqual(Rcode.RESERVED15_CODE, Rcode.RESERVED15.get_code())
  54. self.assertEqual(Rcode.BADVERS_CODE, Rcode.BADVERS.get_code())
  55. def test_get_code(self):
  56. self.assertEqual(0, Rcode.NOERROR.get_code())
  57. self.assertEqual(1, Rcode.FORMERR.get_code())
  58. self.assertEqual(2, Rcode.SERVFAIL.get_code())
  59. self.assertEqual(3, Rcode.NXDOMAIN.get_code())
  60. self.assertEqual(4, Rcode.NOTIMP.get_code())
  61. self.assertEqual(5, Rcode.REFUSED.get_code())
  62. self.assertEqual(6, Rcode.YXDOMAIN.get_code())
  63. self.assertEqual(7, Rcode.YXRRSET.get_code())
  64. self.assertEqual(8, Rcode.NXRRSET.get_code())
  65. self.assertEqual(9, Rcode.NOTAUTH.get_code())
  66. self.assertEqual(10, Rcode.NOTZONE.get_code())
  67. self.assertEqual(11, Rcode.RESERVED11.get_code())
  68. self.assertEqual(12, Rcode.RESERVED12.get_code())
  69. self.assertEqual(13, Rcode.RESERVED13.get_code())
  70. self.assertEqual(14, Rcode.RESERVED14.get_code())
  71. self.assertEqual(15, Rcode.RESERVED15.get_code())
  72. self.assertEqual(16, Rcode.BADVERS.get_code())
  73. def test_get_extended_code(self):
  74. self.assertEqual(0, Rcode.NOERROR.get_extended_code())
  75. self.assertEqual(0, Rcode.YXRRSET.get_extended_code())
  76. self.assertEqual(1, Rcode.BADVERS.get_extended_code())
  77. self.assertEqual(0xab, Rcode(0xabf).get_extended_code())
  78. self.assertEqual(0xff, Rcode(0xfff).get_extended_code())
  79. def test_to_text(self):
  80. self.assertEqual("NOERROR", Rcode(0).to_text())
  81. self.assertEqual("NOERROR", str(Rcode(0)))
  82. self.assertEqual("FORMERR", Rcode(1).to_text())
  83. self.assertEqual("SERVFAIL", Rcode(2).to_text())
  84. self.assertEqual("NXDOMAIN", Rcode(3).to_text())
  85. self.assertEqual("NOTIMP", Rcode(4).to_text())
  86. self.assertEqual("REFUSED", Rcode(5).to_text())
  87. self.assertEqual("YXDOMAIN", Rcode(6).to_text())
  88. self.assertEqual("YXRRSET", Rcode(7).to_text())
  89. self.assertEqual("NXRRSET", Rcode(8).to_text())
  90. self.assertEqual("NOTAUTH", Rcode(9).to_text())
  91. self.assertEqual("NOTZONE", Rcode(10).to_text())
  92. self.assertEqual("RESERVED11", Rcode(11).to_text())
  93. self.assertEqual("RESERVED12", Rcode(12).to_text())
  94. self.assertEqual("RESERVED13", Rcode(13).to_text())
  95. self.assertEqual("RESERVED14", Rcode(14).to_text())
  96. self.assertEqual("RESERVED15", Rcode(15).to_text())
  97. self.assertEqual("BADVERS", Rcode(16).to_text())
  98. self.assertEqual("17", Rcode(Rcode.BADVERS.get_code() + 1).to_text())
  99. self.assertEqual("4095", Rcode(0xfff).to_text())
  100. def test_richcmp(self):
  101. r1 = Rcode.NOERROR
  102. r2 = Rcode.FORMERR
  103. r3 = Rcode.FORMERR
  104. self.assertTrue(r2 == r3)
  105. self.assertTrue(r1 != r2)
  106. self.assertFalse(r1 == r2)
  107. self.assertFalse(r1 != 1)
  108. # can't use assertRaises here...
  109. try:
  110. r1 < r2
  111. self.fail("operation that should have raised an error unexpectedly succeeded")
  112. except Exception as err:
  113. self.assertEqual(TypeError, type(err))
  114. try:
  115. r1 <= r2
  116. self.fail("operation that should have raised an error unexpectedly succeeded")
  117. except Exception as err:
  118. self.assertEqual(TypeError, type(err))
  119. try:
  120. r1 > r2
  121. self.fail("operation that should have raised an error unexpectedly succeeded")
  122. except Exception as err:
  123. self.assertEqual(TypeError, type(err))
  124. try:
  125. r1 >= r2
  126. self.fail("operation that should have raised an error unexpectedly succeeded")
  127. except Exception as err:
  128. self.assertEqual(TypeError, type(err))
  129. if __name__ == '__main__':
  130. unittest.main()