dnsruby 1.61.2 → 1.61.7

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 (52) hide show
  1. checksums.yaml +5 -5
  2. data/.github/workflows/ci.yml +23 -0
  3. data/.yardopts +7 -0
  4. data/Gemfile +0 -2
  5. data/README.md +2 -1
  6. data/RELEASE_NOTES.md +32 -1
  7. data/Rakefile +2 -0
  8. data/dnsruby.gemspec +14 -9
  9. data/lib/dnsruby.rb +4 -4
  10. data/lib/dnsruby/DNS.rb +1 -1
  11. data/lib/dnsruby/config.rb +13 -13
  12. data/lib/dnsruby/dnssec.rb +1 -0
  13. data/lib/dnsruby/hosts.rb +8 -4
  14. data/lib/dnsruby/message/encoder.rb +2 -2
  15. data/lib/dnsruby/message/header.rb +0 -3
  16. data/lib/dnsruby/name.rb +13 -15
  17. data/lib/dnsruby/packet_sender.rb +12 -16
  18. data/lib/dnsruby/recursor.rb +6 -5
  19. data/lib/dnsruby/resolver.rb +14 -17
  20. data/lib/dnsruby/resource/CAA.rb +2 -2
  21. data/lib/dnsruby/resource/DNSKEY.rb +18 -0
  22. data/lib/dnsruby/resource/NSEC3PARAM.rb +1 -1
  23. data/lib/dnsruby/resource/TLSA.rb +3 -3
  24. data/lib/dnsruby/resource/TXT.rb +11 -1
  25. data/lib/dnsruby/select_thread.rb +6 -7
  26. data/lib/dnsruby/single_verifier.rb +14 -3
  27. data/lib/dnsruby/validator_thread.rb +4 -4
  28. data/lib/dnsruby/version.rb +1 -1
  29. data/lib/dnsruby/zone_reader.rb +2 -2
  30. data/lib/dnsruby/zone_transfer.rb +0 -1
  31. data/test/localdns.rb +29 -0
  32. data/test/spec_helper.rb +6 -0
  33. data/test/tc_caa.rb +0 -1
  34. data/test/tc_dns.rb +7 -2
  35. data/test/tc_dnskey.rb +29 -0
  36. data/test/tc_encoding.rb +31 -0
  37. data/test/tc_hs.rb +4 -3
  38. data/test/tc_long_labels.rb +46 -0
  39. data/test/tc_name.rb +19 -0
  40. data/test/tc_resolv.rb +5 -4
  41. data/test/tc_resolver.rb +12 -12
  42. data/test/tc_rr-opt.rb +8 -5
  43. data/test/tc_rr-txt.rb +7 -1
  44. data/test/tc_soak.rb +31 -69
  45. data/test/tc_tcp.rb +2 -2
  46. data/test/tc_tcp_pipelining.rb +26 -25
  47. data/test/tc_verifier.rb +15 -0
  48. data/test/test_dnsserver.rb +110 -17
  49. data/test/test_utils.rb +0 -2
  50. data/test/ts_offline.rb +8 -8
  51. metadata +40 -51
  52. data/.travis.yml +0 -14
data/test/spec_helper.rb CHANGED
@@ -1,3 +1,9 @@
1
+ $VERBOSE = true
2
+
3
+ if Warning.respond_to?(:[]=)
4
+ Warning[:deprecated] = true
5
+ end
6
+
1
7
  if ENV['RUN_EXTRA_TASK'] == 'TRUE'
2
8
  require 'coveralls'
3
9
  Coveralls.wear!
data/test/tc_caa.rb CHANGED
@@ -16,7 +16,6 @@
16
16
  # ++
17
17
 
18
18
  require_relative 'spec_helper'
19
- require 'pry'
20
19
 
21
20
  class TestCAA < Minitest::Test
22
21
 
data/test/tc_dns.rb CHANGED
@@ -247,11 +247,16 @@ class TestDNS < Minitest::Test
247
247
  assert_equal(a[0].name.to_s, 'a.t.net-dns.org',"Correct name (with persistent socket and #{method})")
248
248
  # assert_equal(a[0].name.to_s, 'a.t.dnsruby.validation-test-servers.nominet.org.uk',"Correct name (with persistent socket and #{method})")
249
249
  end
250
+ end
250
251
 
251
252
  def test_port
252
253
  d = DNS.new({:port => 5353})
253
- assert_true(d.to_s.include?"5353")
254
+ assert(d.to_s.include?"5353")
254
255
  end
255
256
 
