net-dns 0.5.3 → 0.6.0

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. data/.gitignore +6 -0
  2. data/AUTHORS.rdoc +7 -0
  3. data/CHANGELOG.rdoc +34 -0
  4. data/README.rdoc +26 -14
  5. data/Rakefile +23 -30
  6. data/{THANKS → THANKS.rdoc} +0 -0
  7. data/VERSION.yml +3 -2
  8. data/demo/check_soa.rb +6 -11
  9. data/lib/net/{dns/dns.rb → dns.rb} +5 -12
  10. data/lib/net/dns/core_ext.rb +52 -0
  11. data/lib/net/dns/header.rb +55 -49
  12. data/lib/net/dns/names/names.rb +20 -10
  13. data/lib/net/dns/packet.rb +33 -26
  14. data/lib/net/dns/question.rb +60 -27
  15. data/lib/net/dns/resolver.rb +101 -156
  16. data/lib/net/dns/resolver/timeouts.rb +71 -65
  17. data/lib/net/dns/rr.rb +131 -166
  18. data/lib/net/dns/rr/a.rb +20 -26
  19. data/lib/net/dns/rr/aaaa.rb +15 -20
  20. data/lib/net/dns/rr/classes.rb +1 -1
  21. data/lib/net/dns/rr/cname.rb +8 -14
  22. data/lib/net/dns/rr/hinfo.rb +8 -14
  23. data/lib/net/dns/rr/mr.rb +8 -14
  24. data/lib/net/dns/rr/mx.rb +11 -18
  25. data/lib/net/dns/rr/ns.rb +8 -14
  26. data/lib/net/dns/rr/null.rb +7 -14
  27. data/lib/net/dns/rr/ptr.rb +9 -15
  28. data/lib/net/dns/rr/soa.rb +9 -15
  29. data/lib/net/dns/rr/srv.rb +10 -19
  30. data/lib/net/dns/rr/txt.rb +9 -20
  31. data/lib/net/dns/rr/types.rb +51 -58
  32. data/lib/net/dns/version.rb +22 -0
  33. data/test/{net/dns/test_header.rb → header_test.rb} +20 -20
  34. data/test/{net/dns/test_packet.rb → packet_test.rb} +2 -2
  35. data/test/question_test.rb +84 -0
  36. data/test/resolver/timeouts_test.rb +109 -0
  37. data/test/{net/dns/test_resolver.rb → resolver_test.rb} +6 -6
  38. data/test/rr/a_test.rb +66 -0
  39. data/test/{net/dns/rr/test_classes.rb → rr/classes_test.rb} +5 -5
  40. data/test/rr/ns_test.rb +64 -0
  41. data/test/rr/types_test.rb +69 -0
  42. data/test/{net/dns/test_rr.rb → rr_test.rb} +10 -12
  43. data/test/test_helper.rb +4 -0
  44. metadata +50 -35
  45. data/AUTHORS +0 -10
  46. data/CHANGELOG +0 -7
  47. data/INSTALL +0 -8
  48. data/net-dns.gemspec +0 -92
  49. data/test/net/dns/resolver/test_timeouts.rb +0 -59
  50. data/test/net/dns/rr/test_a.rb +0 -72
  51. data/test/net/dns/rr/test_ns.rb +0 -66
  52. data/test/net/dns/rr/test_types.rb +0 -124
  53. data/test/net/dns/test_question.rb +0 -54
@@ -1,7 +1,7 @@
1
- require 'test/unit'
1
+ require 'test_helper'
2
2
  require 'net/dns/packet'
3
3
 
4
- class Test_Packet < Test::Unit::TestCase
4
+ class PacketTest < Test::Unit::TestCase
5
5
  include Net::DNS
6
6
 
7
7
  def setup
