dnsruby 1.57.0 → 1.58.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (54) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +1 -2
  3. data/.travis.yml +1 -1
  4. data/README.md +2 -2
  5. data/RELEASE_NOTES.md +16 -0
  6. data/Rakefile +2 -0
  7. data/dnsruby.gemspec +2 -0
  8. data/lib/dnsruby.rb +5 -0
  9. data/lib/dnsruby/bit_mapping.rb +138 -0
  10. data/lib/dnsruby/bitmap.rb +108 -0
  11. data/lib/dnsruby/message/decoder.rb +90 -80
  12. data/lib/dnsruby/message/message.rb +16 -3
  13. data/lib/dnsruby/message/section.rb +3 -3
  14. data/lib/dnsruby/name.rb +2 -2
  15. data/lib/dnsruby/packet_sender.rb +73 -1
  16. data/lib/dnsruby/resolv.rb +56 -42
  17. data/lib/dnsruby/resolver.rb +95 -73
  18. data/lib/dnsruby/resource/GPOS.rb +9 -3
  19. data/lib/dnsruby/resource/HIP.rb +1 -1
  20. data/lib/dnsruby/resource/IN.rb +3 -1
  21. data/lib/dnsruby/resource/NAPTR.rb +2 -2
  22. data/lib/dnsruby/resource/NSEC3.rb +2 -2
  23. data/lib/dnsruby/resource/NXT.rb +302 -0
  24. data/lib/dnsruby/resource/OPT.rb +2 -2
  25. data/lib/dnsruby/resource/TXT.rb +2 -2
  26. data/lib/dnsruby/resource/generic.rb +1 -0
  27. data/lib/dnsruby/resource/type_bitmap.rb +0 -0
  28. data/lib/dnsruby/select_thread.rb +174 -83
  29. data/lib/dnsruby/single_resolver.rb +2 -2
  30. data/lib/dnsruby/version.rb +1 -1
  31. data/lib/dnsruby/zone_reader.rb +19 -9
  32. data/lib/dnsruby/zone_transfer.rb +1 -1
  33. data/test/spec_helper.rb +9 -1
  34. data/test/tc_axfr.rb +17 -4
  35. data/test/tc_gpos.rb +3 -3
  36. data/test/tc_message.rb +7 -1
  37. data/test/tc_nxt.rb +192 -0
  38. data/test/tc_recur.rb +2 -1
  39. data/test/tc_resolv.rb +73 -0
  40. data/test/tc_resolver.rb +22 -4
  41. data/test/tc_rr-opt.rb +9 -8
  42. data/test/tc_rr.rb +22 -0
  43. data/test/tc_single_resolver.rb +15 -15
  44. data/test/tc_soak.rb +154 -65
  45. data/test/tc_soak_base.rb +15 -15
  46. data/test/tc_tcp.rb +1 -1
  47. data/test/tc_tcp_pipelining.rb +203 -0
  48. data/test/tc_zone_reader.rb +73 -0
  49. data/test/test_dnsserver.rb +208 -0
  50. data/test/test_utils.rb +49 -0
  51. data/test/ts_offline.rb +59 -41
  52. data/test/ts_online.rb +92 -63
  53. metadata +40 -3
  54. data/test/tc_dnsruby.rb +0 -51
@@ -0,0 +1,49 @@
1
+ require_relative 'spec_helper'
2
+
3
+ # Use this in tests in the tests directory with:
4
+ # require_relative 'test_utils'
5
+ # include TestUtils
6
+
7
+ module Dnsruby
8
+ module TestUtils
9
+
10
+ module_function
11
+
12
+ # Asserts that all exceptions whose type are the specified exception class
13
+ # or one of its subclasses are *not* raised.
14
+ #
15
+ # If any other kind of exception is raised, the test throws an exception
16
+ # (rather than failing).
17
+ #
18
+ # The test passes if and only if no exceptions are raised.
19
+ def assert_not_raised(exception_class, failure_message = nil)
20
+ begin
21
+ yield
22
+ rescue => e
23
+ if e.is_a?(exception_class)
24
+ flunk(failure_message || "An exception was not expected but was raised: #{e}")
25
+ else
26
+ raise e
27
+ end
28
+ end
29
+ end
30
+
31
+ =begin
32
+ # This should result in a test failure:
33
+ def test_target_exception
34
+ assert_not_raised(ArgumentError, 'ArgumentError') { raise ArgumentError.new }
35
+ end
36
+
37
+ # This should result in a test error:
38
+ def test_other_exception
39
+ assert_not_raised(ArgumentError, 'RuntimeError') { raise RuntimeError.new }
40
+ end
41
+
42
+ # This should result in a passed test:
43
+ def test_no_exception
44
+ assert_not_raised(ArgumentError, 'No Error') { }
45
+ end
46
+ =end
47
+ end
48
+ end
49
+
@@ -18,46 +18,64 @@ require_relative 'spec_helper'
18
18
 
