net-dns2 0.8.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (53) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +8 -0
  3. data/.travis.yml +20 -0
  4. data/CHANGELOG.md +105 -0
  5. data/Gemfile +4 -0
  6. data/README.md +155 -0
  7. data/Rakefile +94 -0
  8. data/THANKS.rdoc +24 -0
  9. data/demo/check_soa.rb +115 -0
  10. data/demo/threads.rb +22 -0
  11. data/lib/net/dns.rb +112 -0
  12. data/lib/net/dns/core_ext.rb +52 -0
  13. data/lib/net/dns/header.rb +713 -0
  14. data/lib/net/dns/names.rb +118 -0
  15. data/lib/net/dns/packet.rb +563 -0
  16. data/lib/net/dns/question.rb +188 -0
  17. data/lib/net/dns/resolver.rb +1313 -0
  18. data/lib/net/dns/resolver/socks.rb +154 -0
  19. data/lib/net/dns/resolver/timeouts.rb +75 -0
  20. data/lib/net/dns/rr.rb +366 -0
  21. data/lib/net/dns/rr/a.rb +124 -0
  22. data/lib/net/dns/rr/aaaa.rb +103 -0
  23. data/lib/net/dns/rr/classes.rb +133 -0
  24. data/lib/net/dns/rr/cname.rb +82 -0
  25. data/lib/net/dns/rr/hinfo.rb +108 -0
  26. data/lib/net/dns/rr/mr.rb +79 -0
  27. data/lib/net/dns/rr/mx.rb +92 -0
  28. data/lib/net/dns/rr/ns.rb +78 -0
  29. data/lib/net/dns/rr/null.rb +53 -0
  30. data/lib/net/dns/rr/ptr.rb +83 -0
  31. data/lib/net/dns/rr/soa.rb +78 -0
  32. data/lib/net/dns/rr/srv.rb +45 -0
  33. data/lib/net/dns/rr/txt.rb +61 -0
  34. data/lib/net/dns/rr/types.rb +193 -0
  35. data/lib/net/dns/version.rb +16 -0
  36. data/net-dns.gemspec +37 -0
  37. data/test/header_test.rb +167 -0
  38. data/test/names_test.rb +21 -0
  39. data/test/packet_test.rb +49 -0
  40. data/test/question_test.rb +83 -0
  41. data/test/resolver_test.rb +117 -0
  42. data/test/rr/a_test.rb +113 -0
  43. data/test/rr/aaaa_test.rb +109 -0
  44. data/test/rr/classes_test.rb +85 -0
  45. data/test/rr/cname_test.rb +97 -0
  46. data/test/rr/hinfo_test.rb +117 -0
  47. data/test/rr/mr_test.rb +105 -0
  48. data/test/rr/mx_test.rb +112 -0
  49. data/test/rr/ns_test.rb +86 -0
  50. data/test/rr/types_test.rb +69 -0
  51. data/test/rr_test.rb +131 -0
  52. data/test/test_helper.rb +4 -0
  53. metadata +158 -0
