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.
Files changed (51) hide show
  1. checksums.yaml +4 -4
  2. data/.rspec +4 -0
  3. data/.travis.yml +9 -12
  4. data/Gemfile +4 -1
  5. data/README.md +49 -151
  6. data/Rakefile +2 -7
  7. data/examples/basic-dns.rb +24 -0
  8. data/examples/cname.rb +25 -0
  9. data/examples/flakey-dns.rb +2 -2
  10. data/examples/simple.rb +25 -0
  11. data/examples/soa-dns.rb +82 -0
  12. data/examples/test-dns-1.rb +83 -0
  13. data/examples/test-dns-2.rb +83 -0
  14. data/examples/wikipedia-dns.rb +4 -18
  15. data/lib/rubydns.rb +9 -23
  16. data/lib/rubydns/{server.rb → rule_based_server.rb} +2 -160
  17. data/lib/rubydns/version.rb +1 -1
  18. data/rubydns.gemspec +3 -6
  19. data/spec/rubydns/daemon_spec.rb +26 -22
  20. data/spec/rubydns/injected_supervisor_spec.rb +10 -7
  21. data/spec/rubydns/passthrough_spec.rb +31 -24
  22. data/spec/spec_helper.rb +43 -0
  23. metadata +21 -100
  24. data/lib/rubydns/chunked.rb +0 -34
  25. data/lib/rubydns/extensions/resolv.rb +0 -85
  26. data/lib/rubydns/extensions/string.rb +0 -28
  27. data/lib/rubydns/handler.rb +0 -188
  28. data/lib/rubydns/logger.rb +0 -31
  29. data/lib/rubydns/message.rb +0 -76
  30. data/lib/rubydns/resolver.rb +0 -294
  31. data/lib/rubydns/system.rb +0 -146
  32. data/lib/rubydns/transaction.rb +0 -204
  33. data/lib/rubydns/transport.rb +0 -75
  34. data/spec/rubydns/celluloid_bug_spec.rb +0 -92
  35. data/spec/rubydns/ipv6_spec.rb +0 -70
  36. data/spec/rubydns/message_spec.rb +0 -56
  37. data/spec/rubydns/origin_spec.rb +0 -106
  38. data/spec/rubydns/resolver_performance_spec.rb +0 -110
  39. data/spec/rubydns/resolver_spec.rb +0 -152
  40. data/spec/rubydns/server/bind9/generate-local.rb +0 -25
  41. data/spec/rubydns/server/bind9/local.zone +0 -5014
  42. data/spec/rubydns/server/bind9/named.conf +0 -14
  43. data/spec/rubydns/server/bind9/named.run +0 -0
  44. data/spec/rubydns/server/million.rb +0 -85
  45. data/spec/rubydns/server/rubydns.stackprof +0 -0
  46. data/spec/rubydns/server_performance_spec.rb +0 -136
  47. data/spec/rubydns/slow_server_spec.rb +0 -89
  48. data/spec/rubydns/socket_spec.rb +0 -77
  49. data/spec/rubydns/system_spec.rb +0 -60
  50. data/spec/rubydns/transaction_spec.rb +0 -138
  51. data/spec/rubydns/truncation_spec.rb +0 -59
@@ -28,14 +28,11 @@ Gem::Specification.new do |spec|
28
28
  spec.require_paths = ["lib"]
29
29
  spec.has_rdoc = "yard"
30
30
 
31
- spec.required_ruby_version = '>= 1.9.3'
31
+ spec.required_ruby_version = '>= 2.2.6'
32
32
 
33
- spec.add_dependency("celluloid", "= 0.16.0")
34
- spec.add_dependency("celluloid-io", "= 0.16.2")
35
- spec.add_dependency("timers", "~> 4.0.1")
33
+ spec.add_dependency("async-dns", "~> 0.10")
36
34
 
37
35
  spec.add_development_dependency "bundler", "~> 1.3"
38
- spec.add_development_dependency "process-daemon", "~> 0.5.5"
39
- spec.add_development_dependency "rspec", "~> 3.2.0"
36
+ spec.add_development_dependency "rspec", "~> 3.4"
40
37
  spec.add_development_dependency "rake"
41
38
  end
@@ -32,40 +32,44 @@ class BasicTestServer < Process::Daemon
32
32
  File.expand_path("../tmp", __FILE__)