19
19
  Dnsruby.log.level = Logger::FATAL
20
20
 
21
- require_relative 'tc_gpos.rb'
22
- require_relative 'tc_header.rb'
23
- require_relative "tc_name.rb"
24
- require_relative 'tc_message.rb'
25
- require_relative "tc_misc.rb"
26
- require_relative "tc_hash.rb"
27
- require_relative "tc_packet.rb"
28
- require_relative "tc_packet_unique_push.rb"
29
- require_relative "tc_question.rb"
30
- require_relative "tc_res_file.rb"
31
- require_relative "tc_res_opt.rb"
32
- require_relative "tc_res_config.rb"
33
- # require_relative "tc_res_env.rb"
34
- require_relative "tc_rr-txt.rb"
35
- require_relative "tc_rr-unknown.rb"
36
- require_relative "tc_rr.rb"
37
- require_relative "tc_rrset.rb"
38
- require_relative "tc_tkey.rb"
39
- require_relative "tc_update.rb"
40
- require_relative "tc_escapedchars.rb"
41
- require_relative "tc_dnskey.rb"
42
- require_relative "tc_rrsig.rb"
43
- require_relative "tc_nsec.rb"
44
- require_relative "tc_nsec3.rb"
45
- require_relative "tc_nsec3param.rb"
46
- require_relative "tc_ipseckey.rb"
47
- require_relative "tc_naptr.rb"
48
-
49
- begin
50
- require "openssl"
51
- OpenSSL::HMAC.digest(OpenSSL::Digest::MD5.new, "key", "data")
52
- key = OpenSSL::PKey::RSA.new
53
- key.e = 111
54
-
55
- have_openssl=true
56
- rescue Exception => e
57
- puts "-----------------------------------------------------------------------"
58
- puts "OpenSSL not present (with full functionality) - skipping DS digest test"
59
- puts "-----------------------------------------------------------------------"
21
+ # We'll prepend 'tc_' and append '.rb' to these:
22
+ TESTS = %w(
23
+ dnskey
24
+ escapedchars
25
+ gpos
26
+ hash
27
+ header
28
+ ipseckey
29
+ message
30
+ misc
31
+ name
32
+ naptr
33
+ nsec
34
+ nsec3
35
+ nsec3param
36
+ nxt
37
+ packet
38
+ packet_unique_push
39
+ question
40
+ res_config
41
+ res_file
42
+ res_opt
43
+ rr
44
+ rr-txt
45
+ rr-unknown
46
+ rrset
47
+ rrsig
48
+ tkey
49
+ update
50
+ zone_reader
51
+ )
52
+
53
+ # Omitted:
54
+ #
55
+ # tc_res_env
56
+
57
+
58
+ TESTS.each { |test| require_relative "tc_#{test}.rb" }
59
+
60
+
61
+ def have_open_ssl?
62
+ have_open_ssl = true
63
+ begin
64
+ require "openssl"
65
+ OpenSSL::HMAC.digest(OpenSSL::Digest::MD5.new, "key", "data")
66
+ key = OpenSSL::PKey::RSA.new
67
+ key.e = 111
68
+ rescue
69
+ have_open_ssl = false
70
+ end
71
+ have_open_ssl
60
72
  end
61
- if (have_openssl)
62
- require_relative "tc_ds.rb"
73
+
74
+ if have_open_ssl?
75
+ require_relative 'tc_ds.rb'
76
+ else
77
+ puts "-----------------------------------------------------------------------"
78
+ puts "OpenSSL not present (with full functionality) - skipping DS digest test"
79
+ puts "-----------------------------------------------------------------------"
63
80
  end
81
+
@@ -17,40 +17,69 @@
17
17
  require_relative 'spec_helper'
18
18
  Dnsruby.log.level = Logger::FATAL
19
19
 
20
- # Disable these tests if we're not online
21
20
  require 'socket'
