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.
- data/EVENTMACHINE +64 -0
- data/README +63 -0
- data/doc/classes/Dnsruby.html +463 -0
- data/doc/classes/Dnsruby/Algorithms.html +171 -0
- data/doc/classes/Dnsruby/Classes.html +197 -0
- data/doc/classes/Dnsruby/Classes.src/M000209.html +23 -0
- data/doc/classes/Dnsruby/Classes.src/M000210.html +19 -0
- data/doc/classes/Dnsruby/CodeMapper.html +375 -0
- data/doc/classes/Dnsruby/CodeMapper.src/M000186.html +18 -0
- data/doc/classes/Dnsruby/CodeMapper.src/M000187.html +33 -0
- data/doc/classes/Dnsruby/CodeMapper.src/M000188.html +21 -0
- data/doc/classes/Dnsruby/CodeMapper.src/M000189.html +19 -0
- data/doc/classes/Dnsruby/CodeMapper.src/M000190.html +19 -0
- data/doc/classes/Dnsruby/CodeMapper.src/M000191.html +18 -0
- data/doc/classes/Dnsruby/CodeMapper.src/M000192.html +22 -0
- data/doc/classes/Dnsruby/CodeMapper.src/M000193.html +22 -0
- data/doc/classes/Dnsruby/CodeMapper.src/M000194.html +22 -0
- data/doc/classes/Dnsruby/CodeMapper.src/M000195.html +31 -0
- data/doc/classes/Dnsruby/CodeMapper.src/M000196.html +19 -0
- data/doc/classes/Dnsruby/Config.html +413 -0
- data/doc/classes/Dnsruby/Config.src/M000148.html +18 -0
- data/doc/classes/Dnsruby/Config.src/M000149.html +19 -0
- data/doc/classes/Dnsruby/Config.src/M000150.html +19 -0
- data/doc/classes/Dnsruby/Config.src/M000151.html +25 -0
- data/doc/classes/Dnsruby/Config.src/M000152.html +21 -0
- data/doc/classes/Dnsruby/Config.src/M000153.html +38 -0
- data/doc/classes/Dnsruby/Config.src/M000154.html +26 -0
- data/doc/classes/Dnsruby/Config.src/M000155.html +22 -0
- data/doc/classes/Dnsruby/Config.src/M000156.html +27 -0
- data/doc/classes/Dnsruby/Config.src/M000157.html +22 -0
- data/doc/classes/Dnsruby/Config.src/M000158.html +21 -0
- data/doc/classes/Dnsruby/DNS.html +571 -0
- data/doc/classes/Dnsruby/DNS.src/M000258.html +24 -0
- data/doc/classes/Dnsruby/DNS.src/M000259.html +18 -0
- data/doc/classes/Dnsruby/DNS.src/M000260.html +18 -0
- data/doc/classes/Dnsruby/DNS.src/M000261.html +20 -0
- data/doc/classes/Dnsruby/DNS.src/M000262.html +19 -0
- data/doc/classes/Dnsruby/DNS.src/M000263.html +20 -0
- data/doc/classes/Dnsruby/DNS.src/M000264.html +18 -0
- data/doc/classes/Dnsruby/DNS.src/M000265.html +19 -0
- data/doc/classes/Dnsruby/DNS.src/M000266.html +20 -0
- data/doc/classes/Dnsruby/DNS.src/M000267.html +28 -0
- data/doc/classes/Dnsruby/DNS.src/M000268.html +19 -0
- data/doc/classes/Dnsruby/DNS.src/M000269.html +20 -0
- data/doc/classes/Dnsruby/DNS.src/M000270.html +31 -0
- data/doc/classes/Dnsruby/DecodeError.html +120 -0
- data/doc/classes/Dnsruby/Dnssec.html +287 -0
- data/doc/classes/Dnsruby/Dnssec.src/M000249.html +23 -0
- data/doc/classes/Dnsruby/Dnssec.src/M000250.html +19 -0
- data/doc/classes/Dnsruby/Dnssec.src/M000251.html +90 -0
- data/doc/classes/Dnsruby/Dnssec.src/M000252.html +76 -0
- data/doc/classes/Dnsruby/EncodeError.html +120 -0
- data/doc/classes/Dnsruby/FormErr.html +119 -0
- data/doc/classes/Dnsruby/Header.html +501 -0
- data/doc/classes/Dnsruby/Header.src/M000231.html +35 -0
- data/doc/classes/Dnsruby/Header.src/M000232.html +18 -0
- data/doc/classes/Dnsruby/Header.src/M000233.html +18 -0
- data/doc/classes/Dnsruby/Header.src/M000234.html +21 -0
- data/doc/classes/Dnsruby/Header.src/M000235.html +20 -0
- data/doc/classes/Dnsruby/Header.src/M000236.html +32 -0
- data/doc/classes/Dnsruby/Header.src/M000237.html +27 -0
- data/doc/classes/Dnsruby/Header.src/M000238.html +26 -0
- data/doc/classes/Dnsruby/Header.src/M000239.html +47 -0
- data/doc/classes/Dnsruby/Header.src/M000240.html +28 -0
- data/doc/classes/Dnsruby/Header.src/M000241.html +30 -0
- data/doc/classes/Dnsruby/Hosts.html +316 -0
- data/doc/classes/Dnsruby/Hosts.src/M000197.html +20 -0
- data/doc/classes/Dnsruby/Hosts.src/M000198.html +19 -0
- data/doc/classes/Dnsruby/Hosts.src/M000199.html +20 -0
- data/doc/classes/Dnsruby/Hosts.src/M000200.html +21 -0
- data/doc/classes/Dnsruby/Hosts.src/M000201.html +19 -0
- data/doc/classes/Dnsruby/Hosts.src/M000202.html +20 -0
- data/doc/classes/Dnsruby/Hosts.src/M000203.html +21 -0
- data/doc/classes/Dnsruby/IPv4.html +233 -0
- data/doc/classes/Dnsruby/IPv4.src/M000204.html +32 -0
- data/doc/classes/Dnsruby/IPv4.src/M000205.html +19 -0
- data/doc/classes/Dnsruby/IPv4.src/M000206.html +18 -0
- data/doc/classes/Dnsruby/IPv4.src/M000207.html +18 -0
- data/doc/classes/Dnsruby/IPv4.src/M000208.html +18 -0
- data/doc/classes/Dnsruby/IPv6.html +281 -0
- data/doc/classes/Dnsruby/IPv6.src/M000242.html +60 -0
- data/doc/classes/Dnsruby/IPv6.src/M000243.html +22 -0
- data/doc/classes/Dnsruby/IPv6.src/M000244.html +20 -0
- data/doc/classes/Dnsruby/IPv6.src/M000245.html +18 -0
- data/doc/classes/Dnsruby/Message.html +803 -0
- data/doc/classes/Dnsruby/Message.src/M000119.html +38 -0
- data/doc/classes/Dnsruby/Message.src/M000120.html +26 -0
- data/doc/classes/Dnsruby/Message.src/M000121.html +22 -0
- data/doc/classes/Dnsruby/Message.src/M000122.html +22 -0
- data/doc/classes/Dnsruby/Message.src/M000123.html +20 -0
- data/doc/classes/Dnsruby/Message.src/M000124.html +20 -0
- data/doc/classes/Dnsruby/Message.src/M000125.html +20 -0
- data/doc/classes/Dnsruby/Message.src/M000126.html +20 -0
- data/doc/classes/Dnsruby/Message.src/M000127.html +18 -0
- data/doc/classes/Dnsruby/Message.src/M000128.html +20 -0
- data/doc/classes/Dnsruby/Message.src/M000129.html +23 -0
- data/doc/classes/Dnsruby/Message.src/M000130.html +30 -0
- data/doc/classes/Dnsruby/Message.src/M000131.html +20 -0
- data/doc/classes/Dnsruby/Message.src/M000132.html +18 -0
- data/doc/classes/Dnsruby/Message.src/M000133.html +56 -0
- data/doc/classes/Dnsruby/Message.src/M000134.html +35 -0
- data/doc/classes/Dnsruby/Message.src/M000135.html +46 -0
- data/doc/classes/Dnsruby/Message/Section.html +160 -0
- data/doc/classes/Dnsruby/Message/Section.src/M000141.html +29 -0
- data/doc/classes/Dnsruby/Message/Section.src/M000142.html +30 -0
- data/doc/classes/Dnsruby/MetaTypes.html +136 -0
- data/doc/classes/Dnsruby/Modes.html +171 -0
- data/doc/classes/Dnsruby/NXDomain.html +119 -0
- data/doc/classes/Dnsruby/Name.html +330 -0
- data/doc/classes/Dnsruby/Name.src/M000104.html +28 -0
- data/doc/classes/Dnsruby/Name.src/M000105.html +20 -0
- data/doc/classes/Dnsruby/Name.src/M000106.html +18 -0
- data/doc/classes/Dnsruby/Name.src/M000107.html +21 -0
- data/doc/classes/Dnsruby/Name.src/M000108.html +22 -0
- data/doc/classes/Dnsruby/Name.src/M000109.html +18 -0
- data/doc/classes/Dnsruby/Name/Label.html +300 -0
- data/doc/classes/Dnsruby/Name/Label.src/M000110.html +21 -0
- data/doc/classes/Dnsruby/Name/Label.src/M000111.html +18 -0
- data/doc/classes/Dnsruby/Name/Label.src/M000112.html +22 -0
- data/doc/classes/Dnsruby/Name/Label.src/M000113.html +18 -0
- data/doc/classes/Dnsruby/Name/Label.src/M000114.html +18 -0
- data/doc/classes/Dnsruby/Name/Label.src/M000115.html +18 -0
- data/doc/classes/Dnsruby/Name/Label.src/M000116.html +18 -0
- data/doc/classes/Dnsruby/Name/Label.src/M000117.html +18 -0
- data/doc/classes/Dnsruby/Name/Label.src/M000118.html +18 -0
- data/doc/classes/Dnsruby/NotImp.html +119 -0
- data/doc/classes/Dnsruby/OpCode.html +146 -0
- data/doc/classes/Dnsruby/OtherResolvError.html +119 -0
- data/doc/classes/Dnsruby/QTypes.html +146 -0
- data/doc/classes/Dnsruby/Question.html +301 -0
- data/doc/classes/Dnsruby/Question.src/M000226.html +47 -0
- data/doc/classes/Dnsruby/Question.src/M000227.html +18 -0
- data/doc/classes/Dnsruby/Question.src/M000228.html +18 -0
- data/doc/classes/Dnsruby/Question.src/M000229.html +32 -0
- data/doc/classes/Dnsruby/Question.src/M000230.html +18 -0
- data/doc/classes/Dnsruby/RCode.html +211 -0
- data/doc/classes/Dnsruby/RR.html +648 -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 +26 -0
- data/doc/classes/Dnsruby/RR.src/M000006.html +18 -0
- data/doc/classes/Dnsruby/RR.src/M000007.html +36 -0
- data/doc/classes/Dnsruby/RR.src/M000008.html +100 -0
- data/doc/classes/Dnsruby/RR.src/M000009.html +18 -0
- data/doc/classes/Dnsruby/RR.src/M000010.html +18 -0
- data/doc/classes/Dnsruby/RR.src/M000011.html +22 -0
- data/doc/classes/Dnsruby/RR.src/M000012.html +29 -0
- data/doc/classes/Dnsruby/RR.src/M000013.html +24 -0
- data/doc/classes/Dnsruby/RR/ANY.html +133 -0
- data/doc/classes/Dnsruby/RR/CERT.html +180 -0
- data/doc/classes/Dnsruby/RR/CERT/CertificateTypes.html +169 -0
- data/doc/classes/Dnsruby/RR/CNAME.html +151 -0
- data/doc/classes/Dnsruby/RR/DNAME.html +150 -0
- data/doc/classes/Dnsruby/RR/DNSKEY.html +422 -0
- data/doc/classes/Dnsruby/RR/DNSKEY.src/M000044.html +20 -0
- data/doc/classes/Dnsruby/RR/DNSKEY.src/M000045.html +21 -0
- data/doc/classes/Dnsruby/RR/DNSKEY.src/M000046.html +28 -0
- data/doc/classes/Dnsruby/RR/DNSKEY.src/M000047.html +22 -0
- data/doc/classes/Dnsruby/RR/DNSKEY.src/M000048.html +18 -0
- data/doc/classes/Dnsruby/RR/DNSKEY.src/M000049.html +22 -0
- data/doc/classes/Dnsruby/RR/DNSKEY.src/M000050.html +18 -0
- data/doc/classes/Dnsruby/RR/DNSKEY.src/M000051.html +26 -0
- data/doc/classes/Dnsruby/RR/DNSKEY.src/M000052.html +38 -0
- data/doc/classes/Dnsruby/RR/DNSKEY.src/M000053.html +45 -0
- data/doc/classes/Dnsruby/RR/DNSKEY.src/M000054.html +21 -0
- data/doc/classes/Dnsruby/RR/DNSKEY.src/M000055.html +24 -0
- data/doc/classes/Dnsruby/RR/DNSKEY.src/M000056.html +32 -0
- data/doc/classes/Dnsruby/RR/DNSKEY.src/M000057.html +24 -0
- data/doc/classes/Dnsruby/RR/DS.html +286 -0
- data/doc/classes/Dnsruby/RR/DS.src/M000039.html +22 -0
- data/doc/classes/Dnsruby/RR/DS.src/M000040.html +28 -0
- data/doc/classes/Dnsruby/RR/DS.src/M000041.html +24 -0
- data/doc/classes/Dnsruby/RR/DS.src/M000042.html +28 -0
- data/doc/classes/Dnsruby/RR/DS.src/M000043.html +36 -0
- data/doc/classes/Dnsruby/RR/DomainName.html +175 -0
- data/doc/classes/Dnsruby/RR/DomainName.src/M000083.html +18 -0
- data/doc/classes/Dnsruby/RR/Generic.html +133 -0
- data/doc/classes/Dnsruby/RR/HINFO.html +155 -0
- data/doc/classes/Dnsruby/RR/IN.html +155 -0
- data/doc/classes/Dnsruby/RR/IN/A.html +200 -0
- data/doc/classes/Dnsruby/RR/IN/A.src/M000017.html +18 -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/AAAA.html +139 -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 +238 -0
- data/doc/classes/Dnsruby/RR/IN/SRV.src/M000014.html +29 -0
- data/doc/classes/Dnsruby/RR/IN/SRV.src/M000015.html +26 -0
- data/doc/classes/Dnsruby/RR/IN/SRV.src/M000016.html +22 -0
- data/doc/classes/Dnsruby/RR/IN/WKS.html +166 -0
- data/doc/classes/Dnsruby/RR/IN/WKS.src/M000020.html +20 -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 +151 -0
- data/doc/classes/Dnsruby/RR/NSAP.html +293 -0
- data/doc/classes/Dnsruby/RR/NSAP.src/M000093.html +19 -0
- data/doc/classes/Dnsruby/RR/NSAP.src/M000094.html +19 -0
- data/doc/classes/Dnsruby/RR/NSAP.src/M000095.html +22 -0
- data/doc/classes/Dnsruby/RR/NSAP.src/M000096.html +31 -0
- data/doc/classes/Dnsruby/RR/NSEC.html +301 -0
- data/doc/classes/Dnsruby/RR/NSEC.src/M000031.html +19 -0
- data/doc/classes/Dnsruby/RR/NSEC.src/M000032.html +18 -0
- data/doc/classes/Dnsruby/RR/NSEC.src/M000033.html +34 -0
- data/doc/classes/Dnsruby/RR/NSEC.src/M000034.html +18 -0
- data/doc/classes/Dnsruby/RR/NSEC.src/M000035.html +71 -0
- data/doc/classes/Dnsruby/RR/NSEC.src/M000036.html +18 -0
- data/doc/classes/Dnsruby/RR/NSEC.src/M000037.html +80 -0
- data/doc/classes/Dnsruby/RR/NSEC.src/M000038.html +23 -0
- data/doc/classes/Dnsruby/RR/NSEC3.html +366 -0
- data/doc/classes/Dnsruby/RR/NSEC3.src/M000085.html +28 -0
- data/doc/classes/Dnsruby/RR/NSEC3.src/M000086.html +18 -0
- data/doc/classes/Dnsruby/RR/NSEC3.src/M000087.html +18 -0
- data/doc/classes/Dnsruby/RR/NSEC3.src/M000088.html +22 -0
- data/doc/classes/Dnsruby/RR/NSEC3.src/M000089.html +18 -0
- data/doc/classes/Dnsruby/RR/NSEC3.src/M000090.html +21 -0
- data/doc/classes/Dnsruby/RR/NSEC3.src/M000091.html +21 -0
- data/doc/classes/Dnsruby/RR/NSEC3.src/M000092.html +29 -0
- data/doc/classes/Dnsruby/RR/NSEC3PARAM.html +279 -0
- data/doc/classes/Dnsruby/RR/NSEC3PARAM.src/M000077.html +28 -0
- data/doc/classes/Dnsruby/RR/NSEC3PARAM.src/M000078.html +18 -0
- data/doc/classes/Dnsruby/RR/NSEC3PARAM.src/M000079.html +22 -0
- data/doc/classes/Dnsruby/RR/NSEC3PARAM.src/M000080.html +21 -0
- data/doc/classes/Dnsruby/RR/NSEC3PARAM.src/M000081.html +25 -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/M000082.html +19 -0
- data/doc/classes/Dnsruby/RR/RRSIG.html +357 -0
- data/doc/classes/Dnsruby/RR/RRSIG.src/M000097.html +26 -0
- data/doc/classes/Dnsruby/RR/RRSIG.src/M000098.html +28 -0
- data/doc/classes/Dnsruby/RR/RRSIG.src/M000099.html +23 -0
- data/doc/classes/Dnsruby/RR/RRSIG.src/M000100.html +23 -0
- data/doc/classes/Dnsruby/RR/RRSIG.src/M000101.html +46 -0
- data/doc/classes/Dnsruby/RR/RRSIG.src/M000102.html +50 -0
- data/doc/classes/Dnsruby/RR/RRSIG.src/M000103.html +27 -0
- data/doc/classes/Dnsruby/RR/RT.html +155 -0
- data/doc/classes/Dnsruby/RR/SOA.html +233 -0
- data/doc/classes/Dnsruby/RR/SOA.src/M000066.html +24 -0
- data/doc/classes/Dnsruby/RR/SOA.src/M000067.html +27 -0
- data/doc/classes/Dnsruby/RR/SPF.html +138 -0
- data/doc/classes/Dnsruby/RR/TKEY.html +313 -0
- data/doc/classes/Dnsruby/RR/TKEY.src/M000021.html +19 -0
- data/doc/classes/Dnsruby/RR/TKEY.src/M000022.html +29 -0
- data/doc/classes/Dnsruby/RR/TKEY.src/M000023.html +21 -0
- data/doc/classes/Dnsruby/RR/TKEY.src/M000024.html +29 -0
- data/doc/classes/Dnsruby/RR/TSIG.html +524 -0
- data/doc/classes/Dnsruby/RR/TSIG.src/M000068.html +24 -0
- data/doc/classes/Dnsruby/RR/TSIG.src/M000069.html +32 -0
- data/doc/classes/Dnsruby/RR/TSIG.src/M000070.html +54 -0
- data/doc/classes/Dnsruby/RR/TSIG.src/M000071.html +121 -0
- data/doc/classes/Dnsruby/RR/TSIG.src/M000072.html +33 -0
- data/doc/classes/Dnsruby/RR/TSIG.src/M000073.html +25 -0
- data/doc/classes/Dnsruby/RR/TSIG.src/M000074.html +36 -0
- data/doc/classes/Dnsruby/RR/TSIG.src/M000075.html +22 -0
- data/doc/classes/Dnsruby/RR/TSIG.src/M000076.html +29 -0
- data/doc/classes/Dnsruby/RR/TXT.html +233 -0
- data/doc/classes/Dnsruby/RR/TXT.src/M000061.html +18 -0
- data/doc/classes/Dnsruby/RR/TXT.src/M000062.html +18 -0
- data/doc/classes/Dnsruby/RR/TXT.src/M000063.html +20 -0
- data/doc/classes/Dnsruby/RR/TXT.src/M000064.html +27 -0
- data/doc/classes/Dnsruby/RR/TXT.src/M000065.html +25 -0
- data/doc/classes/Dnsruby/RR/X25.html +203 -0
- data/doc/classes/Dnsruby/RR/X25.src/M000058.html +18 -0
- data/doc/classes/Dnsruby/RR/X25.src/M000059.html +18 -0
- data/doc/classes/Dnsruby/RR/X25.src/M000060.html +22 -0
- data/doc/classes/Dnsruby/RRSet.html +404 -0
- data/doc/classes/Dnsruby/RRSet.src/M000211.html +23 -0
- data/doc/classes/Dnsruby/RRSet.src/M000212.html +18 -0
- data/doc/classes/Dnsruby/RRSet.src/M000213.html +18 -0
- data/doc/classes/Dnsruby/RRSet.src/M000214.html +47 -0
- data/doc/classes/Dnsruby/RRSet.src/M000215.html +42 -0
- data/doc/classes/Dnsruby/RRSet.src/M000216.html +18 -0
- data/doc/classes/Dnsruby/RRSet.src/M000217.html +20 -0
- data/doc/classes/Dnsruby/RRSet.src/M000218.html +18 -0
- data/doc/classes/Dnsruby/RRSet.src/M000219.html +18 -0
- data/doc/classes/Dnsruby/RRSet.src/M000220.html +18 -0
- data/doc/classes/Dnsruby/RRSet.src/M000221.html +18 -0
- data/doc/classes/Dnsruby/RRSet.src/M000222.html +22 -0
- data/doc/classes/Dnsruby/RRSet.src/M000223.html +18 -0
- data/doc/classes/Dnsruby/RRSet.src/M000224.html +22 -0
- data/doc/classes/Dnsruby/RRSet.src/M000225.html +18 -0
- data/doc/classes/Dnsruby/Refused.html +119 -0
- data/doc/classes/Dnsruby/Resolv.html +401 -0
- data/doc/classes/Dnsruby/Resolv.src/M000159.html +18 -0
- data/doc/classes/Dnsruby/Resolv.src/M000160.html +18 -0
- data/doc/classes/Dnsruby/Resolv.src/M000161.html +18 -0
- data/doc/classes/Dnsruby/Resolv.src/M000162.html +18 -0
- data/doc/classes/Dnsruby/Resolv.src/M000163.html +18 -0
- data/doc/classes/Dnsruby/Resolv.src/M000164.html +18 -0
- data/doc/classes/Dnsruby/Resolv.src/M000165.html +18 -0
- data/doc/classes/Dnsruby/Resolv.src/M000166.html +19 -0
- data/doc/classes/Dnsruby/Resolv.src/M000167.html +20 -0
- data/doc/classes/Dnsruby/Resolv.src/M000168.html +29 -0
- data/doc/classes/Dnsruby/Resolv.src/M000169.html +19 -0
- data/doc/classes/Dnsruby/Resolv.src/M000170.html +20 -0
- data/doc/classes/Dnsruby/Resolv.src/M000171.html +25 -0
- data/doc/classes/Dnsruby/ResolvError.html +117 -0
- data/doc/classes/Dnsruby/ResolvTimeout.html +117 -0
- data/doc/classes/Dnsruby/Resolver.html +1055 -0
- data/doc/classes/Dnsruby/Resolver.src/M000271.html +21 -0
- data/doc/classes/Dnsruby/Resolver.src/M000272.html +27 -0
- data/doc/classes/Dnsruby/Resolver.src/M000273.html +28 -0
- data/doc/classes/Dnsruby/Resolver.src/M000274.html +18 -0
- data/doc/classes/Dnsruby/Resolver.src/M000275.html +51 -0
- data/doc/classes/Dnsruby/Resolver.src/M000276.html +21 -0
- data/doc/classes/Dnsruby/Resolver.src/M000277.html +22 -0
- data/doc/classes/Dnsruby/Resolver.src/M000278.html +18 -0
- data/doc/classes/Dnsruby/Resolver.src/M000279.html +20 -0
- data/doc/classes/Dnsruby/Resolver.src/M000280.html +19 -0
- data/doc/classes/Dnsruby/Resolver.src/M000281.html +19 -0
- data/doc/classes/Dnsruby/Resolver.src/M000282.html +19 -0
- data/doc/classes/Dnsruby/Resolver.src/M000283.html +19 -0
- data/doc/classes/Dnsruby/Resolver.src/M000284.html +19 -0
- data/doc/classes/Dnsruby/Resolver.src/M000285.html +19 -0
- data/doc/classes/Dnsruby/Resolver.src/M000286.html +19 -0
- data/doc/classes/Dnsruby/Resolver.src/M000287.html +19 -0
- data/doc/classes/Dnsruby/Resolver.src/M000288.html +19 -0
- data/doc/classes/Dnsruby/Resolver.src/M000289.html +19 -0
- data/doc/classes/Dnsruby/Resolver.src/M000290.html +19 -0
- data/doc/classes/Dnsruby/Resolver.src/M000291.html +19 -0
- data/doc/classes/Dnsruby/Resolver.src/M000292.html +26 -0
- data/doc/classes/Dnsruby/Resolver.src/M000293.html +18 -0
- data/doc/classes/Dnsruby/Resolver.src/M000294.html +23 -0
- data/doc/classes/Dnsruby/Resolver.src/M000295.html +18 -0
- data/doc/classes/Dnsruby/ServFail.html +119 -0
- data/doc/classes/Dnsruby/SingleResolver.html +674 -0
- data/doc/classes/Dnsruby/SingleResolver.src/M000172.html +18 -0
- data/doc/classes/Dnsruby/SingleResolver.src/M000173.html +24 -0
- data/doc/classes/Dnsruby/SingleResolver.src/M000174.html +36 -0
- data/doc/classes/Dnsruby/SingleResolver.src/M000175.html +18 -0
- data/doc/classes/Dnsruby/SingleResolver.src/M000176.html +19 -0
- data/doc/classes/Dnsruby/SingleResolver.src/M000177.html +50 -0
- data/doc/classes/Dnsruby/SingleResolver.src/M000178.html +19 -0
- data/doc/classes/Dnsruby/SingleResolver.src/M000179.html +21 -0
- data/doc/classes/Dnsruby/SingleResolver.src/M000180.html +25 -0
- data/doc/classes/Dnsruby/SingleResolver.src/M000181.html +54 -0
- data/doc/classes/Dnsruby/SingleResolver.src/M000182.html +27 -0
- data/doc/classes/Dnsruby/SingleResolver.src/M000183.html +27 -0
- data/doc/classes/Dnsruby/SingleResolver.src/M000184.html +35 -0
- data/doc/classes/Dnsruby/SingleResolver.src/M000185.html +21 -0
- data/doc/classes/Dnsruby/TheLog.html +196 -0
- data/doc/classes/Dnsruby/TheLog.src/M000246.html +20 -0
- data/doc/classes/Dnsruby/TheLog.src/M000247.html +20 -0
- data/doc/classes/Dnsruby/TheLog.src/M000248.html +20 -0
- data/doc/classes/Dnsruby/Types.html +436 -0
- data/doc/classes/Dnsruby/Update.html +368 -0
- data/doc/classes/Dnsruby/Update.src/M000253.html +32 -0
- data/doc/classes/Dnsruby/Update.src/M000254.html +36 -0
- data/doc/classes/Dnsruby/Update.src/M000255.html +32 -0
- data/doc/classes/Dnsruby/Update.src/M000256.html +41 -0
- data/doc/classes/Dnsruby/Update.src/M000257.html +34 -0
- data/doc/classes/Dnsruby/VerifyError.html +119 -0
- data/doc/classes/Dnsruby/ZoneTransfer.html +300 -0
- data/doc/classes/Dnsruby/ZoneTransfer.src/M000143.html +18 -0
- data/doc/classes/Dnsruby/ZoneTransfer.src/M000144.html +24 -0
- data/doc/classes/Dnsruby/ZoneTransfer.src/M000145.html +35 -0
- data/doc/classes/Dnsruby/ZoneTransfer/Delta.html +200 -0
- data/doc/classes/Dnsruby/ZoneTransfer/Delta.src/M000146.html +19 -0
- data/doc/classes/Dnsruby/ZoneTransfer/Delta.src/M000147.html +19 -0
- data/doc/created.rid +1 -0
- data/doc/files/lib/Dnsruby/Config_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 +109 -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/dnssec_rb.html +107 -0
- data/doc/files/lib/Dnsruby/event_machine_interface_rb.html +108 -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/DNSKEY_rb.html +101 -0
- data/doc/files/lib/Dnsruby/resource/DS_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/NSEC3PARAM_rb.html +101 -0
- data/doc/files/lib/Dnsruby/resource/NSEC3_rb.html +101 -0
- data/doc/files/lib/Dnsruby/resource/NSEC_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/RRSIG_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 +114 -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 +131 -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 +108 -0
- data/doc/fr_file_index.html +75 -0
- data/doc/fr_method_index.html +321 -0
- data/doc/index.html +24 -0
- data/lib/Dnsruby/Config.rb +363 -0
- data/lib/Dnsruby/DNS.rb +293 -0
- data/lib/Dnsruby/Hosts.rb +126 -0
- data/lib/Dnsruby/Resolver.rb +999 -0
- data/lib/Dnsruby/SingleResolver.rb +493 -0
- data/lib/Dnsruby/TheLog.rb +60 -0
- data/lib/Dnsruby/code_mapper.rb +165 -0
- data/lib/Dnsruby/dnssec.rb +357 -0
- data/lib/Dnsruby/event_machine_interface.rb +264 -0
- data/lib/Dnsruby/ipv4.rb +74 -0
- data/lib/Dnsruby/ipv6.rb +144 -0
- data/lib/Dnsruby/message.rb +961 -0
- data/lib/Dnsruby/name.rb +332 -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/DNSKEY.rb +242 -0
- data/lib/Dnsruby/resource/DS.rb +162 -0
- data/lib/Dnsruby/resource/HINFO.rb +52 -0
- data/lib/Dnsruby/resource/IN.rb +70 -0
- data/lib/Dnsruby/resource/ISDN.rb +54 -0
- data/lib/Dnsruby/resource/LOC.rb +255 -0
- data/lib/Dnsruby/resource/MINFO.rb +70 -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/NSEC.rb +243 -0
- data/lib/Dnsruby/resource/NSEC3.rb +173 -0
- data/lib/Dnsruby/resource/NSEC3PARAM.rb +120 -0
- data/lib/Dnsruby/resource/OPT.rb +210 -0
- data/lib/Dnsruby/resource/PX.rb +71 -0
- data/lib/Dnsruby/resource/RP.rb +67 -0
- data/lib/Dnsruby/resource/RRSIG.rb +256 -0
- data/lib/Dnsruby/resource/RT.rb +67 -0
- data/lib/Dnsruby/resource/SOA.rb +95 -0
- data/lib/Dnsruby/resource/SPF.rb +29 -0
- data/lib/Dnsruby/resource/SRV.rb +112 -0
- data/lib/Dnsruby/resource/TKEY.rb +163 -0
- data/lib/Dnsruby/resource/TSIG.rb +584 -0
- data/lib/Dnsruby/resource/TXT.rb +76 -0
- data/lib/Dnsruby/resource/X25.rb +53 -0
- data/lib/Dnsruby/resource/domain_name.rb +54 -0
- data/lib/Dnsruby/resource/generic.rb +151 -0
- data/lib/Dnsruby/resource/resource.rb +561 -0
- data/lib/Dnsruby/select_thread.rb +449 -0
- data/lib/Dnsruby/update.rb +262 -0
- data/lib/Dnsruby/zone_transfer.rb +332 -0
- data/lib/dnsruby.rb +512 -0
- data/test/custom.txt +4 -0
- data/test/resolv.conf +4 -0
- data/test/tc_axfr.rb +32 -0
- data/test/tc_dns.rb +230 -0
- data/test/tc_dnskey.rb +52 -0
- data/test/tc_dnsruby.rb +42 -0
- data/test/tc_dnssec.rb +88 -0
- data/test/tc_ds.rb +38 -0
- data/test/tc_escapedchars.rb +484 -0
- data/test/tc_event_machine_deferrable.rb +85 -0
- data/test/tc_event_machine_res.rb +174 -0
- data/test/tc_event_machine_single_res.rb +101 -0
- data/test/tc_event_machine_soak.rb +98 -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_nsec.rb +36 -0
- data/test/tc_nsec3.rb +63 -0
- data/test/tc_nsec3param.rb +30 -0
- data/test/tc_packet.rb +179 -0
- data/test/tc_packet_unique_push.rb +102 -0
- data/test/tc_question.rb +51 -0
- data/test/tc_res_config.rb +92 -0
- data/test/tc_res_env.rb +51 -0
- data/test/tc_res_file.rb +42 -0
- data/test/tc_res_opt.rb +187 -0
- data/test/tc_resolver.rb +184 -0
- data/test/tc_rr-opt.rb +82 -0
- data/test/tc_rr-txt.rb +137 -0
- data/test/tc_rr-unknown.rb +99 -0
- data/test/tc_rr.rb +258 -0
- data/test/tc_rrset.rb +58 -0
- data/test/tc_rrsig.rb +32 -0
- data/test/tc_single_resolver.rb +169 -0
- data/test/tc_soak.rb +200 -0
- data/test/tc_soak_base.rb +136 -0
- data/test/tc_tcp.rb +35 -0
- data/test/tc_tkey.rb +75 -0
- data/test/tc_tsig.rb +237 -0
- data/test/tc_update.rb +215 -0
- data/test/ts_dnsruby.rb +17 -0
- data/test/ts_offline.rb +42 -0
- data/test/ts_online.rb +107 -0
- metadata +627 -0
data/test/tc_soak.rb
ADDED
|
@@ -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
|
data/test/tc_tcp.rb
ADDED
|
@@ -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
|
data/test/tc_tkey.rb
ADDED
|
@@ -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
|
data/test/tc_tsig.rb
ADDED
|
@@ -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
|