rspec-dnsruby 0.1.0 → 0.1.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +8 -8
- data/.travis.yml +7 -0
- data/README.md +18 -3
- data/Rakefile +10 -0
- data/lib/rspec-dnsruby/have_dns.rb +9 -4
- data/rspec-dnsruby.gemspec +2 -2
- data/spec/rspec-dnsruby/have_dns_spec.rb +121 -0
- data/spec/spec_helper.rb +4 -0
- metadata +8 -3
checksums.yaml
CHANGED
@@ -1,15 +1,15 @@
|
|
1
1
|
---
|
2
2
|
!binary "U0hBMQ==":
|
3
3
|
metadata.gz: !binary |-
|
4
|
-
|
4
|
+
YTIxNDZhOTdjNmNiNTQ3Y2ZhNDUzODMzZTBjYjQ5NmZmNTM0ZmZjZA==
|
5
5
|
data.tar.gz: !binary |-
|
6
|
-
|
6
|
+
YjU0YThmMDg2YzQ0Mzc1NmFhYjcwYjYyY2FlMmY5MWY0MjIxYmUzZg==
|
7
7
|
!binary "U0hBNTEy":
|
8
8
|
metadata.gz: !binary |-
|
9
|
-
|
10
|
-
|
11
|
-
|
9
|
+
OWVjOGJiZjg2MjIyNTBkOTMyZmFhMDBlYTg4NzU3YWUwN2EzNDI4NWIyZDI4
|
10
|
+
MzRiNWU1MDI0ODM2ZTlhYWJlMjdkZWY0NjkzZTQ2N2RhZDEyYTIzNDI4OGQw
|
11
|
+
MTE0OWJhYWJjZTM1NjIxZmE1YzdlM2FkMzA5OGE3NzI5YWI0MGQ=
|
12
12
|
data.tar.gz: !binary |-
|
13
|
-
|
14
|
-
|
15
|
-
|
13
|
+
NWFmODY3Y2M5YWUzODc4YmM5YjdmYjdiNTFmNDE4NWJmYTllZWJmOTM2NDJm
|
14
|
+
OGIyNjgwMWVmMzI4YzM4ZWUxOTRmNDVlODBkNTdmOWUwOGMyNzQ2N2JlMjdm
|
15
|
+
OTk2MzA1NjE1YWYyMTQ1MGQ2NTM4YjJhODFjNTk3YjI2ODVkNTI=
|
data/.travis.yml
ADDED
data/README.md
CHANGED
@@ -1,5 +1,8 @@
|
|
1
1
|
rspec-dnsruby
|
2
2
|
=========
|
3
|
+
|
4
|
+
[![Build Status](https://travis-ci.org/spotify/rspec-dnsruby.png?branch=master)](https://travis-ci.org/spotify/rspec-dnsruby)
|
5
|
+
|
3
6
|
rspec-dnsruby is an rspec plugin for easy DNS testing. It is a fork of rspec-dns and uses dnsruby instead of the standard ruby library.
|
4
7
|
|
5
8
|
Differences with rspec-dns
|
@@ -135,7 +138,19 @@ nameserver:
|
|
135
138
|
|
136
139
|
If this file is missing Resolv will use the settings in /etc/resolv.conf.
|
137
140
|
|
138
|
-
|
141
|
+
The full list of configuration options can be found on the [Dnsruby docs](http://dnsruby.rubyforge.org/classes/Dnsruby/Config.html).
|
142
|
+
|
143
|
+
### Configuring connection timeout
|
144
|
+
|
145
|
+
Connection timeout is to stop waiting for resolver.
|
146
|
+
If you want to wait over default timeout `1`,
|
147
|
+
you can change the timeout in spec files or spec_helpers like this:
|
148
|
+
|
149
|
+
```ruby
|
150
|
+
RSpec.configuration.rspec_dns_connection_timeout = 5
|
151
|
+
```
|
152
|
+
|
153
|
+
alternatively you can specify it in the `config/dns.yml` file:
|
139
154
|
|
140
155
|
```yaml
|
141
156
|
nameserver:
|
@@ -144,14 +159,14 @@ nameserver:
|
|
144
159
|
timeouts: 3
|
145
160
|
```
|
146
161
|
|
147
|
-
The full list of configuration options can be found on the [Dnsruby docs](http://dnsruby.rubyforge.org/classes/Dnsruby/Config.html).
|
148
|
-
|
149
162
|
Contributing
|
150
163
|
------------
|
151
164
|
1. Fork the project on github
|
152
165
|
2. Create your feature branch
|
153
166
|
3. Open a Pull Request
|
154
167
|
|
168
|
+
|
169
|
+
|
155
170
|
License & Authors
|
156
171
|
-----------------
|
157
172
|
- Seth Vargo (sethvargo@gmail.com)
|
data/Rakefile
CHANGED
@@ -1,3 +1,7 @@
|
|
1
|
+
RSpec.configure do |c|
|
2
|
+
c.add_setting :rspec_dns_connection_timeout, :default => 1
|
3
|
+
end
|
4
|
+
|
1
5
|
RSpec::Matchers.define :have_dns do
|
2
6
|
match do |dns|
|
3
7
|
@dns = dns
|
@@ -104,11 +108,12 @@ RSpec::Matchers.define :have_dns do
|
|
104
108
|
|
105
109
|
def _records
|
106
110
|
@_records ||= begin
|
107
|
-
|
108
|
-
|
111
|
+
config = _config || {}
|
112
|
+
# Backwards compatible config option for rspec-dnsruby
|
113
|
+
query_timeout = config[:timeouts] || RSpec.configuration.rspec_dns_connection_timeout
|
114
|
+
Timeout::timeout(query_timeout + 0.2) do
|
109
115
|
resolver = Dnsruby::Resolver.new(config)
|
110
|
-
|
111
|
-
resolver.query_timeout = config[:timeouts] if config[:timeouts]
|
116
|
+
resolver.query_timeout = query_timeout
|
112
117
|
resolver.query(@dns, Dnsruby::Types.ANY)
|
113
118
|
end
|
114
119
|
rescue Exception => e
|
data/rspec-dnsruby.gemspec
CHANGED
@@ -1,11 +1,11 @@
|
|
1
1
|
Gem::Specification.new do |s|
|
2
|
-
s.version = '0.1.
|
2
|
+
s.version = '0.1.1'
|
3
3
|
s.name = 'rspec-dnsruby'
|
4
4
|
s.authors = ['Alexey Lapitsky', 'Johannes Russek']
|
5
5
|
s.email = 'alexey@spotify.com'
|
6
6
|
s.description = 'Easily test your DNS entries with RSpec'
|
7
7
|
s.summary = 'rspec-dnsruby provides an easy-to-use DSL for testing your DNS records are responding as they should.'
|
8
|
-
s.homepage = 'https://github.com/
|
8
|
+
s.homepage = 'https://github.com/spotify/rspec-dnsruby'
|
9
9
|
s.license = 'Apache 2.0'
|
10
10
|
|
11
11
|
s.files = `git ls-files`.split($\)
|
@@ -0,0 +1,121 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
require 'dnsruby'
|
3
|
+
require 'resolv'
|
4
|
+
require_relative '../../lib/rspec-dnsruby'
|
5
|
+
|
6
|
+
def stub_records(strings)
|
7
|
+
records = strings.map { |s| Dnsruby::RR.new_from_string(s) }
|
8
|
+
resolver = Dnsruby::Resolver.new
|
9
|
+
Dnsruby::Resolver.stub(:new) do
|
10
|
+
yield if block_given?
|
11
|
+
resolver
|
12
|
+
end
|
13
|
+
resolver.stub_chain(:query, :answer).and_return(records)
|
14
|
+
end
|
15
|
+
|
16
|
+
describe 'rspec-dns matchers' do
|
17
|
+
|
18
|
+
describe '#have_dns' do
|
19
|
+
context 'with a sigle record' do
|
20
|
+
it 'can evalutate an A record' do
|
21
|
+
stub_records(['example.com 86400 A 192.168.100.100'])
|
22
|
+
|
23
|
+
'example.com'.should have_dns.with_type('A')
|
24
|
+
'example.com'.should_not have_dns.with_type('TXT')
|
25
|
+
'example.com'.should have_dns.with_type('A').and_address(Resolv::IPv4.create('192.168.100.100'))
|
26
|
+
end
|
27
|
+
|
28
|
+
it 'can evalutate a AAAA record' do
|
29
|
+
stub_records(['example.com 86400 AAAA 2001:0002:6c::430'])
|
30
|
+
|
31
|
+
'example.com'.should have_dns.with_type('AAAA')
|
32
|
+
'example.com'.should_not have_dns.with_type('A')
|
33
|
+
'example.com'.should have_dns.with_type('AAAA')
|
34
|
+
.and_address(Resolv::IPv6.create('2001:0002:6c::430'))
|
35
|
+
end
|
36
|
+
|
37
|
+
it 'can evalutate a CNAME record' do
|
38
|
+
stub_records(['www.example.com 300 IN CNAME example.com'])
|
39
|
+
|
40
|
+
'example.com'.should have_dns.with_type('CNAME')
|
41
|
+
'example.com'.should_not have_dns.with_type('AAAA')
|
42
|
+
'example.com'.should have_dns.with_type('CNAME').and_name('www.example.com')
|
43
|
+
end
|
44
|
+
|
45
|
+
it 'can evalutate an MX record' do
|
46
|
+
stub_records(['example.com. 7200 MX 40 mail.example.com.'])
|
47
|
+
|
48
|
+
'example.com'.should have_dns.with_type('MX')
|
49
|
+
'example.com'.should_not have_dns.with_type('CNAME')
|
50
|
+
'example.com'.should have_dns.with_type('MX').and_preference(40)
|
51
|
+
'example.com'.should have_dns.with_type('MX')
|
52
|
+
.and_preference(40).and_exchange('mail.example.com')
|
53
|
+
'example.com'.should_not have_dns.with_type('MX')
|
54
|
+
.and_preference(30).and_exchange('mail.example.com')
|
55
|
+
'example.com'.should_not have_dns.with_type('MX')
|
56
|
+
.and_preference(40).and_exchange('example.com')
|
57
|
+
end
|
58
|
+
|
59
|
+
it 'can evalutate an NS record' do
|
60
|
+
stub_records(['sub.example.com. 300 IN NS ns.sub.example.com.'])
|
61
|
+
|
62
|
+
'example.com'.should have_dns.with_type('NS')
|
63
|
+
'example.com'.should_not have_dns.with_type('MX')
|
64
|
+
'example.com'.should have_dns.with_type('NS').and_domainname('ns.sub.example.com')
|
65
|
+
'example.com'.should_not have_dns.with_type('NS').and_domainname('sub.example.com')
|
66
|
+
end
|
67
|
+
|
68
|
+
it 'can evalutate a PTR record' do
|
69
|
+
stub_records(['ptrs.example.com. 300 IN PTR ptr.example.com.'])
|
70
|
+
|
71
|
+
'192.168.100.100'.should have_dns.with_type('PTR')
|
72
|
+
'192.168.100.100'.should_not have_dns.with_type('MX')
|
73
|
+
'192.168.100.100'.should have_dns.with_type('PTR').and_domainname('ptr.example.com')
|
74
|
+
'192.168.100.100'.should_not have_dns.with_type('PTR').and_domainname('ptrs.example.com')
|
75
|
+
end
|
76
|
+
|
77
|
+
it 'can evalutate an SOA record' do
|
78
|
+
stub_records(['example.com 210 IN SOA ns.example.com a.example.com. 2014030712 60 25 3628800 900'])
|
79
|
+
|
80
|
+
'example.com'.should have_dns.with_type('SOA')
|
81
|
+
'example.com'.should_not have_dns.with_type('PTR')
|
82
|
+
'example.com'.should have_dns.with_type('SOA')
|
83
|
+
.and_mname('ns.example.com')
|
84
|
+
.and_rname('a.example.com')
|
85
|
+
.and_serial('2014030712')
|
86
|
+
.and_refresh(60)
|
87
|
+
.and_retry(25)
|
88
|
+
.and_expire(3628800)
|
89
|
+
.and_minimum(900)
|
90
|
+
'example.com'.should_not have_dns.with_type('SOA')
|
91
|
+
.and_mname('nstest.example.com')
|
92
|
+
end
|
93
|
+
|
94
|
+
it 'can evalutate a TXT record' do
|
95
|
+
stub_records(['example.com. 300 IN TXT "v=spf1 a:example.com ~all"'])
|
96
|
+
|
97
|
+
'example.com'.should have_dns.with_type('TXT')
|
98
|
+
'example.com'.should_not have_dns.with_type('SOA')
|
99
|
+
'example.com'.should have_dns.with_type('TXT').and_data('v=spf1 a:example.com ~all')
|
100
|
+
'example.com'.should_not have_dns.with_type('TXT').and_data('v=spf2 a:example.com ~all')
|
101
|
+
end
|
102
|
+
end
|
103
|
+
|
104
|
+
context 'with changable connection timeout' do
|
105
|
+
it 'should timeout within 3 seconds in default' do
|
106
|
+
stub_records(['example.com 86400 A 192.168.100.100']) do
|
107
|
+
sleep 3
|
108
|
+
end
|
109
|
+
'example.com'.should_not have_dns.with_type('A')
|
110
|
+
end
|
111
|
+
|
112
|
+
it 'should not timeout within 3 seconds when timeout is 5' do
|
113
|
+
RSpec.configuration.rspec_dns_connection_timeout = 5
|
114
|
+
stub_records(['example.com 86400 A 192.168.100.100']) do
|
115
|
+
sleep 3
|
116
|
+
end
|
117
|
+
'example.com'.should have_dns.with_type('A')
|
118
|
+
end
|
119
|
+
end
|
120
|
+
end
|
121
|
+
end
|
data/spec/spec_helper.rb
ADDED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rspec-dnsruby
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Alexey Lapitsky
|
@@ -60,6 +60,7 @@ extensions: []
|
|
60
60
|
extra_rdoc_files: []
|
61
61
|
files:
|
62
62
|
- .gitignore
|
63
|
+
- .travis.yml
|
63
64
|
- Gemfile
|
64
65
|
- LICENSE
|
65
66
|
- README.md
|
@@ -67,7 +68,9 @@ files:
|
|
67
68
|
- lib/rspec-dnsruby.rb
|
68
69
|
- lib/rspec-dnsruby/have_dns.rb
|
69
70
|
- rspec-dnsruby.gemspec
|
70
|
-
|
71
|
+
- spec/rspec-dnsruby/have_dns_spec.rb
|
72
|
+
- spec/spec_helper.rb
|
73
|
+
homepage: https://github.com/spotify/rspec-dnsruby
|
71
74
|
licenses:
|
72
75
|
- Apache 2.0
|
73
76
|
metadata: {}
|
@@ -92,5 +95,7 @@ signing_key:
|
|
92
95
|
specification_version: 4
|
93
96
|
summary: rspec-dnsruby provides an easy-to-use DSL for testing your DNS records are
|
94
97
|
responding as they should.
|
95
|
-
test_files:
|
98
|
+
test_files:
|
99
|
+
- spec/rspec-dnsruby/have_dns_spec.rb
|
100
|
+
- spec/spec_helper.rb
|
96
101
|
has_rdoc:
|