dnsruby 1.36 → 1.37

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (46) hide show
  1. data/demo/axfr.rb +16 -0
  2. data/demo/check_soa.rb +17 -0
  3. data/demo/check_zone.rb +16 -0
  4. data/demo/digdlv.rb +16 -0
  5. data/demo/digitar.rb +16 -0
  6. data/demo/digroot.rb +92 -0
  7. data/demo/example_recurse.rb +16 -0
  8. data/demo/mresolv.rb +17 -0
  9. data/demo/mx.rb +16 -0
  10. data/demo/rubydig.rb +16 -0
  11. data/demo/trace_dns.rb +16 -0
  12. data/html/created.rid +1 -1
  13. data/html/fr_class_index.html +0 -6
  14. data/html/fr_method_index.html +332 -348
  15. data/lib/Dnsruby/Cache.rb +18 -1
  16. data/lib/Dnsruby/iana_ports.rb +17 -1
  17. data/lib/Dnsruby/key_cache.rb +16 -0
  18. data/lib/Dnsruby/resource/delete_me.rhtml +6 -0
  19. data/lib/Dnsruby/select_thread.rb.michael.rb +602 -0
  20. data/lib/Dnsruby/single_verifier.rb +17 -0
  21. data/lib/Dnsruby/validator_thread.rb +16 -0
  22. data/lib/Dnsruby/zone_transfer.rb +16 -0
  23. data/test/resolv.conf +16 -1
  24. data/test/tc_auth.rb +49 -0
  25. data/test/tc_cache.rb +16 -0
  26. data/test/tc_dlv.rb +16 -0
  27. data/test/tc_dnskey.rb +16 -0
  28. data/test/tc_ds.rb +16 -0
  29. data/test/tc_itar.rb +16 -0
  30. data/test/tc_nsec.rb +16 -0
  31. data/test/tc_nsec3.rb +16 -0
  32. data/test/tc_nsec3param.rb +16 -0
  33. data/test/tc_queue.rb +16 -0
  34. data/test/tc_recur.rb +16 -0
  35. data/test/tc_rrset.rb +16 -0
  36. data/test/tc_rrsig.rb +16 -0
  37. data/test/tc_soak_base.rb +16 -0
  38. data/test/tc_validator.rb +16 -0
  39. data/test/tc_verifier.rb +16 -0
  40. data/test/ts_queue.rb +3 -0
  41. metadata +7 -7
  42. data/lib/Dnsruby/event_machine_interface.rb +0 -266
  43. data/test/tc_event_machine_deferrable.rb +0 -85
  44. data/test/tc_event_machine_res.rb +0 -174
  45. data/test/tc_event_machine_single_res.rb +0 -101
  46. data/test/tc_event_machine_soak.rb +0 -98
