dns_mock 1.3.1 → 1.4.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/.codeclimate.yml +1 -1
- data/.reek.yml +7 -1
- data/.rubocop.yml +33 -0
- data/CHANGELOG.md +105 -13
- data/Gemfile.lock +26 -32
- data/README.md +5 -4
- data/dns_mock.gemspec +12 -10
- data/lib/dns_mock/core.rb +5 -0
- data/lib/dns_mock/record/builder/mx.rb +1 -1
- 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 +40 -24
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 4933cef6e91f5f8ab417d85c8c13c66dd4e19569706f62d7c87b1a237688d2c1
|
4
|
+
data.tar.gz: fe2d61a447e7113ef074e5084209484372b10e6df56671423a1e7d4dafea1873
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 962f933bf2c18aedd85f33f3b4cf9b4e568e018651d87e7463002eac6a05e9f55c61c751f150a989c54c0ca891a13f164928d0945ae64aee04e9219fa8ba3538
|
7
|
+
data.tar.gz: 8473f6cd8236855da9cec38daa37a8aa4d3dd441962802c9bf80a2981ea3ef0fa65bffe80985677a6ac9181c5d0908e46769d8f39d3b25af7c0b44a2e4776ea4
|
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
@@ -139,6 +139,18 @@ Style/MultilineInPatternThen:
|
|
139
139
|
Style/QuotedSymbols:
|
140
140
|
Enabled: true
|
141
141
|
|
142
|
+
Style/RedundantSelfAssignmentBranch:
|
143
|
+
Enabled: true
|
144
|
+
|
145
|
+
Style/NumberedParameters:
|
146
|
+
Enabled: true
|
147
|
+
|
148
|
+
Style/NumberedParametersLimit:
|
149
|
+
Enabled: true
|
150
|
+
|
151
|
+
Style/SelectByRegexp:
|
152
|
+
Enabled: true
|
153
|
+
|
142
154
|
Layout/LineLength:
|
143
155
|
Max: 150
|
144
156
|
|
@@ -242,9 +254,24 @@ Lint/TripleQuotes:
|
|
242
254
|
Lint/EmptyInPattern:
|
243
255
|
Enabled: true
|
244
256
|
|
257
|
+
Lint/AmbiguousRange:
|
258
|
+
Enabled: true
|
259
|
+
|
260
|
+
Lint/AmbiguousOperatorPrecedence:
|
261
|
+
Enabled: true
|
262
|
+
|
263
|
+
Lint/IncompatibleIoSelectWithFiberScheduler:
|
264
|
+
Enabled: true
|
265
|
+
|
266
|
+
Lint/RequireRelativeSelfPath:
|
267
|
+
Enabled: true
|
268
|
+
|
245
269
|
Gemspec/DateAssignment:
|
246
270
|
Enabled: true
|
247
271
|
|
272
|
+
Security/IoMethods:
|
273
|
+
Enabled: true
|
274
|
+
|
248
275
|
Performance/AncestorsInclude:
|
249
276
|
Enabled: true
|
250
277
|
|
@@ -328,3 +355,9 @@ RSpec/IdenticalEqualityAssertion:
|
|
328
355
|
|
329
356
|
RSpec/Rails/AvoidSetupHook:
|
330
357
|
Enabled: true
|
358
|
+
|
359
|
+
RSpec/ExcessiveDocstringSpacing:
|
360
|
+
Enabled: true
|
361
|
+
|
362
|
+
RSpec/SubjectDeclaration:
|
363
|
+
Enabled: true
|
data/CHANGELOG.md
CHANGED
@@ -2,6 +2,90 @@
|
|
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.3] - 2021-10-07
|
6
|
+
|
7
|
+
### Updated
|
8
|
+
|
9
|
+
- Updated gem development dependencies
|
10
|
+
- Updated gem version
|
11
|
+
|
12
|
+
## [1.4.2] - 2021-09-04
|
13
|
+
|
14
|
+
### Updated
|
15
|
+
|
16
|
+
- Updated gem development dependencies
|
17
|
+
- Updated gem version
|
18
|
+
|
19
|
+
## [1.4.1] - 2021-08-16
|
20
|
+
|
21
|
+
### Updated
|
22
|
+
|
23
|
+
- Updated gem development dependencies
|
24
|
+
- Updated gem version
|
25
|
+
|
26
|
+
### Changed
|
27
|
+
|
28
|
+
- `faker` to `ffaker` development dependency
|
29
|
+
|
30
|
+
## [1.4.0] - 2021-07-13
|
31
|
+
|
32
|
+
### Added
|
33
|
+
|
34
|
+
- Added ability to use internationalized hostnames. All hostnames in UTF-8 will be represented as [Punycode](https://en.wikipedia.org/wiki/Punycode)
|
35
|
+
- Added `simpleidn` as runtime dependency
|
36
|
+
- Added `DnsMock::Representer::Punycode`, tests
|
37
|
+
|
38
|
+
```ruby
|
39
|
+
records = {
|
40
|
+
'mañana.com' => {
|
41
|
+
mx: %w[másletras.mañana.com]
|
42
|
+
}
|
43
|
+
}
|
44
|
+
|
45
|
+
DnsMock.start_server(port: 5300, records: records)
|
46
|
+
```
|
47
|
+
|
48
|
+
```bash
|
49
|
+
dig @localhost -p 5300 MX xn--maana-pta.com
|
50
|
+
```
|
51
|
+
|
52
|
+
```
|
53
|
+
; <<>> DiG 9.10.6 <<>> @localhost -p 5300 MX xn--maana-pta.com
|
54
|
+
; (2 servers found)
|
55
|
+
;; global options: +cmd
|
56
|
+
;; Got answer:
|
57
|
+
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 4612
|
58
|
+
;; flags: rd; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1
|
59
|
+
;; WARNING: recursion requested but not available
|
60
|
+
|
61
|
+
;; OPT PSEUDOSECTION:
|
62
|
+
; EDNS: version: 0, flags:; udp: 4096
|
63
|
+
;; QUESTION SECTION:
|
64
|
+
;xn--maana-pta.com. IN MX
|
65
|
+
|
66
|
+
;; ANSWER SECTION:
|
67
|
+
xn--maana-pta.com. 1 IN MX 10 xn--msletras-8ya.xn--maana-pta.com.
|
68
|
+
|
69
|
+
;; Query time: 0 msec
|
70
|
+
;; SERVER: 127.0.0.1#5300(127.0.0.1)
|
71
|
+
;; WHEN: Tue Jul 13 15:38:47 EEST 2021
|
72
|
+
;; MSG SIZE rcvd: 79
|
73
|
+
```
|
74
|
+
|
75
|
+
### Changed
|
76
|
+
|
77
|
+
- Refactored `DnsMock::Representer::RdnsLookup`, tests
|
78
|
+
- Updated `DnsMock::Record::Factory::Base`
|
79
|
+
- Updated `DnsMock::Server::RecordsDictionaryBuilder`, tests
|
80
|
+
- Updated `DnsMock::Record::Factory::Cname`, tests
|
81
|
+
- Updated `DnsMock::Record::Factory::Mx`, tests
|
82
|
+
- Updated `DnsMock::Record::Factory::Ns`, tests
|
83
|
+
- Updated `DnsMock::Record::Factory::Ptr`, tests
|
84
|
+
- Updated `DnsMock::Record::Factory::Soa`, tests
|
85
|
+
- Updated `DnsMock::ContextGeneratorHelper`, tests
|
86
|
+
- Updated reek config
|
87
|
+
- Updated gem documentation, version
|
88
|
+
|
5
89
|
## [1.3.1] - 2021-07-07
|
6
90
|
|
7
91
|
### Changed
|
@@ -12,11 +96,13 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
|
|
12
96
|
|
13
97
|
## [1.3.0] - 2021-06-14
|
14
98
|
|
15
|
-
|
99
|
+
### Added
|
100
|
+
|
101
|
+
- Detecting random available port via OS features. Thanks [@ioquatix](https://github.com/ioquatix) for [suggestion](https://github.com/mocktools/ruby-dns-mock/issues/42) 🚀
|
16
102
|
|
17
103
|
### Removed
|
18
104
|
|
19
|
-
- Removed `DnsMock::Server::RandomAvailablePort
|
105
|
+
- Removed `DnsMock::Server::RandomAvailablePort`, tests
|
20
106
|
|
21
107
|
### Changed
|
22
108
|
|
@@ -61,9 +147,11 @@ Detecting random available port via OS features. Thanks [@ioquatix](https://gith
|
|
61
147
|
|
62
148
|
## [1.2.0] - 2021-02-04
|
63
149
|
|
64
|
-
###
|
150
|
+
### Added
|
65
151
|
|
66
|
-
|
152
|
+
- Ability to specify custom priority of MX record if it needed
|
153
|
+
|
154
|
+
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.
|
67
155
|
|
68
156
|
```ruby
|
69
157
|
records = {
|
@@ -96,9 +184,9 @@ example.com. 1 IN MX 40 mx3.domain.com.
|
|
96
184
|
|
97
185
|
## [1.1.0] - 2021-02-01
|
98
186
|
|
99
|
-
###
|
187
|
+
### Added
|
100
188
|
|
101
|
-
|
189
|
+
- RSpec native support. DnsMock helper help you to simplify integration with RSpec
|
102
190
|
|
103
191
|
```ruby
|
104
192
|
# spec/support/config/dns_mock.rb
|
@@ -130,9 +218,11 @@ end
|
|
130
218
|
|
131
219
|
## [1.0.0] - 2021-01-29
|
132
220
|
|
133
|
-
###
|
221
|
+
### Added
|
222
|
+
|
223
|
+
- Configurable strategy for record not found case
|
134
224
|
|
135
|
-
|
225
|
+
By default it won't raise an exception when DNS record not found in mocked records dictionary:
|
136
226
|
|
137
227
|
```ruby
|
138
228
|
DnsMock.start_server(port: 5300)
|
@@ -178,13 +268,15 @@ DnsMock.start_server(exception_if_not_found: true)
|
|
178
268
|
|
179
269
|
### Fixed
|
180
270
|
|
181
|
-
|
271
|
+
- RDNS lookup representatin for IP address in PTR record feature.
|
182
272
|
|
183
273
|
## [0.2.0] - 2021-01-26
|
184
274
|
|
185
|
-
###
|
275
|
+
### Added
|
276
|
+
|
277
|
+
- PTR record support. Ability to mock PTR records
|
186
278
|
|
187
|
-
|
279
|
+
Please note, you can define host address without RDNS lookup prefix (`.in-addr.arpa`). `DnsMock` will do it for you.
|
188
280
|
|
189
281
|
```ruby
|
190
282
|
records = {
|
@@ -216,6 +308,6 @@ dig @localhost -p 5300 -x 1.2.3.4
|
|
216
308
|
|
217
309
|
## [0.1.0] - 2021-01-19
|
218
310
|
|
219
|
-
###
|
311
|
+
### Added
|
220
312
|
|
221
|
-
|
313
|
+
- 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.3
|
4
|
+
dns_mock (1.4.3)
|
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
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.20.0)
|
29
26
|
iniparse (1.5.0)
|
30
27
|
json (2.5.1)
|
31
28
|
kwalify (0.7.2)
|
@@ -34,8 +31,8 @@ GEM
|
|
34
31
|
childprocess (>= 0.6.3, < 5)
|
35
32
|
iniparse (~> 1.4)
|
36
33
|
rexml (~> 3.2)
|
37
|
-
parallel (1.
|
38
|
-
parser (3.0.
|
34
|
+
parallel (1.21.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,24 @@ 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.22.1)
|
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.12.0, < 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.12.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
|
-
rubocop-rspec (2.
|
88
|
-
rubocop (~> 1.
|
89
|
-
rubocop-ast (>= 1.1.0)
|
82
|
+
rubocop-rspec (2.5.0)
|
83
|
+
rubocop (~> 1.19)
|
90
84
|
ruby-progressbar (1.11.0)
|
91
|
-
ruby_parser (3.
|
85
|
+
ruby_parser (3.17.0)
|
92
86
|
sexp_processor (~> 4.15, >= 4.15.1)
|
93
87
|
sexp_processor (4.15.3)
|
94
88
|
simplecov (0.17.1)
|
@@ -101,28 +95,28 @@ GEM
|
|
101
95
|
thor (1.1.0)
|
102
96
|
unf (0.1.4)
|
103
97
|
unf_ext
|
104
|
-
unf_ext (0.0.
|
105
|
-
unicode-display_width (2.
|
98
|
+
unf_ext (0.0.8)
|
99
|
+
unicode-display_width (2.1.0)
|
106
100
|
|
107
101
|
PLATFORMS
|
108
102
|
x86_64-darwin-20
|
109
103
|
|
110
104
|
DEPENDENCIES
|
111
|
-
bundler (~> 2.2, >= 2.2.
|
112
|
-
bundler-audit (~> 0.
|
105
|
+
bundler (~> 2.2, >= 2.2.28)
|
106
|
+
bundler-audit (~> 0.9.0.1)
|
113
107
|
dns_mock!
|
114
|
-
faker (~> 2.18)
|
115
108
|
fasterer (~> 0.9.0)
|
109
|
+
ffaker (~> 2.20)
|
116
110
|
overcommit (~> 0.58.0)
|
117
111
|
pry-byebug (~> 3.9)
|
118
|
-
rake (~> 13.0, >= 13.0.
|
119
|
-
reek (~> 6.0, >= 6.0.
|
112
|
+
rake (~> 13.0, >= 13.0.6)
|
113
|
+
reek (~> 6.0, >= 6.0.6)
|
120
114
|
rspec (~> 3.10)
|
121
115
|
rspec-dns (~> 0.1.8)
|
122
|
-
rubocop (~> 1.
|
123
|
-
rubocop-performance (~> 1.11, >= 1.11.
|
124
|
-
rubocop-rspec (~> 2.
|
116
|
+
rubocop (~> 1.22, >= 1.22.1)
|
117
|
+
rubocop-performance (~> 1.11, >= 1.11.5)
|
118
|
+
rubocop-rspec (~> 2.5)
|
125
119
|
simplecov (~> 0.17.1)
|
126
120
|
|
127
121
|
BUNDLED WITH
|
128
|
-
2.2.
|
122
|
+
2.2.28
|
data/README.md
CHANGED
@@ -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',
|
@@ -85,7 +86,7 @@ records = {
|
|
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
@@ -1,6 +1,6 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
lib = File.expand_path('lib', __dir__)
|
3
|
+
lib = ::File.expand_path('lib', __dir__)
|
4
4
|
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
5
5
|
require 'dns_mock/version'
|
6
6
|
|
@@ -28,21 +28,23 @@ Gem::Specification.new do |spec|
|
|
28
28
|
|
29
29
|
spec.files = `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
|
30
30
|
spec.bindir = 'exe'
|
31
|
-
spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
|
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.28'
|
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.20'
|
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-rspec', '~> 2.
|
46
|
+
spec.add_development_dependency 'rubocop', '~> 1.22', '>= 1.22.1'
|
47
|
+
spec.add_development_dependency 'rubocop-performance', '~> 1.11', '>= 1.11.5'
|
48
|
+
spec.add_development_dependency 'rubocop-rspec', '~> 2.5'
|
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'
|
@@ -14,7 +14,7 @@ module DnsMock
|
|
14
14
|
record_data, custom_record_preference = parse_mx_record_data(record_data)
|
15
15
|
target_factory.new(
|
16
16
|
record_data: [
|
17
|
-
custom_record_preference&.to_i || record_preference * DnsMock::Record::Builder::Mx::RECORD_PREFERENCE_STEP,
|
17
|
+
custom_record_preference&.to_i || (record_preference * DnsMock::Record::Builder::Mx::RECORD_PREFERENCE_STEP),
|
18
18
|
record_data
|
19
19
|
]
|
20
20
|
).create
|
@@ -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.3
|
4
|
+
version: 1.4.3
|
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-10-07 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.28
|
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.28
|
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.20'
|
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.20'
|
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,20 @@ dependencies:
|
|
174
188
|
requirements:
|
175
189
|
- - "~>"
|
176
190
|
- !ruby/object:Gem::Version
|
177
|
-
version: '1.
|
191
|
+
version: '1.22'
|
178
192
|
- - ">="
|
179
193
|
- !ruby/object:Gem::Version
|
180
|
-
version: 1.
|
194
|
+
version: 1.22.1
|
181
195
|
type: :development
|
182
196
|
prerelease: false
|
183
197
|
version_requirements: !ruby/object:Gem::Requirement
|
184
198
|
requirements:
|
185
199
|
- - "~>"
|
186
200
|
- !ruby/object:Gem::Version
|
187
|
-
version: '1.
|
201
|
+
version: '1.22'
|
188
202
|
- - ">="
|
189
203
|
- !ruby/object:Gem::Version
|
190
|
-
version: 1.
|
204
|
+
version: 1.22.1
|
191
205
|
- !ruby/object:Gem::Dependency
|
192
206
|
name: rubocop-performance
|
193
207
|
requirement: !ruby/object:Gem::Requirement
|
@@ -197,7 +211,7 @@ dependencies:
|
|
197
211
|
version: '1.11'
|
198
212
|
- - ">="
|
199
213
|
- !ruby/object:Gem::Version
|
200
|
-
version: 1.11.
|
214
|
+
version: 1.11.5
|
201
215
|
type: :development
|
202
216
|
prerelease: false
|
203
217
|
version_requirements: !ruby/object:Gem::Requirement
|
@@ -207,21 +221,21 @@ dependencies:
|
|
207
221
|
version: '1.11'
|
208
222
|
- - ">="
|
209
223
|
- !ruby/object:Gem::Version
|
210
|
-
version: 1.11.
|
224
|
+
version: 1.11.5
|
211
225
|
- !ruby/object:Gem::Dependency
|
212
226
|
name: rubocop-rspec
|
213
227
|
requirement: !ruby/object:Gem::Requirement
|
214
228
|
requirements:
|
215
229
|
- - "~>"
|
216
230
|
- !ruby/object:Gem::Version
|
217
|
-
version: '2.
|
231
|
+
version: '2.5'
|
218
232
|
type: :development
|
219
233
|
prerelease: false
|
220
234
|
version_requirements: !ruby/object:Gem::Requirement
|
221
235
|
requirements:
|
222
236
|
- - "~>"
|
223
237
|
- !ruby/object:Gem::Version
|
224
|
-
version: '2.
|
238
|
+
version: '2.5'
|
225
239
|
- !ruby/object:Gem::Dependency
|
226
240
|
name: simplecov
|
227
241
|
requirement: !ruby/object:Gem::Requirement
|
@@ -299,6 +313,8 @@ files:
|
|
299
313
|
- lib/dns_mock/record/factory/ptr.rb
|
300
314
|
- lib/dns_mock/record/factory/soa.rb
|
301
315
|
- lib/dns_mock/record/factory/txt.rb
|
316
|
+
- lib/dns_mock/representer/punycode.rb
|
317
|
+
- lib/dns_mock/representer/rdns_lookup.rb
|
302
318
|
- lib/dns_mock/response/answer.rb
|
303
319
|
- lib/dns_mock/response/message.rb
|
304
320
|
- lib/dns_mock/server.rb
|