net-dns2 0.8.1

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 (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