dnsruby 1.55 → 1.56.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +96 -0
- data/Rakefile +30 -29
- data/demo/axfr.rb +93 -93
- data/demo/check_soa.rb +99 -99
- data/demo/check_zone.rb +59 -59
- data/demo/digdlv.rb +43 -43
- data/demo/digroot.rb +34 -34
- data/demo/example_recurse.rb +14 -14
- data/demo/mresolv.rb +30 -30
- data/demo/mx.rb +31 -31
- data/demo/rubydig.rb +37 -37
- data/demo/to_resolve.txt +3088 -3088
- data/demo/trace_dns.rb +46 -46
- data/lib/dnsruby.rb +161 -526
- data/lib/dnsruby/DNS.rb +305 -0
- data/lib/{Dnsruby/Cache.rb → dnsruby/cache.rb} +152 -152
- data/lib/{Dnsruby → dnsruby}/code_mapper.rb +48 -52
- data/lib/dnsruby/code_mappers.rb +295 -0
- data/lib/{Dnsruby/Config.rb → dnsruby/config.rb} +454 -454
- data/lib/{Dnsruby → dnsruby}/dnssec.rb +91 -91
- data/lib/{Dnsruby/Hosts.rb → dnsruby/hosts.rb} +125 -125
- data/lib/{Dnsruby → dnsruby}/ipv4.rb +26 -26
- data/lib/{Dnsruby → dnsruby}/ipv6.rb +42 -42
- data/lib/{Dnsruby → dnsruby}/key_cache.rb +29 -29
- data/lib/dnsruby/message/decoder.rb +164 -0
- data/lib/dnsruby/message/encoder.rb +75 -0
- data/lib/dnsruby/message/header.rb +249 -0
- data/lib/dnsruby/message/message.rb +629 -0
- data/lib/dnsruby/message/question.rb +86 -0
- data/lib/dnsruby/message/section.rb +96 -0
- data/lib/{Dnsruby → dnsruby}/name.rb +141 -141
- data/lib/dnsruby/packet_sender.rb +661 -0
- data/lib/{Dnsruby/Recursor.rb → dnsruby/recursor.rb} +235 -233
- data/lib/dnsruby/resolv.rb +113 -0
- data/lib/dnsruby/resolver.rb +1192 -0
- data/lib/dnsruby/resource/A.rb +56 -0
- data/lib/dnsruby/resource/AAAA.rb +54 -0
- data/lib/{Dnsruby → dnsruby}/resource/AFSDB.rb +68 -68
- data/lib/{Dnsruby → dnsruby}/resource/CERT.rb +105 -105
- data/lib/{Dnsruby → dnsruby}/resource/DHCID.rb +54 -54
- data/lib/dnsruby/resource/DLV.rb +27 -0
- data/lib/{Dnsruby → dnsruby}/resource/DNSKEY.rb +372 -372
- data/lib/{Dnsruby → dnsruby}/resource/DS.rb +255 -255
- data/lib/{Dnsruby → dnsruby}/resource/HINFO.rb +71 -71
- data/lib/{Dnsruby → dnsruby}/resource/HIP.rb +29 -29
- data/lib/{Dnsruby → dnsruby}/resource/IN.rb +30 -30
- data/lib/{Dnsruby → dnsruby}/resource/IPSECKEY.rb +31 -31
- data/lib/{Dnsruby → dnsruby}/resource/ISDN.rb +62 -62
- data/lib/{Dnsruby → dnsruby}/resource/KX.rb +65 -65
- data/lib/{Dnsruby → dnsruby}/resource/LOC.rb +263 -263
- data/lib/{Dnsruby → dnsruby}/resource/MINFO.rb +69 -69
- data/lib/{Dnsruby → dnsruby}/resource/MX.rb +65 -65
- data/lib/{Dnsruby → dnsruby}/resource/NAPTR.rb +98 -98
- data/lib/{Dnsruby → dnsruby}/resource/NSAP.rb +171 -171
- data/lib/dnsruby/resource/NSEC.rb +275 -0
- data/lib/dnsruby/resource/NSEC3.rb +332 -0
- data/lib/dnsruby/resource/NSEC3PARAM.rb +135 -0
- data/lib/dnsruby/resource/OPT.rb +272 -0
- data/lib/{Dnsruby → dnsruby}/resource/PX.rb +70 -70
- data/lib/{Dnsruby → dnsruby}/resource/RP.rb +75 -75
- data/lib/dnsruby/resource/RR.rb +421 -0
- data/lib/dnsruby/resource/RRSIG.rb +275 -0
- data/lib/dnsruby/resource/RRSet.rb +190 -0
- data/lib/{Dnsruby → dnsruby}/resource/RT.rb +67 -67
- data/lib/{Dnsruby → dnsruby}/resource/SOA.rb +94 -94
- data/lib/dnsruby/resource/SPF.rb +29 -0
- data/lib/dnsruby/resource/SRV.rb +112 -0
- data/lib/{Dnsruby → dnsruby}/resource/SSHFP.rb +14 -14
- data/lib/dnsruby/resource/TKEY.rb +163 -0
- data/lib/dnsruby/resource/TSIG.rb +593 -0
- data/lib/{Dnsruby → dnsruby}/resource/TXT.rb +191 -191
- data/lib/dnsruby/resource/X25.rb +55 -0
- data/lib/{Dnsruby → dnsruby}/resource/domain_name.rb +25 -25
- data/lib/{Dnsruby → dnsruby}/resource/generic.rb +80 -80
- data/lib/dnsruby/resource/resource.rb +25 -0
- data/lib/{Dnsruby → dnsruby}/select_thread.rb +148 -148
- data/lib/{Dnsruby/SingleResolver.rb → dnsruby/single_resolver.rb} +60 -60
- data/lib/{Dnsruby → dnsruby}/single_verifier.rb +344 -344
- data/lib/dnsruby/the_log.rb +44 -0
- data/lib/dnsruby/update.rb +278 -0
- data/lib/dnsruby/validator_thread.rb +124 -0
- data/lib/dnsruby/version.rb +3 -0
- data/lib/{Dnsruby → dnsruby}/zone_reader.rb +93 -93
- data/lib/{Dnsruby → dnsruby}/zone_transfer.rb +377 -377
- data/test/spec_helper.rb +16 -0
- data/test/tc_axfr.rb +31 -34
- data/test/tc_cache.rb +32 -32
- data/test/tc_dlv.rb +28 -28
- data/test/tc_dns.rb +73 -76
- data/test/tc_dnskey.rb +31 -32
- data/test/tc_dnsruby.rb +50 -44
- data/test/tc_ds.rb +36 -36
- data/test/tc_escapedchars.rb +252 -255
- data/test/tc_hash.rb +17 -21
- data/test/tc_header.rb +48 -57
- data/test/tc_hip.rb +19 -22
- data/test/tc_ipseckey.rb +18 -21
- data/test/tc_keith.rb +300 -0
- data/test/tc_message.rb +87 -0
- data/test/tc_misc.rb +83 -87
- data/test/tc_name.rb +81 -84
- data/test/tc_naptr.rb +18 -21
- data/test/tc_nsec.rb +55 -55
- data/test/tc_nsec3.rb +23 -24
- data/test/tc_nsec3param.rb +20 -21
- data/test/tc_packet.rb +90 -93
- data/test/tc_packet_unique_push.rb +48 -51
- data/test/tc_question.rb +30 -33
- data/test/tc_queue.rb +16 -17
- data/test/tc_recur.rb +16 -17
- data/test/tc_res_config.rb +38 -41
- data/test/tc_res_env.rb +29 -32
- data/test/tc_res_file.rb +26 -29
- data/test/tc_res_opt.rb +62 -65
- data/test/tc_resolver.rb +287 -242
- data/test/tc_rr-opt.rb +70 -63
- data/test/tc_rr-txt.rb +68 -71
- data/test/tc_rr-unknown.rb +45 -48
- data/test/tc_rr.rb +76 -70
- data/test/tc_rrset.rb +21 -22
- data/test/tc_rrsig.rb +19 -20
- data/test/tc_single_resolver.rb +294 -297
- data/test/tc_soak.rb +199 -202
- data/test/tc_soak_base.rb +29 -34
- data/test/tc_sshfp.rb +20 -23
- data/test/tc_tcp.rb +32 -35
- data/test/tc_tkey.rb +41 -44
- data/test/tc_tsig.rb +81 -84
- data/test/tc_update.rb +108 -111
- data/test/tc_validator.rb +29 -29
- data/test/tc_verifier.rb +81 -82
- data/test/ts_dnsruby.rb +16 -15
- data/test/ts_offline.rb +62 -63
- data/test/ts_online.rb +115 -115
- metadata +155 -90
- data/README +0 -59
- data/lib/Dnsruby/DNS.rb +0 -305
- data/lib/Dnsruby/PacketSender.rb +0 -656
- data/lib/Dnsruby/Resolver.rb +0 -1189
- data/lib/Dnsruby/TheLog.rb +0 -44
- data/lib/Dnsruby/message.rb +0 -1230
- data/lib/Dnsruby/resource/A.rb +0 -56
- data/lib/Dnsruby/resource/AAAA.rb +0 -54
- data/lib/Dnsruby/resource/DLV.rb +0 -27
- data/lib/Dnsruby/resource/NSEC.rb +0 -298
- data/lib/Dnsruby/resource/NSEC3.rb +0 -340
- data/lib/Dnsruby/resource/NSEC3PARAM.rb +0 -135
- data/lib/Dnsruby/resource/OPT.rb +0 -213
- data/lib/Dnsruby/resource/RRSIG.rb +0 -275
- data/lib/Dnsruby/resource/SPF.rb +0 -29
- data/lib/Dnsruby/resource/SRV.rb +0 -112
- data/lib/Dnsruby/resource/TKEY.rb +0 -163
- data/lib/Dnsruby/resource/TSIG.rb +0 -593
- data/lib/Dnsruby/resource/X25.rb +0 -55
- data/lib/Dnsruby/resource/resource.rb +0 -678
- data/lib/Dnsruby/update.rb +0 -278
- data/lib/Dnsruby/validator_thread.rb +0 -124
data/test/tc_rr-opt.rb
CHANGED
@@ -1,51 +1,58 @@
|
|
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
|
-
|
18
|
-
|
19
|
-
end
|
20
|
-
require 'test/unit'
|
21
|
-
require 'dnsruby'
|
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
|
+
|
22
19
|
require 'socket'
|
20
|
+
|
23
21
|
include Dnsruby
|
24
|
-
class TestRrOpt < Test
|
22
|
+
class TestRrOpt < Minitest::Test
|
25
23
|
def test_rropt
|
26
24
|
size=2048;
|
27
25
|
ednsflags=0x9e22;
|
28
|
-
|
26
|
+
|
29
27
|
optrr = RR::OPT.new(size, ednsflags)
|
30
|
-
|
28
|
+
|
31
29
|
assert(optrr.dnssec_ok,"DO bit set")
|
32
30
|
optrr.dnssec_ok=false
|
33
31
|
assert_equal(optrr.flags,0x1e22,"Clearing do, leaving the other bits ");
|
34
32
|
assert(!optrr.dnssec_ok,"DO bit cleared")
|
35
33
|
optrr.dnssec_ok=true
|
36
34
|
assert_equal(optrr.flags,0x9e22,"Clearing do, leaving the other bits ");
|
37
|
-
|
38
|
-
|
35
|
+
|
39
36
|
assert_equal(optrr.payloadsize,2048,"Size read")
|
40
37
|
assert_equal(optrr.payloadsize=(1498),1498,"Size set")
|
41
|
-
|
38
|
+
|
39
|
+
optrr.set_client_subnet("0.0.0.0/0")
|
40
|
+
assert_equal(optrr.edns_client_subnet,"0.0.0.0/0/0","Wildcard Address")
|
41
|
+
optrr.set_client_subnet("216.253.14.2/24")
|
42
|
+
assert_equal(optrr.edns_client_subnet,"216.253.14.0/24/0","IPv4 subnet")
|
43
|
+
optrr.set_client_subnet("216.253.14.2/1")
|
44
|
+
assert_equal(optrr.edns_client_subnet,"216.0.0.0/1/0","IPv4 subnet <8 bits")
|
45
|
+
optrr.set_client_subnet("2600:3c00:0:91fd:ab77:157e::/64")
|
46
|
+
assert_equal(optrr.edns_client_subnet,"2600:3c00:0:91fd::/64/0","IPv6 subnet")
|
47
|
+
optrr.set_client_subnet("2600:3c00:0:91fd:ab77:157e::/7")
|
48
|
+
assert_equal(optrr.edns_client_subnet,"2600::/7/0","IPv6 subnet <8 bits")
|
42
49
|
end
|
43
|
-
|
50
|
+
|
44
51
|
def test_resolver_opt_application
|
45
52
|
return if (/java/ =~ RUBY_PLATFORM) # @TODO@ Check if this is fixed with JRuby yet
|
46
|
-
#
|
47
|
-
#
|
48
|
-
#
|
53
|
+
# Set up a server running on localhost. Get the resolver to send a
|
54
|
+
# query to it with the UDP size set to 4096. Make sure that it is received
|
55
|
+
# correctly.
|
49
56
|
Dnsruby::PacketSender.clear_caches
|
50
57
|
socket = UDPSocket.new
|
51
58
|
socket.bind("127.0.0.1", 0)
|
@@ -58,62 +65,62 @@ class TestRrOpt < Test::Unit::TestCase
|
|
58
65
|
q.push(Message.decode(received_query))
|
59
66
|
socket.send(received_query,0)
|
60
67
|
}
|
61
|
-
|
62
|
-
#
|
68
|
+
|
69
|
+
# Now send query
|
63
70
|
res = Resolver.new("127.0.0.1")
|
64
71
|
res.port = port
|
65
72
|
res.udp_size = 4096
|
66
73
|
assert(res.udp_size == 4096)
|
67
74
|
res.query("example.com")
|
68
|
-
|
69
|
-
#
|
75
|
+
|
76
|
+
# Now get received query from the server
|
70
77
|
p = q.pop
|
71
|
-
#
|
78
|
+
# Now check the query was what we expected
|
72
79
|
assert(p.header.arcount == 1)
|
73
80
|
assert(p.additional()[0].type = Types.OPT)
|
74
81
|
assert(p.additional()[0].klass.code == 4096)
|
75
82
|
end
|
76
|
-
|
83
|
+
|
77
84
|
def test_large_packet
|
78
|
-
#
|
79
|
-
#
|
85
|
+
# Query TXT for overflow.dnsruby.validation-test-servers.nominet.org.uk
|
86
|
+
# with a large udp_size
|
80
87
|
res = SingleResolver.new
|
81
88
|
res.udp_size = 4096
|
82
89
|
ret = res.query("overflow.dnsruby.validation-test-servers.nominet.org.uk", Types.TXT)
|
83
90
|
assert(ret.rcode == RCode.NoError)
|
84
91
|
end
|
85
|
-
|
92
|
+
|
86
93
|
def test_decode_opt
|
87
|
-
#
|
94
|
+
# Create an OPT RR
|
88
95
|
size=2048;
|
89
96
|
ednsflags=0x9e22;
|
90
97
|
optrr = RR::OPT.new(size, ednsflags)
|
91
|
-
|
92
|
-
#
|
98
|
+
|
99
|
+
# Add it to a message
|
93
100
|
m = Message.new
|
94
101
|
m.add_additional(optrr)
|
95
|
-
|
96
|
-
#
|
102
|
+
|
103
|
+
# Encode the message
|
97
104
|
data = m.encode
|
98
|
-
|
99
|
-
#
|
105
|
+
|
106
|
+
# Decode it
|
100
107
|
m2 = Message.decode(data)
|
101
|
-
|
102
|
-
#
|
108
|
+
|
109
|
+
# Make sure there is an OPT RR there
|
103
110
|
assert(m2.rcode == RCode.NOERROR )
|
104
111
|
end
|
105
112
|
|
106
113
|
def test_formerr_response
|
107
|
-
#
|
108
|
-
#
|
109
|
-
#
|
110
|
-
#
|
111
|
-
#
|
112
|
-
#
|
114
|
+
# If we get a FORMERR back from the remote resolver, we should retry with no OPT record
|
115
|
+
# So, we need a server which sends back FORMERR for OPT records, and is OK without them.
|
116
|
+
# Then, we need to get a client to send a request to it (by default adorned with EDNS0),
|
117
|
+
# and make sure that the response is returned to the client OK.
|
118
|
+
# We should then check that the server only received one message with EDNS0, and one message
|
119
|
+
# without.
|
113
120
|
return if (/java/ =~ RUBY_PLATFORM) # @TODO@ Check if this is fixed with JRuby yet
|
114
|
-
#
|
115
|
-
#
|
116
|
-
#
|
121
|
+
# Set up a server running on localhost. Get the resolver to send a
|
122
|
+
# query to it with the UDP size set to 4096. Make sure that it is received
|
123
|
+
# correctly.
|
117
124
|
Dnsruby::PacketSender.clear_caches
|
118
125
|
socket = UDPSocket.new
|
119
126
|
socket.bind("127.0.0.1", 0)
|
@@ -126,7 +133,7 @@ class TestRrOpt < Test::Unit::TestCase
|
|
126
133
|
m = Message.decode(received_query)
|
127
134
|
q.push(m)
|
128
135
|
if (m.header.arcount > 0)
|
129
|
-
#
|
136
|
+
# send back FORMERR
|
130
137
|
m.header.rcode = RCode.FORMERR
|
131
138
|
socket.send(m.encode,0,s[1][2], s[1][1])
|
132
139
|
else
|
@@ -135,7 +142,7 @@ class TestRrOpt < Test::Unit::TestCase
|
|
135
142
|
}
|
136
143
|
|
137
144
|
}
|
138
|
-
#
|
145
|
+
# Now send query
|
139
146
|
res = Resolver.new("127.0.0.1")
|
140
147
|
res.port = port
|
141
148
|
res.udp_size = 4096
|
@@ -144,14 +151,14 @@ class TestRrOpt < Test::Unit::TestCase
|
|
144
151
|
assert(ret.header.get_header_rcode == RCode.NOERROR)
|
145
152
|
assert(ret.header.arcount == 0)
|
146
153
|
|
147
|
-
#
|
154
|
+
# Now get received query from the server
|
148
155
|
p = q.pop
|
149
|
-
#
|
156
|
+
# Now check the query was what we expected
|
150
157
|
assert(p.header.arcount == 1)
|
151
158
|
assert(p.additional()[0].type = Types.OPT)
|
152
159
|
assert(p.additional()[0].klass.code == 4096)
|
153
160
|
|
154
|
-
#
|
161
|
+
# Now check the second message
|
155
162
|
assert (!(q.empty?))
|
156
163
|
p2 = q.pop
|
157
164
|
assert (p2)
|
data/test/tc_rr-txt.rb
CHANGED
@@ -1,28 +1,25 @@
|
|
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
|
-
|
18
|
-
|
19
|
-
end
|
20
|
-
require 'test/unit'
|
21
|
-
require 'dnsruby'
|
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
|
+
|
22
19
|
include Dnsruby
|
23
|
-
class TestRrTest < Test
|
24
|
-
#Stimulus, expected response, and test name:
|
25
|
-
|
20
|
+
class TestRrTest < Minitest::Test
|
21
|
+
# Stimulus, expected response, and test name:
|
22
|
+
|
26
23
|
TESTLIST = [
|
27
24
|
{ # 2-5
|
28
25
|
:stim => %<"">,
|
@@ -60,82 +57,82 @@ class TestRrTest < Test::Unit::TestCase
|
|
60
57
|
:char_str_list_r => [ %q|two|, %q|tokens|, ],
|
61
58
|
:descr => 'Two unquoted strings',
|
62
59
|
},
|
63
|
-
#
|
64
|
-
#
|
65
|
-
#
|
66
|
-
#
|
67
|
-
#
|
68
|
-
#
|
69
|
-
#
|
70
|
-
#
|
71
|
-
#
|
72
|
-
#
|
73
|
-
#
|
74
|
-
#
|
75
|
-
#
|
60
|
+
# @TODO@ Why don't escaped quotes work?
|
61
|
+
# { # 22-25
|
62
|
+
# :stim => %<"escaped \" quote">,
|
63
|
+
# :rdatastr => %<"escaped \" quote">,
|
64
|
+
# :char_str_list_r => [ %<escaped " quote>, ],
|
65
|
+
# :descr => 'Quoted, escaped double-quote',
|
66
|
+
# },
|
67
|
+
# { # 30-33
|
68
|
+
# :stim => %<"missing quote>,
|
69
|
+
# :rdatastr => %<>,
|
70
|
+
# :char_str_list_r => [],
|
71
|
+
# :descr => 'Unbalanced quotes work',
|
72
|
+
# }
|
76
73
|
]
|
77
|
-
|
74
|
+
|
78
75
|
def test_RrTest
|
79
|
-
|
80
|
-
#
|
81
|
-
|
82
|
-
|
76
|
+
# ------------------------------------------------------------------------------
|
77
|
+
# Canned data.
|
78
|
+
# ------------------------------------------------------------------------------
|
79
|
+
|
83
80
|
name = 'foo.example.com';
|
84
81
|
klass = 'IN';
|
85
82
|
type = 'TXT';
|
86
83
|
ttl = 43201;
|
87
|
-
|
84
|
+
|
88
85
|
rr_base = [name, ttl, klass, type, " " ].join(' ')
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
#
|
93
|
-
|
94
|
-
|
86
|
+
|
87
|
+
|
88
|
+
# ------------------------------------------------------------------------------
|
89
|
+
# Run the tests
|
90
|
+
# ------------------------------------------------------------------------------
|
91
|
+
|
95
92
|
TESTLIST.each do |test_hr|
|
96
|
-
assert( uut = RR.create(rr_base + test_hr[:stim]),
|
97
|
-
test_hr[:descr] + " -- Stimulus " )
|
98
|
-
|
99
|
-
assert_equal(test_hr[:rdatastr], uut.rdata_to_string(),
|
100
|
-
test_hr[:descr] + " -- Response ( rdatastr ) " )
|
101
|
-
|
102
|
-
list = uut.strings
|
103
|
-
|
93
|
+
assert( uut = RR.create(rr_base + test_hr[:stim]),
|
94
|
+
test_hr[:descr] + " -- Stimulus " )
|
95
|
+
|
96
|
+
assert_equal(test_hr[:rdatastr], uut.rdata_to_string(),
|
97
|
+
test_hr[:descr] + " -- Response ( rdatastr ) " )
|
98
|
+
|
99
|
+
list = uut.strings
|
100
|
+
|
104
101
|
assert_equal(test_hr[:char_str_list_r], list,
|
105
|
-
test_hr[:descr] + " -- char_str_list equality" )
|
102
|
+
test_hr[:descr] + " -- char_str_list equality" )
|
106
103
|
end
|
107
|
-
|
104
|
+
|
108
105
|
string1 = %<no>
|
109
106
|
string2 = %<quotes>
|
110
|
-
|
107
|
+
|
111
108
|
rdata = [string1.length].pack("C") + string1
|
112
109
|
rdata += [string2.length].pack("C") + string2
|
113
|
-
|
110
|
+
|
114
111
|
work_hash = {
|
115
112
|
:name => name,
|
116
113
|
:ttl => ttl,
|
117
114
|
:class => klass,
|
118
115
|
:type => type,
|
119
116
|
}
|
120
|
-
|
121
|
-
|
122
|
-
#
|
123
|
-
#
|
124
|
-
|
117
|
+
|
118
|
+
|
119
|
+
# Don't break RR.new_from_hash (e.i. "See the manual pages for each RR
|
120
|
+
# type to see what fields the type requires.").
|
121
|
+
|
125
122
|
work_hash[:strings] = %<no quotes>
|
126
|
-
|
127
|
-
uut = RR.create(work_hash)
|
123
|
+
|
124
|
+
uut = RR.create(work_hash)
|
128
125
|
assert( uut , # 30
|
129
126
|
"RR.new_from_hash with txtdata -- Stimulus")
|
130
127
|
assert_equal( uut.rdata_to_string() , %<"no" "quotes">, # 31
|
131
128
|
"RR.new_from_hash with txtdata -- Response (rdatastr())")
|
132
|
-
|
129
|
+
|
133
130
|
rr_rdata = MessageEncoder.new {|msg|
|
134
131
|
uut.encode_rdata(msg)
|
135
132
|
}.to_s
|
136
133
|
assert( rr_rdata == rdata , "TXT.rr_rdata" ) # 32
|
137
|
-
|
138
|
-
|
134
|
+
|
135
|
+
|
139
136
|
end
|
140
137
|
|
141
138
|
def test_nasty_txt
|
data/test/tc_rr-unknown.rb
CHANGED
@@ -1,98 +1,95 @@
|
|
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
|
-
|
18
|
-
|
19
|
-
end
|
20
|
-
require 'test/unit'
|
21
|
-
require 'dnsruby'
|
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
|
+
|
22
19
|
include Dnsruby
|
23
|
-
class TestRrUnknown < Test
|
20
|
+
class TestRrUnknown < Minitest::Test
|
24
21
|
def test_RrUnknown
|
25
22
|
assert_equal(10226, Types::typesbyname('TYPE10226'), 'typesbyname(TYPE10226) returns 10226')
|
26
23
|
assert_equal('TYPE10226', Types::typesbyval(10226), 'typesbyval(10226) returns TYPE10226')
|
27
24
|
assert_equal(Types::typesbyval(1), "A", ' typesbyval(1) returns A')
|
28
|
-
|
25
|
+
|
29
26
|
assert_equal(Types::typesbyval(Types.typesbyname('TYPE001')), 'A', 'typesbyval(typebyname(TYPE001)) returns A')
|
30
|
-
|
31
|
-
|
27
|
+
|
28
|
+
|
32
29
|
begin
|
33
30
|
Types.typesbyval(0xffff+1)
|
34
31
|
flunk("Should fail on large TYPE code")
|
35
32
|
rescue Exception
|
36
33
|
end
|
37
|
-
|
34
|
+
|
38
35
|
assert_equal(Classes::classesbyname('CLASS124'), 124, 'classesbyname(CLASS124) returns 124')
|
39
36
|
assert_equal(Classes::classesbyval(125), 'CLASS125','classesbyval(125) returns CLASS125')
|
40
37
|
assert_equal(Classes::classesbyval(1), 'IN', 'classesbyval(1) returns IN')
|
41
|
-
|
38
|
+
|
42
39
|
assert_equal('HS', Classes::classesbyval(Classes::classesbyname('CLASS04')), 'classesbyval(typebyname(CLASS04)) returns HS')
|
43
|
-
|
40
|
+
|
44
41
|
begin
|
45
42
|
Classes::classesbyval(0xffff+1)
|
46
43
|
flunk("Should fail on large CLASS code")
|
47
44
|
rescue Exception
|
48
45
|
end
|
49
46
|
end
|
50
|
-
|
47
|
+
|
51
48
|
def test_rr_new
|
52
49
|
rr = RR.new_from_string('e.example CLASS01 TYPE01 10.0.0.2')
|
53
50
|
assert_equal(RR::IN::A, rr.class, 'TYPE01 parsed OK')
|
54
51
|
assert_equal('A', rr.type.string, 'TYPE01 parsed OK')
|
55
52
|
assert_equal('IN', rr.klass.string,'CLASS01 parsed OK')
|
56
53
|
assert_equal(1, rr.klass.code,'CLASS01 parsed OK')
|
57
|
-
|
54
|
+
|
58
55
|
rr = RR.new_from_string('e.example IN A \# 4 0A0000 01 ')
|
59
56
|
assert_equal('10.0.0.1', rr.address.to_s,'Unknown RR representation for A parsed OK')
|
60
|
-
|
57
|
+
|
61
58
|
begin
|
62
59
|
res=RR.new_from_string('e.example IN A \# 4 0A0000 01 11 ')
|
63
60
|
flunk "Should fail on inconsistent length and hex presentation"
|
64
61
|
rescue Exception
|
65
|
-
#like($@, '/\\\# 4 0A0000 01 11 assert_equal inconsistent\ length does not match content/', 'Fails on inconsassert_equaltent length and hex presentation')
|
62
|
+
# like($@, '/\\\# 4 0A0000 01 11 assert_equal inconsistent\ length does not match content/', 'Fails on inconsassert_equaltent length and hex presentation')
|
66
63
|
end
|
67
|
-
|
68
|
-
|
64
|
+
|
65
|
+
|
69
66
|
rr = RR.new_from_string('e.example IN TYPE4555 \# 4 0A0000 01 ')
|
70
67
|
assert_equal('e.example 0 IN TYPE4555 \# 4 0a000001', rr.to_s, 'Fully unknown RR parsed correctly')
|
71
|
-
|
68
|
+
|
72
69
|
rr4 = RR.new_from_string('e.example. CLASS122 TYPE4555 \# 4 0A0000 01 ')
|
73
70
|
assert_equal('e.example. 0 CLASS122 TYPE4555 \# 4 0a000001', rr4.to_s, 'Fully unknown RR in unknown CLASS parsed correctly')
|
74
71
|
end
|
75
|
-
|
72
|
+
|
76
73
|
def test_real_data
|
77
74
|
uuencodedPacket=%w{
|
78
|
-
02 79 85 00 00 01
|
79
|
-
00 01 00 01 00 01 04 54 45 53 54 07 65 78 61 6d
|
80
|
-
70 6c 65 03 63 6f 6d 00 00 ff 00 01 c0 0c 30 39
|
81
|
-
00 01 00 00 00 7b 00 0a 11 22 33 44 55 aa bb cc
|
82
|
-
dd ee c0 11 00 02 00 01 00 00 03 84 00 05 02 6e
|
83
|
-
73 c0 11 c0 44 00 01 00 01 00 00 03 84 00 04 7f
|
75
|
+
02 79 85 00 00 01
|
76
|
+
00 01 00 01 00 01 04 54 45 53 54 07 65 78 61 6d
|
77
|
+
70 6c 65 03 63 6f 6d 00 00 ff 00 01 c0 0c 30 39
|
78
|
+
00 01 00 00 00 7b 00 0a 11 22 33 44 55 aa bb cc
|
79
|
+
dd ee c0 11 00 02 00 01 00 00 03 84 00 05 02 6e
|
80
|
+
73 c0 11 c0 44 00 01 00 01 00 00 03 84 00 04 7f
|
84
81
|
00 00 01}
|
85
|
-
|
86
|
-
#
|
87
|
-
#
|
88
|
-
|
82
|
+
|
83
|
+
# packetdata = uuencodedPacket.pack('H*')
|
84
|
+
# packetdata = packetdata.gsub("\s*", "")
|
85
|
+
|
89
86
|
uuencodedPacket.map!{|e| e.hex}
|
90
87
|
packetdata = uuencodedPacket.pack('c*')
|
91
88
|
# packet = Net::Packet.new_from_binary(packetdata)
|
92
89
|
packet = Message.decode(packetdata)
|
93
|
-
|
90
|
+
|
94
91
|
string_representation = (packet.answer)[0].to_s
|
95
|
-
#string_representation =~ s/\s+/ /g,
|
92
|
+
# string_representation =~ s/\s+/ /g,
|
96
93
|
string_representation = string_representation.gsub(/\s+/, " ")
|
97
94
|
assert_equal(
|
98
95
|
'TEST.example.com. 123 IN TYPE12345 \# 10 1122334455aabbccddee',
|