@@ -0,0 +1,84 @@
1
+ require 'test_helper'
2
+ require 'net/dns/question'
3
+
4
+ class QuestionTest < Test::Unit::TestCase
5
+ include Net::DNS
6
+
7
+ def setup
8
+ @domain = 'example.com.'
9
+ @type = 'MX'
10
+ @cls = 'HS'
11
+ @data = "\006google\003com\000\000\001\000\001"
12
+
13
+ @default = Question.new(@domain)
14
+ @string = Question.new(@domain,@type,@cls)
15
+ @binary = Question.parse(@data)
16
+ @binary2 = Question.parse(@string.data)
17
+ end
18
+
19
+ def test_simple
20
+ assert_equal(@default.qName, @domain)
21
+ assert_equal(@default.qType.to_s, "A")
22
+ assert_equal(@default.qClass.to_s, "IN")
23
+
24
+ assert_equal(@string.qName, @domain)
25
+ assert_equal(@string.qType.to_s, "MX")
26
+ assert_equal(@string.qClass.to_s, "HS")
27
+
28
+ assert_equal(@binary.qName, "google.com.")
29
+ assert_equal(@binary.qType.to_s, "A")
30
+ assert_equal(@binary.qClass.to_s, "IN")
31
+
32
+ assert_equal(@binary2.qName, @domain)
33
+ assert_equal(@binary2.qType.to_s, "MX")
34
+ assert_equal(@binary2.qClass.to_s, "HS")
35
+ end
36
+
37
+ def test_raise
38
+ assert_raise(Net::DNS::Question::NameError) do
39
+ Question.new(1)
40
+ end
41
+ assert_raise(Net::DNS::Question::NameError) do
42
+ Question.new("test{")
43
+ end
44
+ assert_raise(Net::DNS::Question::ArgumentError) do
45
+ Question.parse(Array.new)
46
+ end
47
+ assert_raise(Net::DNS::Question::ArgumentError) do
48
+ Question.parse("test")
49
+ end
50
+ end
51
+
52
+ def test_inspect
53
+ assert_equal "google.com. IN A ",
54
+ Net::DNS::Question.new("google.com.").inspect
55
+ assert_equal "google.com. IN A ",
56
+ Net::DNS::Question.new("google.com.", Net::DNS::A).inspect
57
+ assert_equal "google.com. IN NS ",
58
+ Net::DNS::Question.new("google.com.", Net::DNS::NS).inspect
59
+ assert_equal "google.com. IN NS ",
60
+ Net::DNS::Question.new("google.com.", Net::DNS::NS).inspect
61
+ end
62
+
63
+ def test_inspect_with_name_longer_than_29_chrs
64
+ assert_equal "supercalifragilistichespiralidoso.com IN A ",
65
+ Net::DNS::Question.new("supercalifragilistichespiralidoso.com").inspect
66
+ end
67
+
68
+ def test_to_s
69
+ assert_equal "google.com. IN A ",
70
+ Net::DNS::Question.new("google.com.").to_s
71
+ assert_equal "google.com. IN A ",
72
+ Net::DNS::Question.new("google.com.", Net::DNS::A).to_s
73
+ assert_equal "google.com. IN NS ",
74
+ Net::DNS::Question.new("google.com.", Net::DNS::NS).to_s
75
+ assert_equal "google.com. IN NS ",
76
+ Net::DNS::Question.new("google.com.", Net::DNS::NS).to_s
77
+ end
78
+
79
+ def test_to_s_with_name_longer_than_29_chrs
80
+ assert_equal "supercalifragilistichespiralidoso.com IN A ",
81
+ Net::DNS::Question.new("supercalifragilistichespiralidoso.com").to_s
82
+ end
83
+
84
+ end
@@ -0,0 +1,109 @@
1
+ require 'test_helper'
2
+ require 'net/dns/resolver/timeouts'
3
+
4
+ class DnsTimeoutTest < Test::Unit::TestCase
5
+
6
+ def setup
7
+ @klass = Net::DNS::Resolver::DnsTimeout
8
+ end
9
+
10
+ def test_initialize
11
+ timeout = @klass.new(0)
12
+ assert_instance_of @klass, timeout
13
+ end
14
+
15
+ def test_initialize_should_set_timeout
16
+ assert_equal 0, @klass.new(0).seconds
17
+ assert_equal 10, @klass.new(10).seconds
18
+ end
19
+
20
+ def test_initialize_should_set_raise_with_invalid_timeout
21
+ assert_raise(ArgumentError) { @klass.new(nil) }
22
+ assert_raise(ArgumentError) { @klass.new("") }
23
+ assert_raise(ArgumentError) { @klass.new("foo") }
24
+ assert_raise(ArgumentError) { @klass.new(-1) }
25
+ end
26
+
27
+
28
+ def test_to_s
29
+ assert_equal "", @klass.new(0).to_s
30
+ assert_equal "1", @klass.new(1).to_s
31
+ assert_equal "10", @klass.new(10).to_s
32
+ end
33
+
34
+
35
+ def test_timeout_should_raise_localjumperror_without_block
36
+ assert_raise(LocalJumpError) { @klass.new(1).timeout }
37
+ end
38
+
39
+ end
40
+
41
+ class TcpTimeoutTest < Test::Unit::TestCase
42
+
43
+ def test_initialize
44
+ assert_raise(ArgumentError) do
45
+ Net::DNS::Resolver::TcpTimeout.new("a")
46
+ end
47
+ assert_raise(ArgumentError) do
48
+ Net::DNS::Resolver::TcpTimeout.new(-1)
49
+ end
50
+ assert_raise(TimeoutError) do
51
+ Net::DNS::Resolver::TcpTimeout.new(0.1).timeout { sleep 2 }
52
+ end
53
+ end
54
+
55
+ def test_to_s
56
+ assert_equal "infinite", Net::DNS::Resolver::TcpTimeout.new(0).to_s
57
+ assert_equal "30", Net::DNS::Resolver::TcpTimeout.new(30).to_s
58
+ end
59
+
60
+ def test_pretty_to_s
61
+ assert_equal "30 seconds", Net::DNS::Resolver::TcpTimeout.new(30).pretty_to_s
62
+ assert_equal "1 minutes and 30 seconds", Net::DNS::Resolver::TcpTimeout.new(90).pretty_to_s
63
+ assert_equal "1 hours, 1 minutes and 30 seconds", Net::DNS::Resolver::TcpTimeout.new(3690).pretty_to_s
64
+ end
65
+
66
+ def test_timeout
67
+ assert_equal 2, Net::DNS::Resolver::TcpTimeout.new(1).timeout { 1 + 1 }
68
+ end
69
+
70
+ def test_timeout_should_raise_localjumperror_without_block
71
+ assert_raise(LocalJumpError) { Net::DNS::Resolver::TcpTimeout.new(1).timeout }
72
+ end
73
+
74
+ end
75
+
76
+ class UdpTimeoutTest < Test::Unit::TestCase
77
+
78
+ def test_initialize
79
+ assert_raise(ArgumentError) do
80
+ Net::DNS::Resolver::UdpTimeout.new("a")
81
+ end
82
+ assert_raise(ArgumentError) do
83
+ Net::DNS::Resolver::UdpTimeout.new(-1)
84
+ end
85
+ assert_raise(TimeoutError) do
86
+ Net::DNS::Resolver::UdpTimeout.new(0.1).timeout {sleep 2}
87
+ end
88
+ end
89
+
90
+ def test_to_s
91
+ assert_equal "not defined", Net::DNS::Resolver::UdpTimeout.new(0).to_s
92
+ assert_equal "30", Net::DNS::Resolver::UdpTimeout.new(30).to_s
93
+ end
94
+
95
+ def test_pretty_to_s
96
+ assert_equal "30 seconds", Net::DNS::Resolver::UdpTimeout.new(30).pretty_to_s
97
+ assert_equal "1 minutes and 30 seconds", Net::DNS::Resolver::UdpTimeout.new(90).pretty_to_s
98
+ assert_equal "1 hours, 1 minutes and 30 seconds", Net::DNS::Resolver::UdpTimeout.new(3690).pretty_to_s
99
+ end
100
+
101
+ def test_timeout
102
+ assert_equal 2, Net::DNS::Resolver::UdpTimeout.new(1).timeout { 1 + 1 }
103
+ end
104
+
105
+ def test_timeout_should_raise_localjumperror_without_block
106
+ assert_raise(LocalJumpError) { Net::DNS::Resolver::UdpTimeout.new(1).timeout }
107
+ end
108
+
109
+ end
@@ -1,4 +1,4 @@
1
- require 'test/unit'
1
+ require 'test_helper'
2
2
  require 'net/dns/resolver'
