rubydns 1.0.3 → 2.0.0.pre.rc1

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