name_python_test.py 7.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182
  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 messagerenderer part of the libdns_python module
  17. #
  18. import unittest
  19. import os
  20. from libdns_python import *
  21. class NameComparisonTest(unittest.TestCase):
  22. def setUp(self):
  23. self.name1 = Name("aaaa.example.com")
  24. self.name2 = Name("bbbb.example.com")
  25. self.name3 = Name("cccc.example.com")
  26. self.name4 = Name("aaaa.example.com")
  27. self.name5 = Name("something.completely.different")
  28. self.ncr12 = self.name1.compare(self.name2)
  29. self.ncr13 = self.name1.compare(self.name3)
  30. self.ncr23 = self.name2.compare(self.name3)
  31. self.ncr21 = self.name2.compare(self.name1)
  32. self.ncr32 = self.name3.compare(self.name2)
  33. self.ncr31 = self.name3.compare(self.name1)
  34. self.ncr14 = self.name1.compare(self.name4)
  35. self.ncr15 = self.name1.compare(self.name5)
  36. def test_init(self):
  37. self.assertRaises(NotImplementedError, NameComparisonResult)
  38. def test_get_order(self):
  39. self.assertEqual(-1, self.ncr12.get_order())
  40. self.assertEqual(-2, self.ncr13.get_order())
  41. self.assertEqual(-1, self.ncr23.get_order())
  42. self.assertEqual(1, self.ncr21.get_order())
  43. self.assertEqual(1, self.ncr32.get_order())
  44. self.assertEqual(2, self.ncr31.get_order())
  45. self.assertEqual(0, self.ncr14.get_order())
  46. def test_get_common_labels(self):
  47. self.assertEqual(3, self.ncr12.get_common_labels())
  48. self.assertEqual(1, self.ncr15.get_common_labels())
  49. def test_get_relation(self):
  50. self.assertEqual("COMMONANCESTOR", NameComparisonResult.NameRelation[self.ncr12.get_relation()])
  51. self.assertEqual("COMMONANCESTOR", NameComparisonResult.NameRelation[self.ncr15.get_relation()])
  52. class NameTest(unittest.TestCase):
  53. def setUp(self):
  54. self.name1 = Name("example.com")
  55. self.name2 = Name(".")
  56. self.name3 = Name("something.completely.different")
  57. self.name4 = Name("EXAMPLE.com")
  58. self.name5 = Name("*.example.com")
  59. def test_init(self):
  60. self.assertRaises(EmptyLabel, Name, "example..com")
  61. self.assertRaises(TooLongLabel, Name, "a"*64 + ".example.com")
  62. self.assertRaises(BadLabelType, Name, "\[asdf.example.com")
  63. self.assertRaises(BadEscape, Name, "\\999")
  64. self.assertRaises(TooLongName, Name, "example."*32 + "com")
  65. self.assertRaises(IncompleteName, Name, "\\")
  66. self.assertRaises(TypeError, Name, 1)
  67. b = bytearray()
  68. self.name1.to_wire(b)
  69. self.assertEqual(self.name1, Name(b))
  70. self.assertEqual(self.name1, Name(b, 0))
  71. self.assertRaises(InvalidBufferPosition, Name, b, 100)
  72. b = bytearray()
  73. b += b'\x07example'*32 + b'\x03com\x00'
  74. # no TooLong for from wire?
  75. self.assertRaises(DNSMessageFORMERR, Name, b, 0)
  76. def test_at(self):
  77. self.assertEqual(7, self.name1.at(0))
  78. self.assertEqual(101, self.name1.at(1))
  79. self.assertRaises(IndexError, self.name1.at, 100)
  80. self.assertRaises(TypeError, self.name1.at, "wrong")
  81. def test_get_length(self):
  82. self.assertEqual(13, self.name1.get_length())
  83. self.assertEqual(1, self.name2.get_length())
  84. self.assertEqual(32, self.name3.get_length())
  85. def test_get_labelcount(self):
  86. self.assertEqual(3, self.name1.get_labelcount())
  87. self.assertEqual(1, self.name2.get_labelcount())
  88. self.assertEqual(4, self.name3.get_labelcount())
  89. def test_to_text(self):
  90. self.assertEqual("example.com.", self.name1.to_text())
  91. self.assertEqual(".", self.name2.to_text())
  92. self.assertEqual("something.completely.different.", self.name3.to_text())
  93. def test_to_wire(self):
  94. b1 = bytearray()
  95. self.name1.to_wire(b1)
  96. self.assertEqual(bytearray(b'\x07example\x03com\x00'), b1)
  97. b2 = bytearray()
  98. self.name2.to_wire(b2)
  99. self.assertEqual(bytearray(b'\x00'), b2)
  100. mr = MessageRenderer()
  101. self.name1.to_wire(mr)
  102. self.assertEqual(b'\x07example\x03com\x00', mr.get_data())
  103. self.assertRaises(TypeError, self.name1.to_wire, "wrong")
  104. self.assertRaises(TypeError, self.name1.to_wire, 1)
  105. def test_compare(self):
  106. # tested in comparison class above
  107. pass
  108. def test_equals(self):
  109. self.assertFalse(self.name1.equals(self.name2))
  110. self.assertFalse(self.name1.equals(self.name3))
  111. self.assertTrue(self.name1.equals(self.name4))
  112. #TODO: == not yet defined
  113. #self.assertEqual(self.name1, self.name2)
  114. def test_split(self):
  115. s = self.name1.split(1,1)
  116. self.assertEqual("com.", s.to_text())
  117. s = self.name1.split(0,1)
  118. self.assertEqual("example.", s.to_text())
  119. s = self.name3.split(1,2)
  120. self.assertEqual("completely.different.", s.to_text())
  121. self.assertRaises(TypeError, self.name1.split, "wrong", 1)
  122. self.assertRaises(TypeError, self.name1.split, 1, "wrong")
  123. self.assertRaises(IndexError, self.name1.split, 123, 1)
  124. self.assertRaises(IndexError, self.name1.split, 1, 123)
  125. s = self.name1.split(1)
  126. self.assertEqual("com.", s.to_text())
  127. s = self.name1.split(0)
  128. self.assertEqual("example.com.", s.to_text())
  129. self.assertRaises(IndexError, self.name1.split, 123)
  130. def test_reverse(self):
  131. self.assertEqual("com.example.", self.name1.reverse().to_text())
  132. self.assertEqual(".", self.name2.reverse().to_text())
  133. def test_concatenate(self):
  134. self.assertEqual("example.com.", self.name1.concatenate(self.name2).to_text())
  135. self.assertEqual("example.com.example.com.", self.name1.concatenate(self.name1).to_text())
  136. self.assertRaises(TypeError, self.name1.concatenate, "wrong")
  137. self.assertRaises(TooLongName, self.name1.concatenate, Name("example."*31))
  138. def test_downcase(self):
  139. self.assertEqual("EXAMPLE.com.", self.name4.to_text())
  140. self.name4.downcase()
  141. self.assertEqual("example.com.", self.name4.to_text())
  142. def test_is_wildcard(self):
  143. self.assertFalse(self.name1.is_wildcard())
  144. self.assertTrue(self.name5.is_wildcard())
  145. def test_richcmp(self):
  146. self.assertTrue(self.name1 > self.name2)
  147. self.assertFalse(self.name1 < self.name2)
  148. self.assertTrue(self.name1 == self.name4)
  149. self.assertTrue(self.name1 <= self.name4)
  150. self.assertTrue(self.name1 >= self.name4)
  151. self.assertFalse(self.name1 <= self.name2)
  152. if __name__ == '__main__':
  153. unittest.main()