33
33
  end
34
34
 
35
+ def reactor
36
+ Async::Reactor.new
37
+ end
38
+
35
39
  def startup
36
- Celluloid.boot
37
-
38
- # Start the RubyDNS server
39
- RubyDNS::run_server(:listen => SERVER_PORTS) do
40
- match("test.local", IN::A) do |transaction|
41
- transaction.respond!("192.168.1.1")
42
- end
40
+ reactor.run do
41
+ RubyDNS::run_server(listen: SERVER_PORTS) do
42
+ match("test.local", IN::A) do |transaction|
43
+ transaction.respond!("192.168.1.1")
44
+ end
43
45
 
44
- match(/foo.*/, IN::A) do |transaction|
45
- transaction.respond!("192.168.1.2")
46
- end
46
+ match(/foo.*/, IN::A) do |transaction|
47
+ transaction.respond!("192.168.1.2")
48
+ end
47
49
 
48
- match(/peername/, IN::A) do |transaction|
49
- transaction.respond!(transaction[:peer])
50
- end
50
+ match(/peername/, IN::A) do |transaction|
51
+ transaction.respond!(transaction[:peer])
52
+ end
51
53
 
52
- # Default DNS handler
53
- otherwise do |transaction|
54
- transaction.fail!(:NXDomain)
54
+ # Default DNS handler
55
+ otherwise do |transaction|
56
+ transaction.fail!(:NXDomain)
57
+ end
55
58
  end
56
59
  end
57
60
  end
61
+
62
+ def shutdown
63
+ @reactor.stop
64
+ end
58
65
  end
59
66
 
60
67
  describe "RubyDNS Daemonized Server" do
68
+ include_context "reactor"
69
+
61
70
  before(:all) do
62
- Celluloid.shutdown
63
-
64
- # Trying to fork with Celluloid running is a recipe for disaster.
65
71
  # BasicTestServer.controller output: $stderr
66
72
  BasicTestServer.start
67
-
68
- Celluloid.boot
69
73
  end
70
74
 
71
75
  after(:all) do
@@ -75,7 +79,7 @@ describe "RubyDNS Daemonized Server" do
75
79
  it "should resolve local domain correctly" do
76
80
  expect(BasicTestServer.status).to be == :running
77
81
 
78
- resolver = RubyDNS::Resolver.new(BasicTestServer::SERVER_PORTS, search_domain: '')
82
+ resolver = RubyDNS::Resolver.new(BasicTestServer::SERVER_PORTS)
79
83
 
80
84
  response = resolver.query("test.local")
81
85
 
@@ -21,7 +21,7 @@
21
21
  # THE SOFTWARE.
22
22
 
23
23
  require 'rubydns'
24
- require 'rubydns/extensions/string'
24
+ require 'async/dns/extensions/string'
25
25
 
26
26
  module RubyDNS::InjectedSupervisorSpec
27
27
  class TestServer < RubyDNS::RuleBasedServer
@@ -33,13 +33,12 @@ module RubyDNS::InjectedSupervisorSpec
33
33
  SERVER_PORTS = [[:udp, '127.0.0.1', 5520]]
34
34
  IN = Resolv::DNS::Resource::IN
35
35
 
36
- describe "RubyDNS Injected Supervisor" do
37
- before(:all) do
38
- Celluloid.shutdown
39
- Celluloid.boot
40
-
36
+ describe "RubyDNS::run_server(server_class: ...)" do
37
+ include_context "reactor"
38
+
39
+ let(:server) do
41
40
  # Start the RubyDNS server
42
- RubyDNS::run_server(listen: SERVER_PORTS, server_class: TestServer, asynchronous: true) do
41
+ RubyDNS::run_server(listen: SERVER_PORTS, server_class: TestServer) do
43
42
  match("test_message", IN::TXT) do |transaction|
44
43
  transaction.respond!(*test_message.chunked)
45
44
  end
@@ -52,10 +51,14 @@ module RubyDNS::InjectedSupervisorSpec
52
51
  end
53
52
 
54
53
  it "should use the injected class" do
54
+ task = server
55
+
55
56
  resolver = RubyDNS::Resolver.new(SERVER_PORTS)
56
57
  response = resolver.query("test_message", IN::TXT)
57
58
  text = response.answer.first
