dns_adapter 0.0.2 → 0.0.3
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.
- checksums.yaml +4 -4
- data/lib/dns_adapter/resolv_client.rb +16 -8
- data/lib/dns_adapter/version.rb +1 -1
- data/spec/mock_client_spec.rb +4 -0
- data/spec/resolv_client_spec.rb +68 -13
- metadata +5 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 02c19670fbd1108a45d6c80bdac4329a77e784d2
|
4
|
+
data.tar.gz: 9a725d4d553ebec3386a505ee01ab6ce9a92a303
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 49fb8d15b30460c3034f36002fc5c891ff6dd02f44266d4c445b1e74f0a75bf9561ffff8993ece11fd5abb94e33466bfdea4e9b97d80363288a978585393022a
|
7
|
+
data.tar.gz: 4bf6e56344dae4e03a5ab49cd45d31d4a6060686d41668191ce66158d41ab928f18d0217d55790d80744cf1a8f7a688198dc3080a76a705944112b7398d78a69
|
@@ -23,13 +23,7 @@ module DNSAdapter
|
|
23
23
|
end
|
24
24
|
|
25
25
|
def fetch_ptr_records(arpa_address)
|
26
|
-
|
27
|
-
{
|
28
|
-
type: 'PTR',
|
29
|
-
name: record.name.to_s,
|
30
|
-
ttl: record.ttl
|
31
|
-
}
|
32
|
-
end
|
26
|
+
fetch_name_records(arpa_address, 'PTR')
|
33
27
|
end
|
34
28
|
|
35
29
|
def fetch_txt_records(domain)
|
@@ -40,6 +34,10 @@ module DNSAdapter
|
|
40
34
|
fetch_txt_type_records(domain, 'SPF')
|
41
35
|
end
|
42
36
|
|
37
|
+
def fetch_ns_records(domain)
|
38
|
+
fetch_name_records(domain, 'NS')
|
39
|
+
end
|
40
|
+
|
43
41
|
private
|
44
42
|
|
45
43
|
def fetch_a_type_records(domain, type)
|
@@ -64,6 +62,16 @@ module DNSAdapter
|
|
64
62
|
end
|
65
63
|
end
|
66
64
|
|
65
|
+
def fetch_name_records(domain, type)
|
66
|
+
fetch_records(domain, type) do |record|
|
67
|
+
{
|
68
|
+
type: type,
|
69
|
+
name: record.name.to_s,
|
70
|
+
ttl: record.ttl
|
71
|
+
}
|
72
|
+
end
|
73
|
+
end
|
74
|
+
|
67
75
|
def fetch_records(domain, type, &block)
|
68
76
|
records = dns_lookup(domain, type)
|
69
77
|
records.map(&block)
|
@@ -96,7 +104,7 @@ module DNSAdapter
|
|
96
104
|
raise DNSAdapter::Error, "Error on DNS lookup of '#{domain}'"
|
97
105
|
end
|
98
106
|
|
99
|
-
SUPPORTED_RR_TYPES = %w(A AAAA MX PTR TXT SPF)
|
107
|
+
SUPPORTED_RR_TYPES = %w(A AAAA MX PTR TXT SPF NS)
|
100
108
|
def self.type_class(rr_type)
|
101
109
|
if SUPPORTED_RR_TYPES.include?(rr_type)
|
102
110
|
Resolv::DNS::Resource::IN.const_get(rr_type)
|
data/lib/dns_adapter/version.rb
CHANGED
data/spec/resolv_client_spec.rb
CHANGED
@@ -172,7 +172,8 @@ describe DNSAdapter::ResolvClient do
|
|
172
172
|
it 'should map the Resolv errors to Coppertone errors' do
|
173
173
|
expect(Resolv::DNS).to receive(:new).and_return(mock_resolver)
|
174
174
|
expect(mock_resolver).to receive(:getresources)
|
175
|
-
.with(domain, Resolv::DNS::Resource::IN::MX)
|
175
|
+
.with(domain, Resolv::DNS::Resource::IN::MX)
|
176
|
+
.and_raise(Resolv::ResolvError)
|
176
177
|
expect { subject.fetch_mx_records(domain_with_trailing) }
|
177
178
|
.to raise_error(DNSAdapter::Error)
|
178
179
|
end
|
@@ -207,8 +208,8 @@ describe DNSAdapter::ResolvClient do
|
|
207
208
|
it 'should map the Resolv classes to a set of hashes' do
|
208
209
|
expect(Resolv::DNS).to receive(:new).and_return(mock_resolver)
|
209
210
|
expect(mock_resolver).to receive(:getresources)
|
210
|
-
|
211
|
-
|
211
|
+
.with(domain, Resolv::DNS::Resource::IN::TXT)
|
212
|
+
.and_return(record_list)
|
212
213
|
results = subject.fetch_txt_records(domain)
|
213
214
|
expect(results.size).to eq(record_list.length)
|
214
215
|
expect(results.map { |x| x[:type] })
|
@@ -221,8 +222,8 @@ describe DNSAdapter::ResolvClient do
|
|
221
222
|
it 'should map when the domain has a trailing dot' do
|
222
223
|
expect(Resolv::DNS).to receive(:new).and_return(mock_resolver)
|
223
224
|
expect(mock_resolver).to receive(:getresources)
|
224
|
-
|
225
|
-
|
225
|
+
.with(domain, Resolv::DNS::Resource::IN::TXT)
|
226
|
+
.and_return(record_list)
|
226
227
|
results = subject.fetch_txt_records(domain_with_trailing)
|
227
228
|
expect(results.size).to eq(record_list.length)
|
228
229
|
expect(results.map { |x| x[:type] })
|
@@ -271,8 +272,8 @@ describe DNSAdapter::ResolvClient do
|
|
271
272
|
it 'should map the Resolv classes to a set of hashes' do
|
272
273
|
expect(Resolv::DNS).to receive(:new).and_return(mock_resolver)
|
273
274
|
expect(mock_resolver).to receive(:getresources)
|
274
|
-
|
275
|
-
|
275
|
+
.with(domain, Resolv::DNS::Resource::IN::SPF)
|
276
|
+
.and_return(record_list)
|
276
277
|
results = subject.fetch_spf_records(domain)
|
277
278
|
expect(results.size).to eq(record_list.length)
|
278
279
|
expect(results.map { |x| x[:type] })
|
@@ -285,8 +286,8 @@ describe DNSAdapter::ResolvClient do
|
|
285
286
|
it 'should map when the domain has a trailing dot' do
|
286
287
|
expect(Resolv::DNS).to receive(:new).and_return(mock_resolver)
|
287
288
|
expect(mock_resolver).to receive(:getresources)
|
288
|
-
|
289
|
-
|
289
|
+
.with(domain, Resolv::DNS::Resource::IN::SPF)
|
290
|
+
.and_return(record_list)
|
290
291
|
results = subject.fetch_spf_records(domain_with_trailing)
|
291
292
|
expect(results.size).to eq(record_list.length)
|
292
293
|
expect(results.map { |x| x[:type] })
|
@@ -327,8 +328,8 @@ describe DNSAdapter::ResolvClient do
|
|
327
328
|
it 'should map the Resolv classes to a set of hashes' do
|
328
329
|
expect(Resolv::DNS).to receive(:new).and_return(mock_resolver)
|
329
330
|
expect(mock_resolver).to receive(:getresources)
|
330
|
-
|
331
|
-
|
331
|
+
.with(arpa_domain, Resolv::DNS::Resource::IN::PTR)
|
332
|
+
.and_return(record_list)
|
332
333
|
results = subject.fetch_ptr_records(arpa_domain)
|
333
334
|
expect(results.size).to eq(record_list.length)
|
334
335
|
expect(results.map { |x| x[:type] })
|
@@ -340,8 +341,8 @@ describe DNSAdapter::ResolvClient do
|
|
340
341
|
it 'should map when the domain has a trailing dot' do
|
341
342
|
expect(Resolv::DNS).to receive(:new).and_return(mock_resolver)
|
342
343
|
expect(mock_resolver).to receive(:getresources)
|
343
|
-
|
344
|
-
|
344
|
+
.with(arpa_domain, Resolv::DNS::Resource::IN::PTR)
|
345
|
+
.and_return(record_list)
|
345
346
|
results = subject.fetch_ptr_records(arpa_domain_with_trailing)
|
346
347
|
expect(results.size).to eq(record_list.length)
|
347
348
|
expect(results.map { |x| x[:type] })
|
@@ -368,4 +369,58 @@ describe DNSAdapter::ResolvClient do
|
|
368
369
|
.to raise_error(DNSAdapter::TimeoutError)
|
369
370
|
end
|
370
371
|
end
|
372
|
+
|
373
|
+
context '#fetch_ns_records' do
|
374
|
+
let(:first_ns_name) { SecureRandom.hex(10) }
|
375
|
+
let(:first_ns_record) do
|
376
|
+
Resolv::DNS::Resource::IN::NS.new(first_ns_name)
|
377
|
+
end
|
378
|
+
let(:record_list) { [first_ns_record] }
|
379
|
+
let(:ns_domain) { 'example.com' }
|
380
|
+
let(:ns_domain_with_trailing) { "#{ns_domain}." }
|
381
|
+
|
382
|
+
it 'should map the Resolv classes to a set of hashes' do
|
383
|
+
expect(Resolv::DNS).to receive(:new).and_return(mock_resolver)
|
384
|
+
expect(mock_resolver).to receive(:getresources)
|
385
|
+
.with(ns_domain, Resolv::DNS::Resource::IN::NS)
|
386
|
+
.and_return(record_list)
|
387
|
+
results = subject.fetch_ns_records(ns_domain)
|
388
|
+
expect(results.size).to eq(record_list.length)
|
389
|
+
expect(results.map { |x| x[:type] })
|
390
|
+
.to eq(record_list.length.times.map { 'NS' })
|
391
|
+
expect(results.map { |x| x[:name] }).to eq(
|
392
|
+
[first_ns_name])
|
393
|
+
end
|
394
|
+
|
395
|
+
it 'should map when the domain has a trailing dot' do
|
396
|
+
expect(Resolv::DNS).to receive(:new).and_return(mock_resolver)
|
397
|
+
expect(mock_resolver).to receive(:getresources)
|
398
|
+
.with(ns_domain, Resolv::DNS::Resource::IN::NS)
|
399
|
+
.and_return(record_list)
|
400
|
+
results = subject.fetch_ns_records(ns_domain_with_trailing)
|
401
|
+
expect(results.size).to eq(record_list.length)
|
402
|
+
expect(results.map { |x| x[:type] })
|
403
|
+
.to eq(record_list.length.times.map { 'NS' })
|
404
|
+
expect(results.map { |x| x[:name] }).to eq(
|
405
|
+
[first_ns_name])
|
406
|
+
end
|
407
|
+
|
408
|
+
it 'should map the Resolv errors to Coppertone errors' do
|
409
|
+
expect(Resolv::DNS).to receive(:new).and_return(mock_resolver)
|
410
|
+
expect(mock_resolver).to receive(:getresources)
|
411
|
+
.with(ns_domain, Resolv::DNS::Resource::IN::NS)
|
412
|
+
.and_raise(Resolv::ResolvError)
|
413
|
+
expect { subject.fetch_ns_records(ns_domain_with_trailing) }
|
414
|
+
.to raise_error(DNSAdapter::Error)
|
415
|
+
end
|
416
|
+
|
417
|
+
it 'should map the Resolv timeout errors to Coppertone errors' do
|
418
|
+
expect(Resolv::DNS).to receive(:new).and_return(mock_resolver)
|
419
|
+
expect(mock_resolver).to receive(:getresources)
|
420
|
+
.with(ns_domain, Resolv::DNS::Resource::IN::NS)
|
421
|
+
.and_raise(Resolv::ResolvTimeout)
|
422
|
+
expect { subject.fetch_ns_records(ns_domain_with_trailing) }
|
423
|
+
.to raise_error(DNSAdapter::TimeoutError)
|
424
|
+
end
|
425
|
+
end
|
371
426
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: dns_adapter
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Peter M. Goldstein
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-
|
11
|
+
date: 2015-05-16 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -86,6 +86,7 @@ files:
|
|
86
86
|
- lib/dns_adapter/resolv_client.rb
|
87
87
|
- lib/dns_adapter/version.rb
|
88
88
|
- lib/resolv/dns/resource/in/spf.rb
|
89
|
+
- spec/mock_client_spec.rb
|
89
90
|
- spec/resolv_client_spec.rb
|
90
91
|
- spec/spec_helper.rb
|
91
92
|
homepage: https://github.com/petergoldstein/dns_adapter
|
@@ -108,10 +109,11 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
108
109
|
version: '0'
|
109
110
|
requirements: []
|
110
111
|
rubyforge_project:
|
111
|
-
rubygems_version: 2.4.
|
112
|
+
rubygems_version: 2.4.6
|
112
113
|
signing_key:
|
113
114
|
specification_version: 4
|
114
115
|
summary: An adapter layer for DNS queries.
|
115
116
|
test_files:
|
117
|
+
- spec/mock_client_spec.rb
|
116
118
|
- spec/resolv_client_spec.rb
|
117
119
|
- spec/spec_helper.rb
|