dns_mock 1.3.0 → 1.4.2
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/.codeclimate.yml +1 -1
- data/.reek.yml +7 -1
- data/.rubocop.yml +12 -0
- data/CHANGELOG.md +110 -17
- data/Gemfile.lock +22 -27
- data/README.md +7 -6
- data/dns_mock.gemspec +9 -7
- data/lib/dns_mock/core.rb +5 -0
- data/lib/dns_mock/record/factory/base.rb +8 -3
- data/lib/dns_mock/representer/punycode.rb +15 -0
- data/lib/dns_mock/representer/rdns_lookup.rb +17 -0
- data/lib/dns_mock/server/records_dictionary_builder.rb +12 -10
- data/lib/dns_mock/version.rb +1 -1
- metadata +37 -28
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 897efc00bc504413b9241457c05b0a0936a37f6b7d787442ea900ebd1f4c9666
|
|
4
|
+
data.tar.gz: afa0eaf67758320d173f5064932fe647931d5d9535cc2a2d60d283400ee32df0
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: b62d6ddec01b675caa95ac157c005efc7fa5e794c4c98fd4b4a35f45586b0ee03f76a7398396bad6e7269475ae7710e7ccbf9c64adff430fa99440bc4fbe16c7
|
|
7
|
+
data.tar.gz: d3a57d14f992448037f76045d6083e36f523565d460ba5826f3f952779e0d49c4d36a9108b7a3a473a275dd7274f5c8e7fe58c4513036863d88beac8ed7f999d
|
data/.codeclimate.yml
CHANGED
data/.reek.yml
CHANGED
|
@@ -17,17 +17,23 @@ detectors:
|
|
|
17
17
|
- DnsMock::ContextGeneratorHelper#random_ip_v4_address
|
|
18
18
|
- DnsMock::ContextGeneratorHelper#random_ip_v6_address
|
|
19
19
|
- DnsMock::ContextGeneratorHelper#random_txt_record_context
|
|
20
|
+
- DnsMock::ContextGeneratorHelper#to_punycode_hostname
|
|
20
21
|
- DnsMock::RecordsDictionaryHelper#create_records_dictionary_by_records
|
|
21
22
|
- DnsMock::ServerHelper#start_random_server
|
|
22
23
|
- DnsMock::ServerHelper#stop_all_running_servers
|
|
23
|
-
- DnsMock::Server::RecordsDictionaryBuilder#rdns_lookup_prefix
|
|
24
24
|
- DnsMock::ContextGeneratorHelper#random_port_number
|
|
25
25
|
- DnsMock::TestFramework::RSpec::Helper#dns_mock_server
|
|
26
|
+
- DnsMock::ContextGeneratorHelper#to_rdns_hostaddress
|
|
27
|
+
|
|
28
|
+
DuplicateMethodCall:
|
|
29
|
+
exclude:
|
|
30
|
+
- DnsMock::ContextGeneratorHelper#create_records
|
|
26
31
|
|
|
27
32
|
ControlParameter:
|
|
28
33
|
exclude:
|
|
29
34
|
- DnsMock::Error::Helper#raise_unless
|
|
30
35
|
- DnsMock::Server#initialize
|
|
36
|
+
- DnsMock::ContextGeneratorHelper#to_punycode_hostname
|
|
31
37
|
|
|
32
38
|
MissingSafeMethod:
|
|
33
39
|
exclude:
|
data/.rubocop.yml
CHANGED
|
@@ -28,6 +28,9 @@ Naming/VariableNumber:
|
|
|
28
28
|
Naming/RescuedExceptionsVariableName:
|
|
29
29
|
Enabled: false
|
|
30
30
|
|
|
31
|
+
Naming/InclusiveLanguage:
|
|
32
|
+
Enabled: false
|
|
33
|
+
|
|
31
34
|
Style/Documentation:
|
|
32
35
|
Enabled: false
|
|
33
36
|
|
|
@@ -136,6 +139,9 @@ Style/MultilineInPatternThen:
|
|
|
136
139
|
Style/QuotedSymbols:
|
|
137
140
|
Enabled: true
|
|
138
141
|
|
|
142
|
+
Style/RedundantSelfAssignmentBranch:
|
|
143
|
+
Enabled: true
|
|
144
|
+
|
|
139
145
|
Layout/LineLength:
|
|
140
146
|
Max: 150
|
|
141
147
|
|
|
@@ -167,6 +173,9 @@ Layout/EmptyLineAfterGuardClause:
|
|
|
167
173
|
Layout/SpaceBeforeBrackets:
|
|
168
174
|
Enabled: true
|
|
169
175
|
|
|
176
|
+
Layout/LineEndStringConcatenationIndentation:
|
|
177
|
+
Enabled: true
|
|
178
|
+
|
|
170
179
|
Lint/NonDeterministicRequireOrder:
|
|
171
180
|
Enabled: true
|
|
172
181
|
|
|
@@ -236,6 +245,9 @@ Lint/TripleQuotes:
|
|
|
236
245
|
Lint/EmptyInPattern:
|
|
237
246
|
Enabled: true
|
|
238
247
|
|
|
248
|
+
Lint/AmbiguousRange:
|
|
249
|
+
Enabled: true
|
|
250
|
+
|
|
239
251
|
Gemspec/DateAssignment:
|
|
240
252
|
Enabled: true
|
|
241
253
|
|
data/CHANGELOG.md
CHANGED
|
@@ -2,13 +2,100 @@
|
|
|
2
2
|
|
|
3
3
|
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
|
4
4
|
|
|
5
|
+
## [1.4.2] - 2021-09-04
|
|
6
|
+
|
|
7
|
+
### Updated
|
|
8
|
+
|
|
9
|
+
- Updated gem development dependencies
|
|
10
|
+
- Updated gem version
|
|
11
|
+
|
|
12
|
+
## [1.4.1] - 2021-08-16
|
|
13
|
+
|
|
14
|
+
### Updated
|
|
15
|
+
|
|
16
|
+
- Updated gem development dependencies
|
|
17
|
+
- Updated gem version
|
|
18
|
+
|
|
19
|
+
### Changed
|
|
20
|
+
|
|
21
|
+
- `faker` to `ffaker` development dependency
|
|
22
|
+
|
|
23
|
+
## [1.4.0] - 2021-07-13
|
|
24
|
+
|
|
25
|
+
### Added
|
|
26
|
+
|
|
27
|
+
- Added ability to use internationalized hostnames. All hostnames in UTF-8 will be represented as [Punycode](https://en.wikipedia.org/wiki/Punycode)
|
|
28
|
+
- Added `simpleidn` as runtime dependency
|
|
29
|
+
- Added `DnsMock::Representer::Punycode`, tests
|
|
30
|
+
|
|
31
|
+
```ruby
|
|
32
|
+
records = {
|
|
33
|
+
'mañana.com' => {
|
|
34
|
+
mx: %w[másletras.mañana.com]
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
DnsMock.start_server(port: 5300, records: records)
|
|
39
|
+
```
|
|
40
|
+
|
|
41
|
+
```bash
|
|
42
|
+
dig @localhost -p 5300 MX xn--maana-pta.com
|
|
43
|
+
```
|
|
44
|
+
|
|
45
|
+
```
|
|
46
|
+
; <<>> DiG 9.10.6 <<>> @localhost -p 5300 MX xn--maana-pta.com
|
|
47
|
+
; (2 servers found)
|
|
48
|
+
;; global options: +cmd
|
|
49
|
+
;; Got answer:
|
|
50
|
+
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 4612
|
|
51
|
+
;; flags: rd; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1
|
|
52
|
+
;; WARNING: recursion requested but not available
|
|
53
|
+
|
|
54
|
+
;; OPT PSEUDOSECTION:
|
|
55
|
+
; EDNS: version: 0, flags:; udp: 4096
|
|
56
|
+
;; QUESTION SECTION:
|
|
57
|
+
;xn--maana-pta.com. IN MX
|
|
58
|
+
|
|
59
|
+
;; ANSWER SECTION:
|
|
60
|
+
xn--maana-pta.com. 1 IN MX 10 xn--msletras-8ya.xn--maana-pta.com.
|
|
61
|
+
|
|
62
|
+
;; Query time: 0 msec
|
|
63
|
+
;; SERVER: 127.0.0.1#5300(127.0.0.1)
|
|
64
|
+
;; WHEN: Tue Jul 13 15:38:47 EEST 2021
|
|
65
|
+
;; MSG SIZE rcvd: 79
|
|
66
|
+
```
|
|
67
|
+
|
|
68
|
+
### Changed
|
|
69
|
+
|
|
70
|
+
- Refactored `DnsMock::Representer::RdnsLookup`, tests
|
|
71
|
+
- Updated `DnsMock::Record::Factory::Base`
|
|
72
|
+
- Updated `DnsMock::Server::RecordsDictionaryBuilder`, tests
|
|
73
|
+
- Updated `DnsMock::Record::Factory::Cname`, tests
|
|
74
|
+
- Updated `DnsMock::Record::Factory::Mx`, tests
|
|
75
|
+
- Updated `DnsMock::Record::Factory::Ns`, tests
|
|
76
|
+
- Updated `DnsMock::Record::Factory::Ptr`, tests
|
|
77
|
+
- Updated `DnsMock::Record::Factory::Soa`, tests
|
|
78
|
+
- Updated `DnsMock::ContextGeneratorHelper`, tests
|
|
79
|
+
- Updated reek config
|
|
80
|
+
- Updated gem documentation, version
|
|
81
|
+
|
|
82
|
+
## [1.3.1] - 2021-07-07
|
|
83
|
+
|
|
84
|
+
### Changed
|
|
85
|
+
|
|
86
|
+
- Updated gem development dependencies
|
|
87
|
+
- Updated rubocop/codeclimate config
|
|
88
|
+
- Updated gem documentation, version
|
|
89
|
+
|
|
5
90
|
## [1.3.0] - 2021-06-14
|
|
6
91
|
|
|
7
|
-
|
|
92
|
+
### Added
|
|
93
|
+
|
|
94
|
+
- Detecting random available port via OS features. Thanks [@ioquatix](https://github.com/ioquatix) for [suggestion](https://github.com/mocktools/ruby-dns-mock/issues/42) 🚀
|
|
8
95
|
|
|
9
96
|
### Removed
|
|
10
97
|
|
|
11
|
-
- Removed `DnsMock::Server::RandomAvailablePort
|
|
98
|
+
- Removed `DnsMock::Server::RandomAvailablePort`, tests
|
|
12
99
|
|
|
13
100
|
### Changed
|
|
14
101
|
|
|
@@ -53,9 +140,11 @@ Detecting random available port via OS features. Thanks [@ioquatix](https://gith
|
|
|
53
140
|
|
|
54
141
|
## [1.2.0] - 2021-02-04
|
|
55
142
|
|
|
56
|
-
###
|
|
143
|
+
### Added
|
|
57
144
|
|
|
58
|
-
|
|
145
|
+
- Ability to specify custom priority of MX record if it needed
|
|
146
|
+
|
|
147
|
+
Now is possible to define null or backup MX records. Please note, if you haven't specified a priority of MX record, it will be assigned automatically. MX records builder is assigning priority with step 10 from first item of defined MX records array.
|
|
59
148
|
|
|
60
149
|
```ruby
|
|
61
150
|
records = {
|
|
@@ -88,9 +177,9 @@ example.com. 1 IN MX 40 mx3.domain.com.
|
|
|
88
177
|
|
|
89
178
|
## [1.1.0] - 2021-02-01
|
|
90
179
|
|
|
91
|
-
###
|
|
180
|
+
### Added
|
|
92
181
|
|
|
93
|
-
|
|
182
|
+
- RSpec native support. DnsMock helper help you to simplify integration with RSpec
|
|
94
183
|
|
|
95
184
|
```ruby
|
|
96
185
|
# spec/support/config/dns_mock.rb
|
|
@@ -122,9 +211,11 @@ end
|
|
|
122
211
|
|
|
123
212
|
## [1.0.0] - 2021-01-29
|
|
124
213
|
|
|
125
|
-
###
|
|
214
|
+
### Added
|
|
215
|
+
|
|
216
|
+
- Configurable strategy for record not found case
|
|
126
217
|
|
|
127
|
-
|
|
218
|
+
By default it won't raise an exception when DNS record not found in mocked records dictionary:
|
|
128
219
|
|
|
129
220
|
```ruby
|
|
130
221
|
DnsMock.start_server(port: 5300)
|
|
@@ -170,17 +261,19 @@ DnsMock.start_server(exception_if_not_found: true)
|
|
|
170
261
|
|
|
171
262
|
### Fixed
|
|
172
263
|
|
|
173
|
-
|
|
264
|
+
- RDNS lookup representatin for IP address in PTR record feature.
|
|
174
265
|
|
|
175
266
|
## [0.2.0] - 2021-01-26
|
|
176
267
|
|
|
177
|
-
###
|
|
268
|
+
### Added
|
|
269
|
+
|
|
270
|
+
- PTR record support. Ability to mock PTR records
|
|
178
271
|
|
|
179
|
-
|
|
272
|
+
Please note, you can define host address without RDNS lookup prefix (`.in-addr.arpa`). `DnsMock` will do it for you.
|
|
180
273
|
|
|
181
274
|
```ruby
|
|
182
275
|
records = {
|
|
183
|
-
'1.
|
|
276
|
+
'1.2.3.4' => {
|
|
184
277
|
ptr: %w[domain_1.com domain_2.com]
|
|
185
278
|
}
|
|
186
279
|
}
|
|
@@ -189,7 +282,7 @@ DnsMock.start_server(records: records)
|
|
|
189
282
|
```
|
|
190
283
|
|
|
191
284
|
```bash
|
|
192
|
-
dig @localhost -p 5300 -x 1.
|
|
285
|
+
dig @localhost -p 5300 -x 1.2.3.4
|
|
193
286
|
```
|
|
194
287
|
|
|
195
288
|
```
|
|
@@ -197,8 +290,8 @@ dig @localhost -p 5300 -x 1.1.1.1
|
|
|
197
290
|
; (2 servers found)
|
|
198
291
|
|
|
199
292
|
;; ANSWER SECTION:
|
|
200
|
-
|
|
201
|
-
|
|
293
|
+
4.3.2.1.in-addr.arpa. 1 IN PTR domain_1.com.
|
|
294
|
+
4.3.2.1.in-addr.arpa. 1 IN PTR domain_2.com.
|
|
202
295
|
|
|
203
296
|
;; Query time: 0 msec
|
|
204
297
|
;; SERVER: 127.0.0.1#5300(127.0.0.1)
|
|
@@ -208,6 +301,6 @@ dig @localhost -p 5300 -x 1.1.1.1
|
|
|
208
301
|
|
|
209
302
|
## [0.1.0] - 2021-01-19
|
|
210
303
|
|
|
211
|
-
###
|
|
304
|
+
### Added
|
|
212
305
|
|
|
213
|
-
|
|
306
|
+
- First release of `DnsMock`. Thanks [@le0pard](https://github.com/le0pard) for idea & support 🚀
|
data/Gemfile.lock
CHANGED
|
@@ -1,31 +1,28 @@
|
|
|
1
1
|
PATH
|
|
2
2
|
remote: .
|
|
3
3
|
specs:
|
|
4
|
-
dns_mock (1.
|
|
4
|
+
dns_mock (1.4.2)
|
|
5
|
+
simpleidn (~> 0.2.1)
|
|
5
6
|
|
|
6
7
|
GEM
|
|
7
8
|
remote: https://rubygems.org/
|
|
8
9
|
specs:
|
|
9
10
|
ast (2.4.2)
|
|
10
|
-
bundler-audit (0.
|
|
11
|
+
bundler-audit (0.9.0.1)
|
|
11
12
|
bundler (>= 1.2.0, < 3)
|
|
12
13
|
thor (~> 1.0)
|
|
13
14
|
byebug (11.1.3)
|
|
14
15
|
childprocess (4.1.0)
|
|
15
16
|
coderay (1.1.3)
|
|
16
17
|
colorize (0.8.1)
|
|
17
|
-
concurrent-ruby (1.1.9)
|
|
18
18
|
diff-lcs (1.4.4)
|
|
19
|
-
dnsruby (1.61.
|
|
19
|
+
dnsruby (1.61.7)
|
|
20
20
|
simpleidn (~> 0.1)
|
|
21
21
|
docile (1.4.0)
|
|
22
|
-
faker (2.18.0)
|
|
23
|
-
i18n (>= 1.6, < 2)
|
|
24
22
|
fasterer (0.9.0)
|
|
25
23
|
colorize (~> 0.7)
|
|
26
24
|
ruby_parser (>= 3.14.1)
|
|
27
|
-
|
|
28
|
-
concurrent-ruby (~> 1.0)
|
|
25
|
+
ffaker (2.19.0)
|
|
29
26
|
iniparse (1.5.0)
|
|
30
27
|
json (2.5.1)
|
|
31
28
|
kwalify (0.7.2)
|
|
@@ -35,7 +32,7 @@ GEM
|
|
|
35
32
|
iniparse (~> 1.4)
|
|
36
33
|
rexml (~> 3.2)
|
|
37
34
|
parallel (1.20.1)
|
|
38
|
-
parser (3.0.
|
|
35
|
+
parser (3.0.2.0)
|
|
39
36
|
ast (~> 2.4.1)
|
|
40
37
|
pry (0.13.1)
|
|
41
38
|
coderay (~> 1.1)
|
|
@@ -43,13 +40,11 @@ GEM
|
|
|
43
40
|
pry-byebug (3.9.0)
|
|
44
41
|
byebug (~> 11.0)
|
|
45
42
|
pry (~> 0.13.0)
|
|
46
|
-
psych (3.3.2)
|
|
47
43
|
rainbow (3.0.0)
|
|
48
|
-
rake (13.0.
|
|
49
|
-
reek (6.0.
|
|
44
|
+
rake (13.0.6)
|
|
45
|
+
reek (6.0.6)
|
|
50
46
|
kwalify (~> 0.7.0)
|
|
51
47
|
parser (~> 3.0.0)
|
|
52
|
-
psych (~> 3.1)
|
|
53
48
|
rainbow (>= 2.0, < 4.0)
|
|
54
49
|
regexp_parser (2.1.1)
|
|
55
50
|
rexml (3.2.5)
|
|
@@ -70,25 +65,25 @@ GEM
|
|
|
70
65
|
diff-lcs (>= 1.2.0, < 2.0)
|
|
71
66
|
rspec-support (~> 3.10.0)
|
|
72
67
|
rspec-support (3.10.2)
|
|
73
|
-
rubocop (1.
|
|
68
|
+
rubocop (1.20.0)
|
|
74
69
|
parallel (~> 1.10)
|
|
75
70
|
parser (>= 3.0.0.0)
|
|
76
71
|
rainbow (>= 2.2.2, < 4.0)
|
|
77
72
|
regexp_parser (>= 1.8, < 3.0)
|
|
78
73
|
rexml
|
|
79
|
-
rubocop-ast (>= 1.
|
|
74
|
+
rubocop-ast (>= 1.9.1, < 2.0)
|
|
80
75
|
ruby-progressbar (~> 1.7)
|
|
81
76
|
unicode-display_width (>= 1.4.0, < 3.0)
|
|
82
|
-
rubocop-ast (1.
|
|
77
|
+
rubocop-ast (1.11.0)
|
|
83
78
|
parser (>= 3.0.1.1)
|
|
84
|
-
rubocop-performance (1.11.
|
|
79
|
+
rubocop-performance (1.11.5)
|
|
85
80
|
rubocop (>= 1.7.0, < 2.0)
|
|
86
81
|
rubocop-ast (>= 0.4.0)
|
|
87
82
|
rubocop-rspec (2.4.0)
|
|
88
83
|
rubocop (~> 1.0)
|
|
89
84
|
rubocop-ast (>= 1.1.0)
|
|
90
85
|
ruby-progressbar (1.11.0)
|
|
91
|
-
ruby_parser (3.
|
|
86
|
+
ruby_parser (3.17.0)
|
|
92
87
|
sexp_processor (~> 4.15, >= 4.15.1)
|
|
93
88
|
sexp_processor (4.15.3)
|
|
94
89
|
simplecov (0.17.1)
|
|
@@ -105,24 +100,24 @@ GEM
|
|
|
105
100
|
unicode-display_width (2.0.0)
|
|
106
101
|
|
|
107
102
|
PLATFORMS
|
|
108
|
-
x86_64-darwin-
|
|
103
|
+
x86_64-darwin-20
|
|
109
104
|
|
|
110
105
|
DEPENDENCIES
|
|
111
|
-
bundler (~> 2.2, >= 2.2.
|
|
112
|
-
bundler-audit (~> 0.
|
|
106
|
+
bundler (~> 2.2, >= 2.2.27)
|
|
107
|
+
bundler-audit (~> 0.9.0.1)
|
|
113
108
|
dns_mock!
|
|
114
|
-
faker (~> 2.18)
|
|
115
109
|
fasterer (~> 0.9.0)
|
|
110
|
+
ffaker (~> 2.19)
|
|
116
111
|
overcommit (~> 0.58.0)
|
|
117
112
|
pry-byebug (~> 3.9)
|
|
118
|
-
rake (~> 13.0, >= 13.0.
|
|
119
|
-
reek (~> 6.0, >= 6.0.
|
|
113
|
+
rake (~> 13.0, >= 13.0.6)
|
|
114
|
+
reek (~> 6.0, >= 6.0.6)
|
|
120
115
|
rspec (~> 3.10)
|
|
121
116
|
rspec-dns (~> 0.1.8)
|
|
122
|
-
rubocop (~> 1.
|
|
123
|
-
rubocop-performance (~> 1.11, >= 1.11.
|
|
117
|
+
rubocop (~> 1.20)
|
|
118
|
+
rubocop-performance (~> 1.11, >= 1.11.5)
|
|
124
119
|
rubocop-rspec (~> 2.4)
|
|
125
120
|
simplecov (~> 0.17.1)
|
|
126
121
|
|
|
127
122
|
BUNDLED WITH
|
|
128
|
-
2.2.
|
|
123
|
+
2.2.27
|
data/README.md
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
# Ruby DnsMock
|
|
1
|
+
# 
|
|
2
2
|
|
|
3
3
|
[](https://codeclimate.com/github/mocktools/ruby-dns-mock/maintainability)
|
|
4
4
|
[](https://codeclimate.com/github/mocktools/ruby-dns-mock/test_coverage)
|
|
@@ -29,10 +29,11 @@
|
|
|
29
29
|
## Features
|
|
30
30
|
|
|
31
31
|
- Ability to mimic any DNS records (`A`, `AAAA`, `CNAME`, `MX`, `NS`, `PTR`, `SOA` and `TXT`)
|
|
32
|
-
-
|
|
32
|
+
- Automatically converts hostnames to RDNS/[Punycode](https://en.wikipedia.org/wiki/Punycode) representation
|
|
33
33
|
- Lightweight UDP DNS mock server with dynamic/manual port assignment
|
|
34
34
|
- Test framework agnostic (it's PORO, so you can use it outside of `RSpec`, `Test::Unit` or `MiniTest`)
|
|
35
35
|
- Simple and intuitive DSL
|
|
36
|
+
- Only one runtime dependency
|
|
36
37
|
|
|
37
38
|
## Requirements
|
|
38
39
|
|
|
@@ -67,7 +68,7 @@ records = {
|
|
|
67
68
|
ns: %w[ns1.domain.com ns2.domain.com],
|
|
68
69
|
mx: %w[mx1.domain.com mx2.domain.com:50], # you can specify host(s) or host(s) with priority, use '.:0' for definition null MX record
|
|
69
70
|
txt: %w[txt_record_1 txt_record_2],
|
|
70
|
-
cname: '
|
|
71
|
+
cname: 'mañana.com', # you can specify hostname in UTF-8. It will be converted to xn--maana-pta.com automatically
|
|
71
72
|
soa: [
|
|
72
73
|
{
|
|
73
74
|
mname: 'dns1.domain.com',
|
|
@@ -80,12 +81,12 @@ records = {
|
|
|
80
81
|
}
|
|
81
82
|
]
|
|
82
83
|
},
|
|
83
|
-
'1.2.3.4' => {
|
|
84
|
+
'1.2.3.4' => { # You can define RDNS host address without lookup prefix. It will be converted to 4.3.2.1.in-addr.arpa automatically
|
|
84
85
|
ptr: %w[domain_1.com domain_2.com]
|
|
85
86
|
}
|
|
86
87
|
}
|
|
87
88
|
|
|
88
|
-
#
|
|
89
|
+
# Public DnsMock interface
|
|
89
90
|
# records:Hash, port:Integer, exception_if_not_found:Boolean
|
|
90
91
|
# are optional params. By default creates dns mock server with
|
|
91
92
|
# empty records. A free port for server will be randomly assigned
|
|
@@ -136,7 +137,7 @@ require 'dns_mock/test_framework/rspec'
|
|
|
136
137
|
|
|
137
138
|
#### DnsMock RSpec helper
|
|
138
139
|
|
|
139
|
-
Just add `DnsMock::TestFramework::RSpec::Helper` if you wanna use shortcut `dns_mock_server` for DnsMock server instance
|
|
140
|
+
Just add `DnsMock::TestFramework::RSpec::Helper` if you wanna use shortcut `dns_mock_server` for DnsMock server instance inside of your `RSpec.describe` blocks:
|
|
140
141
|
|
|
141
142
|
```ruby
|
|
142
143
|
# spec/support/config/dns_mock.rb
|
data/dns_mock.gemspec
CHANGED
|
@@ -31,18 +31,20 @@ Gem::Specification.new do |spec|
|
|
|
31
31
|
spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
|
|
32
32
|
spec.require_paths = ['lib']
|
|
33
33
|
|
|
34
|
-
spec.
|
|
35
|
-
|
|
36
|
-
spec.add_development_dependency '
|
|
34
|
+
spec.add_runtime_dependency 'simpleidn', '~> 0.2.1'
|
|
35
|
+
|
|
36
|
+
spec.add_development_dependency 'bundler', '~> 2.2', '>= 2.2.27'
|
|
37
|
+
spec.add_development_dependency 'bundler-audit', '~> 0.9.0.1'
|
|
37
38
|
spec.add_development_dependency 'fasterer', '~> 0.9.0'
|
|
39
|
+
spec.add_development_dependency 'ffaker', '~> 2.19'
|
|
38
40
|
spec.add_development_dependency 'overcommit', '~> 0.58.0'
|
|
39
41
|
spec.add_development_dependency 'pry-byebug', '~> 3.9'
|
|
40
|
-
spec.add_development_dependency 'rake', '~> 13.0', '>= 13.0.
|
|
41
|
-
spec.add_development_dependency 'reek', '~> 6.0', '>= 6.0.
|
|
42
|
+
spec.add_development_dependency 'rake', '~> 13.0', '>= 13.0.6'
|
|
43
|
+
spec.add_development_dependency 'reek', '~> 6.0', '>= 6.0.6'
|
|
42
44
|
spec.add_development_dependency 'rspec', '~> 3.10'
|
|
43
45
|
spec.add_development_dependency 'rspec-dns', '~> 0.1.8'
|
|
44
|
-
spec.add_development_dependency 'rubocop', '~> 1.
|
|
45
|
-
spec.add_development_dependency 'rubocop-performance', '~> 1.11', '>= 1.11.
|
|
46
|
+
spec.add_development_dependency 'rubocop', '~> 1.20'
|
|
47
|
+
spec.add_development_dependency 'rubocop-performance', '~> 1.11', '>= 1.11.5'
|
|
46
48
|
spec.add_development_dependency 'rubocop-rspec', '~> 2.4'
|
|
47
49
|
spec.add_development_dependency 'simplecov', '~> 0.17.1'
|
|
48
50
|
end
|
data/lib/dns_mock/core.rb
CHANGED
|
@@ -18,6 +18,11 @@ module DnsMock
|
|
|
18
18
|
require_relative '../dns_mock/error/helper'
|
|
19
19
|
end
|
|
20
20
|
|
|
21
|
+
module Representer
|
|
22
|
+
require_relative '../dns_mock/representer/punycode'
|
|
23
|
+
require_relative '../dns_mock/representer/rdns_lookup'
|
|
24
|
+
end
|
|
25
|
+
|
|
21
26
|
module Record
|
|
22
27
|
module Factory
|
|
23
28
|
require_relative '../dns_mock/record/factory/base'
|
|
@@ -23,8 +23,13 @@ module DnsMock
|
|
|
23
23
|
end
|
|
24
24
|
end
|
|
25
25
|
|
|
26
|
-
def initialize(
|
|
26
|
+
def initialize(
|
|
27
|
+
dns_name = ::Resolv::DNS::Name,
|
|
28
|
+
punycode_representer = DnsMock::Representer::Punycode,
|
|
29
|
+
record_data:
|
|
30
|
+
)
|
|
27
31
|
@dns_name = dns_name
|
|
32
|
+
@punycode_representer = punycode_representer
|
|
28
33
|
@record_data = record_data
|
|
29
34
|
end
|
|
30
35
|
|
|
@@ -38,7 +43,7 @@ module DnsMock
|
|
|
38
43
|
|
|
39
44
|
private
|
|
40
45
|
|
|
41
|
-
attr_reader :dns_name, :record_data
|
|
46
|
+
attr_reader :dns_name, :punycode_representer, :record_data
|
|
42
47
|
|
|
43
48
|
def record_type
|
|
44
49
|
self.class.name.split('::').last.upcase
|
|
@@ -46,7 +51,7 @@ module DnsMock
|
|
|
46
51
|
|
|
47
52
|
def create_dns_name(hostname)
|
|
48
53
|
raise ::ArgumentError, "cannot interpret as DNS name: #{hostname}" unless hostname.is_a?(::String)
|
|
49
|
-
dns_name.create("#{hostname}.")
|
|
54
|
+
dns_name.create("#{punycode_representer.call(hostname)}.")
|
|
50
55
|
end
|
|
51
56
|
end
|
|
52
57
|
end
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module DnsMock
|
|
4
|
+
module Representer
|
|
5
|
+
Punycode = ::Class.new do
|
|
6
|
+
require 'simpleidn'
|
|
7
|
+
|
|
8
|
+
def self.call(hostname)
|
|
9
|
+
return hostname if hostname.ascii_only?
|
|
10
|
+
|
|
11
|
+
SimpleIDN.to_ascii(hostname)
|
|
12
|
+
end
|
|
13
|
+
end
|
|
14
|
+
end
|
|
15
|
+
end
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module DnsMock
|
|
4
|
+
module Representer
|
|
5
|
+
class RdnsLookup
|
|
6
|
+
IP_OCTET_GROUPS = /(\d+).(\d+).(\d+).(\d+)/.freeze
|
|
7
|
+
RDNS_LOOKUP_REPRESENTATION = '\4.\3.\2.\1.in-addr.arpa'
|
|
8
|
+
|
|
9
|
+
def self.call(host_address)
|
|
10
|
+
host_address.gsub(
|
|
11
|
+
DnsMock::Representer::RdnsLookup::IP_OCTET_GROUPS,
|
|
12
|
+
DnsMock::Representer::RdnsLookup::RDNS_LOOKUP_REPRESENTATION
|
|
13
|
+
)
|
|
14
|
+
end
|
|
15
|
+
end
|
|
16
|
+
end
|
|
17
|
+
end
|
|
@@ -6,8 +6,6 @@ module DnsMock
|
|
|
6
6
|
include DnsMock::Error::Helper
|
|
7
7
|
|
|
8
8
|
IP_ADDRESS_PATTERN = /\A((1\d|[1-9]|2[0-4])?\d|25[0-5])(\.\g<1>){3}\z/.freeze
|
|
9
|
-
IP_OCTET_GROUPS = /(\d+).(\d+).(\d+).(\d+)/.freeze
|
|
10
|
-
RDNS_LOOKUP_REPRESENTATION = '\4.\3.\2.\1.in-addr.arpa'
|
|
11
9
|
TYPE_MAPPER = DnsMock::AVAILABLE_DNS_RECORD_TYPES.zip(
|
|
12
10
|
[
|
|
13
11
|
[DnsMock::Record::Builder::A, DnsMock::Record::Factory::A, ::Array],
|
|
@@ -27,7 +25,12 @@ module DnsMock
|
|
|
27
25
|
|
|
28
26
|
attr_reader :records
|
|
29
27
|
|
|
30
|
-
def initialize
|
|
28
|
+
def initialize(
|
|
29
|
+
punycode_representer = DnsMock::Representer::Punycode,
|
|
30
|
+
rdns_lookup_representer = DnsMock::Representer::RdnsLookup
|
|
31
|
+
)
|
|
32
|
+
@punycode_representer = punycode_representer
|
|
33
|
+
@rdns_lookup_representer = rdns_lookup_representer
|
|
31
34
|
@records = {}
|
|
32
35
|
end
|
|
33
36
|
|
|
@@ -35,7 +38,7 @@ module DnsMock
|
|
|
35
38
|
raise_unless(DnsMock::Error::ArgumentType.new(records_to_build.class), records_to_build.is_a?(::Hash))
|
|
36
39
|
records_to_build.each do |hostname, dns_records|
|
|
37
40
|
raise_unless(DnsMock::Error::RecordHostType.new(hostname, hostname.class), hostname.is_a?(::String))
|
|
38
|
-
records[
|
|
41
|
+
records[representer(hostname)] = dns_records.each_with_object({}) do |(record_type, records_data), records_instances_by_type|
|
|
39
42
|
records_instances_by_type[record_type] = build_records_instances_by_type(record_type, records_data)
|
|
40
43
|
end
|
|
41
44
|
end
|
|
@@ -45,13 +48,12 @@ module DnsMock
|
|
|
45
48
|
|
|
46
49
|
private
|
|
47
50
|
|
|
48
|
-
|
|
49
|
-
return hostname unless hostname[DnsMock::Server::RecordsDictionaryBuilder::IP_ADDRESS_PATTERN]
|
|
51
|
+
attr_reader :punycode_representer, :rdns_lookup_representer
|
|
50
52
|
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
)
|
|
53
|
+
def representer(hostname)
|
|
54
|
+
return rdns_lookup_representer.call(hostname) if hostname[DnsMock::Server::RecordsDictionaryBuilder::IP_ADDRESS_PATTERN]
|
|
55
|
+
|
|
56
|
+
punycode_representer.call(hostname)
|
|
55
57
|
end
|
|
56
58
|
|
|
57
59
|
def build_records_instances_by_type(record_type, records_to_build)
|
data/lib/dns_mock/version.rb
CHANGED
metadata
CHANGED
|
@@ -1,15 +1,29 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: dns_mock
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 1.
|
|
4
|
+
version: 1.4.2
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Vladislav Trotsenko
|
|
8
8
|
autorequire:
|
|
9
9
|
bindir: exe
|
|
10
10
|
cert_chain: []
|
|
11
|
-
date: 2021-
|
|
11
|
+
date: 2021-09-04 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
|
+
- !ruby/object:Gem::Dependency
|
|
14
|
+
name: simpleidn
|
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
|
16
|
+
requirements:
|
|
17
|
+
- - "~>"
|
|
18
|
+
- !ruby/object:Gem::Version
|
|
19
|
+
version: 0.2.1
|
|
20
|
+
type: :runtime
|
|
21
|
+
prerelease: false
|
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
23
|
+
requirements:
|
|
24
|
+
- - "~>"
|
|
25
|
+
- !ruby/object:Gem::Version
|
|
26
|
+
version: 0.2.1
|
|
13
27
|
- !ruby/object:Gem::Dependency
|
|
14
28
|
name: bundler
|
|
15
29
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -19,7 +33,7 @@ dependencies:
|
|
|
19
33
|
version: '2.2'
|
|
20
34
|
- - ">="
|
|
21
35
|
- !ruby/object:Gem::Version
|
|
22
|
-
version: 2.2.
|
|
36
|
+
version: 2.2.27
|
|
23
37
|
type: :development
|
|
24
38
|
prerelease: false
|
|
25
39
|
version_requirements: !ruby/object:Gem::Requirement
|
|
@@ -29,49 +43,49 @@ dependencies:
|
|
|
29
43
|
version: '2.2'
|
|
30
44
|
- - ">="
|
|
31
45
|
- !ruby/object:Gem::Version
|
|
32
|
-
version: 2.2.
|
|
46
|
+
version: 2.2.27
|
|
33
47
|
- !ruby/object:Gem::Dependency
|
|
34
48
|
name: bundler-audit
|
|
35
49
|
requirement: !ruby/object:Gem::Requirement
|
|
36
50
|
requirements:
|
|
37
51
|
- - "~>"
|
|
38
52
|
- !ruby/object:Gem::Version
|
|
39
|
-
version: 0.
|
|
53
|
+
version: 0.9.0.1
|
|
40
54
|
type: :development
|
|
41
55
|
prerelease: false
|
|
42
56
|
version_requirements: !ruby/object:Gem::Requirement
|
|
43
57
|
requirements:
|
|
44
58
|
- - "~>"
|
|
45
59
|
- !ruby/object:Gem::Version
|
|
46
|
-
version: 0.
|
|
60
|
+
version: 0.9.0.1
|
|
47
61
|
- !ruby/object:Gem::Dependency
|
|
48
|
-
name:
|
|
62
|
+
name: fasterer
|
|
49
63
|
requirement: !ruby/object:Gem::Requirement
|
|
50
64
|
requirements:
|
|
51
65
|
- - "~>"
|
|
52
66
|
- !ruby/object:Gem::Version
|
|
53
|
-
version:
|
|
67
|
+
version: 0.9.0
|
|
54
68
|
type: :development
|
|
55
69
|
prerelease: false
|
|
56
70
|
version_requirements: !ruby/object:Gem::Requirement
|
|
57
71
|
requirements:
|
|
58
72
|
- - "~>"
|
|
59
73
|
- !ruby/object:Gem::Version
|
|
60
|
-
version:
|
|
74
|
+
version: 0.9.0
|
|
61
75
|
- !ruby/object:Gem::Dependency
|
|
62
|
-
name:
|
|
76
|
+
name: ffaker
|
|
63
77
|
requirement: !ruby/object:Gem::Requirement
|
|
64
78
|
requirements:
|
|
65
79
|
- - "~>"
|
|
66
80
|
- !ruby/object:Gem::Version
|
|
67
|
-
version:
|
|
81
|
+
version: '2.19'
|
|
68
82
|
type: :development
|
|
69
83
|
prerelease: false
|
|
70
84
|
version_requirements: !ruby/object:Gem::Requirement
|
|
71
85
|
requirements:
|
|
72
86
|
- - "~>"
|
|
73
87
|
- !ruby/object:Gem::Version
|
|
74
|
-
version:
|
|
88
|
+
version: '2.19'
|
|
75
89
|
- !ruby/object:Gem::Dependency
|
|
76
90
|
name: overcommit
|
|
77
91
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -109,7 +123,7 @@ dependencies:
|
|
|
109
123
|
version: '13.0'
|
|
110
124
|
- - ">="
|
|
111
125
|
- !ruby/object:Gem::Version
|
|
112
|
-
version: 13.0.
|
|
126
|
+
version: 13.0.6
|
|
113
127
|
type: :development
|
|
114
128
|
prerelease: false
|
|
115
129
|
version_requirements: !ruby/object:Gem::Requirement
|
|
@@ -119,7 +133,7 @@ dependencies:
|
|
|
119
133
|
version: '13.0'
|
|
120
134
|
- - ">="
|
|
121
135
|
- !ruby/object:Gem::Version
|
|
122
|
-
version: 13.0.
|
|
136
|
+
version: 13.0.6
|
|
123
137
|
- !ruby/object:Gem::Dependency
|
|
124
138
|
name: reek
|
|
125
139
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -129,7 +143,7 @@ dependencies:
|
|
|
129
143
|
version: '6.0'
|
|
130
144
|
- - ">="
|
|
131
145
|
- !ruby/object:Gem::Version
|
|
132
|
-
version: 6.0.
|
|
146
|
+
version: 6.0.6
|
|
133
147
|
type: :development
|
|
134
148
|
prerelease: false
|
|
135
149
|
version_requirements: !ruby/object:Gem::Requirement
|
|
@@ -139,7 +153,7 @@ dependencies:
|
|
|
139
153
|
version: '6.0'
|
|
140
154
|
- - ">="
|
|
141
155
|
- !ruby/object:Gem::Version
|
|
142
|
-
version: 6.0.
|
|
156
|
+
version: 6.0.6
|
|
143
157
|
- !ruby/object:Gem::Dependency
|
|
144
158
|
name: rspec
|
|
145
159
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -174,20 +188,14 @@ dependencies:
|
|
|
174
188
|
requirements:
|
|
175
189
|
- - "~>"
|
|
176
190
|
- !ruby/object:Gem::Version
|
|
177
|
-
version: '1.
|
|
178
|
-
- - ">="
|
|
179
|
-
- !ruby/object:Gem::Version
|
|
180
|
-
version: 1.16.1
|
|
191
|
+
version: '1.20'
|
|
181
192
|
type: :development
|
|
182
193
|
prerelease: false
|
|
183
194
|
version_requirements: !ruby/object:Gem::Requirement
|
|
184
195
|
requirements:
|
|
185
196
|
- - "~>"
|
|
186
197
|
- !ruby/object:Gem::Version
|
|
187
|
-
version: '1.
|
|
188
|
-
- - ">="
|
|
189
|
-
- !ruby/object:Gem::Version
|
|
190
|
-
version: 1.16.1
|
|
198
|
+
version: '1.20'
|
|
191
199
|
- !ruby/object:Gem::Dependency
|
|
192
200
|
name: rubocop-performance
|
|
193
201
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -197,7 +205,7 @@ dependencies:
|
|
|
197
205
|
version: '1.11'
|
|
198
206
|
- - ">="
|
|
199
207
|
- !ruby/object:Gem::Version
|
|
200
|
-
version: 1.11.
|
|
208
|
+
version: 1.11.5
|
|
201
209
|
type: :development
|
|
202
210
|
prerelease: false
|
|
203
211
|
version_requirements: !ruby/object:Gem::Requirement
|
|
@@ -207,7 +215,7 @@ dependencies:
|
|
|
207
215
|
version: '1.11'
|
|
208
216
|
- - ">="
|
|
209
217
|
- !ruby/object:Gem::Version
|
|
210
|
-
version: 1.11.
|
|
218
|
+
version: 1.11.5
|
|
211
219
|
- !ruby/object:Gem::Dependency
|
|
212
220
|
name: rubocop-rspec
|
|
213
221
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -299,6 +307,8 @@ files:
|
|
|
299
307
|
- lib/dns_mock/record/factory/ptr.rb
|
|
300
308
|
- lib/dns_mock/record/factory/soa.rb
|
|
301
309
|
- lib/dns_mock/record/factory/txt.rb
|
|
310
|
+
- lib/dns_mock/representer/punycode.rb
|
|
311
|
+
- lib/dns_mock/representer/rdns_lookup.rb
|
|
302
312
|
- lib/dns_mock/response/answer.rb
|
|
303
313
|
- lib/dns_mock/response/message.rb
|
|
304
314
|
- lib/dns_mock/server.rb
|
|
@@ -331,8 +341,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
|
331
341
|
- !ruby/object:Gem::Version
|
|
332
342
|
version: '0'
|
|
333
343
|
requirements: []
|
|
334
|
-
|
|
335
|
-
rubygems_version: 2.7.3
|
|
344
|
+
rubygems_version: 3.2.20
|
|
336
345
|
signing_key:
|
|
337
346
|
specification_version: 4
|
|
338
347
|
summary: dns_mock
|