58
59
  expect(text[2].strings.join).to be == 'Testing...'
60
+
61
+ task.stop
59
62
  end
60
63
  end
61
64
  end
@@ -28,12 +28,10 @@ module RubyDNS::PassthroughSpec
28
28
  IN = Resolv::DNS::Resource::IN
29
29
 
30
30
  describe "RubyDNS Passthrough Server" do
31
- before(:all) do
32
- Celluloid.shutdown
33
- Celluloid.boot
31
+ include_context "reactor"
34
32
 
35
- # Start the RubyDNS server
36
- @server = RubyDNS::run_server(:listen => SERVER_PORTS, asynchronous: true) do
33
+ def run_server
34
+ task = RubyDNS::run_server(:listen => SERVER_PORTS) do
37
35
  resolver = RubyDNS::Resolver.new([[:udp, "8.8.8.8", 53], [:tcp, "8.8.8.8", 53]])
38
36
 
39
37
  match(/.*\.com/, IN::A) do |transaction|
@@ -49,30 +47,39 @@ module RubyDNS::PassthroughSpec
49
47
  transaction.fail!(:NXDomain)
50
48
  end
51
49
  end
50
+
51
+ yield
52
+
53
+ ensure
54
+ task.stop
52
55
  end
53
-
54
- it "should resolve domain correctly" do
55
- resolver = RubyDNS::Resolver.new(SERVER_PORTS)
56
56
 
57
- response = resolver.query("google.com")
58
- expect(response.ra).to be == 1
59
-
60
- answer = response.answer.first
61
- expect(answer).not_to be == nil
62
- expect(answer.count).to be > 0
63
-
64
- addresses = answer.select {|record| record.kind_of? Resolv::DNS::Resource::IN::A}
65
- expect(addresses.size).to be > 0
57
+ it "should resolve domain correctly" do
58
+ run_server do
59
+ resolver = RubyDNS::Resolver.new(SERVER_PORTS, timeout: 1)
60
+
61
+ response = resolver.query("google.com")
62
+ expect(response.ra).to be == 1
63
+
64
+ answer = response.answer.first
65
+ expect(answer).not_to be == nil
66
+ expect(answer.count).to be > 0
67
+
68
+ addresses = answer.select {|record| record.kind_of? Resolv::DNS::Resource::IN::A}
69
+ expect(addresses.size).to be > 0
70
+ end
66
71
  end
67
72
 
68
73
  it "should resolve prefixed domain correctly" do
69
- resolver = RubyDNS::Resolver.new(SERVER_PORTS)
70
-
71
- response = resolver.query("a-slashdot.org")
72
- answer = response.answer.first
73
-
74
- expect(answer).not_to be == nil
75
- expect(answer.count).to be > 0
74
+ run_server do
75
+ resolver = RubyDNS::Resolver.new(SERVER_PORTS)
76
+
77
+ response = resolver.query("a-slashdot.org")
78
+ answer = response.answer.first
79
+
80
+ expect(answer).not_to be == nil
81
+ expect(answer.count).to be > 0
82
+ end
76
83
  end
77
84
  end
78
85
  end