256
- end
257
+ def test_port_nil
258
+ d = DNS.new({:port => nil})
259
+ assert(d.to_s.include? Dnsruby::Config::DEFAULT_PORT.to_s)
260
+ end
261
+
257
262
  end
data/test/tc_dnskey.rb CHANGED
@@ -85,4 +85,33 @@ class DnskeyTest < Minitest::Test
85
85
  dnskey.protocol=3
86
86
 
87
87
  end
88
+
89
+ def test_ecdsa_integrity
90
+ ecdsa_256_pub = 'example.com. 3600 IN DNSKEY 256 3 13 ( oJMRESz5E4gYzS/q6XD' +
91
+ 'rvU1qMPYIjCWzJaOau8XNEZeqCYKD5ar0IRd8KqXXFJkqmVfRvMGPmM1x8fGAa2XhSA== )'
92
+
93
+ dnskey = Dnsruby::RR.create(ecdsa_256_pub)
94
+ assert_equal(3, dnskey.protocol)
95
+ assert_equal(256, dnskey.flags)
96
+ assert_equal(Dnsruby::Algorithms::ECDSAP256SHA256, dnskey.algorithm)
97
+ assert_equal(Dnsruby::RR::DNSKEY::ZONE_KEY, dnskey.flags & Dnsruby::RR::DNSKEY::ZONE_KEY)
98
+ assert_equal(0, dnskey.flags & Dnsruby::RR::DNSKEY::SEP_KEY)
99
+
100
+ dnskey2 = Dnsruby::RR.create(dnskey.to_s)
101
+ assert(dnskey2.to_s == dnskey.to_s, "#{dnskey} not equal to \n#{dnskey2}")
102
+
103
+ ecdsa_384_pub = 'example.com. 3600 IN DNSKEY 256 3 14 ( Bl2HDw98sGin4lNlx7n' +
104
+ 'QX3w98jx6UhAgC73Jq+6LFlD12gnVTMHecM8Z GoTFSh+mV+qEPFZ5s3NbC4qvwUW0kkPb+0ip' +
105
+ 'CuLRwZYhYKk7D+RDb+fX XozI9hhZrsXBcEhss )'
106
+
107
+ dnskey = Dnsruby::RR.create(ecdsa_384_pub)
108
+ assert_equal(3, dnskey.protocol)
109
+ assert_equal(256, dnskey.flags)
110
+ assert_equal(Dnsruby::Algorithms::ECDSAP384SHA384, dnskey.algorithm)
111
+ assert_equal(Dnsruby::RR::DNSKEY::ZONE_KEY, dnskey.flags & Dnsruby::RR::DNSKEY::ZONE_KEY)
112
+ assert_equal(0, dnskey.flags & Dnsruby::RR::DNSKEY::SEP_KEY)
113
+
114
+ dnskey2 = Dnsruby::RR.create(dnskey.to_s)
115
+ assert(dnskey2.to_s == dnskey.to_s, "#{dnskey} not equal to \n#{dnskey2}")
116
+ end
88
117
  end
@@ -0,0 +1,31 @@
1
+ require_relative 'spec_helper'
2
+
3
+ require 'socket'
4
+
5
+ # @TODO@ We also need a test server so we can control behaviour of server to test
6
+ # different aspects of retry strategy.
7
+ # Of course, with Ruby's limit of 256 open sockets per process, we'd need to run
8
+ # the server in a different Ruby process.
9
+
10
+ class TestEncoding < Minitest::Test
11
+
12
+ include Dnsruby
13
+
14
+ Thread::abort_on_exception = true
15
+
16
+ Dnsruby::TheLog.level = Logger::DEBUG
17
+
18
+
19
+ def test_cdnskey
20
+ rrString = "tjeb.nl.\t3600\tIN\tCDNSKEY\t256 3 RSASHA1-NSEC3-SHA1 ( AwEAAcglEOS7bECRK5fqTuGTMJycmDhTzmUu/EQbAhKJOYJxDb5SG/RYqsJgzG7wgtGy0W1aP7I4k6SPtHmwcqjLaZLVUwRNWCGr2adjb9JTFyBR7F99Ngi11lEGM6Uiw/eDRk66lhoSGzohjj/rmhRTV6gN2+0ADPnafv3MBkPgryA3 ) ; key_tag=53177"
21
+ rr = RR.create(rrString)
22
+ puts rr
23
+ puts rrString
24
+ assert(rrString.to_s == rr.to_s)
25
+ m = Dnsruby::Message.new
26
+ m.add_additional(rr)
27
+ m2 = Message.decode(m.encode)
28
+ rr2 = m2.additional()[0]
29
+ assert(rr.to_s == rr2.to_s)
30
+ end
31
+ end
data/test/tc_hs.rb CHANGED
@@ -12,11 +12,12 @@ class TestDNS < Minitest::Test
12
12
  # the response returns with an rcode of NOTIMP and a Dnsruby::NotImp error.