22
- sock = UDPSocket.new()
23
- online = false
24
- begin
25
- sock.connect('193.0.14.129', # k.root-servers.net.
26
- 25)
27
- online = true
28
- sock.close
29
- rescue Exception => exception
30
- puts "----------------------------------------"
31
- puts "Cannot bind to socket:\n\t#{exception}\n"
32
- puts "This is an indication you have network problems\n"
33
- puts "\n\nNo online tests will be run!!\n\n"
34
- puts "----------------------------------------"
21
+
22
+
23
+ # Tells whether or not we can connect to the Internet.
24
+ def online?
25
+ sock = UDPSocket.new()
26
+ online = false
27
+ begin
28
+ sock.connect('193.0.14.129', 25) # that address is k.root-servers.net
29
+ online = true
30
+ sock.close
31
+ rescue Exception => exception
32
+ puts "
33
+ ------------------------------------------------------------
34
+ Cannot bind to socket:
35
+ #{exception}
36
+
37
+ This is an indication you have network problems.
38
+ No online tests will be run!!
39
+ ------------------------------------------------------------
40
+ "
41
+ end
42
+ online
35
43
  end
36
- if (online)
44
+
45
+
46
+ if online?
47
+ online_tests = %w(
48
+ axfr
49
+ hs
50
+ recur
51
+ resolv
52
+ resolver
53
+ tcp
54
+ tcp_pipelining
55
+ )
56
+
57
+ # Excluded are:
58
+ #
59
+ # inet6
60
+ # recurse
61
+ # queue
62
+ # soak
63
+
37
64
  # OK - online and ready to go
38
- print "Running online tests. These tests send UDP packets - some may be lost.\n"
39
- print "If you get the odd timeout error with these tests, try running them again.\n"
40
- print "It may just be that some UDP packets got lost the first time...\n"
41
- require_relative "tc_resolver.rb"
42
- require_relative "tc_dnsruby.rb"
43
- require_relative "tc_hs.rb"
44
- # require_relative "tc_inet6.rb"
45
- # require_relative "tc_recurse.rb"
46
- require_relative "tc_tcp.rb"
47
- # require_relative "tc_queue.rb"
48
- require_relative "tc_recur.rb"
49
- # require_relative "tc_soak.rb"
50
-
51
- # Check if we can contact the server - if we can't, then abort the test
65
+ puts '
66
+ Running online tests. These tests send UDP packets - some may be lost.
67
+ If you get the odd timeout error with these tests, try running them again.
68
+ It may just be that some UDP packets got lost the first time...
69
+ '
70
+
71
+ online_tests.each { |test| require_relative("tc_#{test}.rb") }
72
+ end
73
+
74
+
75
+ # We have set server_up to unconditionally return false.
76
+ # Therefore, to avoid any misconception that this code could run,
77
+ # I'm commenting it out.
78
+ =begin
79
+ def server_up?
80
+ false
81
+ # Check if we can contact the server - if we can't, then abort the test
52
82
  # (but tell user that test has not been run due to connectivity problems)
53
- server_up = false
54
83
 
55
84
  # Disabling the attempt to connect to Nominet servers...
56
85
  # begin
@@ -65,38 +94,40 @@ if (online)
65
94
  # puts "\n\nNo tests targetting this server will be run!!\n\n"
66
95
  # puts "----------------------------------------"
67
96
  # end
97
+ end
98
+
99
+
100
+ if (server_up)
101
+
102
+ require_relative "tc_single_resolver.rb"
103
+ require_relative "tc_cache.rb"
104
+ require_relative "tc_dns.rb"
105
+ require_relative "tc_rr-opt.rb"
106
+ require_relative "tc_res_config.rb"
68
107
 