@@ -0,0 +1,43 @@
1
+
2
+ if ENV['COVERAGE'] || ENV['TRAVIS']
3
+ begin
4
+ require 'simplecov'
5
+
6
+ SimpleCov.start do
7
+ add_filter "/spec/"
8
+ end
9
+
10
+ if ENV['TRAVIS']
11
+ require 'coveralls'
12
+ Coveralls.wear!
13
+ end
14
+ rescue LoadError
15
+ warn "Could not load simplecov: #{$!}"
16
+ end
17
+ end
18
+
19
+ require "bundler/setup"
20
+ require "async"
21
+ require "async/tcp_socket"
22
+ require "async/udp_socket"
23
+
24
+ RSpec.shared_context "reactor" do
25
+ let(:reactor) {Async::Reactor.new}
26
+
27
+ around(:each) do |example|
28
+ reactor.run do
29
+ example.run
30
+ end
31
+
32
+ reactor.close
33
+ end
34
+ end
35
+
36
+ RSpec.configure do |config|
37
+ # Enable flags like --only-failures and --next-failure
38
+ config.example_status_persistence_file_path = ".rspec_status"
39
+
40
+ config.expect_with :rspec do |c|
41
+ c.syntax = :expect
42
+ end
43
+ end
metadata CHANGED
@@ -1,57 +1,29 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rubydns
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.3
4
+ version: 2.0.0.pre.rc1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Samuel Williams
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2016-01-03 00:00:00.000000000 Z
11
+ date: 2017-04-09 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
- name: celluloid
15
- requirement: !ruby/object:Gem::Requirement
16
- requirements:
17
- - - '='
18
- - !ruby/object:Gem::Version
19
- version: 0.16.0
20
- type: :runtime
21
- prerelease: false
22
- version_requirements: !ruby/object:Gem::Requirement
23
- requirements:
24
- - - '='
25
- - !ruby/object:Gem::Version
26
- version: 0.16.0
27
- - !ruby/object:Gem::Dependency
28
- name: celluloid-io
29
- requirement: !ruby/object:Gem::Requirement
30
- requirements:
31
- - - '='
32
- - !ruby/object:Gem::Version
33
- version: 0.16.2
34
- type: :runtime
35
- prerelease: false
36
- version_requirements: !ruby/object:Gem::Requirement
37
- requirements:
38
- - - '='
39
- - !ruby/object:Gem::Version
40
- version: 0.16.2
41
- - !ruby/object:Gem::Dependency
42
- name: timers
14
+ name: async-dns
43
15
  requirement: !ruby/object:Gem::Requirement
44
16
  requirements:
45
17
  - - "~>"
46
18
  - !ruby/object:Gem::Version
47
- version: 4.0.1
19
+ version: '0.10'
48
20
  type: :runtime
49
21
  prerelease: false
50
22
  version_requirements: !ruby/object:Gem::Requirement
51
23
  requirements:
52
24
  - - "~>"
53
25
  - !ruby/object:Gem::Version
54
- version: 4.0.1
26
+ version: '0.10'
55
27
  - !ruby/object:Gem::Dependency
56
28
  name: bundler
57
29
  requirement: !ruby/object:Gem::Requirement
@@ -66,34 +38,20 @@ dependencies:
66
38
  - - "~>"
67
39
  - !ruby/object:Gem::Version
68
40
  version: '1.3'
69
- - !ruby/object:Gem::Dependency
70
- name: process-daemon
71
- requirement: !ruby/object:Gem::Requirement
72
- requirements:
73
- - - "~>"
74
- - !ruby/object:Gem::Version
75
- version: 0.5.5
76
- type: :development
77
- prerelease: false
78
- version_requirements: !ruby/object:Gem::Requirement
79
- requirements:
80
- - - "~>"
81
- - !ruby/object:Gem::Version
82
- version: 0.5.5
83
41
  - !ruby/object:Gem::Dependency
84
42
  name: rspec
85
43
  requirement: !ruby/object:Gem::Requirement
86
44
  requirements:
87
45
  - - "~>"
88
46
  - !ruby/object:Gem::Version
89
- version: 3.2.0
47
+ version: '3.4'
90
48
  type: :development
91
49
  prerelease: false
92
50
  version_requirements: !ruby/object:Gem::Requirement
93
51
  requirements:
94
52
  - - "~>"
95
53
  - !ruby/object:Gem::Version
96
- version: 3.2.0
54
+ version: '3.4'
97
55
  - !ruby/object:Gem::Dependency
98
56
  name: rake
99
57
  requirement: !ruby/object:Gem::Requirement
@@ -123,6 +81,7 @@ extensions: []
123
81
  extra_rdoc_files: []
124
82
  files:
125
83
  - ".gitignore"
84
+ - ".rspec"
126
85
  - ".simplecov"
127
86
  - ".travis.yml"
128
87
  - ".yardopts"
@@ -132,47 +91,26 @@ files:
132
91
  - bin/rubydns-check
133
92
  - examples/Gemfile
134
93
  - examples/README.md
94
+ - examples/basic-dns.rb
95
+ - examples/cname.rb
135
96
  - examples/flakey-dns.rb
136
97
  - examples/fortune-dns.rb
137
98
  - examples/geoip-dns.rb
99
+ - examples/simple.rb
100
+ - examples/soa-dns.rb
101
+ - examples/test-dns-1.rb
102
+ - examples/test-dns-2.rb
138
103
  - examples/wikipedia-dns.rb
139
104
  - lib/rubydns.rb