13
13
  def test_hs_class_returns_notimp_code_and_error
14
14
  resolver_host = 'a.gtld-servers.net'
15
- resolver = Resolver.new(resolver_host)
16
- message = Message.new('test.com', 'A', 'HS')
15
+ resolver = Dnsruby::Resolver.new(resolver_host)
16
+ resolver.query_timeout = 20
17
+ message = Dnsruby::Message.new('test.com', 'A', 'HS')
17
18
  response, error = resolver.send_plain_message(message)
18
19
 
19
- assert_equal(RCode::NOTIMP, response.rcode)
20
+ assert_equal(Dnsruby::RCode::NOTIMP, response.rcode)
20
21
  assert_equal(Dnsruby::NotImp, error.class)
21
22
  end
22
23
 
@@ -0,0 +1,46 @@
1
+ require_relative 'spec_helper'
2
+
3
+ include Dnsruby
4
+ class TestPacket < Minitest::Test
5
+ def test_labels
6
+ wirePacket = %w{0
7
+ 68 5b 35 91 3a f7 00 0f 94 22 d9 51 08 00 45 00 05 12 71 65 40 00 3d 06 46 1f 2e e3 90 33
8
+ c0 a8 01 a3 00 35 e3 cf 94 d5 49 0a 88 da e7 1e 80 18 00 1d 6f 52 00 00 01 01 08 0a 8e 3a
9
+ a6 b1 1f 4d ce 28 c5 b1 c0 0c 00 0c 00 01 00 00 0b 49 00 12 0f 69 6d 70 72 6f 76 65 61 6e
10
+ 61 6c 79 73 69 73 c0 65 c0 0c 00 0c 00 01 00 00 0b 49 00 0e 0b 77 69 6e 64 6f 77 73 72 75
11
+ 62 79 d3 12 c0 0c 00 0c 00 01 00 00 0b 49 00 15 12 6d 69 63 72 6f 73 6f 66 74 66 6f 72 65
12
+ 66 72 6f 6e 74 d3 bd c0 0c 00 0c 00 01 00 00 0b 49 00 11 09 6d 69 63 72 6f 73 6f 66 74 02
13
+ 63 6f 02 6d 7a 00 c0 0c 00 0c 00 01 00 00 0b 49 00 12 09 77 69 6e 64 6f 77 73 78 70 03 6f
14
+ 72 67 02 70 65 00 c0 0c 00 0c 00 01 00 00 0b 49 00 16 0f 65 75 67 72 61 6e 74 73 61 64 76
15
+ 69 73 6f 72 03 63 6f 6d ca 49 c0 0c 00 0c 00 01 00 00 0b 49 00 14 11 64 65 66 79 61 6c 6c
16
+ 63 68 61 6c 6c 65 6e 67 65 73 c5 97 c0 0c 00 0c 00 01 00 00 0b 49 00 18 15 63 6f 6e 73 6f
17
+ 6c 69 64 61 74 65 64 6d 65 73 73 65 6e 67 65 72 c0 65 c0 0c 00 0c 00 01 00 00 0b 49 00 19
18
+ 16 72 65 74 61 69 6c 65 78 65 63 75 74 69 76 65 73 65 6d 69 6e 61 72 c0 a7 c0 0c 00 0c 00
19
+ 01 00 00 0b 49 00 0e 0b 63 74 72 6f 70 65 6e 6f 72 6d 65 c0 65 c0 0c 00 0c 00 01 00 00 0b
20
+ 49 00 0e 0b 77 69 6e 64 6f 77 73 32 30 30 30 cc 6f c0 0c 00 0c 00 01 00 00 0b 49 00 1a 17
21
+ 77 69 6e 64 6f 77 73 6d 6f 62 69 6c 65 63 6f 6d 6d 6d 75 6e 69 74 79 c0 41 c0 0c 00 0c 00
22
+ 01 00 00 0b 49 00 11 0e 72 69 73 65 6f 66 70 65 72 61 74 68 69 61 c0 41 c0 0c 00 0c 00 01
23
+ 00 00 0b 49 00 11 0e 72 65 6e 63 6f 6e 74 72 65 73 2d 33 36 30 c0 41 c0 0c 00 0c 00 01 00
24
+ 00 0b 49 00 11 0e 66 75 74 75 72 65 70 6f 73 74 6d 61 69 6c c0 41 c0 0c 00 0c 00 01 00 00
25
+ 0b 49 00 10 0d 72 65 73 70 6f 6e 73 65 70 6f 69 6e 74 cc 4d c0 0c 00 0c 00 01 00 00 0b 49
26
+ 00 10 0d 74 61 76 75 74 61 74 72 6f 6e 63 68 65 c0 a7 c0 0c 00 0c 00 01 00 00 0b 49 00 09
27
+ 06 66 6c 65 78 67 6f df 34 c0 0c 00 0c 00 01 00 00 0b 49 00 0e 09 77 69 6e 64 6f 77 73 78
28
+ 70 02 73 68 00 c0 0c 00 0c 00 01 00 00 0b 49 00 16 13 73 6d 61 72 74 70 68 6f 6e 65 63 6f
29
+ 6d 6d 75 6e 69 74 79 c0 a7 c0 0c 00 0c 00 01 00 00 0b 49 00 12 0f 63 65 6e 74 72 65 64 65
30
+ 73 75 73 61 67 65 73 c0 65 c0 0c 00 0c 00 01 00 00 0b 49 00 0c 09 77 69 6e 64 6f 77 73 6e
31
+ 74 fc 07 c0 0c 00 0c 00 01 00 00 0b 49 00 19 16 6c 65 73 2d 64 6f 69 67 74 73 2d 64 61 6e
32
+ 73 2d 6c 65 2d 6e 65 7a c0 a7 c0 0c 00 0c 00 01 00 00 0b 49 00 13 10 74 65 63 68 6e 65 74
33
+ 63 68 61 6c 6c 65 6e 67 65 c0 65 c0 0c 00 0c 00 01 00 00 0b 49 00 15 12 6d 69 63 72 6f 73 6f 66 74 66 6f 72 65 66 72 6f 6e 74 c0 41 c0 0c 00 0c 00 01 00 00 0b 49 00 10 0d 6c 65 73 62 6f 6e 73 6f 75 74 69 6c 73 c0 41 c0 0c 00 0c 00 01 00 00 0b 49 00 0d 0a 77 69 6e 74 65 72 6e 61 6c 73 c3 d6 c0 0c 00 0c 00 01 00 00 0b 49 00 23 0e 64 65 73 69 67 6e 65 64 66 6f 72 62 69 67 02 64 65 0e 64 65 73 69 67 6e 65 64 66 6f 72 62 69 67 c2 b2 c0 0c 00 0c 00 01 00 00 0b 49 00 13 10 77 69 6e 64 6f 77 73 76 69 73 74 61 62 6c 6f 67 c9 42 c0 0c 00 0c 00 01 00 00 0b 49 00 12 09 77 69 6e 64 6f 77 73 6e 74 03 6f 72 67 02 66 6a 00 c0 0c 00 0c 00 01 00 00 0b 49 00 0c 09 77 69 6e 64 6f 77 73 6e 74 c1 b6 c0 0c 00 0c 00 01 00 00 0b 49 00 0f 0c 6f 66 66 69 63 65 73 79 73 74 65 6d c2 18 c0 0c 00 0c 00 01 00 00 0b 49 00 0f 0c 74 72 65 79 72 65 73 65 61 72 63 68 c0 41 c0 0c 00 0c 00 01 00 00 0b 49 00 09 06 63 70 61 6e 64 6c c0 65 c0 0c 00 0c 00 01 00 00 0b 49 00 16 13 6f 66 66 72 65 2d 65 62 6c 6f 75 69 73 73 61 6e 74 65 73 c0 41 c0 0c 00 0c 00 01 00 00 0b 49 00 0d 0a 63 6f 68 6f 77 69 6e 65 72 79 c0 41 c0 0c 00 0c 00 01 00 00 0b 49 00 13 10 74 6f 64 6f 73 6c 6f 65 6e 74 69 65 6e 64 65 6e c0 41 c0 0c 00 0c 00 01 00 00 0b 49 00 0f 09 77 69 6e 64 6f 77 73 78 70 02 63 6f f1 03 c0 0c 00 0c 00 01 00 00 0b 49 00 0b 08 74 65 63 68 65 64 30 36 c0 65 c0 0c 00 0c 00 01 00 00 0b 49 00 09 06 66 6c 65 78 67 6f dd 7f c0 0c 00 0c 00 01 00 00 0b 49 00 0c 09 66 6f 72 65 66 72 6f 6e 74 cb 21 c0 0c 00 0c 00 01 00 00 0b 49 00 14 11 64 65 66 79 61 6c 6c 63 68 61 6c 6c 65 6e 67 65 73 cb 44 00 00 29 05 78 00 00 80 00 00 00
34
+ }
35
+ wirePacket.map!{|e| e.hex}
36
+ packetdata = wirePacket.pack('c*')
37
+
38
+ packet = Message.decode(packetdata)
39
+ assert(packet, 'new data returned something'); #28
40
+ end
41
+
42
+ def test_live
43
+ resolver = Dnsruby::Resolver.new
44
+ query = resolver.query('207.46.197.32', 'PTR', 'IN')
45
+ end
46
+ end
data/test/tc_name.rb CHANGED
@@ -80,4 +80,23 @@ class TestName < Minitest::Test
80
80
  n2 = Name.create("nall.all.")
