dnsruby 1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (520) hide show
  1. data/EVENTMACHINE +64 -0
  2. data/README +63 -0
  3. data/doc/classes/Dnsruby.html +463 -0
  4. data/doc/classes/Dnsruby/Algorithms.html +171 -0
  5. data/doc/classes/Dnsruby/Classes.html +197 -0
  6. data/doc/classes/Dnsruby/Classes.src/M000209.html +23 -0
  7. data/doc/classes/Dnsruby/Classes.src/M000210.html +19 -0
  8. data/doc/classes/Dnsruby/CodeMapper.html +375 -0
  9. data/doc/classes/Dnsruby/CodeMapper.src/M000186.html +18 -0
  10. data/doc/classes/Dnsruby/CodeMapper.src/M000187.html +33 -0
  11. data/doc/classes/Dnsruby/CodeMapper.src/M000188.html +21 -0
  12. data/doc/classes/Dnsruby/CodeMapper.src/M000189.html +19 -0
  13. data/doc/classes/Dnsruby/CodeMapper.src/M000190.html +19 -0
  14. data/doc/classes/Dnsruby/CodeMapper.src/M000191.html +18 -0
  15. data/doc/classes/Dnsruby/CodeMapper.src/M000192.html +22 -0
  16. data/doc/classes/Dnsruby/CodeMapper.src/M000193.html +22 -0
  17. data/doc/classes/Dnsruby/CodeMapper.src/M000194.html +22 -0
  18. data/doc/classes/Dnsruby/CodeMapper.src/M000195.html +31 -0
  19. data/doc/classes/Dnsruby/CodeMapper.src/M000196.html +19 -0
  20. data/doc/classes/Dnsruby/Config.html +413 -0
  21. data/doc/classes/Dnsruby/Config.src/M000148.html +18 -0
  22. data/doc/classes/Dnsruby/Config.src/M000149.html +19 -0
  23. data/doc/classes/Dnsruby/Config.src/M000150.html +19 -0
  24. data/doc/classes/Dnsruby/Config.src/M000151.html +25 -0
  25. data/doc/classes/Dnsruby/Config.src/M000152.html +21 -0
  26. data/doc/classes/Dnsruby/Config.src/M000153.html +38 -0
  27. data/doc/classes/Dnsruby/Config.src/M000154.html +26 -0
  28. data/doc/classes/Dnsruby/Config.src/M000155.html +22 -0
  29. data/doc/classes/Dnsruby/Config.src/M000156.html +27 -0
  30. data/doc/classes/Dnsruby/Config.src/M000157.html +22 -0
  31. data/doc/classes/Dnsruby/Config.src/M000158.html +21 -0
  32. data/doc/classes/Dnsruby/DNS.html +571 -0
  33. data/doc/classes/Dnsruby/DNS.src/M000258.html +24 -0
  34. data/doc/classes/Dnsruby/DNS.src/M000259.html +18 -0
  35. data/doc/classes/Dnsruby/DNS.src/M000260.html +18 -0
  36. data/doc/classes/Dnsruby/DNS.src/M000261.html +20 -0
  37. data/doc/classes/Dnsruby/DNS.src/M000262.html +19 -0
  38. data/doc/classes/Dnsruby/DNS.src/M000263.html +20 -0
  39. data/doc/classes/Dnsruby/DNS.src/M000264.html +18 -0
  40. data/doc/classes/Dnsruby/DNS.src/M000265.html +19 -0
  41. data/doc/classes/Dnsruby/DNS.src/M000266.html +20 -0
  42. data/doc/classes/Dnsruby/DNS.src/M000267.html +28 -0
  43. data/doc/classes/Dnsruby/DNS.src/M000268.html +19 -0
  44. data/doc/classes/Dnsruby/DNS.src/M000269.html +20 -0
  45. data/doc/classes/Dnsruby/DNS.src/M000270.html +31 -0
  46. data/doc/classes/Dnsruby/DecodeError.html +120 -0
  47. data/doc/classes/Dnsruby/Dnssec.html +287 -0
  48. data/doc/classes/Dnsruby/Dnssec.src/M000249.html +23 -0
  49. data/doc/classes/Dnsruby/Dnssec.src/M000250.html +19 -0
  50. data/doc/classes/Dnsruby/Dnssec.src/M000251.html +90 -0
  51. data/doc/classes/Dnsruby/Dnssec.src/M000252.html +76 -0
  52. data/doc/classes/Dnsruby/EncodeError.html +120 -0
  53. data/doc/classes/Dnsruby/FormErr.html +119 -0
  54. data/doc/classes/Dnsruby/Header.html +501 -0
  55. data/doc/classes/Dnsruby/Header.src/M000231.html +35 -0
  56. data/doc/classes/Dnsruby/Header.src/M000232.html +18 -0
  57. data/doc/classes/Dnsruby/Header.src/M000233.html +18 -0
  58. data/doc/classes/Dnsruby/Header.src/M000234.html +21 -0
  59. data/doc/classes/Dnsruby/Header.src/M000235.html +20 -0
  60. data/doc/classes/Dnsruby/Header.src/M000236.html +32 -0
  61. data/doc/classes/Dnsruby/Header.src/M000237.html +27 -0
  62. data/doc/classes/Dnsruby/Header.src/M000238.html +26 -0
  63. data/doc/classes/Dnsruby/Header.src/M000239.html +47 -0
  64. data/doc/classes/Dnsruby/Header.src/M000240.html +28 -0
  65. data/doc/classes/Dnsruby/Header.src/M000241.html +30 -0
  66. data/doc/classes/Dnsruby/Hosts.html +316 -0
  67. data/doc/classes/Dnsruby/Hosts.src/M000197.html +20 -0
  68. data/doc/classes/Dnsruby/Hosts.src/M000198.html +19 -0
  69. data/doc/classes/Dnsruby/Hosts.src/M000199.html +20 -0
  70. data/doc/classes/Dnsruby/Hosts.src/M000200.html +21 -0
  71. data/doc/classes/Dnsruby/Hosts.src/M000201.html +19 -0
  72. data/doc/classes/Dnsruby/Hosts.src/M000202.html +20 -0
  73. data/doc/classes/Dnsruby/Hosts.src/M000203.html +21 -0
  74. data/doc/classes/Dnsruby/IPv4.html +233 -0
  75. data/doc/classes/Dnsruby/IPv4.src/M000204.html +32 -0
  76. data/doc/classes/Dnsruby/IPv4.src/M000205.html +19 -0
  77. data/doc/classes/Dnsruby/IPv4.src/M000206.html +18 -0
  78. data/doc/classes/Dnsruby/IPv4.src/M000207.html +18 -0
  79. data/doc/classes/Dnsruby/IPv4.src/M000208.html +18 -0
  80. data/doc/classes/Dnsruby/IPv6.html +281 -0
  81. data/doc/classes/Dnsruby/IPv6.src/M000242.html +60 -0
  82. data/doc/classes/Dnsruby/IPv6.src/M000243.html +22 -0
  83. data/doc/classes/Dnsruby/IPv6.src/M000244.html +20 -0
  84. data/doc/classes/Dnsruby/IPv6.src/M000245.html +18 -0
  85. data/doc/classes/Dnsruby/Message.html +803 -0
  86. data/doc/classes/Dnsruby/Message.src/M000119.html +38 -0
  87. data/doc/classes/Dnsruby/Message.src/M000120.html +26 -0
  88. data/doc/classes/Dnsruby/Message.src/M000121.html +22 -0
  89. data/doc/classes/Dnsruby/Message.src/M000122.html +22 -0
  90. data/doc/classes/Dnsruby/Message.src/M000123.html +20 -0
  91. data/doc/classes/Dnsruby/Message.src/M000124.html +20 -0
  92. data/doc/classes/Dnsruby/Message.src/M000125.html +20 -0
  93. data/doc/classes/Dnsruby/Message.src/M000126.html +20 -0
  94. data/doc/classes/Dnsruby/Message.src/M000127.html +18 -0
  95. data/doc/classes/Dnsruby/Message.src/M000128.html +20 -0
  96. data/doc/classes/Dnsruby/Message.src/M000129.html +23 -0
  97. data/doc/classes/Dnsruby/Message.src/M000130.html +30 -0
  98. data/doc/classes/Dnsruby/Message.src/M000131.html +20 -0
  99. data/doc/classes/Dnsruby/Message.src/M000132.html +18 -0
  100. data/doc/classes/Dnsruby/Message.src/M000133.html +56 -0
  101. data/doc/classes/Dnsruby/Message.src/M000134.html +35 -0
  102. data/doc/classes/Dnsruby/Message.src/M000135.html +46 -0
  103. data/doc/classes/Dnsruby/Message/Section.html +160 -0
  104. data/doc/classes/Dnsruby/Message/Section.src/M000141.html +29 -0
  105. data/doc/classes/Dnsruby/Message/Section.src/M000142.html +30 -0
  106. data/doc/classes/Dnsruby/MetaTypes.html +136 -0
  107. data/doc/classes/Dnsruby/Modes.html +171 -0
  108. data/doc/classes/Dnsruby/NXDomain.html +119 -0
  109. data/doc/classes/Dnsruby/Name.html +330 -0
  110. data/doc/classes/Dnsruby/Name.src/M000104.html +28 -0
  111. data/doc/classes/Dnsruby/Name.src/M000105.html +20 -0
  112. data/doc/classes/Dnsruby/Name.src/M000106.html +18 -0
  113. data/doc/classes/Dnsruby/Name.src/M000107.html +21 -0
  114. data/doc/classes/Dnsruby/Name.src/M000108.html +22 -0
  115. data/doc/classes/Dnsruby/Name.src/M000109.html +18 -0
  116. data/doc/classes/Dnsruby/Name/Label.html +300 -0
  117. data/doc/classes/Dnsruby/Name/Label.src/M000110.html +21 -0
  118. data/doc/classes/Dnsruby/Name/Label.src/M000111.html +18 -0
  119. data/doc/classes/Dnsruby/Name/Label.src/M000112.html +22 -0
  120. data/doc/classes/Dnsruby/Name/Label.src/M000113.html +18 -0
  121. data/doc/classes/Dnsruby/Name/Label.src/M000114.html +18 -0
  122. data/doc/classes/Dnsruby/Name/Label.src/M000115.html +18 -0
  123. data/doc/classes/Dnsruby/Name/Label.src/M000116.html +18 -0
  124. data/doc/classes/Dnsruby/Name/Label.src/M000117.html +18 -0
  125. data/doc/classes/Dnsruby/Name/Label.src/M000118.html +18 -0
  126. data/doc/classes/Dnsruby/NotImp.html +119 -0
  127. data/doc/classes/Dnsruby/OpCode.html +146 -0
  128. data/doc/classes/Dnsruby/OtherResolvError.html +119 -0
  129. data/doc/classes/Dnsruby/QTypes.html +146 -0
  130. data/doc/classes/Dnsruby/Question.html +301 -0
  131. data/doc/classes/Dnsruby/Question.src/M000226.html +47 -0
  132. data/doc/classes/Dnsruby/Question.src/M000227.html +18 -0
  133. data/doc/classes/Dnsruby/Question.src/M000228.html +18 -0
  134. data/doc/classes/Dnsruby/Question.src/M000229.html +32 -0
  135. data/doc/classes/Dnsruby/Question.src/M000230.html +18 -0
  136. data/doc/classes/Dnsruby/RCode.html +211 -0
  137. data/doc/classes/Dnsruby/RR.html +648 -0
  138. data/doc/classes/Dnsruby/RR.src/M000001.html +18 -0
  139. data/doc/classes/Dnsruby/RR.src/M000002.html +22 -0
  140. data/doc/classes/Dnsruby/RR.src/M000003.html +18 -0
  141. data/doc/classes/Dnsruby/RR.src/M000004.html +18 -0
  142. data/doc/classes/Dnsruby/RR.src/M000005.html +26 -0
  143. data/doc/classes/Dnsruby/RR.src/M000006.html +18 -0
  144. data/doc/classes/Dnsruby/RR.src/M000007.html +36 -0
  145. data/doc/classes/Dnsruby/RR.src/M000008.html +100 -0
  146. data/doc/classes/Dnsruby/RR.src/M000009.html +18 -0
  147. data/doc/classes/Dnsruby/RR.src/M000010.html +18 -0
  148. data/doc/classes/Dnsruby/RR.src/M000011.html +22 -0
  149. data/doc/classes/Dnsruby/RR.src/M000012.html +29 -0
  150. data/doc/classes/Dnsruby/RR.src/M000013.html +24 -0
  151. data/doc/classes/Dnsruby/RR/ANY.html +133 -0
  152. data/doc/classes/Dnsruby/RR/CERT.html +180 -0
  153. data/doc/classes/Dnsruby/RR/CERT/CertificateTypes.html +169 -0
  154. data/doc/classes/Dnsruby/RR/CNAME.html +151 -0
  155. data/doc/classes/Dnsruby/RR/DNAME.html +150 -0
  156. data/doc/classes/Dnsruby/RR/DNSKEY.html +422 -0
  157. data/doc/classes/Dnsruby/RR/DNSKEY.src/M000044.html +20 -0
  158. data/doc/classes/Dnsruby/RR/DNSKEY.src/M000045.html +21 -0
  159. data/doc/classes/Dnsruby/RR/DNSKEY.src/M000046.html +28 -0
  160. data/doc/classes/Dnsruby/RR/DNSKEY.src/M000047.html +22 -0
  161. data/doc/classes/Dnsruby/RR/DNSKEY.src/M000048.html +18 -0
  162. data/doc/classes/Dnsruby/RR/DNSKEY.src/M000049.html +22 -0
  163. data/doc/classes/Dnsruby/RR/DNSKEY.src/M000050.html +18 -0
  164. data/doc/classes/Dnsruby/RR/DNSKEY.src/M000051.html +26 -0
  165. data/doc/classes/Dnsruby/RR/DNSKEY.src/M000052.html +38 -0
  166. data/doc/classes/Dnsruby/RR/DNSKEY.src/M000053.html +45 -0
  167. data/doc/classes/Dnsruby/RR/DNSKEY.src/M000054.html +21 -0
  168. data/doc/classes/Dnsruby/RR/DNSKEY.src/M000055.html +24 -0
  169. data/doc/classes/Dnsruby/RR/DNSKEY.src/M000056.html +32 -0
  170. data/doc/classes/Dnsruby/RR/DNSKEY.src/M000057.html +24 -0
  171. data/doc/classes/Dnsruby/RR/DS.html +286 -0
  172. data/doc/classes/Dnsruby/RR/DS.src/M000039.html +22 -0
  173. data/doc/classes/Dnsruby/RR/DS.src/M000040.html +28 -0
  174. data/doc/classes/Dnsruby/RR/DS.src/M000041.html +24 -0
  175. data/doc/classes/Dnsruby/RR/DS.src/M000042.html +28 -0
  176. data/doc/classes/Dnsruby/RR/DS.src/M000043.html +36 -0
  177. data/doc/classes/Dnsruby/RR/DomainName.html +175 -0
  178. data/doc/classes/Dnsruby/RR/DomainName.src/M000083.html +18 -0
  179. data/doc/classes/Dnsruby/RR/Generic.html +133 -0
  180. data/doc/classes/Dnsruby/RR/HINFO.html +155 -0
  181. data/doc/classes/Dnsruby/RR/IN.html +155 -0
  182. data/doc/classes/Dnsruby/RR/IN/A.html +200 -0
  183. data/doc/classes/Dnsruby/RR/IN/A.src/M000017.html +18 -0
  184. data/doc/classes/Dnsruby/RR/IN/A.src/M000018.html +18 -0
  185. data/doc/classes/Dnsruby/RR/IN/A.src/M000019.html +18 -0
  186. data/doc/classes/Dnsruby/RR/IN/AAAA.html +139 -0
  187. data/doc/classes/Dnsruby/RR/IN/AFSDB.html +145 -0
  188. data/doc/classes/Dnsruby/RR/IN/PX.html +143 -0
  189. data/doc/classes/Dnsruby/RR/IN/SRV.html +238 -0
  190. data/doc/classes/Dnsruby/RR/IN/SRV.src/M000014.html +29 -0
  191. data/doc/classes/Dnsruby/RR/IN/SRV.src/M000015.html +26 -0
  192. data/doc/classes/Dnsruby/RR/IN/SRV.src/M000016.html +22 -0
  193. data/doc/classes/Dnsruby/RR/IN/WKS.html +166 -0
  194. data/doc/classes/Dnsruby/RR/IN/WKS.src/M000020.html +20 -0
  195. data/doc/classes/Dnsruby/RR/ISDN.html +155 -0
  196. data/doc/classes/Dnsruby/RR/LOC.html +395 -0
  197. data/doc/classes/Dnsruby/RR/LOC.src/M000025.html +32 -0
  198. data/doc/classes/Dnsruby/RR/LOC.src/M000026.html +23 -0
  199. data/doc/classes/Dnsruby/RR/LOC.src/M000027.html +25 -0
  200. data/doc/classes/Dnsruby/RR/LOC.src/M000028.html +21 -0
  201. data/doc/classes/Dnsruby/RR/LOC.src/M000029.html +20 -0
  202. data/doc/classes/Dnsruby/RR/LOC.src/M000030.html +23 -0
  203. data/doc/classes/Dnsruby/RR/MB.html +150 -0
  204. data/doc/classes/Dnsruby/RR/MG.html +150 -0
  205. data/doc/classes/Dnsruby/RR/MINFO.html +156 -0
  206. data/doc/classes/Dnsruby/RR/MR.html +150 -0
  207. data/doc/classes/Dnsruby/RR/MX.html +155 -0
  208. data/doc/classes/Dnsruby/RR/NAPTR.html +190 -0
  209. data/doc/classes/Dnsruby/RR/NS.html +151 -0
  210. data/doc/classes/Dnsruby/RR/NSAP.html +293 -0
  211. data/doc/classes/Dnsruby/RR/NSAP.src/M000093.html +19 -0
  212. data/doc/classes/Dnsruby/RR/NSAP.src/M000094.html +19 -0
  213. data/doc/classes/Dnsruby/RR/NSAP.src/M000095.html +22 -0
  214. data/doc/classes/Dnsruby/RR/NSAP.src/M000096.html +31 -0
  215. data/doc/classes/Dnsruby/RR/NSEC.html +301 -0
  216. data/doc/classes/Dnsruby/RR/NSEC.src/M000031.html +19 -0
  217. data/doc/classes/Dnsruby/RR/NSEC.src/M000032.html +18 -0
  218. data/doc/classes/Dnsruby/RR/NSEC.src/M000033.html +34 -0
  219. data/doc/classes/Dnsruby/RR/NSEC.src/M000034.html +18 -0
  220. data/doc/classes/Dnsruby/RR/NSEC.src/M000035.html +71 -0
  221. data/doc/classes/Dnsruby/RR/NSEC.src/M000036.html +18 -0
  222. data/doc/classes/Dnsruby/RR/NSEC.src/M000037.html +80 -0
  223. data/doc/classes/Dnsruby/RR/NSEC.src/M000038.html +23 -0
  224. data/doc/classes/Dnsruby/RR/NSEC3.html +366 -0
  225. data/doc/classes/Dnsruby/RR/NSEC3.src/M000085.html +28 -0
  226. data/doc/classes/Dnsruby/RR/NSEC3.src/M000086.html +18 -0
  227. data/doc/classes/Dnsruby/RR/NSEC3.src/M000087.html +18 -0
  228. data/doc/classes/Dnsruby/RR/NSEC3.src/M000088.html +22 -0
  229. data/doc/classes/Dnsruby/RR/NSEC3.src/M000089.html +18 -0
  230. data/doc/classes/Dnsruby/RR/NSEC3.src/M000090.html +21 -0
  231. data/doc/classes/Dnsruby/RR/NSEC3.src/M000091.html +21 -0
  232. data/doc/classes/Dnsruby/RR/NSEC3.src/M000092.html +29 -0
  233. data/doc/classes/Dnsruby/RR/NSEC3PARAM.html +279 -0
  234. data/doc/classes/Dnsruby/RR/NSEC3PARAM.src/M000077.html +28 -0
  235. data/doc/classes/Dnsruby/RR/NSEC3PARAM.src/M000078.html +18 -0
  236. data/doc/classes/Dnsruby/RR/NSEC3PARAM.src/M000079.html +22 -0
  237. data/doc/classes/Dnsruby/RR/NSEC3PARAM.src/M000080.html +21 -0
  238. data/doc/classes/Dnsruby/RR/NSEC3PARAM.src/M000081.html +25 -0
  239. data/doc/classes/Dnsruby/RR/PTR.html +132 -0
  240. data/doc/classes/Dnsruby/RR/RP.html +183 -0
  241. data/doc/classes/Dnsruby/RR/RP.src/M000082.html +19 -0
  242. data/doc/classes/Dnsruby/RR/RRSIG.html +357 -0
  243. data/doc/classes/Dnsruby/RR/RRSIG.src/M000097.html +26 -0
  244. data/doc/classes/Dnsruby/RR/RRSIG.src/M000098.html +28 -0
  245. data/doc/classes/Dnsruby/RR/RRSIG.src/M000099.html +23 -0
  246. data/doc/classes/Dnsruby/RR/RRSIG.src/M000100.html +23 -0
  247. data/doc/classes/Dnsruby/RR/RRSIG.src/M000101.html +46 -0
  248. data/doc/classes/Dnsruby/RR/RRSIG.src/M000102.html +50 -0
  249. data/doc/classes/Dnsruby/RR/RRSIG.src/M000103.html +27 -0
  250. data/doc/classes/Dnsruby/RR/RT.html +155 -0
  251. data/doc/classes/Dnsruby/RR/SOA.html +233 -0
  252. data/doc/classes/Dnsruby/RR/SOA.src/M000066.html +24 -0
  253. data/doc/classes/Dnsruby/RR/SOA.src/M000067.html +27 -0
  254. data/doc/classes/Dnsruby/RR/SPF.html +138 -0
  255. data/doc/classes/Dnsruby/RR/TKEY.html +313 -0
  256. data/doc/classes/Dnsruby/RR/TKEY.src/M000021.html +19 -0
  257. data/doc/classes/Dnsruby/RR/TKEY.src/M000022.html +29 -0
  258. data/doc/classes/Dnsruby/RR/TKEY.src/M000023.html +21 -0
  259. data/doc/classes/Dnsruby/RR/TKEY.src/M000024.html +29 -0
  260. data/doc/classes/Dnsruby/RR/TSIG.html +524 -0
  261. data/doc/classes/Dnsruby/RR/TSIG.src/M000068.html +24 -0
  262. data/doc/classes/Dnsruby/RR/TSIG.src/M000069.html +32 -0
  263. data/doc/classes/Dnsruby/RR/TSIG.src/M000070.html +54 -0
  264. data/doc/classes/Dnsruby/RR/TSIG.src/M000071.html +121 -0
  265. data/doc/classes/Dnsruby/RR/TSIG.src/M000072.html +33 -0
  266. data/doc/classes/Dnsruby/RR/TSIG.src/M000073.html +25 -0
  267. data/doc/classes/Dnsruby/RR/TSIG.src/M000074.html +36 -0
  268. data/doc/classes/Dnsruby/RR/TSIG.src/M000075.html +22 -0
  269. data/doc/classes/Dnsruby/RR/TSIG.src/M000076.html +29 -0
  270. data/doc/classes/Dnsruby/RR/TXT.html +233 -0
  271. data/doc/classes/Dnsruby/RR/TXT.src/M000061.html +18 -0
  272. data/doc/classes/Dnsruby/RR/TXT.src/M000062.html +18 -0
  273. data/doc/classes/Dnsruby/RR/TXT.src/M000063.html +20 -0
  274. data/doc/classes/Dnsruby/RR/TXT.src/M000064.html +27 -0
  275. data/doc/classes/Dnsruby/RR/TXT.src/M000065.html +25 -0
  276. data/doc/classes/Dnsruby/RR/X25.html +203 -0
  277. data/doc/classes/Dnsruby/RR/X25.src/M000058.html +18 -0
  278. data/doc/classes/Dnsruby/RR/X25.src/M000059.html +18 -0
  279. data/doc/classes/Dnsruby/RR/X25.src/M000060.html +22 -0
  280. data/doc/classes/Dnsruby/RRSet.html +404 -0
  281. data/doc/classes/Dnsruby/RRSet.src/M000211.html +23 -0
  282. data/doc/classes/Dnsruby/RRSet.src/M000212.html +18 -0
  283. data/doc/classes/Dnsruby/RRSet.src/M000213.html +18 -0
  284. data/doc/classes/Dnsruby/RRSet.src/M000214.html +47 -0
  285. data/doc/classes/Dnsruby/RRSet.src/M000215.html +42 -0
  286. data/doc/classes/Dnsruby/RRSet.src/M000216.html +18 -0
  287. data/doc/classes/Dnsruby/RRSet.src/M000217.html +20 -0
  288. data/doc/classes/Dnsruby/RRSet.src/M000218.html +18 -0
  289. data/doc/classes/Dnsruby/RRSet.src/M000219.html +18 -0
  290. data/doc/classes/Dnsruby/RRSet.src/M000220.html +18 -0
  291. data/doc/classes/Dnsruby/RRSet.src/M000221.html +18 -0
  292. data/doc/classes/Dnsruby/RRSet.src/M000222.html +22 -0
  293. data/doc/classes/Dnsruby/RRSet.src/M000223.html +18 -0
  294. data/doc/classes/Dnsruby/RRSet.src/M000224.html +22 -0
  295. data/doc/classes/Dnsruby/RRSet.src/M000225.html +18 -0
  296. data/doc/classes/Dnsruby/Refused.html +119 -0
  297. data/doc/classes/Dnsruby/Resolv.html +401 -0
  298. data/doc/classes/Dnsruby/Resolv.src/M000159.html +18 -0
  299. data/doc/classes/Dnsruby/Resolv.src/M000160.html +18 -0
  300. data/doc/classes/Dnsruby/Resolv.src/M000161.html +18 -0
  301. data/doc/classes/Dnsruby/Resolv.src/M000162.html +18 -0
  302. data/doc/classes/Dnsruby/Resolv.src/M000163.html +18 -0
  303. data/doc/classes/Dnsruby/Resolv.src/M000164.html +18 -0
  304. data/doc/classes/Dnsruby/Resolv.src/M000165.html +18 -0
  305. data/doc/classes/Dnsruby/Resolv.src/M000166.html +19 -0
  306. data/doc/classes/Dnsruby/Resolv.src/M000167.html +20 -0
  307. data/doc/classes/Dnsruby/Resolv.src/M000168.html +29 -0
  308. data/doc/classes/Dnsruby/Resolv.src/M000169.html +19 -0
  309. data/doc/classes/Dnsruby/Resolv.src/M000170.html +20 -0
  310. data/doc/classes/Dnsruby/Resolv.src/M000171.html +25 -0
  311. data/doc/classes/Dnsruby/ResolvError.html +117 -0
  312. data/doc/classes/Dnsruby/ResolvTimeout.html +117 -0
  313. data/doc/classes/Dnsruby/Resolver.html +1055 -0
  314. data/doc/classes/Dnsruby/Resolver.src/M000271.html +21 -0
  315. data/doc/classes/Dnsruby/Resolver.src/M000272.html +27 -0
  316. data/doc/classes/Dnsruby/Resolver.src/M000273.html +28 -0
  317. data/doc/classes/Dnsruby/Resolver.src/M000274.html +18 -0
  318. data/doc/classes/Dnsruby/Resolver.src/M000275.html +51 -0
  319. data/doc/classes/Dnsruby/Resolver.src/M000276.html +21 -0
  320. data/doc/classes/Dnsruby/Resolver.src/M000277.html +22 -0
  321. data/doc/classes/Dnsruby/Resolver.src/M000278.html +18 -0
  322. data/doc/classes/Dnsruby/Resolver.src/M000279.html +20 -0
  323. data/doc/classes/Dnsruby/Resolver.src/M000280.html +19 -0
  324. data/doc/classes/Dnsruby/Resolver.src/M000281.html +19 -0
  325. data/doc/classes/Dnsruby/Resolver.src/M000282.html +19 -0
  326. data/doc/classes/Dnsruby/Resolver.src/M000283.html +19 -0
  327. data/doc/classes/Dnsruby/Resolver.src/M000284.html +19 -0
  328. data/doc/classes/Dnsruby/Resolver.src/M000285.html +19 -0
  329. data/doc/classes/Dnsruby/Resolver.src/M000286.html +19 -0
  330. data/doc/classes/Dnsruby/Resolver.src/M000287.html +19 -0
  331. data/doc/classes/Dnsruby/Resolver.src/M000288.html +19 -0
  332. data/doc/classes/Dnsruby/Resolver.src/M000289.html +19 -0
  333. data/doc/classes/Dnsruby/Resolver.src/M000290.html +19 -0
  334. data/doc/classes/Dnsruby/Resolver.src/M000291.html +19 -0
  335. data/doc/classes/Dnsruby/Resolver.src/M000292.html +26 -0
  336. data/doc/classes/Dnsruby/Resolver.src/M000293.html +18 -0
  337. data/doc/classes/Dnsruby/Resolver.src/M000294.html +23 -0
  338. data/doc/classes/Dnsruby/Resolver.src/M000295.html +18 -0
  339. data/doc/classes/Dnsruby/ServFail.html +119 -0
  340. data/doc/classes/Dnsruby/SingleResolver.html +674 -0
  341. data/doc/classes/Dnsruby/SingleResolver.src/M000172.html +18 -0
  342. data/doc/classes/Dnsruby/SingleResolver.src/M000173.html +24 -0
  343. data/doc/classes/Dnsruby/SingleResolver.src/M000174.html +36 -0
  344. data/doc/classes/Dnsruby/SingleResolver.src/M000175.html +18 -0
  345. data/doc/classes/Dnsruby/SingleResolver.src/M000176.html +19 -0
  346. data/doc/classes/Dnsruby/SingleResolver.src/M000177.html +50 -0
  347. data/doc/classes/Dnsruby/SingleResolver.src/M000178.html +19 -0
  348. data/doc/classes/Dnsruby/SingleResolver.src/M000179.html +21 -0
  349. data/doc/classes/Dnsruby/SingleResolver.src/M000180.html +25 -0
  350. data/doc/classes/Dnsruby/SingleResolver.src/M000181.html +54 -0
  351. data/doc/classes/Dnsruby/SingleResolver.src/M000182.html +27 -0
  352. data/doc/classes/Dnsruby/SingleResolver.src/M000183.html +27 -0
  353. data/doc/classes/Dnsruby/SingleResolver.src/M000184.html +35 -0
  354. data/doc/classes/Dnsruby/SingleResolver.src/M000185.html +21 -0
  355. data/doc/classes/Dnsruby/TheLog.html +196 -0
  356. data/doc/classes/Dnsruby/TheLog.src/M000246.html +20 -0
  357. data/doc/classes/Dnsruby/TheLog.src/M000247.html +20 -0
  358. data/doc/classes/Dnsruby/TheLog.src/M000248.html +20 -0
  359. data/doc/classes/Dnsruby/Types.html +436 -0
  360. data/doc/classes/Dnsruby/Update.html +368 -0
  361. data/doc/classes/Dnsruby/Update.src/M000253.html +32 -0
  362. data/doc/classes/Dnsruby/Update.src/M000254.html +36 -0
  363. data/doc/classes/Dnsruby/Update.src/M000255.html +32 -0
  364. data/doc/classes/Dnsruby/Update.src/M000256.html +41 -0
  365. data/doc/classes/Dnsruby/Update.src/M000257.html +34 -0
  366. data/doc/classes/Dnsruby/VerifyError.html +119 -0
  367. data/doc/classes/Dnsruby/ZoneTransfer.html +300 -0
  368. data/doc/classes/Dnsruby/ZoneTransfer.src/M000143.html +18 -0
  369. data/doc/classes/Dnsruby/ZoneTransfer.src/M000144.html +24 -0
  370. data/doc/classes/Dnsruby/ZoneTransfer.src/M000145.html +35 -0
  371. data/doc/classes/Dnsruby/ZoneTransfer/Delta.html +200 -0
  372. data/doc/classes/Dnsruby/ZoneTransfer/Delta.src/M000146.html +19 -0
  373. data/doc/classes/Dnsruby/ZoneTransfer/Delta.src/M000147.html +19 -0
  374. data/doc/created.rid +1 -0
  375. data/doc/files/lib/Dnsruby/Config_rb.html +101 -0
  376. data/doc/files/lib/Dnsruby/DNS_rb.html +110 -0
  377. data/doc/files/lib/Dnsruby/Hosts_rb.html +108 -0
  378. data/doc/files/lib/Dnsruby/Resolver_rb.html +109 -0
  379. data/doc/files/lib/Dnsruby/SingleResolver_rb.html +108 -0
  380. data/doc/files/lib/Dnsruby/TheLog_rb.html +110 -0
  381. data/doc/files/lib/Dnsruby/code_mapper_rb.html +101 -0
  382. data/doc/files/lib/Dnsruby/dnssec_rb.html +107 -0
  383. data/doc/files/lib/Dnsruby/event_machine_interface_rb.html +108 -0
  384. data/doc/files/lib/Dnsruby/ipv4_rb.html +101 -0
  385. data/doc/files/lib/Dnsruby/ipv6_rb.html +101 -0
  386. data/doc/files/lib/Dnsruby/message_rb.html +109 -0
  387. data/doc/files/lib/Dnsruby/name_rb.html +101 -0
  388. data/doc/files/lib/Dnsruby/resource/AAAA_rb.html +101 -0
  389. data/doc/files/lib/Dnsruby/resource/AFSDB_rb.html +101 -0
  390. data/doc/files/lib/Dnsruby/resource/A_rb.html +101 -0
  391. data/doc/files/lib/Dnsruby/resource/CERT_rb.html +101 -0
  392. data/doc/files/lib/Dnsruby/resource/DNSKEY_rb.html +101 -0
  393. data/doc/files/lib/Dnsruby/resource/DS_rb.html +101 -0
  394. data/doc/files/lib/Dnsruby/resource/HINFO_rb.html +101 -0
  395. data/doc/files/lib/Dnsruby/resource/IN_rb.html +112 -0
  396. data/doc/files/lib/Dnsruby/resource/ISDN_rb.html +101 -0
  397. data/doc/files/lib/Dnsruby/resource/LOC_rb.html +101 -0
  398. data/doc/files/lib/Dnsruby/resource/MINFO_rb.html +101 -0
  399. data/doc/files/lib/Dnsruby/resource/MX_rb.html +101 -0
  400. data/doc/files/lib/Dnsruby/resource/NAPTR_rb.html +101 -0
  401. data/doc/files/lib/Dnsruby/resource/NSAP_rb.html +101 -0
  402. data/doc/files/lib/Dnsruby/resource/NSEC3PARAM_rb.html +101 -0
  403. data/doc/files/lib/Dnsruby/resource/NSEC3_rb.html +101 -0
  404. data/doc/files/lib/Dnsruby/resource/NSEC_rb.html +101 -0
  405. data/doc/files/lib/Dnsruby/resource/OPT_rb.html +101 -0
  406. data/doc/files/lib/Dnsruby/resource/PX_rb.html +101 -0
  407. data/doc/files/lib/Dnsruby/resource/RP_rb.html +101 -0
  408. data/doc/files/lib/Dnsruby/resource/RRSIG_rb.html +101 -0
  409. data/doc/files/lib/Dnsruby/resource/RT_rb.html +101 -0
  410. data/doc/files/lib/Dnsruby/resource/SOA_rb.html +101 -0
  411. data/doc/files/lib/Dnsruby/resource/SPF_rb.html +101 -0
  412. data/doc/files/lib/Dnsruby/resource/SRV_rb.html +101 -0
  413. data/doc/files/lib/Dnsruby/resource/TKEY_rb.html +101 -0
  414. data/doc/files/lib/Dnsruby/resource/TSIG_rb.html +114 -0
  415. data/doc/files/lib/Dnsruby/resource/TXT_rb.html +108 -0
  416. data/doc/files/lib/Dnsruby/resource/X25_rb.html +101 -0
  417. data/doc/files/lib/Dnsruby/resource/domain_name_rb.html +101 -0
  418. data/doc/files/lib/Dnsruby/resource/generic_rb.html +131 -0
  419. data/doc/files/lib/Dnsruby/resource/resource_rb.html +110 -0
  420. data/doc/files/lib/Dnsruby/select_thread_rb.html +111 -0
  421. data/doc/files/lib/Dnsruby/update_rb.html +101 -0
  422. data/doc/files/lib/Dnsruby/zone_transfer_rb.html +101 -0
  423. data/doc/files/lib/dnsruby_rb.html +118 -0
  424. data/doc/fr_class_index.html +108 -0
  425. data/doc/fr_file_index.html +75 -0
  426. data/doc/fr_method_index.html +321 -0
  427. data/doc/index.html +24 -0
  428. data/lib/Dnsruby/Config.rb +363 -0
  429. data/lib/Dnsruby/DNS.rb +293 -0
  430. data/lib/Dnsruby/Hosts.rb +126 -0
  431. data/lib/Dnsruby/Resolver.rb +999 -0
  432. data/lib/Dnsruby/SingleResolver.rb +493 -0
  433. data/lib/Dnsruby/TheLog.rb +60 -0
  434. data/lib/Dnsruby/code_mapper.rb +165 -0
  435. data/lib/Dnsruby/dnssec.rb +357 -0
  436. data/lib/Dnsruby/event_machine_interface.rb +264 -0
  437. data/lib/Dnsruby/ipv4.rb +74 -0
  438. data/lib/Dnsruby/ipv6.rb +144 -0
  439. data/lib/Dnsruby/message.rb +961 -0
  440. data/lib/Dnsruby/name.rb +332 -0
  441. data/lib/Dnsruby/resource/A.rb +56 -0
  442. data/lib/Dnsruby/resource/AAAA.rb +54 -0
  443. data/lib/Dnsruby/resource/AFSDB.rb +68 -0
  444. data/lib/Dnsruby/resource/CERT.rb +89 -0
  445. data/lib/Dnsruby/resource/DNSKEY.rb +242 -0
  446. data/lib/Dnsruby/resource/DS.rb +162 -0
  447. data/lib/Dnsruby/resource/HINFO.rb +52 -0
  448. data/lib/Dnsruby/resource/IN.rb +70 -0
  449. data/lib/Dnsruby/resource/ISDN.rb +54 -0
  450. data/lib/Dnsruby/resource/LOC.rb +255 -0
  451. data/lib/Dnsruby/resource/MINFO.rb +70 -0
  452. data/lib/Dnsruby/resource/MX.rb +66 -0
  453. data/lib/Dnsruby/resource/NAPTR.rb +90 -0
  454. data/lib/Dnsruby/resource/NSAP.rb +172 -0
  455. data/lib/Dnsruby/resource/NSEC.rb +243 -0
  456. data/lib/Dnsruby/resource/NSEC3.rb +173 -0
  457. data/lib/Dnsruby/resource/NSEC3PARAM.rb +120 -0
  458. data/lib/Dnsruby/resource/OPT.rb +210 -0
  459. data/lib/Dnsruby/resource/PX.rb +71 -0
  460. data/lib/Dnsruby/resource/RP.rb +67 -0
  461. data/lib/Dnsruby/resource/RRSIG.rb +256 -0
  462. data/lib/Dnsruby/resource/RT.rb +67 -0
  463. data/lib/Dnsruby/resource/SOA.rb +95 -0
  464. data/lib/Dnsruby/resource/SPF.rb +29 -0
  465. data/lib/Dnsruby/resource/SRV.rb +112 -0
  466. data/lib/Dnsruby/resource/TKEY.rb +163 -0
  467. data/lib/Dnsruby/resource/TSIG.rb +584 -0
  468. data/lib/Dnsruby/resource/TXT.rb +76 -0
  469. data/lib/Dnsruby/resource/X25.rb +53 -0
  470. data/lib/Dnsruby/resource/domain_name.rb +54 -0
  471. data/lib/Dnsruby/resource/generic.rb +151 -0
  472. data/lib/Dnsruby/resource/resource.rb +561 -0
  473. data/lib/Dnsruby/select_thread.rb +449 -0
  474. data/lib/Dnsruby/update.rb +262 -0
  475. data/lib/Dnsruby/zone_transfer.rb +332 -0
  476. data/lib/dnsruby.rb +512 -0
  477. data/test/custom.txt +4 -0
  478. data/test/resolv.conf +4 -0
  479. data/test/tc_axfr.rb +32 -0
  480. data/test/tc_dns.rb +230 -0
  481. data/test/tc_dnskey.rb +52 -0
  482. data/test/tc_dnsruby.rb +42 -0
  483. data/test/tc_dnssec.rb +88 -0
  484. data/test/tc_ds.rb +38 -0
  485. data/test/tc_escapedchars.rb +484 -0
  486. data/test/tc_event_machine_deferrable.rb +85 -0
  487. data/test/tc_event_machine_res.rb +174 -0
  488. data/test/tc_event_machine_single_res.rb +101 -0
  489. data/test/tc_event_machine_soak.rb +98 -0
  490. data/test/tc_header.rb +104 -0
  491. data/test/tc_misc.rb +139 -0
  492. data/test/tc_name.rb +53 -0
  493. data/test/tc_nsec.rb +36 -0
  494. data/test/tc_nsec3.rb +63 -0
  495. data/test/tc_nsec3param.rb +30 -0
  496. data/test/tc_packet.rb +179 -0
  497. data/test/tc_packet_unique_push.rb +102 -0
  498. data/test/tc_question.rb +51 -0
  499. data/test/tc_res_config.rb +92 -0
  500. data/test/tc_res_env.rb +51 -0
  501. data/test/tc_res_file.rb +42 -0
  502. data/test/tc_res_opt.rb +187 -0
  503. data/test/tc_resolver.rb +184 -0
  504. data/test/tc_rr-opt.rb +82 -0
  505. data/test/tc_rr-txt.rb +137 -0
  506. data/test/tc_rr-unknown.rb +99 -0
  507. data/test/tc_rr.rb +258 -0
  508. data/test/tc_rrset.rb +58 -0
  509. data/test/tc_rrsig.rb +32 -0
  510. data/test/tc_single_resolver.rb +169 -0
  511. data/test/tc_soak.rb +200 -0
  512. data/test/tc_soak_base.rb +136 -0
  513. data/test/tc_tcp.rb +35 -0
  514. data/test/tc_tkey.rb +75 -0
  515. data/test/tc_tsig.rb +237 -0
  516. data/test/tc_update.rb +215 -0
  517. data/test/ts_dnsruby.rb +17 -0
  518. data/test/ts_offline.rb +42 -0
  519. data/test/ts_online.rb +107 -0
  520. metadata +627 -0