140
- - lib/rubydns/chunked.rb
141
- - lib/rubydns/extensions/resolv.rb
142
- - lib/rubydns/extensions/string.rb
143
- - lib/rubydns/handler.rb
144
- - lib/rubydns/logger.rb
145
- - lib/rubydns/message.rb
146
- - lib/rubydns/resolver.rb
147
- - lib/rubydns/server.rb
148
- - lib/rubydns/system.rb
149
- - lib/rubydns/transaction.rb
150
- - lib/rubydns/transport.rb
105
+ - lib/rubydns/rule_based_server.rb
151
106
  - lib/rubydns/version.rb
152
107
  - rubydns.gemspec
153
- - spec/rubydns/celluloid_bug_spec.rb
154
108
  - spec/rubydns/daemon_spec.rb
155
109
  - spec/rubydns/hosts.txt
156
110
  - spec/rubydns/injected_supervisor_spec.rb
157
- - spec/rubydns/ipv6_spec.rb
158
- - spec/rubydns/message_spec.rb
159
- - spec/rubydns/origin_spec.rb
160
111
  - spec/rubydns/passthrough_spec.rb
161
- - spec/rubydns/resolver_performance_spec.rb
162
- - spec/rubydns/resolver_spec.rb
163
112
  - spec/rubydns/rules_spec.rb
164
- - spec/rubydns/server/bind9/generate-local.rb
165
- - spec/rubydns/server/bind9/local.zone
166
- - spec/rubydns/server/bind9/named.conf
167
- - spec/rubydns/server/bind9/named.run
168
- - spec/rubydns/server/million.rb
169
- - spec/rubydns/server/rubydns.stackprof
170
- - spec/rubydns/server_performance_spec.rb
171
- - spec/rubydns/slow_server_spec.rb
172
- - spec/rubydns/socket_spec.rb
173
- - spec/rubydns/system_spec.rb
174
- - spec/rubydns/transaction_spec.rb
175
- - spec/rubydns/truncation_spec.rb
113
+ - spec/spec_helper.rb
176
114
  homepage: http://www.codeotaku.com/projects/rubydns
177
115
  licenses:
178
116
  - MIT
@@ -185,39 +123,22 @@ required_ruby_version: !ruby/object:Gem::Requirement
185
123
  requirements:
186
124
  - - ">="
187
125
  - !ruby/object:Gem::Version
188
- version: 1.9.3
126
+ version: 2.2.6
189
127
  required_rubygems_version: !ruby/object:Gem::Requirement
190
128
  requirements:
191
- - - ">="
129
+ - - ">"
192
130
  - !ruby/object:Gem::Version
193
- version: '0'
131
+ version: 1.3.1
194
132
  requirements: []
195
133
  rubyforge_project:
196
- rubygems_version: 2.4.6
134
+ rubygems_version: 2.6.10
197
135
  signing_key:
198
136
  specification_version: 4
199
137
  summary: An easy to use DNS server and resolver for Ruby.
200
138
  test_files:
201
- - spec/rubydns/celluloid_bug_spec.rb
202
139
  - spec/rubydns/daemon_spec.rb
203
140
  - spec/rubydns/hosts.txt
204
141
  - spec/rubydns/injected_supervisor_spec.rb
205
- - spec/rubydns/ipv6_spec.rb
206
- - spec/rubydns/message_spec.rb
207
- - spec/rubydns/origin_spec.rb
208
142
  - spec/rubydns/passthrough_spec.rb
209
- - spec/rubydns/resolver_performance_spec.rb
210
- - spec/rubydns/resolver_spec.rb
211
143
  - spec/rubydns/rules_spec.rb
212
- - spec/rubydns/server/bind9/generate-local.rb
213
- - spec/rubydns/server/bind9/local.zone
214
- - spec/rubydns/server/bind9/named.conf
215
- - spec/rubydns/server/bind9/named.run
216
- - spec/rubydns/server/million.rb
217
- - spec/rubydns/server/rubydns.stackprof
218
- - spec/rubydns/server_performance_spec.rb
219
- - spec/rubydns/slow_server_spec.rb
220
- - spec/rubydns/socket_spec.rb
221
- - spec/rubydns/system_spec.rb
222
- - spec/rubydns/transaction_spec.rb
223
- - spec/rubydns/truncation_spec.rb
144
+ - spec/spec_helper.rb