81
81
  assert(n1 == n2, n1.to_s)
82
82
  end
83
+
84
+ def test_punycode
85
+ [
86
+ [
87
+ "møllerriis.com",
88
+ "xn--mllerriis-l8a.com"
89
+ ],
90
+ [
91
+ "フガフガ。hogehoge.エグザンプル.JP",
92
+ "xn--mcka5jb.hogehoge.xn--ickqs6k2dyb.jp"
93
+ ],
94
+ [
95
+ "フガ#フガ。hogehoge.エグザンプル.JP",
96
+ "xn--#-yeub5nc.hogehoge.xn--ickqs6k2dyb.jp"
97
+ ]
98
+ ].each do |tc|
99
+ assert_equal(Dnsruby::Name.create(tc[0]).to_s, tc[1])
100
+ end
101
+ end
83
102
  end
data/test/tc_resolv.rb CHANGED
@@ -20,6 +20,7 @@ require_relative '../lib/dnsruby/resolv'
20
20
  class TestResolv < Minitest::Test
21
21
 
22
22
  RELATIVE_NAME = 'google-public-dns-a.google.com'
23
+ SHORT_ABSOLUTE_NAME = 'dns.google.'
23
24
  ABSOLUTE_NAME = RELATIVE_NAME + '.'
24
25
  IPV4_ADDR = '8.8.8.8'