69
- if (server_up)
70
-
71
- require_relative "tc_single_resolver.rb"
72
- require_relative "tc_axfr.rb"
73
- require_relative "tc_cache.rb"
74
- require_relative "tc_dns.rb"
75
- require_relative "tc_rr-opt.rb"
76
- require_relative "tc_res_config.rb"
77
-
78
- have_openssl = false
79
- begin
80
- require "openssl"
81
- OpenSSL::HMAC.digest(OpenSSL::Digest::MD5.new, "key", "data")
82
- key = OpenSSL::PKey::RSA.new
83
- key.e = 111
84
-
85
- have_openssl=true
86
- rescue Exception => e
87
- puts "-------------------------------------------------------------------------"
88
- puts "OpenSSL not present (with full functionality) - skipping TSIG/DNSSEC test"
89
- puts "-------------------------------------------------------------------------"
90
- end
91
- if (have_openssl)
92
- require_relative "tc_tsig.rb"
93
- puts "------------------------------------------------------"
94
- puts "Running DNSSEC test - may fail if OpenSSL not complete"
95
- puts "------------------------------------------------------"
96
- require_relative "tc_verifier.rb"
97
- require_relative "tc_dlv.rb"
98
- require_relative "tc_validator.rb"
99
- end
108
+ have_openssl = false
109
+ begin
110
+ require "openssl"
111
+ OpenSSL::HMAC.digest(OpenSSL::Digest::MD5.new, "key", "data")
112
+ key = OpenSSL::PKey::RSA.new
113
+ key.e = 111
114
+
115
+ have_openssl=true
116
+ rescue Exception => e
117
+ puts "-------------------------------------------------------------------------"
118
+ puts "OpenSSL not present (with full functionality) - skipping TSIG/DNSSEC test"
119
+ puts "-------------------------------------------------------------------------"
120
+ end
121
+ if (have_openssl)
122
+ require_relative "tc_tsig.rb"
123
+ puts "------------------------------------------------------"
124
+ puts "Running DNSSEC test - may fail if OpenSSL not complete"
125
+ puts "------------------------------------------------------"
126
+ require_relative "tc_verifier.rb"
127
+ require_relative "tc_dlv.rb"
128
+ require_relative "tc_validator.rb"
129
+ end
130
+ =end
100
131
 
101
132
  # have_em = false
102
133
  # begin
@@ -112,5 +143,3 @@ if (online)
112
143
  # require 'test/tc_event_machine_res.rb'
113
144
  # require 'test/tc_event_machine_deferrable.rb'
114
145
  # end
115
- end
116
- end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: dnsruby
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.57.0
4
+ version: 1.58.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Alex Dalitz
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-12-31 00:00:00.000000000 Z
11
+ date: 2015-03-25 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: pry
@@ -72,6 +72,34 @@ dependencies:
72
72
  - - "~>"
73
73
  - !ruby/object:Gem::Version
74
74
  version: '5.4'
75
+ - !ruby/object:Gem::Dependency
76
+ name: rubydns
77
+ requirement: !ruby/object:Gem::Requirement
78
+ requirements:
79
+ - - "~>"
80
+ - !ruby/object:Gem::Version
81
+ version: '1.0'
82
+ type: :development
83
+ prerelease: false
84
+ version_requirements: !ruby/object:Gem::Requirement
85
+ requirements:
86
+ - - "~>"
87
+ - !ruby/object:Gem::Version
88
+ version: '1.0'
89
+ - !ruby/object:Gem::Dependency
90
+ name: nio4r
91
+ requirement: !ruby/object:Gem::Requirement
92
+ requirements:
93
+ - - "~>"
94
+ - !ruby/object:Gem::Version
95
+ version: '1.1'
96
+ type: :development
97
+ prerelease: false
98
+ version_requirements: !ruby/object:Gem::Requirement
99
+ requirements:
100
+ - - "~>"
101
+ - !ruby/object:Gem::Version
102
+ version: '1.1'
75
103
  - !ruby/object:Gem::Dependency
76
104
  name: coveralls
77
105
  requirement: !ruby/object:Gem::Requirement
@@ -124,6 +152,8 @@ files:
124
152
  - dnsruby.gemspec
125
153
  - lib/dnsruby.rb
126
154
  - lib/dnsruby/DNS.rb
155
+ - lib/dnsruby/bit_mapping.rb
156
+ - lib/dnsruby/bitmap.rb
127
157
  - lib/dnsruby/cache.rb
128
158
  - lib/dnsruby/code_mapper.rb
129
159
  - lib/dnsruby/code_mappers.rb
@@ -167,6 +197,7 @@ files:
167
197
  - lib/dnsruby/resource/NSEC.rb
168
198
  - lib/dnsruby/resource/NSEC3.rb
169
199
  - lib/dnsruby/resource/NSEC3PARAM.rb
200
+ - lib/dnsruby/resource/NXT.rb
170
201
  - lib/dnsruby/resource/OPT.rb
171
202
  - lib/dnsruby/resource/PX.rb
172
203
  - lib/dnsruby/resource/RP.rb
@@ -185,6 +216,7 @@ files:
185
216
  - lib/dnsruby/resource/domain_name.rb
186
217
  - lib/dnsruby/resource/generic.rb
187
218
  - lib/dnsruby/resource/resource.rb
219
+ - lib/dnsruby/resource/type_bitmap.rb
188
220
  - lib/dnsruby/select_thread.rb
