dnsruby 1.36 → 1.37

Sign up to get free protection for your applications and to get access to all the features.
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