25
26
  IPV6_ADDR = '2001:4860:4860::8888'
@@ -53,16 +54,16 @@ class TestResolv < Minitest::Test
53
54
 
54
55
  def test_resolv_address_to_name
55
56
 
56
- assert_equal(RELATIVE_NAME, Dnsruby::Resolv.getname(IPV4_ADDR).to_s)
57
+ assert_equal(SHORT_ABSOLUTE_NAME, Dnsruby::Resolv.getname(IPV4_ADDR).to_s(true))
57
58
 
58
59
  assert_raises(Dnsruby::ResolvError) do
59
- Dnsruby::Resolv.getname(RELATIVE_NAME)
60
+ Dnsruby::Resolv.getname(SHORT_ABSOLUTE_NAME)
60
61
  end
61
62
 
62
63
  names = Dnsruby::Resolv.getnames(IPV4_ADDR)
63
64
  assert_equal(1, names.size)
64
- assert_equal(RELATIVE_NAME, names.first.to_s)
65
- Dnsruby::Resolv.each_name(IPV4_ADDR) { |name| assert_equal(RELATIVE_NAME, name.to_s)}
65
+ assert_equal(SHORT_ABSOLUTE_NAME, names.first.to_s(true))
66
+ Dnsruby::Resolv.each_name(IPV4_ADDR) { |name| assert_equal(SHORT_ABSOLUTE_NAME, name.to_s(true))}
66
67
  end
67
68
 
68
69
  def test_resolv_address_to_address
data/test/tc_resolver.rb CHANGED
@@ -73,8 +73,8 @@ class TestResolver < Minitest::Test
73
73
  end
74
74
 
75
75
  def test_send_plain_message
76
- resolver = Resolver.new
77
- response, error = resolver.send_plain_message(Message.new("cnn.com"))
76
+ resolver = Resolver.new('1.1.1.1')
77
+ response, error = resolver.send_plain_message(Message.new("example.com", Types.A))
78
78
  assert_nil_error(error)
79
79
  assert_valid_response(response)
80
80
 
@@ -132,13 +132,13 @@ class TestResolver < Minitest::Test
132
132
  r = Resolver.new
133
133
  q=Queue.new
134
134
  r.send_async(m,q,q)
135
- id,ret, error=q.pop
135
+ _id, ret, _error=q.pop
136
136
  assert(ret.kind_of?(Message))
137
137
  no_pointer=true
138
138
  ret.each_answer do |answer|
139
139
  if (answer.type==Types.PTR)
140
140
  no_pointer=false
141
- assert(answer.domainname.to_s=~/google-public-dns/)
141
+ assert(answer.domainname.to_s=~/google/)
142
142
  end
143
143
  end
