Dnsruby 0.5.0 → 0.6.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/EVENTMACHINE +64 -0
- data/README +2 -2
- data/doc/classes/Dnsruby/Classes.html +10 -10
- data/doc/classes/Dnsruby/Classes.src/M000158.html +9 -5
- data/doc/classes/Dnsruby/Classes.src/M000159.html +19 -0
- data/doc/classes/Dnsruby/Classes.src/M000185.html +23 -0
- data/doc/classes/Dnsruby/Classes.src/M000186.html +19 -0
- data/doc/classes/Dnsruby/CodeMapper.html +55 -55
- data/doc/classes/Dnsruby/CodeMapper.src/M000131.html +4 -19
- data/doc/classes/Dnsruby/CodeMapper.src/M000132.html +19 -7
- data/doc/classes/Dnsruby/CodeMapper.src/M000133.html +7 -5
- data/doc/classes/Dnsruby/CodeMapper.src/M000134.html +5 -5
- data/doc/classes/Dnsruby/CodeMapper.src/M000135.html +5 -4
- data/doc/classes/Dnsruby/CodeMapper.src/M000136.html +4 -8
- data/doc/classes/Dnsruby/CodeMapper.src/M000137.html +5 -5
- data/doc/classes/Dnsruby/CodeMapper.src/M000138.html +6 -6
- data/doc/classes/Dnsruby/CodeMapper.src/M000139.html +7 -16
- data/doc/classes/Dnsruby/CodeMapper.src/M000140.html +17 -5
- data/doc/classes/Dnsruby/CodeMapper.src/M000141.html +19 -0
- data/doc/classes/Dnsruby/CodeMapper.src/M000158.html +18 -0
- data/doc/classes/Dnsruby/CodeMapper.src/M000159.html +33 -0
- data/doc/classes/Dnsruby/CodeMapper.src/M000160.html +21 -0
- data/doc/classes/Dnsruby/CodeMapper.src/M000161.html +19 -0
- data/doc/classes/Dnsruby/CodeMapper.src/M000162.html +19 -0
- data/doc/classes/Dnsruby/CodeMapper.src/M000163.html +18 -0
- data/doc/classes/Dnsruby/CodeMapper.src/M000164.html +22 -0
- data/doc/classes/Dnsruby/CodeMapper.src/M000165.html +22 -0
- data/doc/classes/Dnsruby/CodeMapper.src/M000166.html +22 -0
- data/doc/classes/Dnsruby/CodeMapper.src/M000167.html +31 -0
- data/doc/classes/Dnsruby/CodeMapper.src/M000168.html +19 -0
- data/doc/classes/Dnsruby/Config.src/M000106.html +5 -1
- data/doc/classes/Dnsruby/Config.src/M000107.html +1 -1
- data/doc/classes/Dnsruby/Config.src/M000108.html +4 -1
- data/doc/classes/Dnsruby/Config.src/M000125.html +18 -0
- data/doc/classes/Dnsruby/Config.src/M000126.html +19 -0
- data/doc/classes/Dnsruby/Config.src/M000127.html +19 -0
- data/doc/classes/Dnsruby/Config.src/M000128.html +21 -0
- data/doc/classes/Dnsruby/Config.src/M000129.html +21 -0
- data/doc/classes/Dnsruby/Config.src/M000130.html +38 -0
- data/doc/classes/Dnsruby/Config.src/M000131.html +26 -0
- data/doc/classes/Dnsruby/Config.src/M000132.html +22 -0
- data/doc/classes/Dnsruby/Config.src/M000133.html +27 -0
- data/doc/classes/Dnsruby/Config.src/M000134.html +22 -0
- data/doc/classes/Dnsruby/Config.src/M000135.html +21 -0
- data/doc/classes/Dnsruby/DNS.html +85 -85
- data/doc/classes/Dnsruby/DNS.src/M000197.html +10 -4
- data/doc/classes/Dnsruby/DNS.src/M000198.html +4 -4
- data/doc/classes/Dnsruby/DNS.src/M000199.html +4 -6
- data/doc/classes/Dnsruby/DNS.src/M000200.html +6 -5
- data/doc/classes/Dnsruby/DNS.src/M000201.html +5 -6
- data/doc/classes/Dnsruby/DNS.src/M000202.html +6 -4
- data/doc/classes/Dnsruby/DNS.src/M000203.html +4 -5
- data/doc/classes/Dnsruby/DNS.src/M000204.html +5 -6
- data/doc/classes/Dnsruby/DNS.src/M000205.html +6 -14
- data/doc/classes/Dnsruby/DNS.src/M000206.html +14 -5
- data/doc/classes/Dnsruby/DNS.src/M000207.html +5 -6
- data/doc/classes/Dnsruby/DNS.src/M000208.html +6 -27
- data/doc/classes/Dnsruby/DNS.src/M000209.html +26 -17
- data/doc/classes/Dnsruby/DNS.src/M000210.html +17 -35
- data/doc/classes/Dnsruby/DNS.src/M000211.html +50 -0
- data/doc/classes/Dnsruby/DNS.src/M000224.html +24 -0
- data/doc/classes/Dnsruby/DNS.src/M000225.html +18 -0
- data/doc/classes/Dnsruby/DNS.src/M000226.html +18 -0
- data/doc/classes/Dnsruby/DNS.src/M000227.html +20 -0
- data/doc/classes/Dnsruby/DNS.src/M000228.html +19 -0
- data/doc/classes/Dnsruby/DNS.src/M000229.html +20 -0
- data/doc/classes/Dnsruby/DNS.src/M000230.html +18 -0
- data/doc/classes/Dnsruby/DNS.src/M000231.html +19 -0
- data/doc/classes/Dnsruby/DNS.src/M000232.html +20 -0
- data/doc/classes/Dnsruby/DNS.src/M000233.html +28 -0
- data/doc/classes/Dnsruby/DNS.src/M000234.html +19 -0
- data/doc/classes/Dnsruby/DNS.src/M000235.html +20 -0
- data/doc/classes/Dnsruby/DNS.src/M000236.html +41 -0
- data/doc/classes/Dnsruby/DNS.src/M000237.html +32 -0
- data/doc/classes/Dnsruby/DNS.src/M000238.html +50 -0
- data/doc/classes/Dnsruby/EventMachineInterface/EmTcpHandler.html +154 -0
- data/doc/classes/Dnsruby/EventMachineInterface/EmTcpHandler.src/M000123.html +20 -0
- data/doc/classes/Dnsruby/EventMachineInterface/EmTcpHandler.src/M000124.html +32 -0
- data/doc/classes/Dnsruby/EventMachineInterface/EmUdpHandler.html +237 -0
- data/doc/classes/Dnsruby/EventMachineInterface/EmUdpHandler.src/M000117.html +18 -0
- data/doc/classes/Dnsruby/EventMachineInterface/EmUdpHandler.src/M000118.html +19 -0
- data/doc/classes/Dnsruby/EventMachineInterface/EmUdpHandler.src/M000119.html +35 -0
- data/doc/classes/Dnsruby/EventMachineInterface/EmUdpHandler.src/M000120.html +30 -0
- data/doc/classes/Dnsruby/EventMachineInterface/EmUdpHandler.src/M000121.html +19 -0
- data/doc/classes/Dnsruby/EventMachineInterface/EmUdpHandler.src/M000122.html +23 -0
- data/doc/classes/Dnsruby/EventMachineInterface.html +327 -0
- data/doc/classes/Dnsruby/EventMachineInterface.src/M000105.html +32 -0
- data/doc/classes/Dnsruby/EventMachineInterface.src/M000106.html +25 -0
- data/doc/classes/Dnsruby/EventMachineInterface.src/M000107.html +29 -0
- data/doc/classes/Dnsruby/EventMachineInterface.src/M000108.html +21 -0
- data/doc/classes/Dnsruby/EventMachineInterface.src/M000109.html +35 -0
- data/doc/classes/Dnsruby/EventMachineInterface.src/M000110.html +19 -0
- data/doc/classes/Dnsruby/EventMachineInterface.src/M000111.html +23 -0
- data/doc/classes/Dnsruby/EventMachineInterface.src/M000112.html +18 -0
- data/doc/classes/Dnsruby/EventMachineInterface.src/M000113.html +28 -0
- data/doc/classes/Dnsruby/EventMachineInterface.src/M000114.html +41 -0
- data/doc/classes/Dnsruby/EventMachineInterface.src/M000115.html +28 -0
- data/doc/classes/Dnsruby/EventMachineInterface.src/M000116.html +24 -0
- data/doc/classes/Dnsruby/Header.html +62 -62
- data/doc/classes/Dnsruby/Header.src/M000169.html +21 -4
- data/doc/classes/Dnsruby/Header.src/M000170.html +4 -4
- data/doc/classes/Dnsruby/Header.src/M000171.html +4 -7
- data/doc/classes/Dnsruby/Header.src/M000172.html +7 -6
- data/doc/classes/Dnsruby/Header.src/M000173.html +6 -18
- data/doc/classes/Dnsruby/Header.src/M000174.html +18 -12
- data/doc/classes/Dnsruby/Header.src/M000175.html +12 -33
- data/doc/classes/Dnsruby/Header.src/M000176.html +33 -14
- data/doc/classes/Dnsruby/Header.src/M000177.html +14 -4
- data/doc/classes/Dnsruby/Header.src/M000178.html +4 -4
- data/doc/classes/Dnsruby/Header.src/M000179.html +4 -16
- data/doc/classes/Dnsruby/Header.src/M000180.html +30 -0
- data/doc/classes/Dnsruby/Header.src/M000196.html +35 -0
- data/doc/classes/Dnsruby/Header.src/M000197.html +18 -0
- data/doc/classes/Dnsruby/Header.src/M000198.html +18 -0
- data/doc/classes/Dnsruby/Header.src/M000199.html +21 -0
- data/doc/classes/Dnsruby/Header.src/M000200.html +20 -0
- data/doc/classes/Dnsruby/Header.src/M000201.html +32 -0
- data/doc/classes/Dnsruby/Header.src/M000202.html +26 -0
- data/doc/classes/Dnsruby/Header.src/M000203.html +47 -0
- data/doc/classes/Dnsruby/Header.src/M000204.html +28 -0
- data/doc/classes/Dnsruby/Header.src/M000205.html +18 -0
- data/doc/classes/Dnsruby/Header.src/M000206.html +18 -0
- data/doc/classes/Dnsruby/Header.src/M000207.html +30 -0
- data/doc/classes/Dnsruby/Hosts.html +47 -47
- data/doc/classes/Dnsruby/Hosts.src/M000142.html +6 -35
- data/doc/classes/Dnsruby/Hosts.src/M000143.html +35 -5
- data/doc/classes/Dnsruby/Hosts.src/M000144.html +5 -6
- data/doc/classes/Dnsruby/Hosts.src/M000145.html +6 -7
- data/doc/classes/Dnsruby/Hosts.src/M000146.html +7 -5
- data/doc/classes/Dnsruby/Hosts.src/M000147.html +5 -6
- data/doc/classes/Dnsruby/Hosts.src/M000148.html +6 -7
- data/doc/classes/Dnsruby/Hosts.src/M000149.html +21 -0
- data/doc/classes/Dnsruby/Hosts.src/M000169.html +20 -0
- data/doc/classes/Dnsruby/Hosts.src/M000170.html +49 -0
- data/doc/classes/Dnsruby/Hosts.src/M000171.html +19 -0
- data/doc/classes/Dnsruby/Hosts.src/M000172.html +20 -0
- data/doc/classes/Dnsruby/Hosts.src/M000173.html +21 -0
- data/doc/classes/Dnsruby/Hosts.src/M000174.html +19 -0
- data/doc/classes/Dnsruby/Hosts.src/M000175.html +20 -0
- data/doc/classes/Dnsruby/Hosts.src/M000176.html +21 -0
- data/doc/classes/Dnsruby/IPv4.html +43 -43
- data/doc/classes/Dnsruby/IPv4.src/M000150.html +17 -6
- data/doc/classes/Dnsruby/IPv4.src/M000151.html +7 -4
- data/doc/classes/Dnsruby/IPv4.src/M000152.html +4 -4
- data/doc/classes/Dnsruby/IPv4.src/M000153.html +4 -5
- data/doc/classes/Dnsruby/IPv4.src/M000154.html +5 -4
- data/doc/classes/Dnsruby/IPv4.src/M000155.html +4 -4
- data/doc/classes/Dnsruby/IPv4.src/M000156.html +4 -4
- data/doc/classes/Dnsruby/IPv4.src/M000157.html +18 -0
- data/doc/classes/Dnsruby/IPv4.src/M000177.html +32 -0
- data/doc/classes/Dnsruby/IPv4.src/M000178.html +21 -0
- data/doc/classes/Dnsruby/IPv4.src/M000179.html +18 -0
- data/doc/classes/Dnsruby/IPv4.src/M000180.html +18 -0
- data/doc/classes/Dnsruby/IPv4.src/M000181.html +19 -0
- data/doc/classes/Dnsruby/IPv4.src/M000182.html +18 -0
- data/doc/classes/Dnsruby/IPv4.src/M000183.html +18 -0
- data/doc/classes/Dnsruby/IPv4.src/M000184.html +18 -0
- data/doc/classes/Dnsruby/IPv6.html +43 -43
- data/doc/classes/Dnsruby/IPv6.src/M000181.html +45 -6
- data/doc/classes/Dnsruby/IPv6.src/M000182.html +6 -7
- data/doc/classes/Dnsruby/IPv6.src/M000183.html +8 -4
- data/doc/classes/Dnsruby/IPv6.src/M000184.html +4 -7
- data/doc/classes/Dnsruby/IPv6.src/M000185.html +7 -4
- data/doc/classes/Dnsruby/IPv6.src/M000186.html +4 -4
- data/doc/classes/Dnsruby/IPv6.src/M000187.html +4 -4
- data/doc/classes/Dnsruby/IPv6.src/M000188.html +18 -0
- data/doc/classes/Dnsruby/IPv6.src/M000208.html +60 -0
- data/doc/classes/Dnsruby/IPv6.src/M000209.html +21 -0
- data/doc/classes/Dnsruby/IPv6.src/M000210.html +22 -0
- data/doc/classes/Dnsruby/IPv6.src/M000211.html +18 -0
- data/doc/classes/Dnsruby/IPv6.src/M000212.html +21 -0
- data/doc/classes/Dnsruby/IPv6.src/M000213.html +18 -0
- data/doc/classes/Dnsruby/IPv6.src/M000214.html +18 -0
- data/doc/classes/Dnsruby/IPv6.src/M000215.html +18 -0
- data/doc/classes/Dnsruby/Message.html +1 -1
- data/doc/classes/Dnsruby/Message.src/M000090.html +20 -0
- data/doc/classes/Dnsruby/Message.src/M000091.html +21 -0
- data/doc/classes/Dnsruby/Message.src/M000092.html +20 -0
- data/doc/classes/Dnsruby/Message.src/M000093.html +18 -0
- data/doc/classes/Dnsruby/Message.src/M000094.html +54 -0
- data/doc/classes/Dnsruby/Message.src/M000095.html +42 -0
- data/doc/classes/Dnsruby/Message.src/M000096.html +45 -0
- data/doc/classes/Dnsruby/Name/Label.src/M000076.html +22 -0
- data/doc/classes/Dnsruby/Name/Label.src/M000077.html +18 -0
- data/doc/classes/Dnsruby/Name/Label.src/M000078.html +18 -0
- data/doc/classes/Dnsruby/Name/Label.src/M000079.html +18 -0
- data/doc/classes/Dnsruby/Name/Label.src/M000080.html +18 -0
- data/doc/classes/Dnsruby/Name/Label.src/M000081.html +18 -0
- data/doc/classes/Dnsruby/Name/Label.src/M000082.html +18 -0
- data/doc/classes/Dnsruby/Name.src/M000067.html +18 -0
- data/doc/classes/Dnsruby/Name.src/M000068.html +21 -0
- data/doc/classes/Dnsruby/Name.src/M000069.html +19 -0
- data/doc/classes/Dnsruby/Name.src/M000071.html +22 -0
- data/doc/classes/Dnsruby/Name.src/M000072.html +18 -0
- data/doc/classes/Dnsruby/Name.src/M000073.html +20 -0
- data/doc/classes/Dnsruby/Question.html +10 -10
- data/doc/classes/Dnsruby/Question.src/M000167.html +33 -4
- data/doc/classes/Dnsruby/Question.src/M000168.html +18 -0
- data/doc/classes/Dnsruby/Question.src/M000194.html +47 -0
- data/doc/classes/Dnsruby/Question.src/M000195.html +18 -0
- data/doc/classes/Dnsruby/RR/DomainName.src/M000058.html +22 -0
- data/doc/classes/Dnsruby/RR/Generic.src/M000048.html +25 -0
- data/doc/classes/Dnsruby/RR/IN/A.src/M000025.html +18 -0
- data/doc/classes/Dnsruby/RR/IN/A.src/M000026.html +18 -0
- data/doc/classes/Dnsruby/RR/IN/A.src/M000027.html +18 -0
- data/doc/classes/Dnsruby/RR/IN/SRV.src/M000022.html +29 -0
- data/doc/classes/Dnsruby/RR/IN/SRV.src/M000023.html +26 -0
- data/doc/classes/Dnsruby/RR/IN/SRV.src/M000024.html +22 -0
- data/doc/classes/Dnsruby/RR/IN/WKS.src/M000028.html +20 -0
- data/doc/classes/Dnsruby/RR/LOC.src/M000032.html +32 -0
- data/doc/classes/Dnsruby/RR/LOC.src/M000033.html +23 -0
- data/doc/classes/Dnsruby/RR/LOC.src/M000034.html +25 -0
- data/doc/classes/Dnsruby/RR/LOC.src/M000035.html +21 -0
- data/doc/classes/Dnsruby/RR/LOC.src/M000036.html +20 -0
- data/doc/classes/Dnsruby/RR/LOC.src/M000037.html +23 -0
- data/doc/classes/Dnsruby/RR/NSAP.src/M000060.html +19 -0
- data/doc/classes/Dnsruby/RR/NSAP.src/M000061.html +19 -0
- data/doc/classes/Dnsruby/RR/NSAP.src/M000062.html +22 -0
- data/doc/classes/Dnsruby/RR/NSAP.src/M000063.html +31 -0
- data/doc/classes/Dnsruby/RR/RP.src/M000057.html +19 -0
- data/doc/classes/Dnsruby/RR/SOA.src/M000046.html +24 -0
- data/doc/classes/Dnsruby/RR/SOA.src/M000047.html +27 -0
- data/doc/classes/Dnsruby/RR/TKEY.src/M000029.html +19 -0
- data/doc/classes/Dnsruby/RR/TKEY.src/M000030.html +29 -0
- data/doc/classes/Dnsruby/RR/TKEY.src/M000031.html +30 -0
- data/doc/classes/Dnsruby/RR/TSIG.src/M000050.html +71 -0
- data/doc/classes/Dnsruby/RR/TSIG.src/M000051.html +34 -0
- data/doc/classes/Dnsruby/RR/TSIG.src/M000052.html +37 -0
- data/doc/classes/Dnsruby/RR/TSIG.src/M000053.html +31 -0
- data/doc/classes/Dnsruby/RR/TSIG.src/M000054.html +34 -0
- data/doc/classes/Dnsruby/RR/TSIG.src/M000055.html +22 -0
- data/doc/classes/Dnsruby/RR/TSIG.src/M000056.html +29 -0
- data/doc/classes/Dnsruby/RR/TXT.src/M000041.html +18 -0
- data/doc/classes/Dnsruby/RR/TXT.src/M000042.html +18 -0
- data/doc/classes/Dnsruby/RR/TXT.src/M000043.html +20 -0
- data/doc/classes/Dnsruby/RR/TXT.src/M000044.html +27 -0
- data/doc/classes/Dnsruby/RR/TXT.src/M000045.html +25 -0
- data/doc/classes/Dnsruby/RR/X25.src/M000038.html +18 -0
- data/doc/classes/Dnsruby/RR/X25.src/M000039.html +18 -0
- data/doc/classes/Dnsruby/RR/X25.src/M000040.html +22 -0
- data/doc/classes/Dnsruby/RR.src/M000015.html +18 -0
- data/doc/classes/Dnsruby/RR.src/M000016.html +18 -0
- data/doc/classes/Dnsruby/RR.src/M000017.html +22 -0
- data/doc/classes/Dnsruby/RR.src/M000018.html +22 -0
- data/doc/classes/Dnsruby/RR.src/M000019.html +18 -0
- data/doc/classes/Dnsruby/RR.src/M000020.html +22 -0
- data/doc/classes/Dnsruby/RR.src/M000021.html +24 -0
- data/doc/classes/Dnsruby/RRSet.html +39 -39
- data/doc/classes/Dnsruby/RRSet.src/M000160.html +4 -30
- data/doc/classes/Dnsruby/RRSet.src/M000161.html +30 -4
- data/doc/classes/Dnsruby/RRSet.src/M000162.html +4 -6
- data/doc/classes/Dnsruby/RRSet.src/M000163.html +6 -4
- data/doc/classes/Dnsruby/RRSet.src/M000164.html +4 -4
- data/doc/classes/Dnsruby/RRSet.src/M000165.html +4 -4
- data/doc/classes/Dnsruby/RRSet.src/M000166.html +18 -0
- data/doc/classes/Dnsruby/RRSet.src/M000187.html +18 -0
- data/doc/classes/Dnsruby/RRSet.src/M000188.html +44 -0
- data/doc/classes/Dnsruby/RRSet.src/M000189.html +18 -0
- data/doc/classes/Dnsruby/RRSet.src/M000190.html +20 -0
- data/doc/classes/Dnsruby/RRSet.src/M000191.html +18 -0
- data/doc/classes/Dnsruby/RRSet.src/M000192.html +18 -0
- data/doc/classes/Dnsruby/RRSet.src/M000193.html +18 -0
- data/doc/classes/Dnsruby/Resolv.src/M000109.html +1 -1
- data/doc/classes/Dnsruby/Resolv.src/M000110.html +1 -1
- data/doc/classes/Dnsruby/Resolv.src/M000111.html +1 -1
- data/doc/classes/Dnsruby/Resolv.src/M000112.html +1 -1
- data/doc/classes/Dnsruby/Resolv.src/M000113.html +1 -1
- data/doc/classes/Dnsruby/Resolv.src/M000114.html +1 -1
- data/doc/classes/Dnsruby/Resolv.src/M000115.html +1 -1
- data/doc/classes/Dnsruby/Resolv.src/M000116.html +1 -1
- data/doc/classes/Dnsruby/Resolv.src/M000117.html +1 -1
- data/doc/classes/Dnsruby/Resolv.src/M000118.html +1 -1
- data/doc/classes/Dnsruby/Resolv.src/M000119.html +1 -1
- data/doc/classes/Dnsruby/Resolv.src/M000120.html +1 -1
- data/doc/classes/Dnsruby/Resolv.src/M000121.html +1 -1
- data/doc/classes/Dnsruby/Resolv.src/M000136.html +18 -0
- data/doc/classes/Dnsruby/Resolv.src/M000137.html +18 -0
- data/doc/classes/Dnsruby/Resolv.src/M000138.html +18 -0
- data/doc/classes/Dnsruby/Resolv.src/M000139.html +18 -0
- data/doc/classes/Dnsruby/Resolv.src/M000140.html +18 -0
- data/doc/classes/Dnsruby/Resolv.src/M000141.html +18 -0
- data/doc/classes/Dnsruby/Resolv.src/M000142.html +18 -0
- data/doc/classes/Dnsruby/Resolv.src/M000143.html +19 -0
- data/doc/classes/Dnsruby/Resolv.src/M000144.html +20 -0
- data/doc/classes/Dnsruby/Resolv.src/M000145.html +29 -0
- data/doc/classes/Dnsruby/Resolv.src/M000146.html +19 -0
- data/doc/classes/Dnsruby/Resolv.src/M000147.html +20 -0
- data/doc/classes/Dnsruby/Resolv.src/M000148.html +25 -0
- data/doc/classes/Dnsruby/Resolver.html +238 -123
- data/doc/classes/Dnsruby/Resolver.src/M000212.html +7 -23
- data/doc/classes/Dnsruby/Resolver.src/M000213.html +11 -48
- data/doc/classes/Dnsruby/Resolver.src/M000214.html +13 -8
- data/doc/classes/Dnsruby/Resolver.src/M000215.html +4 -32
- data/doc/classes/Dnsruby/Resolver.src/M000216.html +33 -6
- data/doc/classes/Dnsruby/Resolver.src/M000217.html +6 -7
- data/doc/classes/Dnsruby/Resolver.src/M000218.html +8 -4
- data/doc/classes/Dnsruby/Resolver.src/M000219.html +4 -6
- data/doc/classes/Dnsruby/Resolver.src/M000220.html +6 -5
- data/doc/classes/Dnsruby/Resolver.src/M000221.html +4 -4
- data/doc/classes/Dnsruby/Resolver.src/M000222.html +4 -4
- data/doc/classes/Dnsruby/Resolver.src/M000223.html +4 -4
- data/doc/classes/Dnsruby/Resolver.src/M000224.html +4 -4
- data/doc/classes/Dnsruby/Resolver.src/M000225.html +4 -4
- data/doc/classes/Dnsruby/Resolver.src/M000226.html +4 -4
- data/doc/classes/Dnsruby/Resolver.src/M000227.html +4 -4
- data/doc/classes/Dnsruby/Resolver.src/M000228.html +4 -4
- data/doc/classes/Dnsruby/Resolver.src/M000229.html +4 -4
- data/doc/classes/Dnsruby/Resolver.src/M000230.html +4 -4
- data/doc/classes/Dnsruby/Resolver.src/M000231.html +19 -0
- data/doc/classes/Dnsruby/Resolver.src/M000232.html +26 -0
- data/doc/classes/Dnsruby/Resolver.src/M000233.html +18 -0
- data/doc/classes/Dnsruby/Resolver.src/M000234.html +23 -0
- data/doc/classes/Dnsruby/Resolver.src/M000235.html +18 -0
- data/doc/classes/Dnsruby/Resolver.src/M000236.html +42 -0
- data/doc/classes/Dnsruby/Resolver.src/M000239.html +21 -0
- data/doc/classes/Dnsruby/Resolver.src/M000240.html +27 -0
- data/doc/classes/Dnsruby/Resolver.src/M000241.html +28 -0
- data/doc/classes/Dnsruby/Resolver.src/M000242.html +18 -0
- data/doc/classes/Dnsruby/Resolver.src/M000243.html +48 -0
- data/doc/classes/Dnsruby/Resolver.src/M000244.html +21 -0
- data/doc/classes/Dnsruby/Resolver.src/M000245.html +22 -0
- data/doc/classes/Dnsruby/Resolver.src/M000246.html +18 -0
- data/doc/classes/Dnsruby/Resolver.src/M000247.html +20 -0
- data/doc/classes/Dnsruby/Resolver.src/M000248.html +19 -0
- data/doc/classes/Dnsruby/Resolver.src/M000249.html +19 -0
- data/doc/classes/Dnsruby/Resolver.src/M000250.html +19 -0
- data/doc/classes/Dnsruby/Resolver.src/M000251.html +19 -0
- data/doc/classes/Dnsruby/Resolver.src/M000252.html +19 -0
- data/doc/classes/Dnsruby/Resolver.src/M000253.html +19 -0
- data/doc/classes/Dnsruby/Resolver.src/M000254.html +19 -0
- data/doc/classes/Dnsruby/Resolver.src/M000255.html +19 -0
- data/doc/classes/Dnsruby/Resolver.src/M000256.html +19 -0
- data/doc/classes/Dnsruby/Resolver.src/M000257.html +19 -0
- data/doc/classes/Dnsruby/Resolver.src/M000258.html +19 -0
- data/doc/classes/Dnsruby/Resolver.src/M000259.html +26 -0
- data/doc/classes/Dnsruby/Resolver.src/M000260.html +18 -0
- data/doc/classes/Dnsruby/Resolver.src/M000261.html +23 -0
- data/doc/classes/Dnsruby/Resolver.src/M000262.html +18 -0
- data/doc/classes/Dnsruby/Resolver.src/M000263.html +42 -0
- data/doc/classes/Dnsruby/SelectInterface.html +236 -0
- data/doc/classes/Dnsruby/SelectInterface.src/M000001.html +19 -0
- data/doc/classes/Dnsruby/SelectInterface.src/M000002.html +18 -0
- data/doc/classes/Dnsruby/SelectInterface.src/M000003.html +18 -0
- data/doc/classes/Dnsruby/SelectInterface.src/M000004.html +18 -0
- data/doc/classes/Dnsruby/SelectInterface.src/M000005.html +21 -0
- data/doc/classes/Dnsruby/SelectInterface.src/M000006.html +19 -0
- data/doc/classes/Dnsruby/SelectInterface.src/M000007.html +18 -0
- data/doc/classes/Dnsruby/SingleResolver.html +55 -33
- data/doc/classes/Dnsruby/SingleResolver.src/M000128.html +24 -51
- data/doc/classes/Dnsruby/SingleResolver.src/M000129.html +11 -6
- data/doc/classes/Dnsruby/SingleResolver.src/M000130.html +21 -0
- data/doc/classes/Dnsruby/SingleResolver.src/M000149.html +18 -0
- data/doc/classes/Dnsruby/SingleResolver.src/M000150.html +19 -0
- data/doc/classes/Dnsruby/SingleResolver.src/M000151.html +49 -0
- data/doc/classes/Dnsruby/SingleResolver.src/M000152.html +18 -0
- data/doc/classes/Dnsruby/SingleResolver.src/M000153.html +21 -0
- data/doc/classes/Dnsruby/SingleResolver.src/M000154.html +25 -0
- data/doc/classes/Dnsruby/SingleResolver.src/M000155.html +51 -0
- data/doc/classes/Dnsruby/SingleResolver.src/M000156.html +26 -0
- data/doc/classes/Dnsruby/SingleResolver.src/M000157.html +21 -0
- data/doc/classes/Dnsruby/TheLog.html +17 -17
- data/doc/classes/Dnsruby/TheLog.src/M000189.html +4 -4
- data/doc/classes/Dnsruby/TheLog.src/M000190.html +4 -4
- data/doc/classes/Dnsruby/TheLog.src/M000191.html +20 -0
- data/doc/classes/Dnsruby/TheLog.src/M000216.html +20 -0
- data/doc/classes/Dnsruby/TheLog.src/M000217.html +20 -0
- data/doc/classes/Dnsruby/TheLog.src/M000218.html +20 -0
- data/doc/classes/Dnsruby/Update.html +31 -31
- data/doc/classes/Dnsruby/Update.src/M000192.html +17 -22
- data/doc/classes/Dnsruby/Update.src/M000193.html +11 -6
- data/doc/classes/Dnsruby/Update.src/M000194.html +15 -24
- data/doc/classes/Dnsruby/Update.src/M000195.html +26 -19
- data/doc/classes/Dnsruby/Update.src/M000196.html +34 -0
- data/doc/classes/Dnsruby/Update.src/M000219.html +32 -0
- data/doc/classes/Dnsruby/Update.src/M000220.html +37 -0
- data/doc/classes/Dnsruby/Update.src/M000221.html +32 -0
- data/doc/classes/Dnsruby/Update.src/M000222.html +41 -0
- data/doc/classes/Dnsruby/Update.src/M000223.html +34 -0
- data/doc/classes/Dnsruby/ZoneTransfer/Delta.src/M000104.html +19 -0
- data/doc/classes/Dnsruby/ZoneTransfer.src/M000102.html +22 -0
- data/doc/classes/Dnsruby/ZoneTransfer.src/M000103.html +35 -0
- data/doc/classes/Dnsruby.html +12 -0
- data/doc/created.rid +1 -1
- data/doc/files/lib/Dnsruby/Config_rb.html +1 -1
- data/doc/files/lib/Dnsruby/Resolver_rb.html +2 -1
- data/doc/files/lib/Dnsruby/SelectInterface_rb.html +108 -0
- data/doc/files/lib/Dnsruby/SingleResolver_rb.html +1 -1
- data/doc/files/lib/Dnsruby/event_machine_interface_rb.html +108 -0
- data/doc/files/lib/Dnsruby/message_rb.html +1 -1
- data/doc/files/lib/Dnsruby/select_thread_rb.html +1 -1
- data/doc/files/lib/Dnsruby/zone_transfer_rb.html +1 -1
- data/doc/files/lib/dnsruby_rb.html +1 -1
- data/doc/fr_file_index.html +1 -0
- data/doc/fr_method_index.html +130 -125
- data/lib/Dnsruby/Config.rb +8 -1
- data/lib/Dnsruby/Resolver.rb +496 -217
- data/lib/Dnsruby/SingleResolver.rb +105 -10
- data/lib/Dnsruby/event_machine_interface.rb +265 -0
- data/lib/Dnsruby/message.rb +1 -1
- data/lib/Dnsruby/select_thread.rb +26 -60
- data/lib/Dnsruby/zone_transfer.rb +3 -1
- data/lib/dnsruby.rb +8 -0
- data/test/tc_em_deferrable.rb +47 -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_inet6.rb +170 -0
- data/test/tc_resolver.rb +71 -63
- data/test/tc_single_resolver.rb +71 -53
- data/test/tc_soak.rb +12 -113
- data/test/tc_soak_base.rb +136 -0
- data/test/ts_online.rb +14 -6
- metadata +277 -2
data/test/tc_resolver.rb
CHANGED
|
@@ -25,6 +25,8 @@ include Dnsruby
|
|
|
25
25
|
class TestResolver < Test::Unit::TestCase
|
|
26
26
|
include Dnsruby
|
|
27
27
|
Thread::abort_on_exception = true
|
|
28
|
+
PORT = 42138
|
|
29
|
+
@@port = PORT
|
|
28
30
|
def setup
|
|
29
31
|
Dnsruby::Config.reset
|
|
30
32
|
end
|
|
@@ -62,10 +64,10 @@ class TestResolver < Test::Unit::TestCase
|
|
|
62
64
|
assert(error==nil)
|
|
63
65
|
end
|
|
64
66
|
|
|
65
|
-
# @TODO@ Implement!!
|
|
66
|
-
# def test_many_threaded_clients
|
|
67
|
-
# assert(false, "IMPLEMENT!")
|
|
68
|
-
# end
|
|
67
|
+
# @TODO@ Implement!!
|
|
68
|
+
# def test_many_threaded_clients
|
|
69
|
+
# assert(false, "IMPLEMENT!")
|
|
70
|
+
# end
|
|
69
71
|
|
|
70
72
|
def test_reverse_lookup
|
|
71
73
|
m = Message.new("210.251.121.214", Types.PTR)
|
|
@@ -81,7 +83,7 @@ class TestResolver < Test::Unit::TestCase
|
|
|
81
83
|
assert(answer.domainname.to_s=~/ruby-lang/)
|
|
82
84
|
end
|
|
83
85
|
end
|
|
84
|
-
|
|
86
|
+
assert(!no_pointer)
|
|
85
87
|
end
|
|
86
88
|
|
|
87
89
|
def test_bad_host
|
|
@@ -95,13 +97,13 @@ class TestResolver < Test::Unit::TestCase
|
|
|
95
97
|
assert(id==q)
|
|
96
98
|
assert(m == nil)
|
|
97
99
|
print err.class
|
|
98
|
-
assert(err.kind_of?(OtherResolvError))
|
|
100
|
+
assert(err.kind_of?(OtherResolvError) || err.kind_of?(IOError), "OtherResolvError or IOError expected : got #{err.class}")
|
|
99
101
|
end
|
|
100
102
|
|
|
101
103
|
def test_nxdomain
|
|
102
104
|
res=Resolver.new
|
|
103
105
|
q = Queue.new
|
|
104
|
-
res.send_async(Message.new("dklfjhdFHFHDVVUIEWRFDSAJKVCNASDLFJHN.com", Types.A),
|
|
106
|
+
res.send_async(Message.new("dklfjhdFHFHDVVUIEWRFDSAJKVCNASDLFJHN.com", Types.A), q, 1)
|
|
105
107
|
id, m, err = q.pop
|
|
106
108
|
assert(id==1)
|
|
107
109
|
assert(m.header.rcode == RCode.NXDOMAIN)
|
|
@@ -109,69 +111,75 @@ class TestResolver < Test::Unit::TestCase
|
|
|
109
111
|
end
|
|
110
112
|
|
|
111
113
|
def test_timeouts
|
|
112
|
-
|
|
114
|
+
#test timeout behaviour for different retry, retrans, total timeout etc.
|
|
113
115
|
#Problem here is that many sockets will be created for queries which time out.
|
|
114
116
|
# Run a query which will not respond, and check that the timeout works
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
res.
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
117
|
+
if (!RUBY_PLATFORM=~/darwin/)
|
|
118
|
+
start=stop=0
|
|
119
|
+
retry_times = 3
|
|
120
|
+
retry_delay=1
|
|
121
|
+
packet_timeout=2
|
|
122
|
+
# Work out what time should be, then time it to check
|
|
123
|
+
expected = ((2**(retry_times-1))*retry_delay) + packet_timeout
|
|
124
|
+
begin
|
|
125
|
+
res = Resolver.new({:nameserver => "10.0.1.128"})
|
|
126
|
+
# res = Resolver.new({:nameserver => "213.248.199.17"})
|
|
127
|
+
res.packet_timeout=packet_timeout
|
|
128
|
+
res.retry_times=retry_times
|
|
129
|
+
res.retry_delay=retry_delay
|
|
130
|
+
start=Time.now
|
|
131
|
+
m = res.send_message(Message.new("a.t.dnsruby.validation-test-servers.nominet.org.uk", Types.A))
|
|
132
|
+
fail
|
|
133
|
+
rescue ResolvTimeout
|
|
134
|
+
stop=Time.now
|
|
135
|
+
time = stop-start
|
|
136
|
+
assert(time <= expected *1.2 && time >= expected *0.9, "Wrong time take, expected #{expected}, took #{time}")
|
|
137
|
+
end
|
|
138
|
+
end
|
|
135
139
|
end
|
|
136
140
|
|
|
137
141
|
def test_packet_timeout
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
142
|
+
if (!RUBY_PLATFORM=~/darwin/)
|
|
143
|
+
res = Resolver.new({:nameserver => "10.0.1.128"})
|
|
144
|
+
start=stop=0
|
|
145
|
+
retry_times = retry_delay = packet_timeout= 10
|
|
146
|
+
query_timeout=1
|
|
147
|
+
begin
|
|
148
|
+
res.packet_timeout=packet_timeout
|
|
149
|
+
res.retry_times=retry_times
|
|
150
|
+
res.retry_delay=retry_delay
|
|
151
|
+
res.query_timeout=query_timeout
|
|
152
|
+
# Work out what time should be, then time it to check
|
|
153
|
+
expected = query_timeout
|
|
154
|
+
start=Time.now
|
|
155
|
+
m = res.send_message(Message.new("a.t.dnsruby.validation-test-servers.nominet.org.uk", Types.A))
|
|
156
|
+
fail
|
|
157
|
+
rescue ResolvTimeout
|
|
158
|
+
stop=Time.now
|
|
159
|
+
time = stop-start
|
|
160
|
+
assert(time <= expected *1.1 && time >= expected *0.9, "Wrong time take, expected #{expected}, took #{time}")
|
|
161
|
+
end #
|
|
162
|
+
end
|
|
157
163
|
end
|
|
158
164
|
|
|
159
165
|
def test_queue_packet_timeout
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
166
|
+
if (!RUBY_PLATFORM=~/darwin/)
|
|
167
|
+
res = Resolver.new({:nameserver => "10.0.1.128"})
|
|
168
|
+
bad = SingleResolver.new("localhost")
|
|
169
|
+
res.add_resolver(bad)
|
|
170
|
+
expected = 1
|
|
171
|
+
res.query_timeout=expected
|
|
172
|
+
q = Queue.new
|
|
173
|
+
start = Time.now
|
|
174
|
+
m = res.send_async(Message.new("a.t.dnsruby.validation-test-servers.nominet.org.uk", Types.A), q, q)
|
|
175
|
+
id,ret,err = q.pop
|
|
176
|
+
stop = Time.now
|
|
177
|
+
assert(id=q)
|
|
178
|
+
assert(ret==nil)
|
|
179
|
+
assert(err.class == ResolvTimeout, "#{err.class}, #{err}")
|
|
180
|
+
time = stop-start
|
|
181
|
+
assert(time <= expected *1.2 && time >= expected *0.9, "Wrong time take, expected #{expected}, took #{time}")
|
|
182
|
+
end
|
|
175
183
|
end
|
|
176
|
-
|
|
184
|
+
|
|
177
185
|
end
|
data/test/tc_single_resolver.rb
CHANGED
|
@@ -20,33 +20,34 @@ include Dnsruby
|
|
|
20
20
|
class TestSingleResolver < Test::Unit::TestCase
|
|
21
21
|
# @todo@ Test udppacketsize
|
|
22
22
|
Thread::abort_on_exception = true
|
|
23
|
+
# Dnsruby::TheLog.level=Logger::DEBUG
|
|
23
24
|
|
|
24
25
|
def setup
|
|
25
26
|
Dnsruby::Config.reset
|
|
26
27
|
end
|
|
27
28
|
|
|
28
29
|
Rrs = [
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
30
|
+
{
|
|
31
|
+
:type => Types.A,
|
|
32
|
+
:name => 'a.t.dnsruby.validation-test-servers.nominet.org.uk',
|
|
33
|
+
:address => '10.0.1.128'
|
|
34
|
+
},
|
|
35
|
+
{
|
|
36
|
+
:type => Types::MX,
|
|
37
|
+
:name => 'mx.t.dnsruby.validation-test-servers.nominet.org.uk',
|
|
38
|
+
:exchange => 'a.t.dnsruby.validation-test-servers.nominet.org.uk',
|
|
39
|
+
:preference => 10
|
|
40
|
+
},
|
|
41
|
+
{
|
|
42
|
+
:type => 'CNAME',
|
|
43
|
+
:name => 'cname.t.dnsruby.validation-test-servers.nominet.org.uk',
|
|
44
|
+
:domainname => 'a.t.dnsruby.validation-test-servers.nominet.org.uk'
|
|
45
|
+
},
|
|
46
|
+
{
|
|
47
|
+
:type => Types.TXT,
|
|
48
|
+
:name => 'txt.t.dnsruby.validation-test-servers.nominet.org.uk',
|
|
49
|
+
:strings => ['Net-DNS']
|
|
50
|
+
}
|
|
50
51
|
]
|
|
51
52
|
|
|
52
53
|
def test_simple
|
|
@@ -55,26 +56,34 @@ class TestSingleResolver < Test::Unit::TestCase
|
|
|
55
56
|
end
|
|
56
57
|
|
|
57
58
|
def test_timeout
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
59
|
+
if (!RUBY_PLATFORM=~/darwin/)
|
|
60
|
+
# Run a query which will not respond, and check that the timeout works
|
|
61
|
+
begin
|
|
62
|
+
res = SingleResolver.new("10.0.1.128")
|
|
63
|
+
res.port = port
|
|
64
|
+
res.packet_timeout=1
|
|
65
|
+
m = res.query("a.t.dnsruby.validation-test-servers.nominet.org.uk")
|
|
66
|
+
fail
|
|
67
|
+
rescue ResolvTimeout
|
|
68
|
+
end
|
|
65
69
|
end
|
|
66
70
|
end
|
|
67
71
|
|
|
68
72
|
def test_queue_timeout
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
73
|
+
port = 46129
|
|
74
|
+
if (!RUBY_PLATFORM=~/darwin/)
|
|
75
|
+
res = SingleResolver.new("10.0.1.128")
|
|
76
|
+
res.port = port
|
|
77
|
+
res.packet_timeout=1
|
|
78
|
+
q = Queue.new
|
|
79
|
+
msg = Message.new("a.t.dnsruby.validation-test-servers.nominet.org.uk")
|
|
80
|
+
res.send_async(msg, q, msg)
|
|
81
|
+
id,ret, error = q.pop
|
|
82
|
+
assert(id==msg)
|
|
83
|
+
assert(ret==nil)
|
|
84
|
+
p error
|
|
85
|
+
assert(error.class == ResolvTimeout)
|
|
86
|
+
end
|
|
78
87
|
end
|
|
79
88
|
|
|
80
89
|
def test_queries
|
|
@@ -117,22 +126,22 @@ class TestSingleResolver < Test::Unit::TestCase
|
|
|
117
126
|
end
|
|
118
127
|
end # do
|
|
119
128
|
end # test_queries
|
|
120
|
-
|
|
121
|
-
# @TODO@ Although the test_thread_stopped test runs in isolation, it won't run as part
|
|
122
|
-
# of the whole test suite (ts_dnsruby.rb). Commented out until I can figure out how to
|
|
123
|
-
# get Test::Unit to run this one sequentially...
|
|
124
|
-
# def test_thread_stopped
|
|
125
|
-
# res=SingleResolver.new
|
|
126
|
-
# # Send a query, and check select_thread running.
|
|
127
|
-
# m = res.query("example.com")
|
|
128
|
-
# assert(Dnsruby::SelectThread.instance.select_thread_alive?)
|
|
129
|
-
# # Wait a second, and check select_thread stopped.
|
|
130
|
-
# sleep(2)
|
|
131
|
-
# assert(!Dnsruby::SelectThread.instance.select_thread_alive?)
|
|
132
|
-
# # Send another query, and check select_thread running.
|
|
133
|
-
# m = res.query("example.com")
|
|
134
|
-
# assert(Dnsruby::SelectThread.instance.select_thread_alive?)
|
|
135
|
-
# end
|
|
129
|
+
|
|
130
|
+
# @TODO@ Although the test_thread_stopped test runs in isolation, it won't run as part
|
|
131
|
+
# of the whole test suite (ts_dnsruby.rb). Commented out until I can figure out how to
|
|
132
|
+
# get Test::Unit to run this one sequentially...
|
|
133
|
+
# def test_thread_stopped
|
|
134
|
+
# res=SingleResolver.new
|
|
135
|
+
# # Send a query, and check select_thread running.
|
|
136
|
+
# m = res.query("example.com")
|
|
137
|
+
# assert(Dnsruby::SelectThread.instance.select_thread_alive?)
|
|
138
|
+
# # Wait a second, and check select_thread stopped.
|
|
139
|
+
# sleep(2)
|
|
140
|
+
# assert(!Dnsruby::SelectThread.instance.select_thread_alive?)
|
|
141
|
+
# # Send another query, and check select_thread running.
|
|
142
|
+
# m = res.query("example.com")
|
|
143
|
+
# assert(Dnsruby::SelectThread.instance.select_thread_alive?)
|
|
144
|
+
# end
|
|
136
145
|
|
|
137
146
|
def test_persistent_socket
|
|
138
147
|
#@TODO@ Really need a test server for this one!
|
|
@@ -150,4 +159,13 @@ class TestSingleResolver < Test::Unit::TestCase
|
|
|
150
159
|
ip = res.server
|
|
151
160
|
assert_equal(ip, '10.0.1.128', 'nameserver() looks up cname.')
|
|
152
161
|
end
|
|
162
|
+
|
|
163
|
+
def test_truncated_response
|
|
164
|
+
res = SingleResolver.new
|
|
165
|
+
res.server=('ns0.validation-test-servers.nominet.org.uk')
|
|
166
|
+
res.packet_timeout = 15
|
|
167
|
+
m = res.query("overflow.dnsruby.validation-test-servers.nominet.org.uk", 'txt')
|
|
168
|
+
assert(m.header.ancount == 61, "61 answer records expected, got #{m.header.ancount}")
|
|
169
|
+
assert(!m.header.tc, "Message was truncated!")
|
|
170
|
+
end
|
|
153
171
|
end
|
data/test/tc_soak.rb
CHANGED
|
@@ -18,16 +18,21 @@ require 'test/unit'
|
|
|
18
18
|
require 'Dnsruby'
|
|
19
19
|
begin
|
|
20
20
|
require 'test/tc_single_resolver'
|
|
21
|
-
rescue
|
|
21
|
+
rescue LoadError
|
|
22
22
|
require 'tc_single_resolver'
|
|
23
23
|
end
|
|
24
|
+
begin
|
|
25
|
+
require 'test/tc_soak_base'
|
|
26
|
+
rescue LoadError
|
|
27
|
+
require 'tc_soak_base'
|
|
28
|
+
end
|
|
24
29
|
include Dnsruby
|
|
25
30
|
# This class tries to soak test the Dnsruby library.
|
|
26
31
|
# It can't do this very well, owing to the small number of sockets allowed to be open simultaneously.
|
|
27
32
|
# @TODO@ Future versions of dnsruby will allow random streaming over a fixed number of (cycling) random sockets,
|
|
28
33
|
# so this test can be beefed up considerably at that point.
|
|
29
34
|
# @todo@ A test DNS server running on localhost is really needed here
|
|
30
|
-
class TestSingleResolverSoak <
|
|
35
|
+
class TestSingleResolverSoak < Test::Unit::TestCase
|
|
31
36
|
|
|
32
37
|
# def test_many_queries_single_socket
|
|
33
38
|
# @todo@ Implement this test?
|
|
@@ -58,14 +63,14 @@ class TestSingleResolverSoak < TestSingleResolver
|
|
|
58
63
|
# We run four queries per iteration, so we're limited to 64 runs.
|
|
59
64
|
63.times do |i|
|
|
60
65
|
rr_count = 0
|
|
61
|
-
Rrs.each do |data|
|
|
66
|
+
TestSoakBase::Rrs.each do |data|
|
|
62
67
|
rr_count+=1
|
|
63
68
|
res = resolvers[res_pos]
|
|
64
69
|
res_pos=+1
|
|
65
70
|
if (res_pos >= num_resolvers)
|
|
66
71
|
res_pos = 0
|
|
67
72
|
end
|
|
68
|
-
res.send_async(Message.new(data[:name], data[:type]), [i,rr_count]
|
|
73
|
+
res.send_async(Message.new(data[:name], data[:type]), q, [i,rr_count])
|
|
69
74
|
# p "Sent #{i}, #{rr_count}, Queue #{q}"
|
|
70
75
|
query_count+=1
|
|
71
76
|
end
|
|
@@ -107,7 +112,7 @@ class TestSingleResolverSoak < TestSingleResolver
|
|
|
107
112
|
num_times.times do |i|
|
|
108
113
|
threads[i] = Thread.new{
|
|
109
114
|
4.times do |j|
|
|
110
|
-
Rrs.each do |data|
|
|
115
|
+
TestSoakBase::Rrs.each do |data|
|
|
111
116
|
mutex.synchronize do
|
|
112
117
|
query_count+=1
|
|
113
118
|
end
|
|
@@ -167,12 +172,12 @@ class TestSingleResolverSoak < TestSingleResolver
|
|
|
167
172
|
res = SingleResolver.new
|
|
168
173
|
res.packet_timeout=4
|
|
169
174
|
4.times do |j|
|
|
170
|
-
Rrs.each do |data|
|
|
175
|
+
TestSoakBase::Rrs.each do |data|
|
|
171
176
|
mutex.synchronize do
|
|
172
177
|
query_count+=1
|
|
173
178
|
end
|
|
174
179
|
q = Queue.new
|
|
175
|
-
res.send_async(Message.new(data[:name], data[:type]), [i,j]
|
|
180
|
+
res.send_async(Message.new(data[:name], data[:type]), q, [i,j])
|
|
176
181
|
id, packet, error = q.pop
|
|
177
182
|
if (error.class == ResolvTimeout)
|
|
178
183
|
# p "TIMEOUT for Thread #{i}, reply #{j}, type #{data[:type]}"
|
|
@@ -200,111 +205,5 @@ class TestSingleResolverSoak < TestSingleResolver
|
|
|
200
205
|
assert(timed_out < query_count * 0.1, "#{timed_out} of #{query_count} timed out!")
|
|
201
206
|
end
|
|
202
207
|
|
|
203
|
-
def test_continuous_queries_asynch_single_res
|
|
204
|
-
# Have two threads looping, with one sending, and one receiving queries.
|
|
205
|
-
# Never exceed more than 250 concurrent queries, but make sure they're always running.
|
|
206
|
-
num_loops = 2000
|
|
207
|
-
num_sent = 0
|
|
208
|
-
q = Queue.new
|
|
209
|
-
timed_out = 0
|
|
210
|
-
mutex = Mutex.new
|
|
211
|
-
start = Time.now
|
|
212
|
-
num_in_progress = 0
|
|
213
|
-
sender = Thread.new{
|
|
214
|
-
res = SingleResolver.new
|
|
215
|
-
res.packet_timeout=5
|
|
216
|
-
# On windows, MAX_FILES is 256. This means that we have to limit
|
|
217
|
-
# this test while we're not using single sockets.
|
|
218
|
-
# We run four queries per iteration, so we're limited to 64 runs.
|
|
219
|
-
num_loops.times do |i|
|
|
220
|
-
rr_count = 0
|
|
221
|
-
Rrs.each do |data|
|
|
222
|
-
rr_count+=1
|
|
223
|
-
while (mutex.synchronize{num_in_progress> 250}) do
|
|
224
|
-
sleep(0.01)
|
|
225
|
-
end
|
|
226
|
-
res.send_async(Message.new(data[:name], data[:type]), [i,rr_count], q)
|
|
227
|
-
num_sent+=1
|
|
228
|
-
mutex.synchronize {
|
|
229
|
-
num_in_progress+=1
|
|
230
|
-
}
|
|
231
|
-
end
|
|
232
|
-
end
|
|
233
|
-
|
|
234
|
-
}
|
|
235
|
-
receiver = Thread.new{
|
|
236
|
-
(num_loops*4).times do |i|
|
|
237
|
-
id,ret, error = q.pop
|
|
238
|
-
mutex.synchronize {
|
|
239
|
-
num_in_progress-=1
|
|
240
|
-
}
|
|
241
|
-
if (error.class == ResolvTimeout)
|
|
242
|
-
timed_out+=1
|
|
243
|
-
# p "Number #{i} timed out!"
|
|
244
|
-
elsif (ret.class != Message)
|
|
245
|
-
TheLog.debug("tc_single_resolver : Query #{i} ERROR RETURNED : #{error.class}, #{error}")
|
|
246
|
-
end
|
|
247
|
-
end
|
|
248
|
-
}
|
|
249
|
-
sender.join
|
|
250
|
-
receiver.join
|
|
251
|
-
assert(num_in_progress==0)
|
|
252
|
-
stop=Time.now
|
|
253
|
-
time_taken=stop-start
|
|
254
|
-
p "Query count : #{num_sent}, #{timed_out} timed out. #{time_taken} time taken"
|
|
255
|
-
assert(timed_out < num_sent * 0.1, "#{timed_out} of #{num_sent} timed out!")
|
|
256
|
-
end
|
|
257
|
-
|
|
258
|
-
def test_continuous_queries_asynch_resolver
|
|
259
|
-
# Have two threads looping, with one sending, and one receiving queries.
|
|
260
|
-
# Never exceed more than 250 concurrent queries, but make sure they're always running.
|
|
261
|
-
num_loops = 1000
|
|
262
|
-
num_sent = 0
|
|
263
|
-
q = Queue.new
|
|
264
|
-
timed_out = 0
|
|
265
|
-
mutex = Mutex.new
|
|
266
|
-
start = Time.now
|
|
267
|
-
num_in_progress = 0
|
|
268
|
-
sender = Thread.new{
|
|
269
|
-
res = Resolver.new
|
|
270
|
-
# On windows, MAX_FILES is 256. This means that we have to limit
|
|
271
|
-
# this test while we're not using single sockets.
|
|
272
|
-
# We run four queries per iteration, so we're limited to 64 runs.
|
|
273
|
-
num_loops.times do |i|
|
|
274
|
-
while (mutex.synchronize{num_in_progress> 50}) do # One query has several sockets in Resolver
|
|
275
|
-
sleep(0.01)
|
|
276
|
-
end
|
|
277
|
-
res.send_async(Message.new("example.com", Types.A), [i,1], q)
|
|
278
|
-
num_sent+=1
|
|
279
|
-
mutex.synchronize {
|
|
280
|
-
num_in_progress+=1
|
|
281
|
-
}
|
|
282
|
-
end
|
|
283
|
-
}
|
|
284
|
-
error_count=0
|
|
285
|
-
receiver = Thread.new{
|
|
286
|
-
(num_loops).times do |i|
|
|
287
|
-
id,ret, error = q.pop
|
|
288
|
-
mutex.synchronize {
|
|
289
|
-
num_in_progress-=1
|
|
290
|
-
}
|
|
291
|
-
if (error.class == ResolvTimeout)
|
|
292
|
-
timed_out+=1
|
|
293
|
-
# p "Number #{i} timed out!"
|
|
294
|
-
elsif (ret.class != Message)
|
|
295
|
-
error_count+=1
|
|
296
|
-
TheLog.error("tc_single_resolver : Query #{i} ERROR RETURNED : #{error.class}, #{error}")
|
|
297
|
-
end
|
|
298
|
-
end
|
|
299
|
-
}
|
|
300
|
-
sender.join
|
|
301
|
-
receiver.join
|
|
302
|
-
assert(num_in_progress==0)
|
|
303
|
-
stop=Time.now
|
|
304
|
-
time_taken=stop-start
|
|
305
|
-
p "Query count : #{num_sent}, #{timed_out} timed out, #{error_count} other errors. #{time_taken} time taken"
|
|
306
|
-
assert(timed_out < num_sent * 0.1, "#{timed_out} of #{num_sent} timed out!")
|
|
307
|
-
assert(error_count == 0)
|
|
308
|
-
end
|
|
309
208
|
|
|
310
209
|
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
|