rubydns 1.0.3 → 2.0.0.pre.rc1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.rspec +4 -0
- data/.travis.yml +9 -12
- data/Gemfile +4 -1
- data/README.md +49 -151
- data/Rakefile +2 -7
- data/examples/basic-dns.rb +24 -0
- data/examples/cname.rb +25 -0
- data/examples/flakey-dns.rb +2 -2
- data/examples/simple.rb +25 -0
- data/examples/soa-dns.rb +82 -0
- data/examples/test-dns-1.rb +83 -0
- data/examples/test-dns-2.rb +83 -0
- data/examples/wikipedia-dns.rb +4 -18
- data/lib/rubydns.rb +9 -23
- data/lib/rubydns/{server.rb → rule_based_server.rb} +2 -160
- data/lib/rubydns/version.rb +1 -1
- data/rubydns.gemspec +3 -6
- data/spec/rubydns/daemon_spec.rb +26 -22
- data/spec/rubydns/injected_supervisor_spec.rb +10 -7
- data/spec/rubydns/passthrough_spec.rb +31 -24
- data/spec/spec_helper.rb +43 -0
- metadata +21 -100
- data/lib/rubydns/chunked.rb +0 -34
- data/lib/rubydns/extensions/resolv.rb +0 -85
- data/lib/rubydns/extensions/string.rb +0 -28
- data/lib/rubydns/handler.rb +0 -188
- data/lib/rubydns/logger.rb +0 -31
- data/lib/rubydns/message.rb +0 -76
- data/lib/rubydns/resolver.rb +0 -294
- data/lib/rubydns/system.rb +0 -146
- data/lib/rubydns/transaction.rb +0 -204
- data/lib/rubydns/transport.rb +0 -75
- data/spec/rubydns/celluloid_bug_spec.rb +0 -92
- data/spec/rubydns/ipv6_spec.rb +0 -70
- data/spec/rubydns/message_spec.rb +0 -56
- data/spec/rubydns/origin_spec.rb +0 -106
- data/spec/rubydns/resolver_performance_spec.rb +0 -110
- data/spec/rubydns/resolver_spec.rb +0 -152
- data/spec/rubydns/server/bind9/generate-local.rb +0 -25
- data/spec/rubydns/server/bind9/local.zone +0 -5014
- data/spec/rubydns/server/bind9/named.conf +0 -14
- data/spec/rubydns/server/bind9/named.run +0 -0
- data/spec/rubydns/server/million.rb +0 -85
- data/spec/rubydns/server/rubydns.stackprof +0 -0
- data/spec/rubydns/server_performance_spec.rb +0 -136
- data/spec/rubydns/slow_server_spec.rb +0 -89
- data/spec/rubydns/socket_spec.rb +0 -77
- data/spec/rubydns/system_spec.rb +0 -60
- data/spec/rubydns/transaction_spec.rb +0 -138
- data/spec/rubydns/truncation_spec.rb +0 -59
File without changes
|
@@ -1,85 +0,0 @@
|
|
1
|
-
#!/usr/bin/env ruby
|
2
|
-
|
3
|
-
# Copyright, 2009, 2012, by Samuel G. D. Williams. <http://www.codeotaku.com>
|
4
|
-
#
|
5
|
-
# Permission is hereby granted, free of charge, to any person obtaining a copy
|
6
|
-
# of this software and associated documentation files (the "Software"), to deal
|
7
|
-
# in the Software without restriction, including without limitation the rights
|
8
|
-
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
9
|
-
# copies of the Software, and to permit persons to whom the Software is
|
10
|
-
# furnished to do so, subject to the following conditions:
|
11
|
-
#
|
12
|
-
# The above copyright notice and this permission notice shall be included in
|
13
|
-
# all copies or substantial portions of the Software.
|
14
|
-
#
|
15
|
-
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
16
|
-
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
17
|
-
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
18
|
-
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
19
|
-
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
20
|
-
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
21
|
-
# THE SOFTWARE.
|
22
|
-
|
23
|
-
require 'rubydns'
|
24
|
-
require 'benchmark'
|
25
|
-
|
26
|
-
require 'stackprof'
|
27
|
-
|
28
|
-
Name = Resolv::DNS::Name
|
29
|
-
IN = Resolv::DNS::Resource::IN
|
30
|
-
|
31
|
-
# Generate a million A record "domains":
|
32
|
-
|
33
|
-
million = {}
|
34
|
-
|
35
|
-
Benchmark.bm do |x|
|
36
|
-
x.report("Generate names") do
|
37
|
-
(1..1_000_000).each do |i|
|
38
|
-
domain = "domain#{i}.local"
|
39
|
-
|
40
|
-
million[domain] = "#{69}.#{(i >> 16)%256}.#{(i >> 8)%256}.#{i%256}"
|
41
|
-
end
|
42
|
-
end
|
43
|
-
end
|
44
|
-
|
45
|
-
# Run the server:
|
46
|
-
|
47
|
-
StackProf.run(mode: :cpu, out: 'rubydns.stackprof') do
|
48
|
-
RubyDNS::run_server(:listen => [[:udp, '0.0.0.0', 5300]]) do
|
49
|
-
@logger.level = Logger::WARN
|
50
|
-
|
51
|
-
match(//, IN::A) do |transaction|
|
52
|
-
transaction.respond!(million[transaction.name])
|
53
|
-
end
|
54
|
-
|
55
|
-
# Default DNS handler
|
56
|
-
otherwise do |transaction|
|
57
|
-
logger.info "Passing DNS request upstream..."
|
58
|
-
transaction.fail!(:NXDomain)
|
59
|
-
end
|
60
|
-
end
|
61
|
-
end
|
62
|
-
|
63
|
-
# Expected output:
|
64
|
-
#
|
65
|
-
# > dig @localhost -p 5300 domain1000000
|
66
|
-
#
|
67
|
-
# ; <<>> DiG 9.8.3-P1 <<>> @localhost -p 5300 domain1000000
|
68
|
-
# ; (3 servers found)
|
69
|
-
# ;; global options: +cmd
|
70
|
-
# ;; Got answer:
|
71
|
-
# ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 50336
|
72
|
-
# ;; flags: qr aa rd; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 0
|
73
|
-
# ;; WARNING: recursion requested but not available
|
74
|
-
#
|
75
|
-
# ;; QUESTION SECTION:
|
76
|
-
# ;domain1000000. IN A
|
77
|
-
#
|
78
|
-
# ;; ANSWER SECTION:
|
79
|
-
# domain1000000. 86400 IN A 69.15.66.64
|
80
|
-
#
|
81
|
-
# ;; Query time: 1 msec
|
82
|
-
# ;; SERVER: 127.0.0.1#5300(127.0.0.1)
|
83
|
-
# ;; WHEN: Fri May 16 19:17:48 2014
|
84
|
-
# ;; MSG SIZE rcvd: 47
|
85
|
-
#
|
Binary file
|
@@ -1,136 +0,0 @@
|
|
1
|
-
#!/usr/bin/env ruby
|
2
|
-
|
3
|
-
# Copyright, 2012, by Samuel G. D. Williams. <http://www.codeotaku.com>
|
4
|
-
#
|
5
|
-
# Permission is hereby granted, free of charge, to any person obtaining a copy
|
6
|
-
# of this software and associated documentation files (the "Software"), to deal
|
7
|
-
# in the Software without restriction, including without limitation the rights
|
8
|
-
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
9
|
-
# copies of the Software, and to permit persons to whom the Software is
|
10
|
-
# furnished to do so, subject to the following conditions:
|
11
|
-
#
|
12
|
-
# The above copyright notice and this permission notice shall be included in
|
13
|
-
# all copies or substantial portions of the Software.
|
14
|
-
#
|
15
|
-
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
16
|
-
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
17
|
-
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
18
|
-
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
19
|
-
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
20
|
-
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
21
|
-
# THE SOFTWARE.
|
22
|
-
|
23
|
-
require 'rubydns'
|
24
|
-
require 'benchmark'
|
25
|
-
require 'process/daemon'
|
26
|
-
|
27
|
-
module RubyDNS::ServerPerformanceSpec
|
28
|
-
describe RubyDNS::Server do
|
29
|
-
context 'benchmark' do
|
30
|
-
class ServerPerformanceRubyDNS < Process::Daemon
|
31
|
-
IN = Resolv::DNS::Resource::IN
|
32
|
-
|
33
|
-
def working_directory
|
34
|
-
File.expand_path("../tmp", __FILE__)
|
35
|
-
end
|
36
|
-
|
37
|
-
def startup
|
38
|
-
puts "Booting celluloid..."
|
39
|
-
Celluloid.boot
|
40
|
-
|
41
|
-
million = {}
|
42
|
-
|
43
|
-
puts "Generating domains..."
|
44
|
-
(1..5_000).each do |i|
|
45
|
-
domain = "domain#{i}.local"
|
46
|
-
|
47
|
-
million[domain] = "#{69}.#{(i >> 16)%256}.#{(i >> 8)%256}.#{i%256}"
|
48
|
-
end
|
49
|
-
|
50
|
-
puts "Starting DNS server..."
|
51
|
-
RubyDNS::run_server(:listen => [[:udp, '0.0.0.0', 5300]]) do
|
52
|
-
@logger.level = Logger::WARN
|
53
|
-
|
54
|
-
match(//, IN::A) do |transaction|
|
55
|
-
puts "Responding to #{transaction.name}"
|
56
|
-
transaction.respond!(million[transaction.name])
|
57
|
-
end
|
58
|
-
|
59
|
-
# Default DNS handler
|
60
|
-
otherwise do |transaction|
|
61
|
-
transaction.fail!(:NXDomain)
|
62
|
-
end
|
63
|
-
end
|
64
|
-
end
|
65
|
-
end
|
66
|
-
|
67
|
-
class ServerPerformanceBind9 < Process::Daemon
|
68
|
-
def working_directory
|
69
|
-
File.expand_path("../server/bind9", __FILE__)
|
70
|
-
end
|
71
|
-
|
72
|
-
def startup
|
73
|
-
exec(self.class.named_executable, "-c", "named.conf", "-f", "-p", "5400", "-g")
|
74
|
-
end
|
75
|
-
|
76
|
-
def self.named_executable
|
77
|
-
# Check if named executable is available:
|
78
|
-
@named ||= `which named`.chomp
|
79
|
-
end
|
80
|
-
end
|
81
|
-
|
82
|
-
before do
|
83
|
-
Celluloid.shutdown
|
84
|
-
|
85
|
-
@servers = []
|
86
|
-
@servers << ["RubyDNS::Server", 5300]
|
87
|
-
|
88
|
-
@domains = (1..1000).collect do |i|
|
89
|
-
"domain#{i}.local"
|
90
|
-
end
|
91
|
-
|
92
|
-
ServerPerformanceRubyDNS.start
|
93
|
-
|
94
|
-
unless ServerPerformanceBind9.named_executable.empty?
|
95
|
-
ServerPerformanceBind9.start
|
96
|
-
@servers << ["Bind9", 5400]
|
97
|
-
end
|
98
|
-
|
99
|
-
sleep 2
|
100
|
-
|
101
|
-
Celluloid.boot
|
102
|
-
end
|
103
|
-
|
104
|
-
after do
|
105
|
-
ServerPerformanceRubyDNS.stop
|
106
|
-
|
107
|
-
unless ServerPerformanceBind9.named_executable.empty?
|
108
|
-
ServerPerformanceBind9.stop
|
109
|
-
end
|
110
|
-
end
|
111
|
-
|
112
|
-
it 'it takes time' do
|
113
|
-
Celluloid.logger.level = Logger::ERROR
|
114
|
-
|
115
|
-
Benchmark.bm(20) do |x|
|
116
|
-
@servers.each do |name, port|
|
117
|
-
resolver = RubyDNS::Resolver.new([[:udp, '127.0.0.1', port]])
|
118
|
-
|
119
|
-
x.report(name) do
|
120
|
-
# Number of requests remaining since this is an asynchronous event loop:
|
121
|
-
5.times do
|
122
|
-
pending = @domains.size
|
123
|
-
|
124
|
-
futures = @domains.collect{|domain| resolver.future.addresses_for(domain)}
|
125
|
-
|
126
|
-
futures.collect do |future|
|
127
|
-
expect(future.value).to_not be nil
|
128
|
-
end
|
129
|
-
end
|
130
|
-
end
|
131
|
-
end
|
132
|
-
end
|
133
|
-
end
|
134
|
-
end
|
135
|
-
end
|
136
|
-
end
|
@@ -1,89 +0,0 @@
|
|
1
|
-
#!/usr/bin/env ruby
|
2
|
-
|
3
|
-
# Copyright, 2012, by Samuel G. D. Williams. <http://www.codeotaku.com>
|
4
|
-
#
|
5
|
-
# Permission is hereby granted, free of charge, to any person obtaining a copy
|
6
|
-
# of this software and associated documentation files (the "Software"), to deal
|
7
|
-
# in the Software without restriction, including without limitation the rights
|
8
|
-
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
9
|
-
# copies of the Software, and to permit persons to whom the Software is
|
10
|
-
# furnished to do so, subject to the following conditions:
|
11
|
-
#
|
12
|
-
# The above copyright notice and this permission notice shall be included in
|
13
|
-
# all copies or substantial portions of the Software.
|
14
|
-
#
|
15
|
-
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
16
|
-
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
17
|
-
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
18
|
-
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
19
|
-
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
20
|
-
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
21
|
-
# THE SOFTWARE.
|
22
|
-
|
23
|
-
require 'rubydns'
|
24
|
-
|
25
|
-
module RubyDNS::SlowServerSpec
|
26
|
-
SERVER_PORTS = [[:udp, '127.0.0.1', 5330], [:tcp, '127.0.0.1', 5330]]
|
27
|
-
IN = Resolv::DNS::Resource::IN
|
28
|
-
|
29
|
-
describe "RubyDNS Slow Server" do
|
30
|
-
before(:all) do
|
31
|
-
Celluloid.shutdown
|
32
|
-
Celluloid.boot
|
33
|
-
|
34
|
-
@server = RubyDNS::run_server(:listen => SERVER_PORTS, asynchronous: true) do
|
35
|
-
match(/\.*.com/, IN::A) do |transaction|
|
36
|
-
sleep 2
|
37
|
-
|
38
|
-
transaction.fail!(:NXDomain)
|
39
|
-
end
|
40
|
-
|
41
|
-
otherwise do |transaction|
|
42
|
-
transaction.fail!(:NXDomain)
|
43
|
-
end
|
44
|
-
end
|
45
|
-
end
|
46
|
-
|
47
|
-
it "get no answer after 2 seconds" do
|
48
|
-
start_time = Time.now
|
49
|
-
|
50
|
-
resolver = RubyDNS::Resolver.new(SERVER_PORTS, :timeout => 10)
|
51
|
-
|
52
|
-
response = resolver.query("apple.com", IN::A)
|
53
|
-
|
54
|
-
expect(response.answer.length).to be == 0
|
55
|
-
|
56
|
-
end_time = Time.now
|
57
|
-
|
58
|
-
expect(end_time - start_time).to be_within(0.1).of(2.0)
|
59
|
-
end
|
60
|
-
|
61
|
-
it "times out after 1 second" do
|
62
|
-
start_time = Time.now
|
63
|
-
|
64
|
-
resolver = RubyDNS::Resolver.new(SERVER_PORTS, :timeout => 0.5)
|
65
|
-
|
66
|
-
response = resolver.query("apple.com", IN::A)
|
67
|
-
|
68
|
-
expect(response).to be nil
|
69
|
-
|
70
|
-
end_time = Time.now
|
71
|
-
|
72
|
-
expect(end_time - start_time).to be_within(0.1).of(1.0)
|
73
|
-
end
|
74
|
-
|
75
|
-
it "gets no answer immediately" do
|
76
|
-
start_time = Time.now
|
77
|
-
|
78
|
-
resolver = RubyDNS::Resolver.new(SERVER_PORTS, :timeout => 0.5)
|
79
|
-
|
80
|
-
response = resolver.query("oriontransfer.org", IN::A)
|
81
|
-
|
82
|
-
expect(response.answer.length).to be 0
|
83
|
-
|
84
|
-
end_time = Time.now
|
85
|
-
|
86
|
-
expect(end_time - start_time).to be_within(0.1).of(0.0)
|
87
|
-
end
|
88
|
-
end
|
89
|
-
end
|
data/spec/rubydns/socket_spec.rb
DELETED
@@ -1,77 +0,0 @@
|
|
1
|
-
#!/usr/bin/env ruby
|
2
|
-
|
3
|
-
# Copyright, 2014, by Samuel G. D. Williams. <http://www.codeotaku.com>
|
4
|
-
#
|
5
|
-
# Permission is hereby granted, free of charge, to any person obtaining a copy
|
6
|
-
# of this software and associated documentation files (the "Software"), to deal
|
7
|
-
# in the Software without restriction, including without limitation the rights
|
8
|
-
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
9
|
-
# copies of the Software, and to permit persons to whom the Software is
|
10
|
-
# furnished to do so, subject to the following conditions:
|
11
|
-
#
|
12
|
-
# The above copyright notice and this permission notice shall be included in
|
13
|
-
# all copies or substantial portions of the Software.
|
14
|
-
#
|
15
|
-
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
16
|
-
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
17
|
-
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
18
|
-
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
19
|
-
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
20
|
-
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
21
|
-
# THE SOFTWARE.
|
22
|
-
|
23
|
-
require 'rubydns'
|
24
|
-
require 'rubydns/system'
|
25
|
-
|
26
|
-
module RubyDNS::SocketSpec
|
27
|
-
IN = Resolv::DNS::Resource::IN
|
28
|
-
|
29
|
-
describe RubyDNS::TCPSocketHandler do
|
30
|
-
before(:all) do
|
31
|
-
Celluloid.shutdown
|
32
|
-
Celluloid.boot
|
33
|
-
end
|
34
|
-
|
35
|
-
it "should create server with existing TCP socket" do
|
36
|
-
socket = TCPServer.new('127.0.0.1', 2002)
|
37
|
-
|
38
|
-
# Start the RubyDNS server
|
39
|
-
@server = RubyDNS::run_server(:listen => [socket], asynchronous: true) do
|
40
|
-
resolver = RubyDNS::Resolver.new([[:udp, "8.8.8.8", 53], [:tcp, "8.8.8.8", 53]])
|
41
|
-
|
42
|
-
match(/.*\.com/, IN::A) do |transaction|
|
43
|
-
transaction.passthrough!(resolver)
|
44
|
-
end
|
45
|
-
end
|
46
|
-
|
47
|
-
resolver = RubyDNS::Resolver.new([[:tcp, '127.0.0.1', 2002]])
|
48
|
-
response = resolver.query('google.com')
|
49
|
-
expect(response.class).to be == RubyDNS::Message
|
50
|
-
end
|
51
|
-
end
|
52
|
-
|
53
|
-
describe RubyDNS::UDPSocketHandler do
|
54
|
-
before(:all) do
|
55
|
-
Celluloid.shutdown
|
56
|
-
Celluloid.boot
|
57
|
-
end
|
58
|
-
|
59
|
-
it "should create server with existing UDP socket" do
|
60
|
-
socket = UDPSocket.new
|
61
|
-
socket.bind('127.0.0.1', 2002)
|
62
|
-
|
63
|
-
# Start the RubyDNS server
|
64
|
-
@server = RubyDNS::run_server(:listen => [socket], asynchronous: true) do
|
65
|
-
resolver = RubyDNS::Resolver.new([[:udp, "8.8.8.8", 53], [:tcp, "8.8.8.8", 53]])
|
66
|
-
|
67
|
-
match(/.*\.com/, IN::A) do |transaction|
|
68
|
-
transaction.passthrough!(resolver)
|
69
|
-
end
|
70
|
-
end
|
71
|
-
|
72
|
-
resolver = RubyDNS::Resolver.new([[:udp, '127.0.0.1', 2002]])
|
73
|
-
response = resolver.query('google.com')
|
74
|
-
expect(response.class).to be == RubyDNS::Message
|
75
|
-
end
|
76
|
-
end
|
77
|
-
end
|
data/spec/rubydns/system_spec.rb
DELETED
@@ -1,60 +0,0 @@
|
|
1
|
-
#!/usr/bin/env ruby
|
2
|
-
|
3
|
-
# Copyright, 2012, by Samuel G. D. Williams. <http://www.codeotaku.com>
|
4
|
-
#
|
5
|
-
# Permission is hereby granted, free of charge, to any person obtaining a copy
|
6
|
-
# of this software and associated documentation files (the "Software"), to deal
|
7
|
-
# in the Software without restriction, including without limitation the rights
|
8
|
-
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
9
|
-
# copies of the Software, and to permit persons to whom the Software is
|
10
|
-
# furnished to do so, subject to the following conditions:
|
11
|
-
#
|
12
|
-
# The above copyright notice and this permission notice shall be included in
|
13
|
-
# all copies or substantial portions of the Software.
|
14
|
-
#
|
15
|
-
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
16
|
-
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
17
|
-
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
18
|
-
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
19
|
-
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
20
|
-
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
21
|
-
# THE SOFTWARE.
|
22
|
-
|
23
|
-
require 'rubydns'
|
24
|
-
require 'rubydns/system'
|
25
|
-
|
26
|
-
module RubyDNS::SystemSpec
|
27
|
-
describe RubyDNS::System do
|
28
|
-
before(:all) do
|
29
|
-
Celluloid.shutdown
|
30
|
-
Celluloid.boot
|
31
|
-
end
|
32
|
-
|
33
|
-
it "should have at least one namesever" do
|
34
|
-
expect(RubyDNS::System::nameservers.length).to be > 0
|
35
|
-
end
|
36
|
-
|
37
|
-
it "should respond to query for google.com" do
|
38
|
-
resolver = RubyDNS::Resolver.new(RubyDNS::System::nameservers)
|
39
|
-
|
40
|
-
response = resolver.query('google.com')
|
41
|
-
|
42
|
-
expect(response.class).to be == RubyDNS::Message
|
43
|
-
expect(response.rcode).to be == Resolv::DNS::RCode::NoError
|
44
|
-
end
|
45
|
-
end
|
46
|
-
|
47
|
-
describe RubyDNS::System::Hosts do
|
48
|
-
it "should parse the hosts file" do
|
49
|
-
hosts = RubyDNS::System::Hosts.new
|
50
|
-
|
51
|
-
# Load the test hosts data:
|
52
|
-
File.open(File.expand_path("../hosts.txt", __FILE__)) do |file|
|
53
|
-
hosts.parse_hosts(file)
|
54
|
-
end
|
55
|
-
|
56
|
-
expect(hosts.call('testing')).to be == true
|
57
|
-
expect(hosts['testing']).to be == '1.2.3.4'
|
58
|
-
end
|
59
|
-
end
|
60
|
-
end
|