144
144
  assert(!no_pointer)
@@ -171,7 +171,7 @@ class TestResolver < Minitest::Test
171
171
  # test timeout behaviour for different retry, retrans, total timeout etc.
172
172
  # Problem here is that many sockets will be created for queries which time out.
173
173
  # Run a query which will not respond, and check that the timeout works
174
- if (!RUBY_PLATFORM=~/darwin/)
174
+ if (RUBY_PLATFORM !~ /darwin/)
175
175
  start=stop=0
176
176
  retry_times = 3
177
177
  retry_delay=1
@@ -185,14 +185,14 @@ class TestResolver < Minitest::Test
185
185
  res.retry_times=retry_times
186
186
  res.retry_delay=retry_delay
187
187
  start=Time.now
188
- m = res.send_message(Message.new("a.t.dnsruby.validation-test-servers.nominet.org.uk", Types.A))
188
+ res.send_message(Message.new("a.t.dnsruby.validation-test-servers.nominet.org.uk", Types.A))
189
189
  fail
190
190
  rescue ResolvTimeout
191
191
  stop=Time.now
192
192
  time = stop-start
193
193
  assert(time <= expected * 1.3 && time >= expected * 0.9, "Wrong time take, expected #{expected}, took #{time}")
194
194
  end
195
- end
195
+ end
196
196
  end
197
197
 
198
198
  def test_packet_timeout
@@ -209,7 +209,7 @@ class TestResolver < Minitest::Test
209
209
  # Work out what time should be, then time it to check
210
210
  expected = query_timeout
211
211
  start=Time.now
212
- m = res.send_message(Message.new("a.t.dnsruby.validation-test-servers.nominet.org.uk", Types.A))
212
+ res.send_message(Message.new("a.t.dnsruby.validation-test-servers.nominet.org.uk", Types.A))
213
213
  fail
214
214
  rescue Dnsruby::ResolvTimeout
215
215
  stop=Time.now
@@ -227,7 +227,7 @@ class TestResolver < Minitest::Test
227
227
  res.query_timeout=expected
228
228
  q = Queue.new
229
229
  start = Time.now
230
- m = res.send_async(Message.new("a.t.dnsruby.validation-test-servers.nominet.org.uk", Types.A), q, q)
230
+ res.send_async(Message.new("a.t.dnsruby.validation-test-servers.nominet.org.uk", Types.A), q, q)
231
231
  id,ret,err = q.pop
232
232
  stop = Time.now
233
233
  assert(id=q)
@@ -382,19 +382,19 @@ class TestRawQuery < Minitest::Test
382
382
  resolver.query("google.com", "MX")
383
383
  begin
384
384
  resolver.query("googlöe.com", "MX")
385
- rescue Dnsruby::ResolvError => e
385
+ rescue Dnsruby::ResolvError
386
386
  # fine
387
387
  end
388
388
  resolver.query("google.com", "MX")
389
389
  resolver.query("google.com", "MX")
390
390
  begin
391
391
  resolver.query("googlöe.com", "MX")
392
- rescue Dnsruby::ResolvError => e
392
+ rescue Dnsruby::ResolvError
393
393
  # fine
394
394
  end
395
395
  begin
396
396
  resolver.query("googlöe.com", "MX")
397
- rescue Dnsruby::ResolvError => e
397
+ rescue Dnsruby::ResolvError
398
398
  # fine
399
399
  end
400
400
  # Dnsruby::Cache.delete("googlöe.com", "MX")
data/test/tc_rr-opt.rb CHANGED
@@ -28,26 +28,29 @@ class TestRrOpt < Minitest::Test
28
28
  # This works only with send_plain_message, not send_message, query, etc.
29
29
  def test_plain_respects_bufsize
30
30
 
31
- resolver = Resolver.new('a.gtld-servers.net')
31
+ resolver = Resolver.new('a.gtld-servers.net')
32
+ resolver.query_timeout=20
32
33
 
33
34
  run_test = ->(bufsize) do
34
35
 
36
+
35
37
  create_test_query = ->(bufsize) do
36
- message = Message.new('com', Types.ANY, Classes.IN)
38
+ message = Message.new('com', Types.RRSIG, Classes.IN)
37
39
  message.add_additional(RR::OPT.new(bufsize))
38
40
  message
39
41
  end
40
42
 
41
43
  query = create_test_query.(bufsize)
42
44
  response, _error = resolver.send_plain_message(query)
43
- # puts "\nBufsize is #{bufsize}, binary message size is #{response.encode.size}"
45
+ if (_error != nil) then
46
+ print "Error at #{bufsize} : #{_error}"
47
+ end
48
+ # puts "\nBufsize is #{bufsize}, binary message size is #{response.encode.size}"
44
49
  assert_equal(true, response.header.tc)