3
3
 
4
4
  class Net::DNS::Resolver
@@ -6,7 +6,7 @@ class Net::DNS::Resolver
6
6
  end
7
7
 
8
8
 
9
- class TestResolver < Test::Unit::TestCase
9
+ class ResolverTest < Test::Unit::TestCase
10
10
 
11
11
  def test_initialize
12
12
  assert_nothing_raised { Net::DNS::Resolver.new }
@@ -16,10 +16,10 @@ class TestResolver < Test::Unit::TestCase
16
16
  assert_nothing_raised { Net::DNS::Resolver.new({}) }
17
17
  end
18
18
 
19
- def test_initialize_with_invalid_config_should_raise_error
20
- assert_raise(ResolverArgumentError) { Net::DNS::Resolver.new("") }
21
- assert_raise(ResolverArgumentError) { Net::DNS::Resolver.new(0) }
22
- assert_raise(ResolverArgumentError) { Net::DNS::Resolver.new(:foo) }
19
+ def test_initialize_with_invalid_config_should_raise_argumenterror
20
+ assert_raise(Net::DNS::Resolver::ArgumentError) { Net::DNS::Resolver.new("") }
21
+ assert_raise(Net::DNS::Resolver::ArgumentError) { Net::DNS::Resolver.new(0) }
22
+ assert_raise(Net::DNS::Resolver::ArgumentError) { Net::DNS::Resolver.new(:foo) }
23
23
  end