@@ -1,266 +0,0 @@
1
- # Support for EventMachine has been deprecated.
2
- #require 'eventmachine'
3
- #module Dnsruby
4
- # class EventMachineInterface#:nodoc: all
5
- # @@started_em_here = false
6
- # @@running_clients=[]
7
- # @@outstanding_sends = []
8
- # @@em_thread=nil
9
- # # We want to have one EM loop running continuously in this class.
10
- # # Remember to use stop_event_loop inside of EM callback in order to stop the event machine
11
- #
12
- # # Timers - can't use EM timers as they max out at 1000.
13
- # # Instead, while queries are outstanding, call next_tick to manage our own list of timers.
14
- #
15
- # @@timer_procs={} # timeout=>[proc
16
- # @@timer_keys_sorted=[]
17
- # TIMER_PERIOD = 0.1
18
- #
19
- # def EventMachineInterface::process_timers
20
- # # Go through list of timers
21
- # now = Time.now
22
- # @@timer_keys_sorted.each do |timeout|
23
- # if (timeout > now)
24
- # break
25
- # end
26
- # c, proc = @@timer_procs[timeout]
27
- # @@timer_procs.delete(timeout)
28
- # @@timer_keys_sorted.delete(timeout)
29
- # proc.call
30
- # end
31
- #
32
- # if (!@@outstanding_sends.empty?)
33
- # EventMachine::add_timer(TIMER_PERIOD) {process_timers}
34
- # end
35
- # end
36
- #
37
- # def EventMachineInterface::remove_timer(c)
38
- # # Remove from timer structures - if still there!
39
- # @@timer_procs.each do |timeout, value|
40
- # conn, proc = value
41
- # if (c==conn)
42
- # @@timer_procs.delete(timeout)
43
- # @@timer_keys_sorted.delete(timeout)
44
- # end
45
- # end
46
- # end
47
- #
48
- # def EventMachineInterface::add_to_outstanding(c, timeout)
49
- # # Add to timer structures
50
- # @@timer_procs[Time.now+timeout]=[c, Proc.new {
51
- # # Cancel the send
52
- # c.closing=true
53
- # c.close_connection
54
- # c.send_timeout
55
- # }]
56
- # @@timer_keys_sorted=@@timer_procs.keys.sort
57
- # @@outstanding_sends.push(c)
58
- ## puts "#{@@outstanding_sends.length} outstanding connections"
59
- # if (@@outstanding_sends.length==1)
60
- # EventMachine::add_timer(0) {process_timers}
61
- # end
62
- # end
63
- #
64
- # def EventMachineInterface::remove_from_outstanding(c)
65
- # @@outstanding_sends.delete(c)
66
- ## puts "#{@@outstanding_sends.length} outstanding connections"
67
- # remove_timer(c)
68
- # # If we explicitly started the EM loop, and there are no more outstanding sends, then stop the EM loop
69
- # stop_eventmachine
70
- # end
71
- #
72
- # def EventMachineInterface::start_eventmachine
73
- # if (!eventmachine_running?)
74
- # if Resolver.start_eventmachine_loop?
75
- # Dnsruby.log.debug("Starting EventMachine")
76
- # @@started_em_here = true
77
- # @@em_thread = Thread.new {
78
- # EM.run {
79
- ## EventMachine::add_periodic_timer(0.1) {EventMachineInterface::process_timers}
80
- # EventMachine::add_timer(0.1) {EventMachineInterface::process_timers}
81
- # @@df = EventMachine::DefaultDeferrable.new
82
- # @@df.callback{
83
- # Dnsruby.log.debug("Stopping EventMachine")
84
- # EM.stop
85
- # @@em_thread=nil
86
- # }
87
- # }
88
- # }
89
- # else
90
- # Dnsruby.log.debug("Not trying to start event loop")
91
- # end
92
- # end
93
- # end
94
- #
95
- # def EventMachineInterface::start_em_for_resolver(res)
96
- # @@running_clients.push(res)
97
- # start_eventmachine
98
- # end
99
- #
100
- # def EventMachineInterface::stop_em_for_resolver(res)
101
- # @@running_clients.each_index do |i|
102
- # if (@@running_clients[i]==res)
103
- # @@running_clients.delete_at(i)
104
- # end
105
- # end
106
- # stop_eventmachine
107
- # end
108
- #
109
- # def EventMachineInterface::eventmachine_running?
110
- # return (@@em_thread!=nil)
111
- # end
112
- #
113
- # def EventMachineInterface::stop_eventmachine
114
- # if (@@started_em_here)
115
- # if (@@outstanding_sends.size==0)
116
- # if (@@running_clients.length == 0)
117
- # if (@@em_thread)
118
- # @@df.set_deferred_status :succeeded
119
- # @@started_em_here = false
120
- # # @@em_thread = nil
121
- # end
122
- # end
123
- # end
124
- # end
125
- # end
126
- #
127
- # def EventMachineInterface::send(args={})#msg, timeout, server, port, src_add, src_port, use_tcp)
128
- # # Is the EventMachine loop running? If not, we need to start it (and mark that we started it)
129
- # begin
130
- # if (!EventMachine.reactor_running?)
131
- # start_eventmachine
132
- # end
133
- # rescue Exception
134
- # #@TODO@ EM::reactor_running? only introduced in EM v0.9.0 - if it's not there, we simply don't know what to do...
135
- # Dnsruby.log.error("EventMachine::reactor_running? not available.")
136
- # # if Resolver.start_eventmachine_loop?
137
- # # Dnsruby.log.debug("Trying to start event loop - may prove fatal...")
138
- # start_eventmachine
139
- # # else
140
- # # Dnsruby.log.debug("Not trying to start event loop.")
141
- # # end
142
- # end
143
- # df = nil
144
- # if (args[:use_tcp])
145
- # df = send_tcp(args)
146
- # else
147
- # df = send_udp(args)
148
- # end
149
- # # Need to add this send to the list of outstanding sends
150
- # add_to_outstanding(df, args[:timeout])
151
- # return df
152
- # end
153
- #
154
- # def EventMachineInterface::send_tcp(args={})#msg, timeout, server, port, src_add, src_port, use_tcp)
155
- # connection = EventMachine::connect(args[:server], args[:port], EmTcpHandler) { |c|
156
- # #@TODO SRC_PORT FOR TCP!!!
157
- # c.timeout_time=Time.now + args[:timeout]
158
- # c.instance_eval {@args = args}
159
- # lenmsg = [args[:msg].length].pack('n')
160
- # c.send_data(lenmsg)
161
- # c.send_data args[:msg] # , args[:server], args[:port]
162
- # Dnsruby.log.debug {"EventMachine : Sent TCP packet to #{args[:server]}:#{args[:port]}" + # from #{args[:src_address]}:#{args[:src_port]}, timeout=#{args[:timeout]}"
163
- # ", timeout=#{args[:timeout]}"}
164
- # }
165
- # return connection # allows clients to set callback, errback, etc., if desired
166
- # end
167
- #
168
- # def EventMachineInterface::send_udp(args={})# msg, timeout, server, port, src_add, src_port, use_tcp)
169
- # connection = EventMachine::open_datagram_socket(args[:src_address], args[:src_port], EmUdpHandler) { |c|
170
- # c.timeout_time=Time.now + args[:timeout]
171
- # c.instance_eval {@args = args}
172
- # c.send_datagram args[:msg], args[:server], args[:port]
173
- # Dnsruby.log.debug{"EventMachine : Sent datagram to #{args[:server]}:#{args[:port]} from #{args[:src_address]}:#{args[:src_port]}, timeout=#{args[:timeout]}"}
174
- # }
175
- # return connection # allows clients to set callback, errback, etc., if desired
176
- # end
177
- #
178
- #
179
- # class EmUdpHandler < EventMachine::Connection #:nodoc: all
180
- # include EM::Deferrable
181
- # attr_accessor :closing, :timeout_time
182
- # def post_init
183
- # @closing=false
184
- # end
185
- # def receive_data(dgm)
186
- # Dnsruby.log.debug{"UDP receive_data called"}
187
- # process_incoming_message(dgm)
188
- # end
189
- #
190
- # def process_incoming_message(data)
191
- # Dnsruby.log.debug{"Processing incoming message, #{data.length} bytes"}
192
- # ans=nil
193
- # begin
194
- # ans = Message.decode(data)
195
- # rescue Exception => e
196
- # Dnsruby.log.error{"Decode error! #{e.class}, #{e}\nfor msg (length=#{data.length}) : #{data}"}
197
- # @closing=true
198
- # close_connection
199
- # send_to_client(nil, nil, e)
200
- # return
201
- # end
202
- # Dnsruby.log.debug{"#{ans}"}
203
- # ans.answerfrom=(@args[:server])
204
- # ans.answersize=(data.length)
205
- # exception = ans.header.get_exception
206
- # @closing=true
207
- # close_connection
208
- # send_to_client(ans, data, exception)
209
- # end
210
- #
211
- # def unbind
212
- # Dnsruby.log.debug{"Unbind called"}
213
- # if (!@closing)
214
- # if (@timeout_time <= Time.now + 1)
215
- # send_timeout
216
- # else
217
- # Dnsruby.log.debug{"Sending IOError to client"}
218
- # send_to_client(nil, nil, IOError.new("Network error"))
219
- # end
220
- # end
221
- # @closing=false
222
- # # Take the last send off the list of outstanding sends
223
- # EventMachineInterface.remove_from_outstanding(self)
224
- # end
225
- # def send_timeout
226
- # Dnsruby.log.debug{"Sending timeout to client"}
227
- # send_to_client(nil, nil, ResolvTimeout.new("Query timed out"))
228
- # end
229
- # def send_to_client(msg, bytes, err)
230
- # # We call set_defered_status when done
231
- # if (err != nil)
232
- # set_deferred_status :failed, msg, err
233
- # else
234
- # set_deferred_status :succeeded, msg, bytes
235
- # end
236
- # end
237
- # end
238
- #
239
- #
240
- # class EmTcpHandler < EmUdpHandler #:nodoc: all
241
- # def post_init
242
- # super
243
- # @data=""
244
- # @answersize = 0
245
- # end
246
- # def receive_data(data)
247
- # Dnsruby.log.debug{"TCP receive_data called"}
248
- # #Buffer up the incoming data until we have a complete packet
249
- # @data << data
250
- # if (@data.length >= 2)
251
- # if (@answersize == 0)
252
- # @answersize = @data[0..1].unpack('n')[0]
253
- # Dnsruby.log.debug{"TCP - expecting #{@answersize} bytes"}
254
- # end
255
- # if (@answersize == @data.length - 2)
256
- # Dnsruby.log.debug{"TCP - got all #{@answersize} bytes "}
257
- # process_incoming_message(@data[2..@data.length])
258
- # else
259
- # Dnsruby.log.debug{"TCP - got #{@data.length-2} message bytes"}
260
- # end
261
- # end
262
- # end
263
- # end
264
- #
265
- # end
266
- #end
@@ -1,85 +0,0 @@
1
- $:.unshift File.join(File.dirname(__FILE__),'..','lib')
2
-
3
- require 'rubygems'
4
- require 'test/unit'
5
- require 'eventmachine'
6
- require 'dnsruby'
7
-
8
- class EventMachineTestDeferrable < Test::Unit::TestCase
9
- Dnsruby::Resolver.use_eventmachine(true)
10
- def setup
11
- # Dnsruby.log.level=Logger::DEBUG
12
- Dnsruby::Resolver.use_eventmachine(true)
13
- Dnsruby::Resolver.start_eventmachine_loop(true)
14
- end
15
- def teardown
16
- Dnsruby::Resolver.use_eventmachine(false)
17
- Dnsruby::Resolver.start_eventmachine_loop(true)
18
- end
19
-
20
- def test_deferrable_success
21
- res = Dnsruby::SingleResolver.new
22
- Dnsruby::Resolver.use_eventmachine
23
- Dnsruby::Resolver.start_eventmachine_loop(false)
24
- EM.run {
25
- df = res.send_async(Dnsruby::Message.new("nominet.org.uk"))
26
- df.callback {|msg| EM.stop}
27
- df.errback {|msg, err|
28
- EM.stop
29
- assert(false)}
30
- }
31
- Dnsruby::Resolver.start_eventmachine_loop(true)
32
- end
33
-
34
- def test_deferrable_timeout
35
- res = Dnsruby::SingleResolver.new("10.0.1.128")
36
- Dnsruby::Resolver.use_eventmachine
37
- res.packet_timeout=2
38
- Dnsruby::Resolver.start_eventmachine_loop(false)
39
- EM.run {
40
- df = res.send_async(Dnsruby::Message.new("nominet.org.uk"))
41
- df.callback {|msg| EM.stop; assert(false)}
42
- df.errback {|msg, err|
43
- EM.stop
44
- }
45
- }
46
- Dnsruby::Resolver.start_eventmachine_loop(true)
47
- end
48
-
49
- def test_deferrable_success
50
- sleep(0.1) # Give the Event loop a chance to close down from previous test
51
- Dnsruby::Resolver.use_eventmachine
52
- Dnsruby::Resolver.start_eventmachine_loop(false)
53
- res = Dnsruby::Resolver.new
54
- q = Queue.new
55
- id = 1
56
- EM.run {
57
- df = res.send_async(Dnsruby::Message.new("nominet.org.uk"))
58
- df.callback {|msg| done = true; EM.stop}
59
- df.errback {|msg, err|
60
- puts "errback: #{msg}, #{err}"
61
- done = true
62
- EM.stop
63
- assert(false)}
64
- }
65
- Dnsruby::Resolver.start_eventmachine_loop(true)
66
- end
67
-
68
- def test_deferrable_timeout
69
- sleep(0.1) # Give the Event loop a chance to close down from previous test
70
- Dnsruby::Resolver.start_eventmachine_loop(false)
71
- Dnsruby::Resolver.use_eventmachine
72
- res = Dnsruby::Resolver.new("10.0.1.128")
73
- res.query_timeout=2
74
- q = Queue.new
75
- id = 1
76
- EM.run {
77
- df = res.send_async(Dnsruby::Message.new("nominet.org.uk"))
78
- df.callback {|msg| EM.stop; assert(false)}
79
- df.errback {|msg, err|
80
- EM.stop
81
- }
82
- }
83
- Dnsruby::Resolver.start_eventmachine_loop(true)
84
- end
85
- end
@@ -1,174 +0,0 @@
1
- $:.unshift File.join(File.dirname(__FILE__),'..','lib')
2
-
3
- require 'rubygems'
4
- require 'test/unit'
5
- require 'eventmachine'
6
- require 'dnsruby'
7
-
8
- class EventMachineTestResolver < Test::Unit::TestCase
9
- include Dnsruby
10
- Dnsruby::Resolver.use_eventmachine(true)
11
- Thread::abort_on_exception = true
12
- def setup
13
- Dnsruby::Config.reset
14
- # Dnsruby.log.level=Logger::DEBUG
15
- Dnsruby::Resolver.use_eventmachine(true)
16
- Dnsruby::Resolver.start_eventmachine_loop(true)
17
- end
18
- def teardown
19
- Dnsruby::Resolver.use_eventmachine(false)
20
- Dnsruby::Resolver.start_eventmachine_loop(true)
21
- end
22
-
23
- def test_send_message
24
- res = Resolver.new
25
- ret = res.send_message(Message.new("example.com", Types.A))
26
- assert(ret.kind_of?(Message))
27
- end
28
-
29
- def test_query
30
- res = Resolver.new
31
- ret = res.query("example.com")
32
- assert(ret.kind_of?(Message))
33
- end
34
-
35
- def test_query_async
36
- res = Resolver.new
37
- q = Queue.new
38
- res.send_async(Message.new("example.com", Types.A),q,q)
39
- id, ret, error = q.pop
40
- assert_equal(id, q, "Id wrong!")
41
- assert(ret.kind_of?(Message), "Ret wrong!")
42
- assert(error==nil)
43
- end
44
-
45
- def test_query_one_duff_server_one_good
46
- res = Resolver.new({:nameserver => ["localhost", "128.8.10.90"]})
47
- res.retry_delay=1
48
- q = Queue.new
49
- res.send_async(Message.new("example.com", Types.A),q,q)
50
- id, ret, error = q.pop
51
- assert_equal(id, q, "Id wrong!")
52
- assert(ret.kind_of?(Message), "Ret wrong! (#{ret.class}")
53
- assert(error==nil)
54
- end
55
-
56
- def test_reverse_lookup
57
- m = Message.new("210.251.121.214", Types.PTR)
58
- r = Resolver.new
59
- q=Queue.new
60
- r.send_async(m,q,q)
61
- id,ret, error=q.pop
62
- assert(ret.kind_of?(Message))
63
- no_pointer=true
64
- ret.each_answer do |answer|
65
- if (answer.type==Types.PTR)
66
- no_pointer=false
67
- assert(answer.domainname.to_s=~/ruby-lang/)
68
- end
69
- end
70
- assert(!no_pointer)
71
- end
72
-
73
- def test_nxdomain
74
- res=Resolver.new
75
- q = Queue.new
76
- res.send_async(Message.new("dklfjhdFHFHDVVUIEWRFDSAJKVCNASDLFJHN.com", Types.A), q, 1)
77
- id, m, err = q.pop
78
- assert(id==1)
79
- assert(m.rcode == RCode.NXDOMAIN)
80
- assert(err.kind_of?(NXDomain))
81
- end
82
-
83
- def test_timeouts
84
- #test timeout behaviour for different retry, retrans, total timeout etc.
85
- #Problem here is that many sockets will be created for queries which time out.
86
- # Run a query which will not respond, and check that the timeout works
87
- start=stop=0
88
- retry_times = 3
89
- retry_delay=1
90
- packet_timeout=2
91
- # Work out what time should be, then time it to check
92
- expected = ((2**(retry_times-1))*retry_delay) + packet_timeout
93
- begin
94
- res = Resolver.new("10.0.1.128")
95
- res.packet_timeout=packet_timeout
96
- res.retry_times=retry_times
97
- res.retry_delay=retry_delay
98
- start=Time.now
99
- m = res.send_message(Message.new("a.t.dnsruby.validation-test-servers.nominet.org.uk", Types.A))
100
- fail
101
- rescue ResolvTimeout
102
- stop=Time.now
103
- time = stop-start
104
- assert(time <= expected *1.1 && time >= expected *0.9, "Wrong time taken, expected #{expected}, took #{time}")
105
- end
106
- end
107
-
108
- def test_query_timeout
109
- res = Resolver.new({:nameserver => "10.0.1.128"})
110
- start=stop=0
111
- retry_times = retry_delay = packet_timeout= 10
112
- query_timeout=2
113
- begin
114
- res.packet_timeout=packet_timeout
115
- res.retry_times=retry_times
116
- res.retry_delay=retry_delay
117
- res.query_timeout=query_timeout
118
- # Work out what time should be, then time it to check
119
- expected = query_timeout
120
- start=Time.now
121
- m = res.send_message(Message.new("a.t.dnsruby.validation-test-servers.nominet.org.uk", Types.A))
122
- fail
123
- rescue ResolvTimeout
124
- stop=Time.now
125
- time = stop-start
126
- assert(time <= expected *1.1 && time >= expected *0.9, "Wrong time take, expected #{expected}, took #{time}")
127
- end
128
- end
129
-
130
- def test_queue_query_timeout
131
- res = Resolver.new({:nameserver => "10.0.1.128"})
132
- bad = SingleResolver.new("localhost")
133
- res.add_resolver(bad)
134
- expected = 2
135
- res.query_timeout=expected
136
- q = Queue.new
137
- start = Time.now
138
- m = res.send_async(Message.new("a.t.dnsruby.validation-test-servers.nominet.org.uk", Types.A), q, q)
139
- id,ret,err = q.pop
140
- stop = Time.now
141
- assert(id=q)
142
- assert(ret==nil)
143
- assert(err.class == ResolvTimeout, "#{err.class}, #{err}")
144
- time = stop-start
145
- assert(time <= expected *1.2 && time >= expected *0.9, "Wrong time take, expected #{expected}, took #{time}")
146
- end
147
-
148
-
149
-
150
- def test_tcp
151
- res = Dnsruby::Resolver.new
152
- res.use_tcp = true
153
- Dnsruby::Resolver.use_eventmachine
154
- q = Queue.new
155
- id = 1
156
- res.send_async(Dnsruby::Message.new("nominet.org.uk"), q, id)
157
- id+=1
158
- res.send_async(Dnsruby::Message.new("example.com"), q, id)
159
- id.times do |i|
160
- itemid = q.pop[0]
161
- assert(itemid <= id)
162
- assert(itemid >= 0)
163
- end
164
- end
165
-
166
- def test_truncated_response
167
- res = Dnsruby::Resolver.new('ns0.validation-test-servers.nominet.org.uk')
168
- res.packet_timeout = 10
169
- m = res.query("overflow.dnsruby.validation-test-servers.nominet.org.uk", 'txt')
170
- assert(m.header.ancount == 61, "61 answer records expected, got #{m.header.ancount}")
171
- assert(!m.header.tc, "Message was truncated!")
172
- end
173
-
174
- end
@@ -1,101 +0,0 @@
1
- $:.unshift File.join(File.dirname(__FILE__),'..','lib')
2
-
3
- require 'rubygems'
4
- require 'test/unit'
5
- require 'eventmachine'
6
- require 'dnsruby'
7
-
8
- class EventMachineTestSingleResolver < Test::Unit::TestCase
9
- Dnsruby::Resolver.use_eventmachine(true)
10
- def setup
11
- # Dnsruby.log.level=Logger::DEBUG
12
- Dnsruby::Resolver.use_eventmachine(true)
13
- Dnsruby::Resolver.start_eventmachine_loop(true)
14
- sleep(0.01)
15
- end
16
- def teardown
17
- Dnsruby::Resolver.use_eventmachine(false)
18
- Dnsruby::Resolver.start_eventmachine_loop(true)
19
- end
20
- def test_udp
21
- res = Dnsruby::SingleResolver.new
22
- Dnsruby::Resolver.use_eventmachine(true)
23
- Dnsruby::Resolver.start_eventmachine_loop(true)
24
- q = Queue.new
25
- id = 1
26
- res.send_async(Dnsruby::Message.new("nominet.org.uk"), q, id)
27
- id+=1
28
- res.send_async(Dnsruby::Message.new("example.com"), q, id)
29
- id.times do |i|
30
- item = q.pop
31
- assert(item[1].class==Dnsruby::Message)
32
- assert(item[0] <= id)
33
- assert(item[0] >= 0)
34
- end
35
- end
36
-
37
- def test_tcp
38
- res = Dnsruby::SingleResolver.new
39
- res.use_tcp = true
40
- Dnsruby::Resolver.use_eventmachine
41
- q = Queue.new
42
- id = 1
43
- res.send_async(Dnsruby::Message.new("nominet.org.uk"), q, id)
44
- id+=1
45
- res.send_async(Dnsruby::Message.new("example.com"), q, id)
46
- id.times do |i|
47
- itemid, response, error = q.pop
48
- assert(itemid <= id)
49
- assert(itemid >= 0)
50
- assert(error==nil)
51
- end
52
- #@TODO@ How do we check that TCP was actually used? Do we need a test server for this?
53
- #Or will the truncated test catch this? (Query retried over TCP to fetch all records)
54
- end
55
-
56
- def test_tcp_queue_timeout
57
- res = Dnsruby::SingleResolver.new("10.0.1.128")
58
- Dnsruby::Resolver.use_eventmachine(true)
59
- res.packet_timeout=2
60
- res.use_tcp=true
61
- q = Queue.new
62
- msg = Dnsruby::Message.new("a.t.dnsruby.validation-test-servers.nominet.org.uk")
63
- res.send_async(msg, q, 1)
64
- start=Time.now
65
- id,ret,error = q.pop
66
- end_time = Time.now
67
- assert(id==1)
68
- assert(ret==nil)
69
- assert(error.class == Dnsruby::ResolvTimeout)
70
- # p "Difference = #{end_time-start}"
71
- assert(end_time - start >= 1.9)
72
- assert(end_time - start <= 2.2)
73
- end
74
-
75
- def test_udp_queue_timeout
76
- res = Dnsruby::SingleResolver.new("10.0.1.128")
77
- Dnsruby::Resolver.use_eventmachine(true)
78
- res.packet_timeout=2
79
- q = Queue.new
80
- start=Time.now
81
- msg = Dnsruby::Message.new("a.t.dnsruby.validation-test-servers.nominet.org.uk")
82
- res.send_async(msg, q, 1)
83
- id,ret,error = q.pop
84
- end_time = Time.now
85
- assert(id==1)
86
- assert(ret==nil)
87
- # p "Difference = #{end_time-start}"
88
- assert(error.class == Dnsruby::ResolvTimeout)
89
- assert(end_time - start >= 1.9)
90
- assert(end_time - start <= 2.2)
91
- end
92
-
93
- def test_truncated_response
94
- res = Dnsruby::SingleResolver.new
95
- res.packet_timeout = 10
96
- res.server=('ns0.validation-test-servers.nominet.org.uk')
97
- m = res.query("overflow.dnsruby.validation-test-servers.nominet.org.uk", 'txt')
98
- assert(m.header.ancount == 61, "61 answer records expected, got #{m.header.ancount}")
99
- assert(!m.header.tc, "Message was truncated!")
100
- end
101
- end