45
50
  assert(response.encode.size <= bufsize)
46
51
  end
47
52
 
48
- run_test.(512)
49
53
  run_test.(612)
50
- run_test.(4096)
51
54
  end
52
55
 
53
56
 
data/test/tc_rr-txt.rb CHANGED
@@ -143,7 +143,13 @@ class TestRrTest < Minitest::Test
143
143
 
144
144
  r1 = RR.create("auto._domainkey.cacert.org. 43200 IN TXT \"v=DKIM1\;g=*\;k=rsa\;p=MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDDNFxiNr+NHJwih3OPhGr4iwLE+BBDu72YrMSzUnU1FF50CW7iOtuhg796UZ6xrZ5VuhAix6YmmzcvF2UxYzoD/XpfZ4MzBu0ND4/nkt9/YOTyIBzwQqn9uMNve0Y76Zsel89dIJtOI+y+lfnFExV0jKwe53gzmxMVpMSSCcZPGwIDAQAB\" ; ----- DKIM auto for cacert.org")
145
145
  r2 = RR.create("auto._domainkey.cacert.org. 43200 IN TXT \"v=DKIM1;g=*;k=rsa;p=MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDDNFxiNr+NHJwih3OPhGr4iwLE+BBDu72YrMSzUnU1FF50CW7iOtuhg796UZ6xrZ5VuhAix6YmmzcvF2UxYzoD/XpfZ4MzBu0ND4/nkt9/YOTyIBzwQqn9uMNve0Y76Zsel89dIJtOI+y+lfnFExV0jKwe53gzmxMVpMSSCcZPGwIDAQAB\"")
146
- assert(r1.to_s == r2.to_s)
146
+ assert_equal(r1.to_s, r2.to_s)
147
+ end
148
+
149
+ def test_quote_and_unquoted
150
+ t = Dnsruby::RR::TXT.parse '"a" b'
151
+ assert_equal("a", t[0])
152
+ assert_equal("b", t[1])
147
153
  end
148
154
 
149
155
  end
data/test/tc_soak.rb CHANGED
@@ -19,61 +19,21 @@ require_relative 'spec_helper'
19
19
  # require_relative 'tc_single_resolver'
20
20
  require_relative 'tc_soak_base'
21
21
  require_relative 'test_dnsserver'
22
+ require_relative 'localdns'
22
23
 
23
24
 
24
25
  # This class tries to soak test the Dnsruby library.
25
26
  # It can't do this very well, owing to the small number of sockets allowed to be open simultaneously.
26
27
  # @TODO@ Future versions of dnsruby will allow random streaming over a fixed number of (cycling) random sockets,
27
28
  # so this test can be beefed up considerably at that point.
28
- # @todo@ A test DNS server running on localhost is really needed here
29
-
30
- class MyServer < RubyDNS::Server
31
-
32
- include Dnsruby
33
-
34
- IP = "127.0.0.1"
35
- PORT = 53927
36
-
37
- @@stats = Stats.new
38
-
39
- def self.stats
40
- @@stats
41
- end
42
-
43
- def process(name, resource_class, transaction)
44
- transaction.respond!("93.184.216.34", { resource_class: Resolv::DNS::Resource::IN::A })
45
- Celluloid.logger.debug "got message"
46
- end
47
- end
48
-
49
- class PipeliningServer < MyServer
50
- def run
51
- fire(:setup)
52
-
53
- link NioTcpPipeliningHandler.new(self, IP, PORT, 5) #5 max request
54
- link RubyDNS::UDPHandler.new(self, IP, PORT)
55
-
56
- fire(:start)
57
- end
58
- end
59
29
 
60
30
  class TestSingleResolverSoak < Minitest::Test
61
31
 
62
- IP = MyServer::IP
63
- PORT = MyServer::PORT
32
+ IP = SimpleTCPPipeliningUDPServer::IP
33
+ PORT = SimpleTCPPipeliningUDPServer::PORT
64
34
 
65
35
  def initialize(arg)
66
36
  super(arg)
67
- self.class.init
68
- end
69
-
70
- def self.init
71
- unless @initialized
72
- Celluloid.boot
73
- # By default, Celluloid logs output to console. Use Dnsruby.log instead.
74
- Celluloid.logger = Dnsruby.log
75
- @initialized = true
76
- end
77
37
  end
78
38
 
79
39
  def teardown
@@ -83,12 +43,15 @@ class TestSingleResolverSoak < Minitest::Test
83
43
  SINGLE_RESOLVER_QUERY_TIMES = 63