24
24
 
25
25
 
@@ -0,0 +1,66 @@
1
+ require 'test_helper'
2
+ require 'net/dns/rr'
3
+
4
+ class RRATest < Test::Unit::TestCase
5
+
6
+ def setup
7
+ @rr_name = "google.com."
8
+ @rr_type = "A"
9
+ @rr_cls = "IN"
10
+ @rr_ttl = 10800
11
+ @rr_address = "64.233.187.99"
12
+
13
+ @rr_output = "google.com. 10800 IN A 64.233.187.99"
14
+ end
15
+
16
+
17
+ def test_initialize_from_hash
18
+ @record = Net::DNS::RR::A.new(:name => @rr_name, :address => @rr_address)
19
+ assert_equal @rr_output, @record.inspect
20
+ assert_equal @rr_name, @record.name
21
+ assert_equal @rr_type, @record.type
22
+ assert_equal @rr_cls, @record.cls
23
+ assert_equal @rr_ttl, @record.ttl
24
+ assert_equal @rr_address, @record.address.to_s
25
+ end
26
+
27
+ def test_initialize_from_string
28
+ @record = Net::DNS::RR::A.new("#{@rr_name} 10800 IN A #{@rr_address}")
29
+ assert_equal @rr_output, @record.inspect
30
+ assert_equal @rr_name, @record.name
31
+ assert_equal @rr_type, @record.type
32
+ assert_equal @rr_cls, @record.cls
33
+ assert_equal @rr_ttl, @record.ttl
34
+ assert_equal @rr_address, @record.address.to_s
35
+ end
36
+
37
+ def test_parse
38
+ data = "\006google\003com\000\000\001\000\001\000\000*0\000\004@\351\273c"
39
+ @record = Net::DNS::RR.parse(data)
40
+ assert_equal @rr_output, @record.inspect
41
+ assert_equal @rr_name, @record.name
42
+ assert_equal @rr_type, @record.type
43
+ assert_equal @rr_cls, @record.cls
44
+ assert_equal @rr_ttl, @record.ttl
45
+ assert_equal @rr_address, @record.address.to_s
46
+ end
47
+
48
+
49
+ InvalidArguments = [
50
+ { :name => "google.com", :address => "255.256" },
51
+ { :name => "google.com" },
52
+ Object.new,
53
+ Array.new(7),
54
+ "10800 IN A",
55
+ "google.com. 10800 IN B",
56
+ "google.com. 10800 IM A",
57
+ ]
58
+
59
+ InvalidArguments.each_with_index do |arguments, index|
60
+ define_method "test_initialize_should_raise_with_invalid_arguments_#{index}" do
61
+ assert_raise(Net::DNS::RR::ArgumentError) { Net::DNS::RR::A.new(arguments) }
62
+ end
63
+ end
64
+
65
+ end
66
+
@@ -1,7 +1,8 @@
1
- require 'test/unit'
2
- require 'net/dns/rr/classes'
1
+ require 'test_helper'
2
+ require 'net/dns/rr'
3
3
 
