Dnsruby 0.5.0
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.
- data/README +34 -0
- data/doc/classes/Dnsruby/Classes.html +197 -0
- data/doc/classes/Dnsruby/Classes.src/M000157.html +23 -0
- data/doc/classes/Dnsruby/Classes.src/M000158.html +19 -0
- data/doc/classes/Dnsruby/CodeMapper.html +370 -0
- data/doc/classes/Dnsruby/CodeMapper.src/M000130.html +18 -0
- data/doc/classes/Dnsruby/CodeMapper.src/M000131.html +33 -0
- data/doc/classes/Dnsruby/CodeMapper.src/M000132.html +21 -0
- data/doc/classes/Dnsruby/CodeMapper.src/M000133.html +19 -0
- data/doc/classes/Dnsruby/CodeMapper.src/M000134.html +19 -0
- data/doc/classes/Dnsruby/CodeMapper.src/M000135.html +18 -0
- data/doc/classes/Dnsruby/CodeMapper.src/M000136.html +22 -0
- data/doc/classes/Dnsruby/CodeMapper.src/M000137.html +22 -0
- data/doc/classes/Dnsruby/CodeMapper.src/M000138.html +22 -0
- data/doc/classes/Dnsruby/CodeMapper.src/M000139.html +31 -0
- data/doc/classes/Dnsruby/CodeMapper.src/M000140.html +19 -0
- data/doc/classes/Dnsruby/Config.html +410 -0
- data/doc/classes/Dnsruby/Config.src/M000098.html +18 -0
- data/doc/classes/Dnsruby/Config.src/M000099.html +19 -0
- data/doc/classes/Dnsruby/Config.src/M000100.html +19 -0
- data/doc/classes/Dnsruby/Config.src/M000101.html +21 -0
- data/doc/classes/Dnsruby/Config.src/M000102.html +21 -0
- data/doc/classes/Dnsruby/Config.src/M000103.html +38 -0
- data/doc/classes/Dnsruby/Config.src/M000104.html +26 -0
- data/doc/classes/Dnsruby/Config.src/M000105.html +22 -0
- data/doc/classes/Dnsruby/Config.src/M000106.html +23 -0
- data/doc/classes/Dnsruby/Config.src/M000107.html +22 -0
- data/doc/classes/Dnsruby/Config.src/M000108.html +18 -0
- data/doc/classes/Dnsruby/DNS/DecodeError.html +111 -0
- data/doc/classes/Dnsruby/DNS/EncodeError.html +111 -0
- data/doc/classes/Dnsruby/DNS.html +469 -0
- data/doc/classes/Dnsruby/DNS.src/M000196.html +24 -0
- data/doc/classes/Dnsruby/DNS.src/M000197.html +18 -0
- data/doc/classes/Dnsruby/DNS.src/M000198.html +18 -0
- data/doc/classes/Dnsruby/DNS.src/M000199.html +20 -0
- data/doc/classes/Dnsruby/DNS.src/M000200.html +19 -0
- data/doc/classes/Dnsruby/DNS.src/M000201.html +20 -0
- data/doc/classes/Dnsruby/DNS.src/M000202.html +18 -0
- data/doc/classes/Dnsruby/DNS.src/M000203.html +19 -0
- data/doc/classes/Dnsruby/DNS.src/M000204.html +20 -0
- data/doc/classes/Dnsruby/DNS.src/M000205.html +28 -0
- data/doc/classes/Dnsruby/DNS.src/M000206.html +19 -0
- data/doc/classes/Dnsruby/DNS.src/M000207.html +20 -0
- data/doc/classes/Dnsruby/DNS.src/M000208.html +41 -0
- data/doc/classes/Dnsruby/DNS.src/M000209.html +32 -0
- data/doc/classes/Dnsruby/DNS.src/M000210.html +50 -0
- data/doc/classes/Dnsruby/DNSSEC/Algorithms.html +154 -0
- data/doc/classes/Dnsruby/DNSSEC.html +111 -0
- data/doc/classes/Dnsruby/DecodeError.html +111 -0
- data/doc/classes/Dnsruby/EncodeError.html +111 -0
- data/doc/classes/Dnsruby/FormErr.html +113 -0
- data/doc/classes/Dnsruby/Header.html +516 -0
- data/doc/classes/Dnsruby/Header.src/M000168.html +35 -0
- data/doc/classes/Dnsruby/Header.src/M000169.html +18 -0
- data/doc/classes/Dnsruby/Header.src/M000170.html +18 -0
- data/doc/classes/Dnsruby/Header.src/M000171.html +21 -0
- data/doc/classes/Dnsruby/Header.src/M000172.html +20 -0
- data/doc/classes/Dnsruby/Header.src/M000173.html +32 -0
- data/doc/classes/Dnsruby/Header.src/M000174.html +26 -0
- data/doc/classes/Dnsruby/Header.src/M000175.html +47 -0
- data/doc/classes/Dnsruby/Header.src/M000176.html +28 -0
- data/doc/classes/Dnsruby/Header.src/M000177.html +18 -0
- data/doc/classes/Dnsruby/Header.src/M000178.html +18 -0
- data/doc/classes/Dnsruby/Header.src/M000179.html +30 -0
- data/doc/classes/Dnsruby/Hosts.html +305 -0
- data/doc/classes/Dnsruby/Hosts.src/M000141.html +20 -0
- data/doc/classes/Dnsruby/Hosts.src/M000142.html +49 -0
- data/doc/classes/Dnsruby/Hosts.src/M000143.html +19 -0
- data/doc/classes/Dnsruby/Hosts.src/M000144.html +20 -0
- data/doc/classes/Dnsruby/Hosts.src/M000145.html +21 -0
- data/doc/classes/Dnsruby/Hosts.src/M000146.html +19 -0
- data/doc/classes/Dnsruby/Hosts.src/M000147.html +20 -0
- data/doc/classes/Dnsruby/Hosts.src/M000148.html +21 -0
- data/doc/classes/Dnsruby/IPv4.html +298 -0
- data/doc/classes/Dnsruby/IPv4.src/M000149.html +32 -0
- data/doc/classes/Dnsruby/IPv4.src/M000150.html +21 -0
- data/doc/classes/Dnsruby/IPv4.src/M000151.html +18 -0
- data/doc/classes/Dnsruby/IPv4.src/M000152.html +18 -0
- data/doc/classes/Dnsruby/IPv4.src/M000153.html +19 -0
- data/doc/classes/Dnsruby/IPv4.src/M000154.html +18 -0
- data/doc/classes/Dnsruby/IPv4.src/M000155.html +18 -0
- data/doc/classes/Dnsruby/IPv4.src/M000156.html +18 -0
- data/doc/classes/Dnsruby/IPv6.html +318 -0
- data/doc/classes/Dnsruby/IPv6.src/M000180.html +60 -0
- data/doc/classes/Dnsruby/IPv6.src/M000181.html +21 -0
- data/doc/classes/Dnsruby/IPv6.src/M000182.html +22 -0
- data/doc/classes/Dnsruby/IPv6.src/M000183.html +18 -0
- data/doc/classes/Dnsruby/IPv6.src/M000184.html +21 -0
- data/doc/classes/Dnsruby/IPv6.src/M000185.html +18 -0
- data/doc/classes/Dnsruby/IPv6.src/M000186.html +18 -0
- data/doc/classes/Dnsruby/IPv6.src/M000187.html +18 -0
- data/doc/classes/Dnsruby/Message.html +689 -0
- data/doc/classes/Dnsruby/Message.src/M000076.html +34 -0
- data/doc/classes/Dnsruby/Message.src/M000077.html +26 -0
- data/doc/classes/Dnsruby/Message.src/M000078.html +22 -0
- data/doc/classes/Dnsruby/Message.src/M000079.html +20 -0
- data/doc/classes/Dnsruby/Message.src/M000080.html +20 -0
- data/doc/classes/Dnsruby/Message.src/M000081.html +20 -0
- data/doc/classes/Dnsruby/Message.src/M000082.html +20 -0
- data/doc/classes/Dnsruby/Message.src/M000083.html +20 -0
- data/doc/classes/Dnsruby/Message.src/M000084.html +21 -0
- data/doc/classes/Dnsruby/Message.src/M000085.html +20 -0
- data/doc/classes/Dnsruby/Message.src/M000086.html +18 -0
- data/doc/classes/Dnsruby/Message.src/M000087.html +54 -0
- data/doc/classes/Dnsruby/Message.src/M000088.html +42 -0
- data/doc/classes/Dnsruby/Message.src/M000089.html +45 -0
- data/doc/classes/Dnsruby/MetaTypes.html +136 -0
- data/doc/classes/Dnsruby/Modes.html +171 -0
- data/doc/classes/Dnsruby/NXDomain.html +113 -0
- data/doc/classes/Dnsruby/Name/Label.html +300 -0
- data/doc/classes/Dnsruby/Name/Label.src/M000067.html +21 -0
- data/doc/classes/Dnsruby/Name/Label.src/M000068.html +18 -0
- data/doc/classes/Dnsruby/Name/Label.src/M000069.html +22 -0
- data/doc/classes/Dnsruby/Name/Label.src/M000070.html +18 -0
- data/doc/classes/Dnsruby/Name/Label.src/M000071.html +18 -0
- data/doc/classes/Dnsruby/Name/Label.src/M000072.html +18 -0
- data/doc/classes/Dnsruby/Name/Label.src/M000073.html +18 -0
- data/doc/classes/Dnsruby/Name/Label.src/M000074.html +18 -0
- data/doc/classes/Dnsruby/Name/Label.src/M000075.html +18 -0
- data/doc/classes/Dnsruby/Name.html +357 -0
- data/doc/classes/Dnsruby/Name.src/M000057.html +28 -0
- data/doc/classes/Dnsruby/Name.src/M000058.html +20 -0
- data/doc/classes/Dnsruby/Name.src/M000059.html +18 -0
- data/doc/classes/Dnsruby/Name.src/M000060.html +18 -0
- data/doc/classes/Dnsruby/Name.src/M000061.html +21 -0
- data/doc/classes/Dnsruby/Name.src/M000062.html +19 -0
- data/doc/classes/Dnsruby/Name.src/M000064.html +22 -0
- data/doc/classes/Dnsruby/Name.src/M000065.html +18 -0
- data/doc/classes/Dnsruby/Name.src/M000066.html +20 -0
- data/doc/classes/Dnsruby/NotImp.html +113 -0
- data/doc/classes/Dnsruby/OpCode.html +146 -0
- data/doc/classes/Dnsruby/OtherResolvError.html +113 -0
- data/doc/classes/Dnsruby/QTypes.html +146 -0
- data/doc/classes/Dnsruby/Question.html +256 -0
- data/doc/classes/Dnsruby/Question.src/M000166.html +47 -0
- data/doc/classes/Dnsruby/Question.src/M000167.html +18 -0
- data/doc/classes/Dnsruby/RCode.html +211 -0
- data/doc/classes/Dnsruby/RR/ANY.html +133 -0
- data/doc/classes/Dnsruby/RR/CERT/CertificateTypes.html +169 -0
- data/doc/classes/Dnsruby/RR/CERT.html +180 -0
- data/doc/classes/Dnsruby/RR/CNAME.html +150 -0
- data/doc/classes/Dnsruby/RR/DNAME.html +150 -0
- data/doc/classes/Dnsruby/RR/DomainName.html +175 -0
- data/doc/classes/Dnsruby/RR/DomainName.src/M000051.html +22 -0
- data/doc/classes/Dnsruby/RR/Generic.html +156 -0
- data/doc/classes/Dnsruby/RR/Generic.src/M000041.html +25 -0
- data/doc/classes/Dnsruby/RR/HINFO.html +155 -0
- data/doc/classes/Dnsruby/RR/IN/A.html +199 -0
- data/doc/classes/Dnsruby/RR/IN/A.src/M000018.html +18 -0
- data/doc/classes/Dnsruby/RR/IN/A.src/M000019.html +18 -0
- data/doc/classes/Dnsruby/RR/IN/A.src/M000020.html +18 -0
- data/doc/classes/Dnsruby/RR/IN/AAAA.html +138 -0
- data/doc/classes/Dnsruby/RR/IN/AFSDB.html +145 -0
- data/doc/classes/Dnsruby/RR/IN/PX.html +143 -0
- data/doc/classes/Dnsruby/RR/IN/SRV.html +243 -0
- data/doc/classes/Dnsruby/RR/IN/SRV.src/M000015.html +29 -0
- data/doc/classes/Dnsruby/RR/IN/SRV.src/M000016.html +26 -0
- data/doc/classes/Dnsruby/RR/IN/SRV.src/M000017.html +22 -0
- data/doc/classes/Dnsruby/RR/IN/WKS.html +166 -0
- data/doc/classes/Dnsruby/RR/IN/WKS.src/M000021.html +20 -0
- data/doc/classes/Dnsruby/RR/IN.html +155 -0
- data/doc/classes/Dnsruby/RR/ISDN.html +155 -0
- data/doc/classes/Dnsruby/RR/LOC.html +395 -0
- data/doc/classes/Dnsruby/RR/LOC.src/M000025.html +32 -0
- data/doc/classes/Dnsruby/RR/LOC.src/M000026.html +23 -0
- data/doc/classes/Dnsruby/RR/LOC.src/M000027.html +25 -0
- data/doc/classes/Dnsruby/RR/LOC.src/M000028.html +21 -0
- data/doc/classes/Dnsruby/RR/LOC.src/M000029.html +20 -0
- data/doc/classes/Dnsruby/RR/LOC.src/M000030.html +23 -0
- data/doc/classes/Dnsruby/RR/MB.html +150 -0
- data/doc/classes/Dnsruby/RR/MG.html +150 -0
- data/doc/classes/Dnsruby/RR/MINFO.html +156 -0
- data/doc/classes/Dnsruby/RR/MR.html +150 -0
- data/doc/classes/Dnsruby/RR/MX.html +155 -0
- data/doc/classes/Dnsruby/RR/NAPTR.html +190 -0
- data/doc/classes/Dnsruby/RR/NS.html +150 -0
- data/doc/classes/Dnsruby/RR/NSAP.html +293 -0
- data/doc/classes/Dnsruby/RR/NSAP.src/M000053.html +19 -0
- data/doc/classes/Dnsruby/RR/NSAP.src/M000054.html +19 -0
- data/doc/classes/Dnsruby/RR/NSAP.src/M000055.html +22 -0
- data/doc/classes/Dnsruby/RR/NSAP.src/M000056.html +31 -0
- data/doc/classes/Dnsruby/RR/PTR.html +132 -0
- data/doc/classes/Dnsruby/RR/RP.html +183 -0
- data/doc/classes/Dnsruby/RR/RP.src/M000050.html +19 -0
- data/doc/classes/Dnsruby/RR/RT.html +155 -0
- data/doc/classes/Dnsruby/RR/SOA.html +230 -0
- data/doc/classes/Dnsruby/RR/SOA.src/M000039.html +24 -0
- data/doc/classes/Dnsruby/RR/SOA.src/M000040.html +27 -0
- data/doc/classes/Dnsruby/RR/SPF.html +138 -0
- data/doc/classes/Dnsruby/RR/TKEY.html +285 -0
- data/doc/classes/Dnsruby/RR/TKEY.src/M000022.html +19 -0
- data/doc/classes/Dnsruby/RR/TKEY.src/M000023.html +29 -0
- data/doc/classes/Dnsruby/RR/TKEY.src/M000024.html +30 -0
- data/doc/classes/Dnsruby/RR/TSIG.html +416 -0
- data/doc/classes/Dnsruby/RR/TSIG.src/M000042.html +22 -0
- data/doc/classes/Dnsruby/RR/TSIG.src/M000043.html +71 -0
- data/doc/classes/Dnsruby/RR/TSIG.src/M000044.html +34 -0
- data/doc/classes/Dnsruby/RR/TSIG.src/M000045.html +37 -0
- data/doc/classes/Dnsruby/RR/TSIG.src/M000046.html +31 -0
- data/doc/classes/Dnsruby/RR/TSIG.src/M000047.html +34 -0
- data/doc/classes/Dnsruby/RR/TSIG.src/M000048.html +22 -0
- data/doc/classes/Dnsruby/RR/TSIG.src/M000049.html +29 -0
- data/doc/classes/Dnsruby/RR/TXT.html +233 -0
- data/doc/classes/Dnsruby/RR/TXT.src/M000034.html +18 -0
- data/doc/classes/Dnsruby/RR/TXT.src/M000035.html +18 -0
- data/doc/classes/Dnsruby/RR/TXT.src/M000036.html +20 -0
- data/doc/classes/Dnsruby/RR/TXT.src/M000037.html +27 -0
- data/doc/classes/Dnsruby/RR/TXT.src/M000038.html +25 -0
- data/doc/classes/Dnsruby/RR/X25.html +203 -0
- data/doc/classes/Dnsruby/RR/X25.src/M000031.html +18 -0
- data/doc/classes/Dnsruby/RR/X25.src/M000032.html +18 -0
- data/doc/classes/Dnsruby/RR/X25.src/M000033.html +22 -0
- data/doc/classes/Dnsruby/RR.html +620 -0
- data/doc/classes/Dnsruby/RR.src/M000001.html +18 -0
- data/doc/classes/Dnsruby/RR.src/M000002.html +22 -0
- data/doc/classes/Dnsruby/RR.src/M000003.html +18 -0
- data/doc/classes/Dnsruby/RR.src/M000004.html +18 -0
- data/doc/classes/Dnsruby/RR.src/M000005.html +18 -0
- data/doc/classes/Dnsruby/RR.src/M000006.html +36 -0
- data/doc/classes/Dnsruby/RR.src/M000007.html +100 -0
- data/doc/classes/Dnsruby/RR.src/M000008.html +18 -0
- data/doc/classes/Dnsruby/RR.src/M000009.html +18 -0
- data/doc/classes/Dnsruby/RR.src/M000010.html +22 -0
- data/doc/classes/Dnsruby/RR.src/M000011.html +22 -0
- data/doc/classes/Dnsruby/RR.src/M000012.html +18 -0
- data/doc/classes/Dnsruby/RR.src/M000013.html +22 -0
- data/doc/classes/Dnsruby/RR.src/M000014.html +24 -0
- data/doc/classes/Dnsruby/RRSet.html +257 -0
- data/doc/classes/Dnsruby/RRSet.src/M000159.html +18 -0
- data/doc/classes/Dnsruby/RRSet.src/M000160.html +44 -0
- data/doc/classes/Dnsruby/RRSet.src/M000161.html +18 -0
- data/doc/classes/Dnsruby/RRSet.src/M000162.html +20 -0
- data/doc/classes/Dnsruby/RRSet.src/M000163.html +18 -0
- data/doc/classes/Dnsruby/RRSet.src/M000164.html +18 -0
- data/doc/classes/Dnsruby/RRSet.src/M000165.html +18 -0
- data/doc/classes/Dnsruby/Refused.html +113 -0
- data/doc/classes/Dnsruby/Resolv.html +400 -0
- data/doc/classes/Dnsruby/Resolv.src/M000109.html +18 -0
- data/doc/classes/Dnsruby/Resolv.src/M000110.html +18 -0
- data/doc/classes/Dnsruby/Resolv.src/M000111.html +18 -0
- data/doc/classes/Dnsruby/Resolv.src/M000112.html +18 -0
- data/doc/classes/Dnsruby/Resolv.src/M000113.html +18 -0
- data/doc/classes/Dnsruby/Resolv.src/M000114.html +18 -0
- data/doc/classes/Dnsruby/Resolv.src/M000115.html +18 -0
- data/doc/classes/Dnsruby/Resolv.src/M000116.html +19 -0
- data/doc/classes/Dnsruby/Resolv.src/M000117.html +20 -0
- data/doc/classes/Dnsruby/Resolv.src/M000118.html +29 -0
- data/doc/classes/Dnsruby/Resolv.src/M000119.html +19 -0
- data/doc/classes/Dnsruby/Resolv.src/M000120.html +20 -0
- data/doc/classes/Dnsruby/Resolv.src/M000121.html +25 -0
- data/doc/classes/Dnsruby/ResolvError.html +111 -0
- data/doc/classes/Dnsruby/ResolvTimeout.html +111 -0
- data/doc/classes/Dnsruby/Resolver.html +807 -0
- data/doc/classes/Dnsruby/Resolver.src/M000211.html +21 -0
- data/doc/classes/Dnsruby/Resolver.src/M000212.html +37 -0
- data/doc/classes/Dnsruby/Resolver.src/M000213.html +64 -0
- data/doc/classes/Dnsruby/Resolver.src/M000214.html +23 -0
- data/doc/classes/Dnsruby/Resolver.src/M000215.html +46 -0
- data/doc/classes/Dnsruby/Resolver.src/M000216.html +21 -0
- data/doc/classes/Dnsruby/Resolver.src/M000217.html +22 -0
- data/doc/classes/Dnsruby/Resolver.src/M000218.html +18 -0
- data/doc/classes/Dnsruby/Resolver.src/M000219.html +20 -0
- data/doc/classes/Dnsruby/Resolver.src/M000220.html +19 -0
- data/doc/classes/Dnsruby/Resolver.src/M000221.html +19 -0
- data/doc/classes/Dnsruby/Resolver.src/M000222.html +19 -0
- data/doc/classes/Dnsruby/Resolver.src/M000223.html +19 -0
- data/doc/classes/Dnsruby/Resolver.src/M000224.html +19 -0
- data/doc/classes/Dnsruby/Resolver.src/M000225.html +19 -0
- data/doc/classes/Dnsruby/Resolver.src/M000226.html +19 -0
- data/doc/classes/Dnsruby/Resolver.src/M000227.html +19 -0
- data/doc/classes/Dnsruby/Resolver.src/M000228.html +19 -0
- data/doc/classes/Dnsruby/Resolver.src/M000229.html +19 -0
- data/doc/classes/Dnsruby/Resolver.src/M000230.html +19 -0
- data/doc/classes/Dnsruby/ServFail.html +113 -0
- data/doc/classes/Dnsruby/SingleResolver.html +496 -0
- data/doc/classes/Dnsruby/SingleResolver.src/M000122.html +18 -0
- data/doc/classes/Dnsruby/SingleResolver.src/M000123.html +19 -0
- data/doc/classes/Dnsruby/SingleResolver.src/M000124.html +49 -0
- data/doc/classes/Dnsruby/SingleResolver.src/M000125.html +18 -0
- data/doc/classes/Dnsruby/SingleResolver.src/M000126.html +21 -0
- data/doc/classes/Dnsruby/SingleResolver.src/M000127.html +25 -0
- data/doc/classes/Dnsruby/SingleResolver.src/M000128.html +78 -0
- data/doc/classes/Dnsruby/SingleResolver.src/M000129.html +21 -0
- data/doc/classes/Dnsruby/TheLog.html +196 -0
- data/doc/classes/Dnsruby/TheLog.src/M000188.html +20 -0
- data/doc/classes/Dnsruby/TheLog.src/M000189.html +20 -0
- data/doc/classes/Dnsruby/TheLog.src/M000190.html +20 -0
- data/doc/classes/Dnsruby/Types.html +426 -0
- data/doc/classes/Dnsruby/Update.html +368 -0
- data/doc/classes/Dnsruby/Update.src/M000191.html +32 -0
- data/doc/classes/Dnsruby/Update.src/M000192.html +37 -0
- data/doc/classes/Dnsruby/Update.src/M000193.html +32 -0
- data/doc/classes/Dnsruby/Update.src/M000194.html +41 -0
- data/doc/classes/Dnsruby/Update.src/M000195.html +34 -0
- data/doc/classes/Dnsruby/ZoneTransfer/Delta.html +183 -0
- data/doc/classes/Dnsruby/ZoneTransfer/Delta.src/M000097.html +19 -0
- data/doc/classes/Dnsruby/ZoneTransfer.html +248 -0
- data/doc/classes/Dnsruby/ZoneTransfer.src/M000095.html +22 -0
- data/doc/classes/Dnsruby/ZoneTransfer.src/M000096.html +35 -0
- data/doc/classes/Dnsruby.html +388 -0
- data/doc/created.rid +1 -0
- data/doc/files/lib/Dnsruby/Config_rb.html +101 -0
- data/doc/files/lib/Dnsruby/DNSSEC_rb.html +101 -0
- data/doc/files/lib/Dnsruby/DNS_rb.html +110 -0
- data/doc/files/lib/Dnsruby/Hosts_rb.html +108 -0
- data/doc/files/lib/Dnsruby/Resolver_rb.html +108 -0
- data/doc/files/lib/Dnsruby/SingleResolver_rb.html +108 -0
- data/doc/files/lib/Dnsruby/TheLog_rb.html +110 -0
- data/doc/files/lib/Dnsruby/code_mapper_rb.html +101 -0
- data/doc/files/lib/Dnsruby/ipv4_rb.html +101 -0
- data/doc/files/lib/Dnsruby/ipv6_rb.html +101 -0
- data/doc/files/lib/Dnsruby/message_rb.html +109 -0
- data/doc/files/lib/Dnsruby/name_rb.html +101 -0
- data/doc/files/lib/Dnsruby/resource/AAAA_rb.html +101 -0
- data/doc/files/lib/Dnsruby/resource/AFSDB_rb.html +101 -0
- data/doc/files/lib/Dnsruby/resource/A_rb.html +101 -0
- data/doc/files/lib/Dnsruby/resource/CERT_rb.html +101 -0
- data/doc/files/lib/Dnsruby/resource/HINFO_rb.html +101 -0
- data/doc/files/lib/Dnsruby/resource/IN_rb.html +112 -0
- data/doc/files/lib/Dnsruby/resource/ISDN_rb.html +101 -0
- data/doc/files/lib/Dnsruby/resource/LOC_rb.html +101 -0
- data/doc/files/lib/Dnsruby/resource/MINFO_rb.html +101 -0
- data/doc/files/lib/Dnsruby/resource/MX_rb.html +101 -0
- data/doc/files/lib/Dnsruby/resource/NAPTR_rb.html +101 -0
- data/doc/files/lib/Dnsruby/resource/NSAP_rb.html +101 -0
- data/doc/files/lib/Dnsruby/resource/OPT_rb.html +101 -0
- data/doc/files/lib/Dnsruby/resource/PX_rb.html +101 -0
- data/doc/files/lib/Dnsruby/resource/RP_rb.html +101 -0
- data/doc/files/lib/Dnsruby/resource/RT_rb.html +101 -0
- data/doc/files/lib/Dnsruby/resource/SOA_rb.html +101 -0
- data/doc/files/lib/Dnsruby/resource/SPF_rb.html +101 -0
- data/doc/files/lib/Dnsruby/resource/SRV_rb.html +101 -0
- data/doc/files/lib/Dnsruby/resource/TKEY_rb.html +101 -0
- data/doc/files/lib/Dnsruby/resource/TSIG_rb.html +110 -0
- data/doc/files/lib/Dnsruby/resource/TXT_rb.html +108 -0
- data/doc/files/lib/Dnsruby/resource/X25_rb.html +101 -0
- data/doc/files/lib/Dnsruby/resource/domain_name_rb.html +101 -0
- data/doc/files/lib/Dnsruby/resource/generic_rb.html +125 -0
- data/doc/files/lib/Dnsruby/resource/resource_rb.html +110 -0
- data/doc/files/lib/Dnsruby/select_thread_rb.html +111 -0
- data/doc/files/lib/Dnsruby/update_rb.html +101 -0
- data/doc/files/lib/Dnsruby/zone_transfer_rb.html +101 -0
- data/doc/files/lib/dnsruby_rb.html +118 -0
- data/doc/fr_class_index.html +102 -0
- data/doc/fr_file_index.html +68 -0
- data/doc/fr_method_index.html +256 -0
- data/doc/index.html +24 -0
- data/lib/Dnsruby/Config.rb +350 -0
- data/lib/Dnsruby/DNS.rb +253 -0
- data/lib/Dnsruby/DNSSEC.rb +29 -0
- data/lib/Dnsruby/Hosts.rb +119 -0
- data/lib/Dnsruby/Resolver.rb +618 -0
- data/lib/Dnsruby/SingleResolver.rb +312 -0
- data/lib/Dnsruby/TheLog.rb +61 -0
- data/lib/Dnsruby/code_mapper.rb +164 -0
- data/lib/Dnsruby/ipv4.rb +83 -0
- data/lib/Dnsruby/ipv6.rb +142 -0
- data/lib/Dnsruby/message.rb +819 -0
- data/lib/Dnsruby/name.rb +325 -0
- data/lib/Dnsruby/resource/A.rb +56 -0
- data/lib/Dnsruby/resource/AAAA.rb +54 -0
- data/lib/Dnsruby/resource/AFSDB.rb +68 -0
- data/lib/Dnsruby/resource/CERT.rb +89 -0
- data/lib/Dnsruby/resource/HINFO.rb +52 -0
- data/lib/Dnsruby/resource/IN.rb +69 -0
- data/lib/Dnsruby/resource/ISDN.rb +54 -0
- data/lib/Dnsruby/resource/LOC.rb +255 -0
- data/lib/Dnsruby/resource/MINFO.rb +66 -0
- data/lib/Dnsruby/resource/MX.rb +66 -0
- data/lib/Dnsruby/resource/NAPTR.rb +90 -0
- data/lib/Dnsruby/resource/NSAP.rb +172 -0
- data/lib/Dnsruby/resource/OPT.rb +153 -0
- data/lib/Dnsruby/resource/PX.rb +71 -0
- data/lib/Dnsruby/resource/RP.rb +67 -0
- data/lib/Dnsruby/resource/RT.rb +67 -0
- data/lib/Dnsruby/resource/SOA.rb +89 -0
- data/lib/Dnsruby/resource/SPF.rb +29 -0
- data/lib/Dnsruby/resource/SRV.rb +108 -0
- data/lib/Dnsruby/resource/TKEY.rb +160 -0
- data/lib/Dnsruby/resource/TSIG.rb +328 -0
- data/lib/Dnsruby/resource/TXT.rb +76 -0
- data/lib/Dnsruby/resource/X25.rb +53 -0
- data/lib/Dnsruby/resource/domain_name.rb +58 -0
- data/lib/Dnsruby/resource/generic.rb +142 -0
- data/lib/Dnsruby/resource/resource.rb +444 -0
- data/lib/Dnsruby/select_thread.rb +474 -0
- data/lib/Dnsruby/update.rb +263 -0
- data/lib/Dnsruby/zone_transfer.rb +296 -0
- data/lib/dnsruby.rb +468 -0
- data/test/custom.txt +4 -0
- data/test/resolv.conf +4 -0
- data/test/tc_axfr.rb +42 -0
- data/test/tc_dns.rb +231 -0
- data/test/tc_dnsruby.rb +42 -0
- data/test/tc_escapedchars.rb +510 -0
- data/test/tc_header.rb +104 -0
- data/test/tc_misc.rb +139 -0
- data/test/tc_name.rb +53 -0
- data/test/tc_packet.rb +158 -0
- data/test/tc_packet_unique_push.rb +102 -0
- data/test/tc_question.rb +52 -0
- data/test/tc_res_config.rb +92 -0
- data/test/tc_res_env.rb +62 -0
- data/test/tc_res_file.rb +42 -0
- data/test/tc_res_opt.rb +185 -0
- data/test/tc_resolver.rb +177 -0
- data/test/tc_rr-opt.rb +42 -0
- data/test/tc_rr-txt.rb +137 -0
- data/test/tc_rr-unknown.rb +99 -0
- data/test/tc_rr.rb +259 -0
- data/test/tc_single_resolver.rb +153 -0
- data/test/tc_soak.rb +310 -0
- data/test/tc_tcp.rb +35 -0
- data/test/tc_tkey.rb +106 -0
- data/test/tc_update.rb +215 -0
- data/test/ts_dnsruby.rb +17 -0
- data/test/ts_offline.rb +35 -0
- data/test/ts_online.rb +40 -0
- metadata +512 -0
data/test/tc_res_file.rb
ADDED
|
@@ -0,0 +1,42 @@
|
|
|
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 TestAResolverFile < Test::Unit::TestCase
|
|
20
|
+
def setup
|
|
21
|
+
Dnsruby::Config.reset
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
def test_resFile
|
|
25
|
+
res = Dnsruby::DNS.new("test/resolv.conf")
|
|
26
|
+
|
|
27
|
+
assert(res, "new() returned something")
|
|
28
|
+
assert(res.config.nameserver, "nameservers() works")
|
|
29
|
+
|
|
30
|
+
servers = res.config.nameserver
|
|
31
|
+
|
|
32
|
+
assert_equal(servers[0], '10.0.1.128', 'Nameserver set correctly')
|
|
33
|
+
assert_equal(servers[1], '10.0.2.128', 'Nameserver set correctly')
|
|
34
|
+
|
|
35
|
+
|
|
36
|
+
search = res.config.search
|
|
37
|
+
assert(search.include?('dnsruby.validation-test-servers.nominet.org.uk'), 'Search set correctly' )
|
|
38
|
+
assert(search.include?('lib.dnsruby.validation-test-servers.nominet.org.uk'), 'Search set correctly' )
|
|
39
|
+
|
|
40
|
+
assert(res.config.domain=='t.dnsruby.validation-test-servers.nominet.org.uk', 'Local domain works' )
|
|
41
|
+
end
|
|
42
|
+
end
|
data/test/tc_res_opt.rb
ADDED
|
@@ -0,0 +1,185 @@
|
|
|
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
|
+
include Dnsruby
|
|
20
|
+
class TestResOpt < Test::Unit::TestCase
|
|
21
|
+
def test_dns_file
|
|
22
|
+
|
|
23
|
+
# .txt because this test will run under windows, unlike the other file
|
|
24
|
+
# configuration tests.
|
|
25
|
+
res = Dnsruby::DNS.new('test/custom.txt')
|
|
26
|
+
|
|
27
|
+
assert(res, 'new() returned something')
|
|
28
|
+
assert_instance_of(DNS, res, 'new() returns an object of the correct class.')
|
|
29
|
+
assert(res.config.nameserver, 'nameservers() works')
|
|
30
|
+
|
|
31
|
+
servers = res.config.nameserver
|
|
32
|
+
|
|
33
|
+
assert_equal('10.0.1.42', servers[0], 'Nameserver set correctly')
|
|
34
|
+
assert_equal('10.0.2.42', servers[1], 'Nameserver set correctly')
|
|
35
|
+
|
|
36
|
+
|
|
37
|
+
search = res.config.search
|
|
38
|
+
assert(search.include?('alt.dnsruby.validation-test-servers.nominet.org.uk'), 'Search set correctly' )
|
|
39
|
+
assert(search.include?('ext.dnsruby.validation-test-servers.nominet.org.uk'), 'Search set correctly' )
|
|
40
|
+
|
|
41
|
+
assert(res.config.domain == 't2.dnsruby.validation-test-servers.nominet.org.uk', 'Local domain works' )
|
|
42
|
+
end
|
|
43
|
+
|
|
44
|
+
def test_resolver_file
|
|
45
|
+
res = Dnsruby::Resolver.new({:config_info => 'test/custom.txt'})
|
|
46
|
+
assert(res.config.nameserver==['10.0.1.42', '10.0.2.42'], res.config.nameserver.to_s)
|
|
47
|
+
end
|
|
48
|
+
|
|
49
|
+
def test_no_file
|
|
50
|
+
res=nil
|
|
51
|
+
begin
|
|
52
|
+
res = DNS.new('nosuch.txt')
|
|
53
|
+
assert_equal(["0.0.0.0"], res.nameserver,"No nameservers should be set for #{test} = #{input}")
|
|
54
|
+
rescue Exception
|
|
55
|
+
end
|
|
56
|
+
begin
|
|
57
|
+
res = Resolver.new('nosuch.txt')
|
|
58
|
+
assert_equal(["0.0.0.0"], res.nameserver,"No nameservers should be set for #{test} = #{input}")
|
|
59
|
+
rescue Exception
|
|
60
|
+
end
|
|
61
|
+
end
|
|
62
|
+
|
|
63
|
+
def test_config_hash_singleresolver
|
|
64
|
+
# Resolver interface gives us : port, TCP, IgnoreTruncation, TSIGkey, timeout
|
|
65
|
+
# SR : server, local_address, persistent_tcp, persistent_udp, udp_size
|
|
66
|
+
test_config = {
|
|
67
|
+
:server => '10.0.0.1',
|
|
68
|
+
:port => 54, # SingleResolver and Multi-Resolver
|
|
69
|
+
:src_address => '10.1.0.1', # SingleResolver and Multi-Resolver
|
|
70
|
+
:src_port => 53, # SingleResolver and Multi-Resolver
|
|
71
|
+
:use_tcp => true, # SingleResolver and Multi-Resolver
|
|
72
|
+
:ignore_truncation => true, # SingleResolver and Multi-Resolver
|
|
73
|
+
:recurse => false,
|
|
74
|
+
:packet_timeout => 60, # SingleResolver and Multi-Resolver # Only have one timeout for both UDP and TCP
|
|
75
|
+
:persistent_tcp => true, # SingleResolver and Multi-Resolver
|
|
76
|
+
:persistent_udp => true, # SingleResolver and Multi-Resolver
|
|
77
|
+
#@todo Add dnssec when dnssec added to Net::DNS
|
|
78
|
+
# 'dnssec' => true,
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
res = SingleResolver.new(test_config)
|
|
82
|
+
test_config.keys.each do |item|
|
|
83
|
+
assert_equal(test_config[item], res.send(item), "#{item} is correct")
|
|
84
|
+
end
|
|
85
|
+
end
|
|
86
|
+
|
|
87
|
+
def test_config_hash_multiresolver
|
|
88
|
+
# Resolver interface gives us : port, TCP, IgnoreTruncation, TSIGkey, timeout
|
|
89
|
+
# ER : retries, load_balance. Also loads servers from Config and configures SRs to point to them
|
|
90
|
+
# Also implements Resolver interface - but iterates this through *all* SRs
|
|
91
|
+
test_config = {
|
|
92
|
+
:nameserver => ['10.0.0.1', '10.0.0.2'], # for Multi-Resolver & DNS
|
|
93
|
+
:port => 54, # SingleResolver and Multi-Resolver
|
|
94
|
+
:src_address => '10.1.0.1', # SingleResolver and Multi-Resolver
|
|
95
|
+
:src_port => 53, # SingleResolver and Multi-Resolver
|
|
96
|
+
:retry_delay => 6, # DNS and Multi-Resolver
|
|
97
|
+
:retry_times => 5, # DNSand Multi-Resolver
|
|
98
|
+
:use_tcp => true, # SingleResolver and Multi-Resolver
|
|
99
|
+
:ignore_truncation => true, # SingleResolver and Multi-Resolver
|
|
100
|
+
:recurse => false,
|
|
101
|
+
:packet_timeout => 60, # SingleResolver and Multi-Resolver # Only have one timeout for both UDP and TCP
|
|
102
|
+
:query_timeout => 60, # Multi-Resolver only
|
|
103
|
+
:persistent_tcp => true, # SingleResolver and Multi-Resolver
|
|
104
|
+
:persistent_udp => true, # SingleResolver and Multi-Resolver
|
|
105
|
+
#@todo Add dnssec when dnssec added to Net::DNS
|
|
106
|
+
# 'dnssec' => true,
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
res = Resolver.new(test_config)
|
|
110
|
+
test_config.keys.each do |item|
|
|
111
|
+
if (item==:nameserver)
|
|
112
|
+
assert_equal(res.config.nameserver, test_config[item], "#{item} is correct")
|
|
113
|
+
else
|
|
114
|
+
assert_equal(res.send(item), test_config[item], "#{item} is correct")
|
|
115
|
+
end
|
|
116
|
+
end
|
|
117
|
+
end
|
|
118
|
+
|
|
119
|
+
def test_config_hash_lookup
|
|
120
|
+
# Lookup : can specify resolver, searchpath
|
|
121
|
+
#
|
|
122
|
+
# Check that we can set things in new()
|
|
123
|
+
#
|
|
124
|
+
res=nil
|
|
125
|
+
|
|
126
|
+
test_config = {
|
|
127
|
+
:nameserver => ['10.0.0.1', '10.0.0.2'], # for Multi-Resolver & DNS
|
|
128
|
+
:domain => 'dnsruby.validation-test-servers.nominet.org.uk', # one for DNS only?
|
|
129
|
+
:search => ['dnsruby.validation-test-servers.nominet.org.uk', 't.dnsruby.validation-test-servers.nominet.org.uk'], # one for DNS
|
|
130
|
+
:ndots => 2, # DNS only
|
|
131
|
+
:apply_search_list => false, # DNS only
|
|
132
|
+
:apply_domain => false, # DNS only
|
|
133
|
+
}
|
|
134
|
+
|
|
135
|
+
res = DNS.new(test_config)
|
|
136
|
+
test_config.keys.each do |item|
|
|
137
|
+
assert_equal(res.config.send(item), test_config[item], "#{item} is correct")
|
|
138
|
+
end
|
|
139
|
+
end
|
|
140
|
+
|
|
141
|
+
|
|
142
|
+
def test_bad_config
|
|
143
|
+
res=nil
|
|
144
|
+
|
|
145
|
+
bad_input = {
|
|
146
|
+
:tsig_rr => 'set',
|
|
147
|
+
:errorstring => 'set',
|
|
148
|
+
:answerfrom => 'set',
|
|
149
|
+
:answersize => 'set',
|
|
150
|
+
:querytime => 'set',
|
|
151
|
+
:axfr_sel => 'set',
|
|
152
|
+
:axfr_rr => 'set',
|
|
153
|
+
:axfr_soa_count => 'set',
|
|
154
|
+
:udppacketsize => 'set',
|
|
155
|
+
:cdflag => 'set',
|
|
156
|
+
}
|
|
157
|
+
res=nil
|
|
158
|
+
begin
|
|
159
|
+
res = Resolver.new(bad_input)
|
|
160
|
+
rescue Exception
|
|
161
|
+
end
|
|
162
|
+
if (res)
|
|
163
|
+
bad_input.keys.each do |key|
|
|
164
|
+
begin
|
|
165
|
+
assert_not_equal(res.send(key), 'set', "#{key} is not set")
|
|
166
|
+
rescue Exception
|
|
167
|
+
end
|
|
168
|
+
end
|
|
169
|
+
end
|
|
170
|
+
|
|
171
|
+
res=nil
|
|
172
|
+
begin
|
|
173
|
+
res = DNS.new(bad_input)
|
|
174
|
+
rescue Exception
|
|
175
|
+
end
|
|
176
|
+
if (res)
|
|
177
|
+
bad_input.keys.each do |key|
|
|
178
|
+
begin
|
|
179
|
+
assert_not_equal(res.send(key), 'set', "#{key} is not set")
|
|
180
|
+
rescue Exception
|
|
181
|
+
end
|
|
182
|
+
end
|
|
183
|
+
end
|
|
184
|
+
end
|
|
185
|
+
end
|
data/test/tc_resolver.rb
ADDED
|
@@ -0,0 +1,177 @@
|
|
|
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 'dnsruby'
|
|
17
|
+
require 'socket'
|
|
18
|
+
require 'test/unit'
|
|
19
|
+
include Dnsruby
|
|
20
|
+
#@TODO@ We also need a test server so we can control behaviour of server to test
|
|
21
|
+
#different aspects of retry strategy.
|
|
22
|
+
#Of course, with Ruby's limit of 256 open sockets per process, we'd need to run
|
|
23
|
+
#the server in a different Ruby process.
|
|
24
|
+
|
|
25
|
+
class TestResolver < Test::Unit::TestCase
|
|
26
|
+
include Dnsruby
|
|
27
|
+
Thread::abort_on_exception = true
|
|
28
|
+
def setup
|
|
29
|
+
Dnsruby::Config.reset
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
def test_send_message
|
|
33
|
+
res = Resolver.new
|
|
34
|
+
ret = res.send_message(Message.new("example.com", Types.A))
|
|
35
|
+
assert(ret.kind_of?(Message))
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
def test_query
|
|
39
|
+
res = Resolver.new
|
|
40
|
+
ret = res.query("example.com")
|
|
41
|
+
assert(ret.kind_of?(Message))
|
|
42
|
+
end
|
|
43
|
+
|
|
44
|
+
def test_query_async
|
|
45
|
+
res = Resolver.new
|
|
46
|
+
q = Queue.new
|
|
47
|
+
res.send_async(Message.new("example.com", Types.A),q,q)
|
|
48
|
+
id, ret, error = q.pop
|
|
49
|
+
assert_equal(id, q, "Id wrong!")
|
|
50
|
+
assert(ret.kind_of?(Message), "Ret wrong!")
|
|
51
|
+
assert(error==nil)
|
|
52
|
+
end
|
|
53
|
+
|
|
54
|
+
def test_query_one_duff_server_one_good
|
|
55
|
+
res = Resolver.new({:nameserver => ["localhost", "128.8.10.90"]})
|
|
56
|
+
res.retry_delay=1
|
|
57
|
+
q = Queue.new
|
|
58
|
+
res.send_async(Message.new("example.com", Types.A),q,q)
|
|
59
|
+
id, ret, error = q.pop
|
|
60
|
+
assert_equal(id, q, "Id wrong!")
|
|
61
|
+
assert(ret.kind_of?(Message), "Ret wrong! (#{ret.class}")
|
|
62
|
+
assert(error==nil)
|
|
63
|
+
end
|
|
64
|
+
|
|
65
|
+
# @TODO@ Implement!!
|
|
66
|
+
# def test_many_threaded_clients
|
|
67
|
+
# assert(false, "IMPLEMENT!")
|
|
68
|
+
# end
|
|
69
|
+
|
|
70
|
+
def test_reverse_lookup
|
|
71
|
+
m = Message.new("210.251.121.214", Types.PTR)
|
|
72
|
+
r = Resolver.new
|
|
73
|
+
q=Queue.new
|
|
74
|
+
r.send_async(m,q,q)
|
|
75
|
+
id,ret, error=q.pop
|
|
76
|
+
assert(ret.kind_of?(Message))
|
|
77
|
+
no_pointer=true
|
|
78
|
+
ret.each_answer do |answer|
|
|
79
|
+
if (answer.type==Types.PTR)
|
|
80
|
+
no_pointer=false
|
|
81
|
+
assert(answer.domainname.to_s=~/ruby-lang/)
|
|
82
|
+
end
|
|
83
|
+
end
|
|
84
|
+
assert(!no_pointer)
|
|
85
|
+
end
|
|
86
|
+
|
|
87
|
+
def test_bad_host
|
|
88
|
+
res = Resolver.new({:nameserver => "localhost"})
|
|
89
|
+
res.retry_times=1
|
|
90
|
+
res.retry_delay=0
|
|
91
|
+
res.query_timeout = 1
|
|
92
|
+
q = Queue.new
|
|
93
|
+
res.send_async(Message.new("example.com", Types.A), q, q)
|
|
94
|
+
id, m, err = q.pop
|
|
95
|
+
assert(id==q)
|
|
96
|
+
assert(m == nil)
|
|
97
|
+
print err.class
|
|
98
|
+
assert(err.kind_of?(OtherResolvError))
|
|
99
|
+
end
|
|
100
|
+
|
|
101
|
+
def test_nxdomain
|
|
102
|
+
res=Resolver.new
|
|
103
|
+
q = Queue.new
|
|
104
|
+
res.send_async(Message.new("dklfjhdFHFHDVVUIEWRFDSAJKVCNASDLFJHN.com", Types.A), 1, q)
|
|
105
|
+
id, m, err = q.pop
|
|
106
|
+
assert(id==1)
|
|
107
|
+
assert(m.header.rcode == RCode.NXDOMAIN)
|
|
108
|
+
assert(err.kind_of?(NXDomain))
|
|
109
|
+
end
|
|
110
|
+
|
|
111
|
+
def test_timeouts
|
|
112
|
+
#@TODO@ test timeout behaviour for different retry, retrans, total timeout etc.
|
|
113
|
+
#Problem here is that many sockets will be created for queries which time out.
|
|
114
|
+
# Run a query which will not respond, and check that the timeout works
|
|
115
|
+
start=stop=0
|
|
116
|
+
retry_times = 3
|
|
117
|
+
retry_delay=1
|
|
118
|
+
packet_timeout=2
|
|
119
|
+
# Work out what time should be, then time it to check
|
|
120
|
+
expected = ((2**(retry_times-1))*retry_delay) + packet_timeout
|
|
121
|
+
begin
|
|
122
|
+
res = Resolver.new({:nameserver => "10.0.1.128"})
|
|
123
|
+
# res = Resolver.new({:nameserver => "213.248.199.17"})
|
|
124
|
+
res.packet_timeout=packet_timeout
|
|
125
|
+
res.retry_times=retry_times
|
|
126
|
+
res.retry_delay=retry_delay
|
|
127
|
+
start=Time.now
|
|
128
|
+
m = res.send_message(Message.new("a.t.dnsruby.validation-test-servers.nominet.org.uk", Types.A))
|
|
129
|
+
fail
|
|
130
|
+
rescue ResolvTimeout
|
|
131
|
+
stop=Time.now
|
|
132
|
+
time = stop-start
|
|
133
|
+
assert(time <= expected *1.2 && time >= expected *0.9, "Wrong time take, expected #{expected}, took #{time}")
|
|
134
|
+
end
|
|
135
|
+
end
|
|
136
|
+
|
|
137
|
+
def test_packet_timeout
|
|
138
|
+
res = Resolver.new({:nameserver => "10.0.1.128"})
|
|
139
|
+
start=stop=0
|
|
140
|
+
retry_times = retry_delay = packet_timeout= 10
|
|
141
|
+
query_timeout=1
|
|
142
|
+
begin
|
|
143
|
+
res.packet_timeout=packet_timeout
|
|
144
|
+
res.retry_times=retry_times
|
|
145
|
+
res.retry_delay=retry_delay
|
|
146
|
+
res.query_timeout=query_timeout
|
|
147
|
+
# Work out what time should be, then time it to check
|
|
148
|
+
expected = query_timeout
|
|
149
|
+
start=Time.now
|
|
150
|
+
m = res.send_message(Message.new("a.t.dnsruby.validation-test-servers.nominet.org.uk", Types.A))
|
|
151
|
+
fail
|
|
152
|
+
rescue ResolvTimeout
|
|
153
|
+
stop=Time.now
|
|
154
|
+
time = stop-start
|
|
155
|
+
assert(time <= expected *1.1 && time >= expected *0.9, "Wrong time take, expected #{expected}, took #{time}")
|
|
156
|
+
end
|
|
157
|
+
end
|
|
158
|
+
|
|
159
|
+
def test_queue_packet_timeout
|
|
160
|
+
res = Resolver.new({:nameserver => "10.0.1.128"})
|
|
161
|
+
bad = SingleResolver.new("localhost")
|
|
162
|
+
res.add_resolver(bad)
|
|
163
|
+
expected = 1
|
|
164
|
+
res.query_timeout=expected
|
|
165
|
+
q = Queue.new
|
|
166
|
+
start = Time.now
|
|
167
|
+
m = res.send_async(Message.new("a.t.dnsruby.validation-test-servers.nominet.org.uk", Types.A), q, q)
|
|
168
|
+
id,ret,err = q.pop
|
|
169
|
+
stop = Time.now
|
|
170
|
+
assert(id=q)
|
|
171
|
+
assert(ret==nil)
|
|
172
|
+
assert(err.class == ResolvTimeout, "#{err.class}, #{err}")
|
|
173
|
+
time = stop-start
|
|
174
|
+
assert(time <= expected *1.2 && time >= expected *0.9, "Wrong time take, expected #{expected}, took #{time}")
|
|
175
|
+
end
|
|
176
|
+
|
|
177
|
+
end
|
data/test/tc_rr-opt.rb
ADDED
|
@@ -0,0 +1,42 @@
|
|
|
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
|
+
include Dnsruby
|
|
20
|
+
class TestRrOpt < Test::Unit::TestCase
|
|
21
|
+
def test_RrOpt
|
|
22
|
+
size=2048;
|
|
23
|
+
ednsflags=0x9e22;
|
|
24
|
+
|
|
25
|
+
optrr = RR::OPT.new(
|
|
26
|
+
:name => '',
|
|
27
|
+
:class => size, # Decimal UDPpayload
|
|
28
|
+
:flags => ednsflags # first bit set see RFC 3225
|
|
29
|
+
)
|
|
30
|
+
assert(optrr.d_o,"DO bit set")
|
|
31
|
+
optrr.d_o=false
|
|
32
|
+
assert_equal(optrr.flags,0x1e22,"Clearing do, leaving the other bits ");
|
|
33
|
+
assert(!optrr.d_o,"DO bit cleared")
|
|
34
|
+
optrr.d_o=true
|
|
35
|
+
assert_equal(optrr.flags,0x9e22,"Clearing do, leaving the other bits ");
|
|
36
|
+
|
|
37
|
+
|
|
38
|
+
assert_equal(optrr.payloadsize,2048,"Size read")
|
|
39
|
+
assert_equal(optrr.payloadsize=(1498),1498,"Size set")
|
|
40
|
+
|
|
41
|
+
end
|
|
42
|
+
end
|
data/test/tc_rr-txt.rb
ADDED
|
@@ -0,0 +1,137 @@
|
|
|
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
|
+
include Dnsruby
|
|
20
|
+
class TestRrTest < Test::Unit::TestCase
|
|
21
|
+
#Stimulus, expected response, and test name:
|
|
22
|
+
|
|
23
|
+
TESTLIST = [
|
|
24
|
+
{ # 2-5
|
|
25
|
+
:stim => %<"">,
|
|
26
|
+
:rdatastr => %<"">,
|
|
27
|
+
:char_str_list_r => ['',],
|
|
28
|
+
:descr => 'Double-quoted null string',
|
|
29
|
+
},
|
|
30
|
+
{ # 6-9
|
|
31
|
+
:stim => %<''>,
|
|
32
|
+
:rdatastr => %<"">,
|
|
33
|
+
:char_str_list_r => ['',],
|
|
34
|
+
:descr => 'Single-quoted null string',
|
|
35
|
+
},
|
|
36
|
+
{ # 10-13
|
|
37
|
+
:stim => %<" \t">,
|
|
38
|
+
:rdatastr => %<" \t">,
|
|
39
|
+
:char_str_list_r => [ %< \t>, ],
|
|
40
|
+
:descr => 'Double-quoted whitespace string',
|
|
41
|
+
},
|
|
42
|
+
{ # 14-17
|
|
43
|
+
:stim => %<noquotes>,
|
|
44
|
+
:rdatastr => %<"noquotes">,
|
|
45
|
+
:char_str_list_r => [ %<noquotes>, ],
|
|
46
|
+
:descr => 'unquoted single string',
|
|
47
|
+
},
|
|
48
|
+
{ # 18-21
|
|
49
|
+
:stim => %<"yes_quotes">,
|
|
50
|
+
:rdatastr => %<"yes_quotes">,
|
|
51
|
+
:char_str_list_r => [ %<yes_quotes>, ],
|
|
52
|
+
:descr => 'Double-quoted single string',
|
|
53
|
+
},
|
|
54
|
+
{ # 26-29
|
|
55
|
+
:stim => %<two tokens>,
|
|
56
|
+
:rdatastr => %<"two" "tokens">,
|
|
57
|
+
:char_str_list_r => [ %q|two|, %q|tokens|, ],
|
|
58
|
+
:descr => 'Two unquoted strings',
|
|
59
|
+
},
|
|
60
|
+
# @TODO@ Why don't escaped quotes work?
|
|
61
|
+
# { # 22-25
|
|
62
|
+
# :stim => %<"escaped \" quote">,
|
|
63
|
+
# :rdatastr => %<"escaped \" quote">,
|
|
64
|
+
# :char_str_list_r => [ %<escaped " quote>, ],
|
|
65
|
+
# :descr => 'Quoted, escaped double-quote',
|
|
66
|
+
# },
|
|
67
|
+
# { # 30-33
|
|
68
|
+
# :stim => %<"missing quote>,
|
|
69
|
+
# :rdatastr => %<>,
|
|
70
|
+
# :char_str_list_r => [],
|
|
71
|
+
# :descr => 'Unbalanced quotes work',
|
|
72
|
+
# }
|
|
73
|
+
]
|
|
74
|
+
|
|
75
|
+
def test_RrTest
|
|
76
|
+
#------------------------------------------------------------------------------
|
|
77
|
+
# Canned data.
|
|
78
|
+
#------------------------------------------------------------------------------
|
|
79
|
+
|
|
80
|
+
name = 'foo.example.com';
|
|
81
|
+
klass = 'IN';
|
|
82
|
+
type = 'TXT';
|
|
83
|
+
ttl = 43201;
|
|
84
|
+
|
|
85
|
+
rr_base = [name, ttl, klass, type, " " ].join(' ')
|
|
86
|
+
|
|
87
|
+
|
|
88
|
+
#------------------------------------------------------------------------------
|
|
89
|
+
# Run the tests
|
|
90
|
+
#------------------------------------------------------------------------------
|
|
91
|
+
|
|
92
|
+
TESTLIST.each do |test_hr|
|
|
93
|
+
assert( uut = RR.create(rr_base + test_hr[:stim]),
|
|
94
|
+
test_hr[:descr] + " -- Stimulus " )
|
|
95
|
+
|
|
96
|
+
assert_equal(test_hr[:rdatastr], uut.rdata_to_string(),
|
|
97
|
+
test_hr[:descr] + " -- Response ( rdatastr ) " )
|
|
98
|
+
|
|
99
|
+
list = uut.strings
|
|
100
|
+
|
|
101
|
+
assert_equal(test_hr[:char_str_list_r], list,
|
|
102
|
+
test_hr[:descr] + " -- char_str_list equality" )
|
|
103
|
+
end
|
|
104
|
+
|
|
105
|
+
string1 = %<no>
|
|
106
|
+
string2 = %<quotes>
|
|
107
|
+
|
|
108
|
+
rdata = [string1.length].pack("C") + string1
|
|
109
|
+
rdata += [string2.length].pack("C") + string2
|
|
110
|
+
|
|
111
|
+
work_hash = {
|
|
112
|
+
:name => name,
|
|
113
|
+
:ttl => ttl,
|
|
114
|
+
:class => klass,
|
|
115
|
+
:type => type,
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
|
|
119
|
+
# Don't break RR.new_from_hash (e.i. "See the manual pages for each RR
|
|
120
|
+
# type to see what fields the type requires.").
|
|
121
|
+
|
|
122
|
+
work_hash[:strings] = %<no quotes>
|
|
123
|
+
|
|
124
|
+
uut = RR.create(work_hash)
|
|
125
|
+
assert( uut , # 30
|
|
126
|
+
"RR.new_from_hash with txtdata -- Stimulus")
|
|
127
|
+
assert_equal( uut.rdata_to_string() , %<"no" "quotes">, # 31
|
|
128
|
+
"RR.new_from_hash with txtdata -- Response (rdatastr())")
|
|
129
|
+
|
|
130
|
+
rr_rdata = MessageEncoder.new {|msg|
|
|
131
|
+
uut.encode_rdata(msg)
|
|
132
|
+
}.to_s
|
|
133
|
+
assert( rr_rdata == rdata , "TXT.rr_rdata" ) # 32
|
|
134
|
+
|
|
135
|
+
|
|
136
|
+
end
|
|
137
|
+
end
|
|
@@ -0,0 +1,99 @@
|
|
|
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 TestRrUnknown < Test::Unit::TestCase
|
|
20
|
+
def test_RrUnknown
|
|
21
|
+
assert_equal(10226, Types::typesbyname('TYPE10226'), 'typesbyname(TYPE10226) returns 10226')
|
|
22
|
+
assert_equal('TYPE10226', Types::typesbyval(10226), 'typesbyval(10226) returns TYPE10226')
|
|
23
|
+
assert_equal(Types::typesbyval(1), "A", ' typesbyval(1) returns A')
|
|
24
|
+
|
|
25
|
+
assert_equal(Types::typesbyval(Types.typesbyname('TYPE001')), 'A', 'typesbyval(typebyname(TYPE001)) returns A')
|
|
26
|
+
|
|
27
|
+
|
|
28
|
+
begin
|
|
29
|
+
Types.typesbyval(0xffff+1)
|
|
30
|
+
flunk("Should fail on large TYPE code")
|
|
31
|
+
rescue Exception
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
assert_equal(Classes::classesbyname('CLASS124'), 124, 'classesbyname(CLASS124) returns 124')
|
|
35
|
+
assert_equal(Classes::classesbyval(125), 'CLASS125','classesbyval(125) returns CLASS125')
|
|
36
|
+
assert_equal(Classes::classesbyval(1), 'IN', 'classesbyval(1) returns IN')
|
|
37
|
+
|
|
38
|
+
assert_equal('HS', Classes::classesbyval(Classes::classesbyname('CLASS04')), 'classesbyval(typebyname(CLASS04)) returns HS')
|
|
39
|
+
|
|
40
|
+
begin
|
|
41
|
+
Classes::classesbyval(0xffff+1)
|
|
42
|
+
flunk("Should fail on large CLASS code")
|
|
43
|
+
rescue Exception
|
|
44
|
+
end
|
|
45
|
+
end
|
|
46
|
+
|
|
47
|
+
def test_rr_new
|
|
48
|
+
rr = RR.new_from_string('e.example CLASS01 TYPE01 10.0.0.2')
|
|
49
|
+
assert_equal(RR::IN::A, rr.class, 'TYPE01 parsed OK')
|
|
50
|
+
assert_equal('A', rr.type.string, 'TYPE01 parsed OK')
|
|
51
|
+
assert_equal('IN', rr.klass.string,'CLASS01 parsed OK')
|
|
52
|
+
assert_equal(1, rr.klass.code,'CLASS01 parsed OK')
|
|
53
|
+
|
|
54
|
+
rr = RR.new_from_string('e.example IN A \# 4 0A0000 01 ')
|
|
55
|
+
assert_equal('10.0.0.1', rr.address.to_s,'Unknown RR representation for A parsed OK')
|
|
56
|
+
|
|
57
|
+
begin
|
|
58
|
+
res=RR.new_from_string('e.example IN A \# 4 0A0000 01 11 ')
|
|
59
|
+
flunk "Should fail on inconsistent length and hex presentation"
|
|
60
|
+
rescue Exception
|
|
61
|
+
#like($@, '/\\\# 4 0A0000 01 11 assert_equal inconsistent\ length does not match content/', 'Fails on inconsassert_equaltent length and hex presentation')
|
|
62
|
+
end
|
|
63
|
+
|
|
64
|
+
|
|
65
|
+
rr = RR.new_from_string('e.example IN TYPE4555 \# 4 0A0000 01 ')
|
|
66
|
+
assert_equal('e.example. 0 IN TYPE4555 \# 4 0a000001', rr.to_s, 'Fully unknown RR parsed correctly')
|
|
67
|
+
|
|
68
|
+
rr4 = RR.new_from_string('e.example CLASS122 TYPE4555 \# 4 0A0000 01 ')
|
|
69
|
+
assert_equal('e.example. 0 CLASS122 TYPE4555 \# 4 0a000001', rr4.to_s, 'Fully unknown RR in unknown CLASS parsed correctly')
|
|
70
|
+
end
|
|
71
|
+
|
|
72
|
+
def test_real_data
|
|
73
|
+
uuencodedPacket=%w{
|
|
74
|
+
02 79 85 00 00 01
|
|
75
|
+
00 01 00 01 00 01 04 54 45 53 54 07 65 78 61 6d
|
|
76
|
+
70 6c 65 03 63 6f 6d 00 00 ff 00 01 c0 0c 30 39
|
|
77
|
+
00 01 00 00 00 7b 00 0a 11 22 33 44 55 aa bb cc
|
|
78
|
+
dd ee c0 11 00 02 00 01 00 00 03 84 00 05 02 6e
|
|
79
|
+
73 c0 11 c0 44 00 01 00 01 00 00 03 84 00 04 7f
|
|
80
|
+
00 00 01}
|
|
81
|
+
|
|
82
|
+
# packetdata = uuencodedPacket.pack('H*')
|
|
83
|
+
# packetdata = packetdata.gsub("\s*", "")
|
|
84
|
+
|
|
85
|
+
uuencodedPacket.map!{|e| e.hex}
|
|
86
|
+
packetdata = uuencodedPacket.pack('c*')
|
|
87
|
+
# packet = Net::Packet.new_from_binary(packetdata)
|
|
88
|
+
packet = Message.decode(packetdata)
|
|
89
|
+
|
|
90
|
+
string_representation = (packet.answer)[0].to_s
|
|
91
|
+
#string_representation =~ s/\s+/ /g,
|
|
92
|
+
string_representation = string_representation.gsub(/\s+/, " ")
|
|
93
|
+
assert_equal(
|
|
94
|
+
'TEST.example.com. 123 IN TYPE12345 \# 10 1122334455aabbccddee',
|
|
95
|
+
string_representation,
|
|
96
|
+
'Packet read from a packet dumped by bind...'
|
|
97
|
+
)
|
|
98
|
+
end
|
|
99
|
+
end
|