dns_adapter 0.0.4 → 0.0.5

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 1b0483dc7da91d95937b2dff3030112364e6bf83
4
- data.tar.gz: 0533d3a5065cbb55d1e0437ca6167a86fedfa7ab
3
+ metadata.gz: 3d8dfc76014b9bfd17a92150ac19f3846adad58e
4
+ data.tar.gz: 6aea0dfbb4a549a6304243cc7a777944027fea83
5
5
  SHA512:
6
- metadata.gz: 7b9fd402afa3ae99570c873d97bbaa3c76636101581836bb446555acf63328f4977cf0e0d8a44de419e13d4619facec6170eb9883a882ef6bd6d7a6b00bd3229
7
- data.tar.gz: 453f44dc46487bb078e4842c3b9606248f83b805ee70bedce1184e0f54361e30e7bf34b939a7be642b88a63ebb6164617f5c9d5b1d19d9c3f488d08c3afe0abb
6
+ metadata.gz: 32bd75b2bdb092278b03737d27d3fefb4e1a5a1401b241e5507c1f710e870a314ff0cee804a0da547f46c20feac077d6a406e356fe23fe6fed0d408fba55012e
7
+ data.tar.gz: c027ec4d89fb7b870c823ff8f0dd80e6239fde10c2089cd23524d09938e610fa834c803e64ed07ac7707e760da85002e4348cfa062674775501f6fc109449525
@@ -30,6 +30,10 @@ module DNSAdapter
30
30
  fetch_records(domain, 'NS')
31
31
  end
32
32
 
33
+ def fetch_cname_records(domain)
34
+ fetch_records(domain, 'CNAME')
35
+ end
36
+
33
37
  def fetch_txt_records(domain)
34
38
  fetch_records(domain, 'TXT')
35
39
  end
@@ -80,6 +84,7 @@ module DNSAdapter
80
84
  'MX' => :exchange,
81
85
  'PTR' => :name,
82
86
  'NS' => :name,
87
+ 'CNAME' => :name,
83
88
  'SPF' => :text,
84
89
  'TXT' => :text
85
90
  }
@@ -38,6 +38,10 @@ module DNSAdapter
38
38
  fetch_name_records(domain, 'NS')
39
39
  end
40
40
 
41
+ def fetch_cname_records(domain)
42
+ fetch_name_records(domain, 'CNAME')
43
+ end
44
+
41
45
  private
42
46
 
43
47
  def fetch_a_type_records(domain, type)
@@ -104,7 +108,7 @@ module DNSAdapter
104
108
  raise DNSAdapter::Error, "Error on DNS lookup of '#{domain}'"
105
109
  end
106
110
 
107
- SUPPORTED_RR_TYPES = %w(A AAAA MX PTR TXT SPF NS)
111
+ SUPPORTED_RR_TYPES = %w(A AAAA MX PTR TXT SPF NS CNAME)
108
112
  def self.type_class(rr_type)
109
113
  if SUPPORTED_RR_TYPES.include?(rr_type)
110
114
  Resolv::DNS::Resource::IN.const_get(rr_type)
@@ -1,3 +1,3 @@
1
1
  module DNSAdapter
2
- VERSION = '0.0.4'
2
+ VERSION = '0.0.5'
3
3
  end
@@ -423,4 +423,58 @@ describe DNSAdapter::ResolvClient do
423
423
  .to raise_error(DNSAdapter::TimeoutError)
424
424
  end
425
425
  end
426
+
427
+ context '#fetch_cname_records' do
428
+ let(:first_cname_name) { SecureRandom.hex(10) }
429
+ let(:first_cname_record) do
430
+ Resolv::DNS::Resource::IN::CNAME.new(first_cname_name)
431
+ end
432
+ let(:record_list) { [first_cname_record] }
433
+ let(:cname_domain) { 'example.com' }
434
+ let(:cname_domain_with_trailing) { "#{cname_domain}." }
435
+
436
+ it 'should map the Resolv classes to a set of hashes' do
437
+ expect(Resolv::DNS).to receive(:new).and_return(mock_resolver)
438
+ expect(mock_resolver).to receive(:getresources)
439
+ .with(cname_domain, Resolv::DNS::Resource::IN::CNAME)
440
+ .and_return(record_list)
441
+ results = subject.fetch_cname_records(cname_domain)
442
+ expect(results.size).to eq(record_list.length)
443
+ expect(results.map { |x| x[:type] })
444
+ .to eq(record_list.length.times.map { 'CNAME' })
445
+ expect(results.map { |x| x[:name] }).to eq(
446
+ [first_cname_name])
447
+ end
448
+
449
+ it 'should map when the domain has a trailing dot' do
450
+ expect(Resolv::DNS).to receive(:new).and_return(mock_resolver)
451
+ expect(mock_resolver).to receive(:getresources)
452
+ .with(cname_domain, Resolv::DNS::Resource::IN::CNAME)
453
+ .and_return(record_list)
454
+ results = subject.fetch_cname_records(cname_domain_with_trailing)
455
+ expect(results.size).to eq(record_list.length)
456
+ expect(results.map { |x| x[:type] })
457
+ .to eq(record_list.length.times.map { 'CNAME' })
458
+ expect(results.map { |x| x[:name] }).to eq(
459
+ [first_cname_name])
460
+ end
461
+
462
+ it 'should map the Resolv errors to Coppertone errors' do
463
+ expect(Resolv::DNS).to receive(:new).and_return(mock_resolver)
464
+ expect(mock_resolver).to receive(:getresources)
465
+ .with(cname_domain, Resolv::DNS::Resource::IN::CNAME)
466
+ .and_raise(Resolv::ResolvError)
467
+ expect { subject.fetch_cname_records(cname_domain_with_trailing) }
468
+ .to raise_error(DNSAdapter::Error)
469
+ end
470
+
471
+ it 'should map the Resolv timeout errors to Coppertone errors' do
472
+ expect(Resolv::DNS).to receive(:new).and_return(mock_resolver)
473
+ expect(mock_resolver).to receive(:getresources)
474
+ .with(cname_domain, Resolv::DNS::Resource::IN::CNAME)
475
+ .and_raise(Resolv::ResolvTimeout)
476
+ expect { subject.fetch_cname_records(cname_domain_with_trailing) }
477
+ .to raise_error(DNSAdapter::TimeoutError)
478
+ end
479
+ end
426
480
  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
4
+ version: 0.0.5
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-05-16 00:00:00.000000000 Z
11
+ date: 2015-06-18 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -109,7 +109,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
109
109
  version: '0'
110
110
  requirements: []
111
111
  rubyforge_project:
112
- rubygems_version: 2.4.6
112
+ rubygems_version: 2.4.8
113
113
  signing_key:
114
114
  specification_version: 4
115
115
  summary: An adapter layer for DNS queries.