@@ -0,0 +1,85 @@
1
+ require 'test_helper'
2
+ require 'net/dns/rr'
3
+
4
+ class RRClassesTest < Test::Unit::TestCase
5
+
6
+ def setup
7
+ @classes = {
8
+ }
9
+ @regexp_string = "ANY|CH|HS|IN|NONE"
10
+ end
11
+
12
+
13
+ StrAndNum = [
14
+ ['IN' , 1],
15
+ ['CH' , 3],
16
+ ['HS' , 4],
17
+ ['NONE' , 254],
18
+ ['ANY' , 255],
19
+ ]
20
+
21
+ StrAndNum.each do |str, num|
22
+ define_method "test_initialize_from_str_#{str}" do
23
+ instance = Net::DNS::RR::Classes.new(str)
24
+ assert_equal str, instance.to_s
25
+ assert_equal num, instance.to_i
26
+ end
27
+ define_method "test_initialize_from_num_#{num}" do
28
+ instance = Net::DNS::RR::Classes.new(num)
29
+ assert_equal str, instance.to_s
30
+ assert_equal num, instance.to_i
31
+ end
32
+ end
33
+
34
+ def test_initialize_should_raise_with_invalid_class
35
+ assert_raises(ArgumentError) { Net::DNS::RR::Classes.new(Hash.new) }
36
+ end
37
+
38
+
39
+ def test_inspect
40
+ assert_equal 1, Net::DNS::RR::Classes.new(1).inspect
41
+ assert_equal 1, Net::DNS::RR::Classes.new("IN").inspect
42
+ end
43
+
44
+ def test_to_s
45
+ assert_equal "IN", Net::DNS::RR::Classes.new(1).to_s
46
+ assert_equal "IN", Net::DNS::RR::Classes.new("IN").to_s
47
+ end
48
+
49
+ def test_to_i
50
+ assert_equal 1, Net::DNS::RR::Classes.new(1).to_i
51
+ assert_equal 1, Net::DNS::RR::Classes.new("IN").to_i
52
+ end
53
+
54
+
55
+ def test_self_default
56
+ # Default type should be ANY => 255
57
+ instance = Net::DNS::RR::Classes.new(nil)
58
+ assert_equal 1, instance.to_i
59
+ assert_equal "IN", instance.to_s
60
+
61
+ # Let's change default behaviour
62
+ Net::DNS::RR::Classes.default = "CH"
63
+ instance = Net::DNS::RR::Classes.new(nil)
64
+ assert_equal 3, instance.to_i
65
+ assert_equal "CH", instance.to_s
66
+
67
+ Net::DNS::RR::Classes.default = "IN"
68
+ instance = Net::DNS::RR::Classes.new(nil)
69
+ assert_equal 1, instance.to_i
70
+ assert_equal "IN", instance.to_s
71
+ end
72
+
73
+ def test_self_valid?
74
+ assert Net::DNS::RR::Classes.valid?("IN")
75
+ assert Net::DNS::RR::Classes.valid?(1)
76
+ assert !Net::DNS::RR::Classes.valid?("Q")
77
+ assert !Net::DNS::RR::Classes.valid?(256)
78
+ assert_raises(ArgumentError) { Net::DNS::RR::Classes.valid?(Hash.new) }
79
+ end
80
+
81
+ def test_self_regexp
82
+ assert_equal @regexp_string, Net::DNS::RR::Classes.regexp
83
+ end
84
+
85
+ end
@@ -0,0 +1,97 @@
1
+ require 'test_helper'
2
+ require 'net/dns/rr'
3
+
4
+ class RRCNAMETest < Test::Unit::TestCase
5
+
6
+ def setup
7
+ @rr_name = "www.google.com."
8
+ @rr_type = "CNAME"
9
+ @rr_cls = "IN"
10
+ @rr_ttl = 550317
11
+ @rr_value = "www.l.google.com."
12
+ @rr_cname = @rr_value
13
+
14
+ @rr_output = "www.google.com. 550317 IN CNAME www.l.google.com."
15
+
16
+ @rr = Net::DNS::RR::CNAME.new(:name => @rr_name, :cname => @rr_cname, :ttl => @rr_ttl)
17
+ end
18
+
19
+
20
+ def test_initialize_from_hash
21
+ @record = Net::DNS::RR::CNAME.new(:name => @rr_name, :cname => @rr_value, :ttl => @rr_ttl)
22
+ assert_equal @rr_output, @record.to_s
23
+ assert_equal @rr_name, @record.name
24
+ assert_equal @rr_type, @record.type
25
+ assert_equal @rr_cls, @record.cls
26
+ assert_equal @rr_ttl, @record.ttl
27
+ assert_equal @rr_cname, @record.cname
28
+ assert_equal @rr_value, @record.value
29
+ end
30
+
31
+ def test_initialize_from_string
32
+ @record = Net::DNS::RR::CNAME.new("#{@rr_name} #{@rr_ttl} #{@rr_cls} #{@rr_type} #{@rr_value}")
33
+ assert_equal @rr_output, @record.to_s
34
+ assert_equal @rr_name, @record.name
35
+ assert_equal @rr_type, @record.type
36
+ assert_equal @rr_cls, @record.cls
37
+ assert_equal @rr_ttl, @record.ttl
38
+ assert_equal @rr_cname, @record.cname
39
+ assert_equal @rr_value, @record.value
40
+ end
41
+
42
+ def test_parse
43
+ data = "\003www\006google\003com\000\000\005\000\001\000\be\255\000\022\003www\001l\006google\003com\000"
44
+ @record = Net::DNS::RR.parse(data)
45
+ assert_equal @rr_output, @record.to_s
46
+ assert_equal @rr_name, @record.name
47
+ assert_equal @rr_type, @record.type
48
+ assert_equal @rr_cls, @record.cls
49
+ assert_equal @rr_ttl, @record.ttl
50
+ assert_equal @rr_cname, @record.cname
51
+ assert_equal @rr_value, @record.value
52
+ end
53
+
54
+
55
+ InvalidArguments = [
56
+ # FIXME: { :name => "google.com", :cname => "foo___bar" },
57
+ # FIXME: { :name => "google.com", :cname => "foo$bar" },
58
+ { :name => "google.com" },
59
+ Object.new,
60
+ Array.new(7),
61
+ "10800 IN CNAME",
62
+ "google.com. 10800 IN CNAME",
63
+ ]
64
+
65
+ InvalidArguments.each_with_index do |arguments, index|
66
+ define_method "test_initialize_should_raise_with_invalid_arguments_#{index}" do
67
+ assert_raises(ArgumentError) { p Net::DNS::RR::CNAME.new(arguments) }
68
+ end
69
+ end
70
+
71
+
72
+ def test_cname_getter
73
+ assert_equal @rr_cname, @rr.cname
74
+ end
75
+
76
+
77
+ def test_value
78
+ assert_equal @rr_value, @rr.value
79
+ end
80
+
81
+
82
+ def test_inspect
83
+ assert_equal "www.google.com. 550317 IN CNAME www.l.google.com.",
84
+ @rr.inspect
85
+ end
86
+
87
+ def test_to_s
88
+ assert_equal "www.google.com. 550317 IN CNAME www.l.google.com.",
89
+ @rr.to_s
90
+ end
91
+
92
+ def test_to_a
93
+ assert_equal ["www.google.com.", 550317, "IN", "CNAME", "www.l.google.com."],
94
+ @rr.to_a
95
+ end
96
+
97
+ end
@@ -0,0 +1,117 @@
1
+ require 'test_helper'
2
+ require 'net/dns/rr'
3
+ require 'net/dns/rr/hinfo'
4
+
5
+ class RRHINFOTest < Test::Unit::TestCase
6
+
7
+ def setup
8
+ @rr_name = ""
9
+ @rr_type = "HINFO"
10
+ @rr_cls = "IN"
11
+ @rr_ttl = nil
12
+ @rr_value = %Q{"PC-Intel-700mhz" "Redhat Linux 7.1"}
13
+ @rr_output = %Q{ IN HINFO "PC-Intel-700mhz" "Redhat Linux 7.1"}
14
+
15
+ @rr_cpu = "PC-Intel-700mhz"
16
+ @rr_os = "Redhat Linux 7.1"
17
+
18
+ @rr = Net::DNS::RR::HINFO.new(:name => @rr_name, :cpu => @rr_cpu, :os => @rr_os)
19
+ end
20
+
21
+
22
+ def test_initialize_from_hash
23
+ @record = Net::DNS::RR::HINFO.new(:name => @rr_name, :cpu => @rr_cpu, :os => @rr_os)
24
+ assert_equal @rr_output, @record.to_s
25
+ assert_equal @rr_name, @record.name
26
+ assert_equal @rr_type, @record.type
27
+ assert_equal @rr_cls, @record.cls
28
+ assert_equal 10800, @record.ttl
29
+ assert_equal @rr_value, @record.value
30
+
31
+ assert_equal @rr_cpu, @record.cpu
32
+ assert_equal @rr_os, @record.os
33
+ end
34
+
35
+ def test_initialize_from_string
36
+ @record = Net::DNS::RR::HINFO.new(%Q{#{@rr_name} #{@rr_ttl} #{@rr_cls} #{@rr_type} PC-Intel-700mhz "Redhat Linux 7.1"})
37
+ assert_equal @rr_output, @record.to_s
38
+ assert_equal @rr_value, @record.value
39
+
40
+ assert_equal @rr_cpu, @record.cpu
41
+ assert_equal @rr_os, @record.os
42
+ end
43
+
44
+ def test_initialize_from_string_without_quotes
45
+ @record = Net::DNS::RR::HINFO.new("#{@rr_name} #{@rr_ttl} #{@rr_cls} #{@rr_type} #{@rr_value}")
46
+ assert_equal @rr_output, @record.to_s
47
+ # FIXME: assert_equal @rr_name, @record.name
48
+ assert_equal @rr_type, @record.type
49
+ assert_equal @rr_cls, @record.cls
50
+ assert_equal 10800, @record.ttl
51
+ assert_equal @rr_value, @record.value
52
+
53
+ assert_equal @rr_cpu, @record.cpu
54
+ assert_equal @rr_os, @record.os
55
+ end
56
+
57
+ # FIXME: Can't get valid data
58
+ # def test_parse
59
+ # data = "\002in\000\000\r\000\001\000\000*0\000!\017PC-Intel-700mhz\020Redhat Linux 7.1"
60
+ # @record = Net::DNS::RR.parse(data)
61
+ # assert_equal @rr_output, @record.to_s
62
+ # assert_equal @rr_name, @record.name
63
+ # assert_equal @rr_type, @record.type
64
+ # assert_equal @rr_cls, @record.cls
65
+ # assert_equal @rr_ttl, @record.ttl
66
+ # assert_equal @rr_value, @record.value
67
+ #
68
+ # assert_equal @rr_cpu, @record.cpu
69
+ # assert_equal @rr_os, @record.os
70
+ # end
71
+
72
+
73
+ InvalidArguments = [
74
+ { :name => "google.com" },
75
+ Object.new,
76
+ Array.new(7),
77
+ "10800 IN HINFO",
78
+ "IN HINFO",
79
+ ]
80
+
81
+ InvalidArguments.each_with_index do |arguments, index|
82
+ define_method "test_initialize_should_raise_with_invalid_arguments_#{index}" do
83
+ assert_raises(ArgumentError) { p Net::DNS::RR::HINFO.new(arguments) }
84
+ end
85
+ end
86
+
87
+
88
+ def test_cpu
89
+ assert_equal @rr_cpu, @rr.cpu
90
+ end
91
+
92
+ def test_os
93
+ assert_equal @rr_os, @rr.os
94
+ end
95
+
96
+
97
+ def test_value
98
+ assert_equal %Q{"PC-Intel-700mhz" "Redhat Linux 7.1"}, @rr.value
99
+ end
100
+
101
+
102
+ def test_inspect
103
+ assert_equal %Q{ IN HINFO "PC-Intel-700mhz" "Redhat Linux 7.1"},
104
+ @rr.inspect
105
+ end
106
+
107
+ def test_to_s
108
+ assert_equal %Q{ IN HINFO "PC-Intel-700mhz" "Redhat Linux 7.1"},
109
+ @rr.to_s
110
+ end
111
+
112
+ def test_to_a
113
+ assert_equal [nil, nil, "IN", "HINFO", %Q{"PC-Intel-700mhz" "Redhat Linux 7.1"}],
114
+ @rr.to_a
115
+ end
116
+
117
+ end
@@ -0,0 +1,105 @@
1
+ require 'test_helper'
2
+ require 'net/dns/rr'
3
+
4
+ class RRMRTest < Test::Unit::TestCase
5
+
6
+ def setup
7
+ @klass = Net::DNS::RR::MR
8
+ @rr = @klass.new(:name => "eddie.movie.edu.", :newname => "eddie.bornagain.edu.", :ttl => 9000)
9
+
10
+ @rr_name = "eddie.movie.edu."
11
+ @rr_type = "MR"
12
+ @rr_cls = "IN"
13
+ @rr_ttl = 9000
14
+ @rr_newname = "eddie.bornagain.edu."
15
+ @rr_value = "eddie.bornagain.edu."
16
+ @rr_output = "eddie.movie.edu. 9000 IN MR eddie.bornagain.edu."
17
+ end
18
+
19
+
20
+ def test_initialize_from_hash
21
+ @record = @klass.new(:name => "eddie.movie.edu.", :newname => "eddie.bornagain.edu.", :ttl => 9000)
22
+ assert_equal @rr_output, @record.inspect
23
+ assert_equal @rr_name, @record.name
24
+ assert_equal @rr_type, @record.type
25
+ assert_equal @rr_cls, @record.cls
26
+ assert_equal @rr_ttl, @record.ttl
27
+ assert_equal @rr_newname, @record.newname
28
+ end
29
+
30
+ def test_initialize_from_string
31
+ @record = @klass.new("eddie.movie.edu. 9000 IN MR eddie.bornagain.edu.")
32
+ assert_equal @rr_output, @record.inspect
33
+ assert_equal @rr_name, @record.name
34
+ assert_equal @rr_type, @record.type
35
+ assert_equal @rr_cls, @record.cls
36
+ assert_equal @rr_ttl, @record.ttl
37
+ assert_equal @rr_newname, @record.newname
38
+ end
39
+
40
+ # def test_parse
41
+ # data = "\005eddie\005movie\003edu\000\000\t\000\001\000\000#(\000\025\005eddie\tbornagain\003edu\000"
42
+ # @record = Net::DNS::RR.parse(data)
43
+ # assert_equal @rr_output, @record.inspect
44
+ # assert_equal @rr_name, @record.name
45
+ # assert_equal @rr_type, @record.type
46
+ # assert_equal @rr_cls, @record.cls
47
+ # assert_equal @rr_ttl, @record.ttl
48
+ # assert_equal @rr_newname, @record.newname
49
+ # end
50
+
51
+
52
+ InvalidArguments = [
53
+ # FIXME: { :name => "eddie.movie.edu.", :newname => "foo___bar" },
54
+ # FIXME: { :name => "eddie.movie.edu.", :newname => "foo$bar" },
55
+ # FIXME: { :name => "eddie.movie.edu", :newname => "eddie.newname.edu." },
56
+ Object.new,
57
+ Array.new(7),
58
+ "9000 IN MR",
59
+ ]
60
+
61
+ InvalidArguments.each_with_index do |arguments, index|
62
+ define_method "test_initialize_should_raise_with_invalid_arguments_#{index}" do
63
+ assert_raises(ArgumentError) { @klass.new(arguments) }
64
+ end
65
+ end
66
+
67
+ def test_initialize_should_raise_with_missing_newname
68
+ error = assert_raises(ArgumentError) { @klass.new(:name => "eddie.movie.edu.") }
69
+ assert_match /:newname/, error.message
70
+ end
71
+
72
+
73
+ def test_value
74
+ @rr = @klass.new(:name => "eddie.movie.edu.", :newname => "eddie.newname.edu.")
75
+ assert_equal "eddie.newname.edu.", @rr.value
76
+
77
+ @rr = @klass.new(:name => "eddie.movie.edu.", :newname => "eddie.othername.edu.")
78
+ assert_equal "eddie.othername.edu.", @rr.value
79
+ end
80
+
81
+ def test_newname
82
+ @rr = @klass.new(:name => "eddie.movie.edu.", :newname => "eddie.newname.edu.")
83
+ assert_equal "eddie.newname.edu.", @rr.newname
84
+
85
+ @rr = @klass.new(:name => "eddie.movie.edu.", :newname => "eddie.othername.edu.")
86
+ assert_equal "eddie.othername.edu.", @rr.newname
87
+ end
88
+
89
+
90
+ def test_inspect
91
+ assert_equal "eddie.movie.edu. 9000 IN MR eddie.bornagain.edu.",
92
+ @rr.inspect
93
+ end
94
+
95
+ def test_to_s
96
+ assert_equal "eddie.movie.edu. 9000 IN MR eddie.bornagain.edu.",
97
+ @rr.to_s
98
+ end
99
+
100
+ def test_to_a
101
+ assert_equal ["eddie.movie.edu.", 9000, "IN", "MR", "eddie.bornagain.edu."],
102
+ @rr.to_a
103
+ end
104
+
105
+ end
@@ -0,0 +1,112 @@
1
+ require 'test_helper'
2
+ require 'net/dns/rr'
3
+
4
+ class RRMXTest < Test::Unit::TestCase
5
+
6
+ def setup
7
+ @rr_name = "example.com."
8
+ @rr_type = "MX"
9
+ @rr_cls = "IN"
10
+ @rr_ttl = 10000
11
+ @rr_preference = 10
12
+ @rr_exchange = "mail.example.com."
13
+ @rr_value = "#{@rr_preference} #{@rr_exchange}"
14
+
15
+ @rr_output = "example.com. 10000 IN MX 10 mail.example.com."
16
+
17
+ @rr = Net::DNS::RR::MX.new(:name => "example.com.", :preference => 10, :exchange => "mail.example.com.", :ttl => 10000)
18
+ end
19
+
20
+
21
+ def test_initialize_from_hash
22
+ @record = Net::DNS::RR::MX.new(:name => "example.com.", :preference => 10, :exchange => "mail.example.com.", :ttl => 10000)
23
+ assert_equal @rr_output, @record.to_s
24
+ assert_equal @rr_name, @record.name
25
+ assert_equal @rr_type, @record.type
26
+ assert_equal @rr_cls, @record.cls
27
+ assert_equal @rr_ttl, @record.ttl
28
+ assert_equal @rr_preference, @record.preference
29
+ assert_equal @rr_exchange, @record.exchange
30
+ end
31
+
32
+ def test_initialize_from_string
33
+ @record = Net::DNS::RR::MX.new("example.com. 10000 IN MX 10 mail.example.com.")
34
+ assert_equal @rr_output, @record.to_s
35
+ assert_equal @rr_name, @record.name
36
+ assert_equal @rr_type, @record.type
37
+ assert_equal @rr_cls, @record.cls
38
+ assert_equal @rr_ttl, @record.ttl
39
+ assert_equal @rr_preference, @record.preference
40
+ assert_equal @rr_exchange, @record.exchange
41
+ end
42
+
43
+ # FIXME: can't get it working with canned data
44
+ # def test_parse
45
+ # data = "\001\220\006google\003com\004s9b2\005psmtp\003com\000"
46
+ # @record = Net::DNS::RR.parse(data)
47
+ # assert_equal @rr_output, @record.to_s
48
+ # assert_equal @rr_name, @record.name
49
+ # assert_equal @rr_type, @record.type
50
+ # assert_equal @rr_cls, @record.cls
51
+ # assert_equal @rr_ttl, @record.ttl
52
+ # assert_equal @rr_preference, @record.preference
53
+ # assert_equal @rr_exchange, @record.exchange
54
+ # end
55
+
56
+
57
+ InvalidArguments = [
58
+ { :name => "google.com" },
59
+ Object.new,
60
+ Array.new(7),
61
+ "10800 IN NS",
62
+ "google.com. 10800 IN NS",
63
+ ]
64
+
65
+ InvalidArguments.each_with_index do |arguments, index|
66
+ define_method "test_initialize_should_raise_with_invalid_arguments_#{index}" do
67
+ assert_raises(ArgumentError) { p Net::DNS::RR::MX.new(arguments) }
68
+ end
69
+ end
70
+
71
+
72
+ def test_preference
73
+ @rr = Net::DNS::RR::MX.new(:name => "example.com.", :preference => 10, :exchange => "mail.example.com.")
74
+ assert_equal 10, @rr.preference
75
+
76
+ @rr = Net::DNS::RR::MX.new(:name => "example.com.", :preference => 100, :exchange => "mail.example.com.")
77
+ assert_equal 100, @rr.preference
78
+ end
79
+
80
+ def test_exchange
81
+ @rr = Net::DNS::RR::MX.new(:name => "example.com.", :preference => 10, :exchange => "mail.example.com.")
82
+ assert_equal "mail.example.com.", @rr.exchange
83
+
84
+ @rr = Net::DNS::RR::MX.new(:name => "example.com.", :preference => 10, :exchange => "mail2.example.com.")
85
+ assert_equal "mail2.example.com.", @rr.exchange
86
+ end
87
+
88
+ def test_value
89
+ @rr = Net::DNS::RR::MX.new(:name => "example.com.", :preference => 10, :exchange => "mail.example.com.")
90
+ assert_equal "10 mail.example.com.", @rr.value
91
+
92
+ @rr = Net::DNS::RR::MX.new(:name => "example.com.", :preference => 100, :exchange => "mail2.example.com.")
93
+ assert_equal "100 mail2.example.com.", @rr.value
94
+ end
95
+
96
+
97
+ def test_inspect
98
+ assert_equal "example.com. 10000 IN MX 10 mail.example.com.",
99
+ @rr.inspect
100
+ end
101
+
102
+ def test_to_s
103
+ assert_equal "example.com. 10000 IN MX 10 mail.example.com.",
104
+ @rr.to_s
105
+ end
106
+
107
+ def test_to_a
108
+ assert_equal ["example.com.", 10000, "IN", "MX", "10 mail.example.com."],
109
+ @rr.to_a
110
+ end
111
+
112
+ end