@@ -0,0 +1,200 @@
1
+ #--
2
+ #Copyright 2007 Nominet UK
3
+ #
4
+ #Licensed under the Apache License, Version 2.0 (the "License");
5
+ #you may not use this file except in compliance with the License.
6
+ #You may obtain a copy of the License at
7
+ #
8
+ # http://www.apache.org/licenses/LICENSE-2.0
9
+ #
10
+ #Unless required by applicable law or agreed to in writing, software
11
+ #distributed under the License is distributed on an "AS IS" BASIS,
12
+ #WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ #See the License for the specific language governing permissions and
14
+ #limitations under the License.
15
+ #++
16
+ require 'rubygems'
17
+ require 'test/unit'
18
+ require 'dnsruby'
19
+ begin
20
+ require 'test/tc_single_resolver'
21
+ rescue LoadError
22
+ require 'tc_single_resolver'
23
+ end
24
+ begin
25
+ require 'test/tc_soak_base'
26
+ rescue LoadError
27
+ require 'tc_soak_base'
28
+ end
29
+ include Dnsruby
30
+ # This class tries to soak test the Dnsruby library.
31
+ # It can't do this very well, owing to the small number of sockets allowed to be open simultaneously.
32
+ # @TODO@ Future versions of dnsruby will allow random streaming over a fixed number of (cycling) random sockets,
33
+ # so this test can be beefed up considerably at that point.
34
+ # @todo@ A test DNS server running on localhost is really needed here
35
+ class TestSingleResolverSoak < Test::Unit::TestCase
36
+
37
+ def test_many_asynchronous_queries_one_single_resolver
38
+ run_many_asynch_queries_test_single_res(1)
39
+ end
40
+
41
+ def test_many_asynchronous_queries_many_single_resolvers
42
+ run_many_asynch_queries_test_single_res(50)
43
+ end
44
+
45
+ def run_many_asynch_queries_test_single_res(num_resolvers)
46
+ q = Queue.new
47
+ resolvers = []
48
+ timed_out = 0
49
+ query_count = 0
50
+ num_resolvers.times do |n|
51
+ resolvers.push(SingleResolver.new)
52
+ resolvers[n].packet_timeout=4
53
+ end
54
+ res_pos = 0
55
+ start = Time.now
56
+ # @todo@ On windows, MAX_FILES is 256. This means that we have to limit
57
+ # this test while we're not using single sockets.
58
+ # We run four queries per iteration, so we're limited to 64 runs.
59
+ 63.times do |i|
60
+ rr_count = 0
61
+ TestSoakBase::Rrs.each do |data|
62
+ rr_count+=1
63
+ res = resolvers[res_pos]
64
+ res_pos=+1
65
+ if (res_pos >= num_resolvers)
66
+ res_pos = 0
67
+ end
68
+ res.send_async(Message.new(data[:name], data[:type]), q, [i,rr_count])
69
+ # p "Sent #{i}, #{rr_count}, Queue #{q}"
70
+ query_count+=1
71
+ end
72
+ end
73
+ query_count.times do |i|
74
+ id,ret, error = q.pop
75
+ if (error.class == ResolvTimeout)
76
+ timed_out+=1
77
+ elsif (ret.class != Message)
78
+ p "ERROR RETURNED : #{error}"
79
+ end
80
+
81
+ end
82
+ stop=Time.now
83
+ time_taken=stop-start
84
+ p "Query count : #{query_count}, #{timed_out} timed out. #{time_taken} time taken"
85
+ assert(timed_out < query_count * 0.1, "#{timed_out} of #{query_count} timed out!")
86
+ end
87
+
88
+
89
+ def test_many_threads_on_one_single_resolver_synchronous
90
+ # Test multi-threaded behaviour
91
+ # Check the header IDs to make sure they're all different
92
+ threads = Array.new
93
+ res = SingleResolver.new
94
+ ids = []
95
+ mutex = Mutex.new
96
+ timed_out = 0
97
+ query_count = 0
98
+ res.packet_timeout=4
99
+ start=Time.now
100
+ # Windows limits us to 256 sockets
101
+ num_times=250
102
+ if (/java/ =~ RUBY_PLATFORM)
103
+ # JRuby threads are native threads, so let's not go too mad!
104
+ num_times=50
105
+ end
106
+ num_times.times do |i|
107
+ threads[i] = Thread.new{
108
+ 40.times do |j|
109
+ TestSoakBase::Rrs.each do |data|
110
+ mutex.synchronize do
111
+ query_count+=1
112
+ end
113
+ packet=nil
114
+ begin
115
+ packet = res.query(data[:name], data[:type])
116
+ rescue ResolvTimeout
117
+ mutex.synchronize {
118
+ timed_out+=1
119
+ }
120
+ next
121
+ end
122
+ assert(packet)
123
+ ids.push(packet.header.id)
124
+ assert_equal(packet.question[0].qclass, 'IN', 'Class correct' )
125
+ end
126
+ end
127
+ }
128
+ end
129
+ threads.each do |thread|
130
+ thread.join
131
+ end
132
+ stop=Time.now
133
+ time_taken=stop-start
134
+ p "Query count : #{query_count}, #{timed_out} timed out. #{time_taken} time taken"
135
+ # check_ids(ids) # only do this if we expect all different IDs - e.g. if we stream over a single socket
136
+ assert(timed_out < query_count * 0.1, "#{timed_out} of #{query_count} timed out!")
137
+ end
138
+
139
+ def check_ids(ids)
140
+ ids.sort!
141
+ count = 0
142
+ ids.each do |id|
143
+ count+=1
144
+ if (count < ids.length-1)
145
+ assert(ids[count+1] != id, "Two identical header ids used!")
146
+ end
147
+ end
148
+ end
149
+
150
+ def test_many_threads_on_many_single_resolvers
151
+ # Test multi-threaded behaviour
152
+ # @todo@ Check the header IDs to make sure they're all different
153
+ threads = Array.new
154
+ mutex = Mutex.new
155
+ timed_out = 0
156
+ query_count = 0
157
+ start=Time.now
158
+ num_times=250
159
+ if (/java/ =~ RUBY_PLATFORM)
160
+ # JRuby threads are native threads, so let's not go too mad!
161
+ num_times=50
162
+ end
163
+ num_times.times do |i|
164
+ threads[i] = Thread.new{
165
+ res = SingleResolver.new
166
+ res.packet_timeout=4
167
+ 40.times do |j|
168
+ TestSoakBase::Rrs.each do |data|
169
+ mutex.synchronize do
170
+ query_count+=1
171
+ end
172
+ q = Queue.new
173
+ res.send_async(Message.new(data[:name], data[:type]), q, [i,j])
174
+ id, packet, error = q.pop
175
+ if (error.class == ResolvTimeout)
176
+ mutex.synchronize {
177
+ timed_out+=1
178
+ }
179
+ next
180
+ elsif (packet.class!=Message)
181
+ p "ERROR! #{error}"
182
+ end
183
+
184
+ assert(packet)
185
+ assert_equal(packet.question[0].qclass, 'IN', 'Class correct' )
186
+ end
187
+ end
188
+ }
189
+ end
190
+ threads.each do |thread|
191
+ thread.join
192
+ end
193
+ stop=Time.now
194
+ time_taken=stop-start
195
+ p "Query count : #{query_count}, #{timed_out} timed out. #{time_taken} time taken"
196
+ assert(timed_out < query_count * 0.1, "#{timed_out} of #{query_count} timed out!")
197
+ end
198
+
199
+
200
+ end
@@ -0,0 +1,136 @@
1
+ require 'rubygems'
2
+ require 'test/unit'
3
+ require 'dnsruby'
4
+
5
+ class TestSoakBase # < Test::Unit::TestCase
6
+ include Dnsruby
7
+ Rrs = [
8
+ {
9
+ :type => Types.A,
10
+ :name => 'a.t.dnsruby.validation-test-servers.nominet.org.uk',
11
+ :address => '10.0.1.128'
12
+ },
13
+ {
14
+ :type => Types::MX,
15
+ :name => 'mx.t.dnsruby.validation-test-servers.nominet.org.uk',
16
+ :exchange => 'a.t.dnsruby.validation-test-servers.nominet.org.uk',
17
+ :preference => 10
18
+ },
19
+ {
20
+ :type => 'CNAME',
21
+ :name => 'cname.t.dnsruby.validation-test-servers.nominet.org.uk',
22
+ :domainname => 'a.t.dnsruby.validation-test-servers.nominet.org.uk'
23
+ },
24
+ {
25
+ :type => Types.TXT,
26
+ :name => 'txt.t.dnsruby.validation-test-servers.nominet.org.uk',
27
+ :strings => ['Net-DNS']
28
+ }
29
+ ]
30
+
31
+ def TestSoakBase.test_continuous_queries_asynch_single_res
32
+ # Have two threads looping, with one sending, and one receiving queries.
33
+ # Never exceed more than 200 concurrent queries, but make sure they're always running.
34
+ outstanding_limit = 1
35
+ num_loops = 2000
36
+ num_sent = 0
37
+ q = Queue.new
38
+ timed_out = 0
39
+ mutex = Mutex.new
40
+ start = Time.now
41
+ num_in_progress = 0
42
+ sender = Thread.new{
43
+ res = SingleResolver.new
44
+ res.packet_timeout=5
45
+ num_loops.times do |i|
46
+ rr_count = 0
47
+ Rrs.each do |data|
48
+ rr_count+=1
49
+ while (mutex.synchronize{num_in_progress> outstanding_limit}) do
50
+ sleep(0.01)
51
+ end
52
+ res.send_async(Message.new(data[:name], data[:type]), q, [i,rr_count])
53
+ puts num_sent
54
+ num_sent+=1
55
+ mutex.synchronize {
56
+ num_in_progress+=1
57
+ }
58
+ end
59
+ end
60
+
61
+ }
62
+ receiver = Thread.new{
63
+ (num_loops*4).times do |i|
64
+ id,ret, error = q.pop
65
+ mutex.synchronize {
66
+ num_in_progress-=1
67
+ }
68
+ if (error.class == ResolvTimeout)
69
+ timed_out+=1
70
+ # p "Number #{i} timed out!"
71
+ elsif (ret.class != Message)
72
+ TheLog.debug("tc_single_resolver : Query #{i} ERROR RETURNED : #{error.class}, #{error}")
73
+ end
74
+ end
75
+ }
76
+ sender.join
77
+ receiver.join
78
+ assert(num_in_progress==0)
79
+ stop=Time.now
80
+ time_taken=stop-start
81
+ p "Query count : #{num_sent}, #{timed_out} timed out. #{time_taken} time taken"
82
+ assert(timed_out < num_sent * 0.1, "#{timed_out} of #{num_sent} timed out!")
83
+ end
84
+
85
+ def TestSoakBase.test_continuous_queries_asynch_resolver
86
+ # Have two threads looping, with one sending, and one receiving queries.
87
+ # Never exceed more than 250 concurrent queries, but make sure they're always running.
88
+ num_loops = 1000
89
+ num_sent = 0
90
+ q = Queue.new
91
+ timed_out = 0
92
+ mutex = Mutex.new
93
+ start = Time.now
94
+ num_in_progress = 0
95
+ sender = Thread.new{
96
+ res = Resolver.new
97
+ # On windows, MAX_FILES is 256. This means that we have to limit
98
+ # this test while we're not using single sockets.
99
+ # We run four queries per iteration, so we're limited to 64 runs.
100
+ num_loops.times do |i|
101
+ while (mutex.synchronize{num_in_progress> 50}) do # One query has several sockets in Resolver
102
+ sleep(0.01)
103
+ end
104
+ res.send_async(Message.new("example.com", Types.A), q, [i,1])
105
+ num_sent+=1
106
+ mutex.synchronize {
107
+ num_in_progress+=1
108
+ }
109
+ end
110
+ }
111
+ error_count=0
112
+ receiver = Thread.new{
113
+ (num_loops).times do |i|
114
+ id,ret, error = q.pop
115
+ mutex.synchronize {
116
+ num_in_progress-=1
117
+ }
118
+ if (error.class == ResolvTimeout)
119
+ timed_out+=1
120
+ # p "Number #{i} timed out!"
121
+ elsif (ret.class != Message)
122
+ error_count+=1
123
+ TheLog.error("tc_single_resolver : Query #{i} ERROR RETURNED : #{error.class}, #{error}")
124
+ end
125
+ end
126
+ }
127
+ sender.join
128
+ receiver.join
129
+ assert(num_in_progress==0)
130
+ stop=Time.now
131
+ time_taken=stop-start
132
+ p "Query count : #{num_sent}, #{timed_out} timed out, #{error_count} other errors. #{time_taken} time taken"
133
+ assert(timed_out < num_sent * 0.1, "#{timed_out} of #{num_sent} timed out!")
134
+ assert(error_count == 0)
135
+ end
136
+ end
@@ -0,0 +1,35 @@
1
+ #--
2
+ #Copyright 2007 Nominet UK
3
+ #
4
+ #Licensed under the Apache License, Version 2.0 (the "License");
5
+ #you may not use this file except in compliance with the License.
6
+ #You may obtain a copy of the License at
7
+ #
8
+ # http://www.apache.org/licenses/LICENSE-2.0
9
+ #
10
+ #Unless required by applicable law or agreed to in writing, software
11
+ #distributed under the License is distributed on an "AS IS" BASIS,
12
+ #WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ #See the License for the specific language governing permissions and
14
+ #limitations under the License.
15
+ #++
16
+ require 'rubygems'
17
+ require 'test/unit'
18
+ require 'dnsruby'
19
+ class TestTcp < Test::Unit::TestCase
20
+ def test_TCP
21
+ res = Dnsruby::Resolver.new()
22
+ res.use_tcp = true
23
+ ret=res.query("example.com")
24
+ assert(ret.is_a?(Dnsruby::Message))
25
+ end
26
+ def test_TCP_port
27
+ #@TODO@ Need a test server so we can tell what port this message was actually sent on!
28
+ res = Dnsruby::Resolver.new()
29
+ res.use_tcp = true
30
+ res.src_port=5379
31
+ ret=res.query("example.com")
32
+ assert(ret.is_a?(Dnsruby::Message))
33
+ end
34
+ #@TODO@ Check stuff like persistent sockets
35
+ end
@@ -0,0 +1,75 @@
1
+ #--
2
+ #Copyright 2007 Nominet UK
3
+ #
4
+ #Licensed under the Apache License, Version 2.0 (the "License");
5
+ #you may not use this file except in compliance with the License.
6
+ #You may obtain a copy of the License at
7
+ #
8
+ # http://www.apache.org/licenses/LICENSE-2.0
9
+ #
10
+ #Unless required by applicable law or agreed to in writing, software
11
+ #distributed under the License is distributed on an "AS IS" BASIS,
12
+ #WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ #See the License for the specific language governing permissions and
14
+ #limitations under the License.
15
+ #++
16
+ require 'rubygems'
17
+ require 'test/unit'
18
+ require 'dnsruby'
19
+ require "digest/md5"
20
+ class TestTKey < Test::Unit::TestCase
21
+ def is_empty(string)
22
+ return (string == "; no data" || string == "; rdlength = 0")
23
+ end
24
+
25
+ def test_tkey
26
+
27
+
28
+ #------------------------------------------------------------------------------
29
+ # Canned data.
30
+ #------------------------------------------------------------------------------
31
+
32
+ zone = "example.com"
33
+ name = "123456789-test"
34
+ klass = "IN"
35
+ type = Dnsruby::Types.TKEY
36
+ algorithm = "fake.algorithm.example.com"
37
+ key = "fake key"
38
+ inception = 100000 # use a strange fixed inception time to give a fixed
39
+ # checksum
40
+ expiration = inception + 24*60*60
41
+
42
+ rr = nil
43
+
44
+ #------------------------------------------------------------------------------
45
+ # Packet creation.
46
+ #------------------------------------------------------------------------------
47
+
48
+ rr = Dnsruby::RR.create(
49
+ :name => name,
50
+ :type => "TKEY",
51
+ :ttl => 0,
52
+ :klass => "ANY",
53
+ :algorithm => algorithm,
54
+ :inception => inception,
55
+ :expiration => expiration,
56
+ :mode => 3, # GSSAPI
57
+ :key => "fake key",
58
+ :other_data => ""
59
+ )
60
+
61
+ packet = Dnsruby::Message.new(name, Dnsruby::Types.TKEY, "IN")
62
+ packet.add_answer(rr)
63
+
64
+ z = (packet.zone)[0]
65
+
66
+ assert(packet, 'new() returned packet') #2
67
+ assert_equal(Dnsruby::OpCode.QUERY, packet.header.opcode, 'header opcode correct') #3
68
+ assert_equal(name, z.zname.to_s, 'zname correct') #4
69
+ assert_equal(Dnsruby::Classes.IN, z.zclass, 'zclass correct') #5
70
+ assert_equal(Dnsruby::Types.TKEY, z.ztype, 'ztype correct') #6
71
+
72
+ #@TODO@ Test TKEY against server!
73
+
74
+ end
75
+ end
@@ -0,0 +1,237 @@
1
+ #--
2
+ #Copyright 2007 Nominet UK
3
+ #
4
+ #Licensed under the Apache License, Version 2.0 (the "License");
5
+ #you may not use this file except in compliance with the License.
6
+ #You may obtain a copy of the License at
7
+ #
8
+ # http://www.apache.org/licenses/LICENSE-2.0
9
+ #
10
+ #Unless required by applicable law or agreed to in writing, software
11
+ #distributed under the License is distributed on an "AS IS" BASIS,
12
+ #WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ #See the License for the specific language governing permissions and
14
+ #limitations under the License.
15
+ #++
16
+ require 'rubygems'
17
+ require 'test/unit'
18
+ require 'dnsruby'
19
+ require "digest/md5"
20
+ class TestTSig < Test::Unit::TestCase
21
+ KEY_NAME="rubytsig"
22
+ KEY = "8n6gugn4aJ7MazyNlMccGKH1WxD2B3UvN/O/RA6iBupO2/03u9CTa3Ewz3gBWTSBCH3crY4Kk+tigNdeJBAvrw=="
23
+ def is_empty(string)
24
+ return (string == "; no data" || string == "; rdlength = 0")
25
+ end
26
+ def test_signed_update
27
+ Dnsruby::Resolver::use_eventmachine(false)
28
+ run_test_client_signs
29
+ run_test_resolver_signs
30
+ end
31
+ def test_signed_update_em
32
+ begin
33
+ Dnsruby::Resolver::use_eventmachine(true)
34
+ rescue RuntimeError
35
+ Dnsruby::TheLog.error("EventMachine not installed - not running tsig EM tests")
36
+ return
37
+ end
38
+ run_test_client_signs
39
+ run_test_resolver_signs
40
+ Dnsruby::Resolver::use_eventmachine(false)
41
+ end
42
+
43
+ def run_test_client_signs
44
+ # NOTE - client signing is only appropriate if DNSSEC and EDNS are switched
45
+ # off. Otherwise, the resolver will attempt to alter the flags and add an
46
+ # EDNS OPT psuedo-record to the query message, invalidating the signing.
47
+ tsig = Dnsruby::RR.create({
48
+ :name => KEY_NAME,
49
+ :type => "TSIG",
50
+ :ttl => 0,
51
+ :klass => "ANY",
52
+ :algorithm => "hmac-md5",
53
+ :fudge => 300,
54
+ :key => KEY,
55
+ :error => 0
56
+ })
57
+
58
+ update = Dnsruby::Update.new("validation-test-servers.nominet.org.uk")
59
+ # Generate update record name, and test it has been made. Then delete it and check it has been deleted
60
+ update_name = generate_update_name
61
+ update.absent(update_name)
62
+ update.add(update_name, 'TXT', 100, "test signed update")
63
+ tsig.apply(update)
64
+ assert(update.signed?, "Update has not been signed")
65
+
66
+ res = Dnsruby::Resolver.new("ns0.validation-test-servers.nominet.org.uk")
67
+ res.udp_size=512 # Or else we needed to add OPT record already
68
+ res.dnssec=false
69
+ res.recurse=false
70
+ res.query_timeout = 10
71
+ response = res.send_message(update)
72
+
73
+ assert_equal( Dnsruby::RCode.NOERROR, response.header.rcode)
74
+ assert(response.verified?, "Response has not been verified")
75
+
76
+ # Now check the record exists
77
+ rr = res.query(update_name, 'TXT')
78
+ assert_equal("test signed update", rr.answer()[0].strings.join(" "), "TXT record has not been created in zone")
79
+
80
+ # Now delete the record
81
+ update = Dnsruby::Update.new("validation-test-servers.nominet.org.uk")
82
+ update.present(update_name, 'TXT')
83
+ update.delete(update_name)
84
+ tsig.apply(update)
85
+ assert(update.signed?, "Update has not been signed")
86
+ response = res.send_message(update)
87
+ assert_equal( Dnsruby::RCode.NOERROR, response.header.rcode)
88
+ assert(response.verified?, "Response has not been verified")
89
+
90
+ # Now check the record does not exist
91
+ begin
92
+ rr = res.query(update_name, 'TXT')
93
+ assert(false)
94
+ rescue Dnsruby::NXDomain
95
+ end
96
+ end
97
+
98
+ @@fudge = 0
99
+ def generate_update_name
100
+ update_name = Time.now.to_i.to_s + @@fudge.to_s
101
+ @@fudge+=1
102
+ update_name += ".update.validation-test-servers.nominet.org.uk"
103
+ return update_name
104
+ end
105
+
106
+ def run_test_resolver_signs
107
+ res = Dnsruby::Resolver.new("ns0.validation-test-servers.nominet.org.uk")
108
+ res.query_timeout=10
109
+ res.tsig=KEY_NAME, KEY
110
+
111
+ update = Dnsruby::Update.new("validation-test-servers.nominet.org.uk")
112
+ # Generate update record name, and test it has been made. Then delete it and check it has been deleted
113
+ update_name = generate_update_name
114
+ update.absent(update_name)
115
+ update.add(update_name, 'TXT', 100, "test signed update")
116
+ assert(!update.signed?, "Update has been signed")
117
+
118
+ response = res.send_message(update)
119
+
120
+ assert_equal( Dnsruby::RCode.NOERROR, response.header.rcode)
121
+ assert(response.verified?, "Response has not been verified")
122
+
123
+ # Now check the record exists
124
+ rr = res.query(update_name, 'TXT')
125
+ assert_equal("test signed update", rr.answer()[0].strings.join(" "), "TXT record has not been created in zone")
126
+
127
+ # Now delete the record
128
+ update = Dnsruby::Update.new("validation-test-servers.nominet.org.uk")
129
+ update.present(update_name, 'TXT')
130
+ update.delete(update_name)
131
+ tsig = Dnsruby::RR.create({
132
+ :type => 'TSIG', :klass => 'ANY',
133
+ :name => KEY_NAME,
134
+ :key => KEY
135
+ })
136
+ tsig.apply(update)
137
+ assert(update.signed?, "Update has not been signed")
138
+ res.dnssec=false # Or else we needed to add OPT record already
139
+ res.udp_size = 512
140
+ response = res.send_message(update)
141
+ assert_equal( Dnsruby::RCode.NOERROR, response.header.rcode)
142
+ assert(response.verified?, "Response has not been verified")
143
+
144
+ # Now check the record does not exist
145
+ begin
146
+ rr = res.query(update_name, 'TXT')
147
+ assert(false)
148
+ rescue Dnsruby::NXDomain
149
+ end
150
+ end
151
+
152
+ def test_message_signing
153
+ m = Dnsruby::Message.new("example.com")
154
+ m.set_tsig("name", "key")
155
+ assert(!m.signed?)
156
+ m.encode
157
+ assert(m.signed?)
158
+
159
+ m = Dnsruby::Message.new("example.com")
160
+ m.set_tsig("name", "key")
161
+ assert(!m.signed?)
162
+ m.sign!
163
+ assert(m.signed?)
164
+
165
+ m = Dnsruby::Message.new("example.com")
166
+ assert(!m.signed?)
167
+ m.sign!("name", "key")
168
+ assert(m.signed?)
169
+ end
170
+
171
+ def test_signed_zone_transfer
172
+ # test TSIG over TCP session
173
+ axfr
174
+ ixfr
175
+ end
176
+
177
+ def axfr
178
+ zt = Dnsruby::ZoneTransfer.new
179
+ zt.transfer_type = Dnsruby::Types.AXFR
180
+ zt.tsig=KEY_NAME, KEY
181
+ zt.server = "ns0.validation-test-servers.nominet.org.uk"
182
+ zone = zt.transfer("validation-test-servers.nominet.org.uk")
183
+ assert(zone.length > 0)
184
+ assert(zt.last_tsigstate==:Verified)
185
+ end
186
+
187
+ # We also test IXFR here - this is because we need to update a record (using
188
+ # TSIG) before we can test ixfr...
189
+ def ixfr
190
+ # Check the SOA serial, do an update, check that the IXFR for that soa serial gives us the update we did,
191
+ # then delete the updated record
192
+ start_soa_serial = get_soa_serial("validation-test-servers.nominet.org.uk")
193
+
194
+ # Now do an update
195
+ res = Dnsruby::Resolver.new("ns0.validation-test-servers.nominet.org.uk")
196
+ res.query_timeout=10
197
+ res.tsig=KEY_NAME, KEY
198
+
199
+ update = Dnsruby::Update.new("validation-test-servers.nominet.org.uk")
200
+ # Generate update record name, and test it has been made. Then delete it and check it has been deleted
201
+ update_name = Time.now.to_i.to_s + rand(100).to_s + ".update.validation-test-servers.nominet.org.uk"
202
+ update.absent(update_name)
203
+ update.add(update_name, 'TXT', 100, "test zone transfer")
204
+ assert(!update.signed?, "Update has been signed")
205
+
206
+ response = res.send_message(update)
207
+ assert(response.header.rcode == Dnsruby::RCode.NOERROR)
208
+
209
+ end_soa_serial = get_soa_serial("validation-test-servers.nominet.org.uk")
210
+
211
+ zt = Dnsruby::ZoneTransfer.new
212
+ zt.transfer_type = Dnsruby::Types.IXFR
213
+ zt.server = "ns0.validation-test-servers.nominet.org.uk"
214
+ zt.serial = start_soa_serial # 2007090401
215
+ deltas = zt.transfer("validation-test-servers.nominet.org.uk")
216
+ assert(deltas.length > 0)
217
+ assert(deltas.last.class == Dnsruby::ZoneTransfer::Delta)
218
+ assert_equal("test zone transfer", deltas.last.adds.last.strings.join(" "))
219
+ assert(zt.last_tsigstate==nil)
220
+
221
+ # Now delete the updated record
222
+ update = Dnsruby::Update.new("validation-test-servers.nominet.org.uk")
223
+ update.present(update_name, 'TXT')
224
+ update.delete(update_name)
225
+ response = res.send_message(update)
226
+ assert_equal( Dnsruby::RCode.NOERROR, response.header.rcode)
227
+ end
228
+
229
+ def get_soa_serial(name)
230
+ soa_serial = nil
231
+ Dnsruby::DNS.open {|dns|
232
+ soa_rr = dns.getresource(name, 'SOA')
233
+ soa_serial = soa_rr.serial
234
+ }
235
+ return soa_serial
236
+ end
237
+ end