84
44
 
85
45
  def setup
86
- # Instantiate a new server
87
- # For each query respond with 93.184.216.34
88
-
89
- @@supervisor ||= RubyDNS::run_server(asynchronous: true,
90
- server_class: PipeliningServer)
46
+ # Instantiate a local dns server
47
+ pipe = IO.popen("./test/localdns.rb")
48
+ @dnspid = pipe.pid
49
+ sleep 1
50
+ end
91
51
 
52
+ def teardown
53
+ Process.kill("KILL", @dnspid)
54
+ sleep 1
92
55
  end
93
56
 
94
57
  def test_many_asynchronous_queries_one_single_resolver
@@ -119,14 +82,14 @@ class TestSingleResolverSoak < Minitest::Test
119
82
  q = Queue.new
120
83
  timeout_count = 0
121
84
  resolvers = Array.new(num_resolvers) do
122
- SingleResolver.new(server: IP,
123
- port: PORT,
124
- do_caching: false,
125
- do_validation: false,
126
- tcp_pipelining: pipelining,
127
- packet_timeout: 10,
128
- tcp_pipelining_max_queries: 5,
129
- use_tcp: tcp)
85
+ Dnsruby::SingleResolver.new(server: IP,
86
+ port: PORT,
87
+ do_caching: false,
88
+ do_validation: false,
89
+ tcp_pipelining: pipelining,
90
+ packet_timeout: 10,
91
+ tcp_pipelining_max_queries: 5,
92
+ use_tcp: tcp)
130
93
  end
131
94
  start = Time.now
132
95
 
@@ -134,7 +97,7 @@ class TestSingleResolverSoak < Minitest::Test
134
97
  # this test while we're not using single sockets.
135
98
  # We run four queries per iteration, so we're limited to 64 runs.
136
99
  messages = TestSoakBase::Rrs.map do |data|
137
- message = Message.new(data[:name], data[:type])
100
+ message = Dnsruby::Message.new(data[:name], data[:type])
138
101
  message.do_validation = false
139
102
  message.do_caching = false
140
103
  message
@@ -145,9 +108,9 @@ class TestSingleResolverSoak < Minitest::Test
145
108
  receive_thread = Thread.new do
146
109
  query_count.times do
147
110
  _id, ret, error = q.pop
148
- if error.is_a?(ResolvTimeout)
111
+ if error.is_a?(Dnsruby::ResolvTimeout)
149
112
  timeout_count+=1
150
- elsif ret.class != Message
113
+ elsif ret.class != Dnsruby::Message
151
114
  p "ERROR RETURNED : #{error}"
152
115
  end
153
116
  end
@@ -197,7 +160,7 @@ class TestSingleResolverSoak < Minitest::Test
197
160
  packet=nil
198
161
  begin
199
162
  packet = res.query(data[:name], data[:type])
200
- rescue ResolvTimeout
163
+ rescue Dnsruby::ResolvTimeout
201
164
  mutex.synchronize { timeout_count += 1 }
202
165
  next
203
166
  end
@@ -252,19 +215,19 @@ class TestSingleResolverSoak < Minitest::Test
252
215
  end
253
216
  q = Queue.new
254
217
 
255
- message = Message.new(data[:name], data[:type])
218
+ message = Dnsruby::Message.new(data[:name], data[:type])
256
219
  message.do_validation = false
257
220
  message.do_caching = false
258
221
 
259
222
  res.send_async(message, q, [i,j])
260
223
 
261
224
  id, packet, error = q.pop
262
- if (error.class == ResolvTimeout)
225
+ if (error.class == Dnsruby::ResolvTimeout)
263
226
  mutex.synchronize {
264
227
  timeout_count+=1
265
228
  }
266
229
  next
267
- elsif (packet.class!=Message)
230
+ elsif (packet.class!=Dnsruby::Message)
268
231
  puts "ERROR! #{error}"
269
232
  end
270
233
 
@@ -282,13 +245,12 @@ class TestSingleResolverSoak < Minitest::Test
282
245
  assert(timeout_count < query_count * 0.1, "#{timeout_count} of #{query_count} timed out!")
283
246
  end
284
247
 
285
-
286
248
  def create_default_single_resolver
287
- SingleResolver.new(server: IP,
288
- port: PORT,
289
- do_caching: false,
290
- do_validation: false,
291
- packet_timeout: 10)
249
+ Dnsruby::SingleResolver.new(server: IP,
250
+ port: PORT,
251
+ do_caching: false,
252
+ do_validation: false,
253
+ packet_timeout: 10)
292
254
 
293
255
  end
294
256
  end