4
- class Test_Classes < Test::Unit::TestCase
4
+ class RRClassesTest < Test::Unit::TestCase
5
+
5
6
  def setup
6
7
  @classes = {
7
8
  'IN' => 1, # RFC 1035
@@ -10,7 +11,7 @@ class Test_Classes < Test::Unit::TestCase
10
11
  'NONE' => 254, # RFC 2136
11
12
  'ANY' => 255, # RFC 1035
12
13
  }
13
- @regexp_string = "HS|ANY|NONE|CH|IN"
14
+ @regexp_string = "ANY|CH|HS|IN|NONE"
14
15
  end
15
16
 
16
17
  def test_default
@@ -29,7 +30,6 @@ class Test_Classes < Test::Unit::TestCase
29
30
  instance = Net::DNS::RR::Classes.new(nil)
30
31
  assert_equal("1", instance.to_str)
31
32
  assert_equal("IN", instance.to_s)
32
-
33
33
  end
34
34
 
35
35
  def test_classes
@@ -0,0 +1,64 @@
1
+ require 'test_helper'
2
+ require 'net/dns/rr'
3
+
4
+ class RRNSTest < Test::Unit::TestCase
5
+
6
+ def setup
7
+ @rr_name = "google.com."
8
+ @rr_type = "NS"
9
+ @rr_cls = "IN"
10
+ @rr_ttl = 10800
11
+ @rr_nsdname = "ns1.google.com."
12
+
13
+ @rr_output = "google.com. 10800 IN NS ns1.google.com."
14
+ end
15
+
16
+
17
+ def test_initialize_from_hash
18
+ @record = Net::DNS::RR::NS.new(:name => @rr_name, :nsdname => @rr_nsdname)
19
+ assert_equal @rr_output, @record.inspect
20
+ assert_equal @rr_name, @record.name
21
+ assert_equal @rr_type, @record.type
22
+ assert_equal @rr_cls, @record.cls
23
+ assert_equal @rr_ttl, @record.ttl
24
+ assert_equal @rr_nsdname, @record.nsdname
25
+ end
26
+
27
+ def test_initialize_from_string
28
+ @record = Net::DNS::RR::NS.new("#{@rr_name} 10800 IN NS #{@rr_nsdname}")
29
+ assert_equal @rr_output, @record.inspect
30
+ assert_equal @rr_name, @record.name
31
+ assert_equal @rr_type, @record.type
32
+ assert_equal @rr_cls, @record.cls
33
+ assert_equal @rr_ttl, @record.ttl
34
+ assert_equal @rr_nsdname, @record.nsdname
35
+ end
36
+
37
+ def test_parse
38
+ data = "\006google\003com\000\000\002\000\001\000\000*0\000\020\003ns1\006google\003com\000"
39
+ @record = Net::DNS::RR.parse(data)
40
+ assert_equal @rr_output, @record.inspect
41
+ assert_equal @rr_name, @record.name
42
+ assert_equal @rr_type, @record.type
43
+ assert_equal @rr_cls, @record.cls
44
+ assert_equal @rr_ttl, @record.ttl
45
+ assert_equal @rr_nsdname, @record.nsdname
46
+ end
47
+
48
+
49
+ InvalidArguments = [
50
+ { :name => "google.com", :address => "255.256" },
51
+ { :name => "google.com" },
52
+ Object.new,
53
+ Array.new(7),
54
+ "10800 IN A",
55
+ ]
56
+
57
+ InvalidArguments.each_with_index do |arguments, index|
58
+ define_method "test_initialize_should_raise_with_invalid_arguments_#{index}" do
59
+ assert_raise(Net::DNS::RR::ArgumentError) { Net::DNS::RR::A.new(arguments) }
60
+ end
61
+ end
62
+
63
+ end
64
+
@@ -0,0 +1,69 @@
1
+ require 'test_helper'
2
+ require 'net/dns/rr'
3
+
4
+ class RRTypesTest < Test::Unit::TestCase
5
+
6
+ def setup
7
+ end
8
+
9
+ def test_default
10
+ # Default type should be ANY => 255
11
+ instance = Net::DNS::RR::Types.new(nil)
12
+ assert_equal("1", instance.to_str)
13
+ assert_equal("A", instance.to_s)
14
+
15
+ # Let's change default behaviour
16
+ Net::DNS::RR::Types.default = "A"
17
+ instance = Net::DNS::RR::Types.new(nil)
18
+ assert_equal("1", instance.to_str)
19
+ assert_equal("A", instance.to_s)
20
+
21
+ Net::DNS::RR::Types.default = "ANY"
22
+ instance = Net::DNS::RR::Types.new(nil)
23
+ assert_equal("255", instance.to_str)
24
+ assert_equal("ANY", instance.to_s)
25
+ end
26
+
27
+ def test_types
28
+ Net::DNS::RR::Types::TYPES.each do |key, num|
29
+ instance_from_string = Net::DNS::RR::Types.new(key)
30
+ instance_from_num = Net::DNS::RR::Types.new(num)
31
+ assert_equal(key, instance_from_string.to_s)
32
+ assert_equal(num.to_s, instance_from_string.to_str)
33
+ assert_equal(key, instance_from_num.to_s)
34
+ assert_equal(num.to_s, instance_from_num.to_str)
35
+ end
36
+ assert_raise(Net::DNS::RR::ArgumentError) do
37
+ Net::DNS::RR::Types.new(Hash.new)
38
+ end
39
+ end
40
+
41
+ def test_regexp
42
+ pattern = Net::DNS::RR::Types.regexp
43
+ assert_instance_of String, pattern
44
+ Net::DNS::RR::Types::TYPES.each do |key, num|
45
+ assert_match /\|?#{key}\|?/, pattern
46
+ end
47
+ end
48
+
49
+ def test_valid?
50
+ assert_equal(true, Net::DNS::RR::Types.valid?("A"))
51
+ assert_equal(true, Net::DNS::RR::Types.valid?(1))
52
+ assert_equal(false, Net::DNS::RR::Types.valid?("Q"))
53
+ assert_equal(false, Net::DNS::RR::Types.valid?(256))
54
+ assert_raise(Net::DNS::RR::ArgumentError) do
55
+ Net::DNS::RR::Types.valid? Hash.new
56
+ end
57
+ end
58
+
59
+ def test_to_str
60
+ assert_equal("A", Net::DNS::RR::Types.to_str(1))
61
+ assert_raise(Net::DNS::RR::ArgumentError) do
62
+ Net::DNS::RR::Types.to_str(256)
63
+ end
64
+ assert_raise(Net::DNS::RR::ArgumentError) do
65
+ Net::DNS::RR::Types.to_str("string")
66
+ end
67
+ end
68
+
69
+ end