189
221
  - lib/dnsruby/single_resolver.rb
190
222
  - lib/dnsruby/single_verifier.rb
@@ -202,7 +234,6 @@ files:
202
234
  - test/tc_dlv.rb
203
235
  - test/tc_dns.rb
204
236
  - test/tc_dnskey.rb
205
- - test/tc_dnsruby.rb
206
237
  - test/tc_ds.rb
207
238
  - test/tc_escapedchars.rb
208
239
  - test/tc_gpos.rb
@@ -218,6 +249,7 @@ files:
218
249
  - test/tc_nsec.rb
219
250
  - test/tc_nsec3.rb
220
251
  - test/tc_nsec3param.rb
252
+ - test/tc_nxt.rb
221
253
  - test/tc_packet.rb
222
254
  - test/tc_packet_unique_push.rb
223
255
  - test/tc_question.rb
@@ -227,6 +259,7 @@ files:
227
259
  - test/tc_res_env.rb
228
260
  - test/tc_res_file.rb
229
261
  - test/tc_res_opt.rb
262
+ - test/tc_resolv.rb
230
263
  - test/tc_resolver.rb
231
264
  - test/tc_rr-opt.rb
232
265
  - test/tc_rr-txt.rb
@@ -239,11 +272,15 @@ files:
239
272
  - test/tc_soak_base.rb
240
273
  - test/tc_sshfp.rb
241
274
  - test/tc_tcp.rb
275
+ - test/tc_tcp_pipelining.rb
242
276
  - test/tc_tkey.rb
243
277
  - test/tc_tsig.rb
244
278
  - test/tc_update.rb
245
279
  - test/tc_validator.rb
246
280
  - test/tc_verifier.rb
281
+ - test/tc_zone_reader.rb
282
+ - test/test_dnsserver.rb
283
+ - test/test_utils.rb
247
284
  - test/ts_dnsruby.rb
248
285
  - test/ts_offline.rb
249
286
  - test/ts_online.rb
@@ -1,51 +0,0 @@
1
- # --
2
- # Copyright 2007 Nominet UK
3
- #
4
- # Licensed under the Apache License, Version 2.0 (the "License");
5
- # you may not use this file except in compliance with the License.
6
- # You may obtain a copy of the License at
7
- #
8
- # http://www.apache.org/licenses/LICENSE-2.0
9
- #
10
- # Unless required by applicable law or agreed to in writing, software
11
- # distributed under the License is distributed on an "AS IS" BASIS,
12
- # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
- # See the License for the specific language governing permissions and
14
- # limitations under the License.
15
- # ++
16
-
17
- require_relative 'spec_helper'
18
-
19
- include Dnsruby
20
- class TestDnsruby < Minitest::Test
21
- def test_dnsruby
22
- a = Resolv.getaddress("google-public-dns-a.google.com.")
23
- assert_equal(a.to_s, "8.8.8.8")
24
- a = Resolv.getaddresses("google-public-dns-a.google.com.")
25
- if (a.length == 1)
26
- assert(a.length==1, a.to_s + " should only have one response. Had " + a.length.to_s)
27
- assert(a.any? {|s| s.to_s == ("8.8.8.8")})
28
- Resolv.each_address("google-public-dns-a.google.com.") {|address| assert_equal(address, "8.8.8.8")}
29
- else
30
- assert(a.length==2, a.to_s + " should have had two responses. Had " + a.length.to_s)
31
- assert(a.any? {|s| s.to_s == ("8.8.8.8")})
32
- assert(a.any? {|s| s.to_s == ("2001:4860:4860::8888")})
33
- Resolv.each_address("google-public-dns-a.google.com.") {|address|
34
- assert((address == "8.8.8.8") || (address = "2001:4860:4860::8888")) }
35
- end
36
-
37
- n = Resolv.getname("8.8.8.8")
38
- assert_equal(n, "google-public-dns-a.google.com")
39
- begin
40
- ret = Resolv.getname("google-public-dns-a.google.com.")
41
- assert(false, ret)
42
- rescue Exception => e
43
- # assert(e.kind_of?(ResolvError))
44
- assert(e.kind_of?(Resolv::ResolvError), "Error was a #{e.class}: #{e}")
45
- end
46
- n = Resolv.getnames("8.8.8.8")
47
- assert(n.length==1)
48
- assert_equal(n[0], "google-public-dns-a.google.com")
49
- Resolv.each_name("8.8.8.8") {|name| assert_equal(name, "google-public-dns-a.google.com")}
50
- end
51
- end