dns_mock 1.0.0 → 1.2.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/.circleci/config.yml +54 -15
- data/.codeclimate.yml +1 -1
- data/.reek.yml +6 -0
- data/.rubocop.yml +18 -0
- data/CHANGELOG.md +93 -0
- data/Gemfile.lock +28 -28
- data/README.md +67 -2
- data/dns_mock.gemspec +8 -8
- data/lib/dns_mock/record/builder/mx.rb +12 -1
- data/lib/dns_mock/test_framework/rspec.rb +12 -0
- data/lib/dns_mock/test_framework/rspec/helper.rb +15 -0
- data/lib/dns_mock/test_framework/rspec/interface.rb +35 -0
- data/lib/dns_mock/version.rb +1 -1
- metadata +29 -26
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 66e5860c3ab25815cc94543f7703b1318c13fa55492921de37db8649f4f28ea7
|
|
4
|
+
data.tar.gz: 2e2d5ac9dfce7a0fb5d16bc8ac90b0a964face183eb4535e75d291c6613363d8
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 6a8decdc20ec9e3ae7e829e9baa82b2f736c4e13c0306447c98eae9c84919299811afe25ddaece1b7cf1949aee817c3533fd692e11a40f3332bead029a89fe36
|
|
7
|
+
data.tar.gz: e48f73f649d5ba827362bc7db39c0ad0bd30f67601694ec54ee5038fbae9519f4bffa12303047f6395b15f6be3f6de3a2c738e89583817c454b5472cb3f10bfe
|
data/.circleci/config.yml
CHANGED
|
@@ -1,11 +1,21 @@
|
|
|
1
|
+
version: 2.1
|
|
2
|
+
|
|
1
3
|
defaults: &defaults
|
|
2
4
|
working_directory: ~/ruby-dns-mock
|
|
3
5
|
docker:
|
|
4
|
-
- image:
|
|
6
|
+
- image: cimg/ruby:<< parameters.ruby-version >>
|
|
5
7
|
environment:
|
|
6
8
|
CC_TEST_REPORTER_ID: 18fba9e7d6885c48453a80a0f019a60d9ffa3fd80467652a6b3c95fef5ea9a50
|
|
7
9
|
|
|
10
|
+
orbs:
|
|
11
|
+
ruby: circleci/ruby@1.1.3
|
|
12
|
+
|
|
8
13
|
references:
|
|
14
|
+
install_bundler: &install_bundler
|
|
15
|
+
run:
|
|
16
|
+
name: Installing bundler
|
|
17
|
+
command: gem i bundler -v $(tail -1 Gemfile.lock | tr -d ' ')
|
|
18
|
+
|
|
9
19
|
restore_bundle_cache: &restore_bundle_cache
|
|
10
20
|
restore_cache:
|
|
11
21
|
keys:
|
|
@@ -24,19 +34,23 @@ references:
|
|
|
24
34
|
|
|
25
35
|
install_codeclimate_reporter: &install_codeclimate_reporter
|
|
26
36
|
run:
|
|
27
|
-
name: Install Code Climate
|
|
37
|
+
name: Install Code Climate test reporter
|
|
28
38
|
command: |
|
|
29
39
|
curl -L https://codeclimate.com/downloads/test-reporter/test-reporter-latest-linux-amd64 > ./cc-test-reporter
|
|
30
40
|
chmod +x ./cc-test-reporter
|
|
31
41
|
|
|
32
|
-
version: 2
|
|
33
42
|
jobs:
|
|
34
|
-
linters:
|
|
43
|
+
linters-with-ruby:
|
|
44
|
+
parameters:
|
|
45
|
+
ruby-version:
|
|
46
|
+
type: string
|
|
47
|
+
|
|
35
48
|
<<: *defaults
|
|
36
49
|
|
|
37
50
|
steps:
|
|
38
51
|
- checkout
|
|
39
52
|
|
|
53
|
+
- <<: *install_bundler
|
|
40
54
|
- <<: *restore_bundle_cache
|
|
41
55
|
- <<: *bundle_install
|
|
42
56
|
- <<: *save_bundle_cache
|
|
@@ -47,12 +61,17 @@ jobs:
|
|
|
47
61
|
bundle exec overcommit -s
|
|
48
62
|
SKIP=AuthorEmail,AuthorName bundle exec overcommit -r
|
|
49
63
|
|
|
50
|
-
tests:
|
|
64
|
+
tests-and-coverage-with-ruby:
|
|
65
|
+
parameters:
|
|
66
|
+
ruby-version:
|
|
67
|
+
type: string
|
|
68
|
+
|
|
51
69
|
<<: *defaults
|
|
52
70
|
|
|
53
71
|
steps:
|
|
54
72
|
- checkout
|
|
55
73
|
|
|
74
|
+
- <<: *install_bundler
|
|
56
75
|
- <<: *restore_bundle_cache
|
|
57
76
|
- <<: *bundle_install
|
|
58
77
|
- <<: *save_bundle_cache
|
|
@@ -61,7 +80,6 @@ jobs:
|
|
|
61
80
|
- run:
|
|
62
81
|
name: Running tests
|
|
63
82
|
command: |
|
|
64
|
-
mkdir /tmp/test-results
|
|
65
83
|
./cc-test-reporter before-build
|
|
66
84
|
bundle exec rspec
|
|
67
85
|
|
|
@@ -70,20 +88,41 @@ jobs:
|
|
|
70
88
|
command: |
|
|
71
89
|
./cc-test-reporter format-coverage -t simplecov -o "coverage/codeclimate.$CIRCLE_NODE_INDEX.json"
|
|
72
90
|
|
|
73
|
-
- store_test_results:
|
|
74
|
-
path: /tmp/test-results
|
|
75
|
-
|
|
76
91
|
- store_artifacts:
|
|
77
|
-
path: /
|
|
78
|
-
destination:
|
|
92
|
+
path: ~/ruby-dns-mock/coverage
|
|
93
|
+
destination: coverage
|
|
79
94
|
|
|
80
95
|
- deploy:
|
|
81
96
|
command: |
|
|
82
97
|
./cc-test-reporter sum-coverage --output - --parts $CIRCLE_NODE_TOTAL coverage/codeclimate.*.json | ./cc-test-reporter upload-coverage --debug --input -
|
|
83
98
|
|
|
99
|
+
compatibility-with-ruby:
|
|
100
|
+
parameters:
|
|
101
|
+
ruby-version:
|
|
102
|
+
type: string
|
|
103
|
+
docker:
|
|
104
|
+
- image: cimg/ruby:<< parameters.ruby-version >>
|
|
105
|
+
steps:
|
|
106
|
+
- checkout
|
|
107
|
+
- ruby/install-deps:
|
|
108
|
+
with-cache: false
|
|
109
|
+
path: './vendor/custom_bundle'
|
|
110
|
+
- run:
|
|
111
|
+
name: Running compatibility tests
|
|
112
|
+
command: bundle exec rspec
|
|
113
|
+
|
|
84
114
|
workflows:
|
|
85
|
-
|
|
86
|
-
build:
|
|
115
|
+
build_and_test:
|
|
87
116
|
jobs:
|
|
88
|
-
- linters
|
|
89
|
-
|
|
117
|
+
- linters-with-ruby:
|
|
118
|
+
matrix:
|
|
119
|
+
parameters:
|
|
120
|
+
ruby-version: ["2.5"]
|
|
121
|
+
- tests-and-coverage-with-ruby:
|
|
122
|
+
matrix:
|
|
123
|
+
parameters:
|
|
124
|
+
ruby-version: ["2.5"]
|
|
125
|
+
- compatibility-with-ruby:
|
|
126
|
+
matrix:
|
|
127
|
+
parameters:
|
|
128
|
+
ruby-version: ["2.6", "2.7", "3.0"]
|
data/.codeclimate.yml
CHANGED
data/.reek.yml
CHANGED
|
@@ -21,6 +21,8 @@ detectors:
|
|
|
21
21
|
- DnsMock::ServerHelper#start_random_server
|
|
22
22
|
- DnsMock::ServerHelper#stop_all_running_servers
|
|
23
23
|
- DnsMock::Server::RecordsDictionaryBuilder#rdns_lookup_prefix
|
|
24
|
+
- DnsMock::ContextGeneratorHelper#random_port_number
|
|
25
|
+
- DnsMock::TestFramework::RSpec::Helper#dns_mock_server
|
|
24
26
|
|
|
25
27
|
ControlParameter:
|
|
26
28
|
exclude:
|
|
@@ -51,3 +53,7 @@ detectors:
|
|
|
51
53
|
exclude:
|
|
52
54
|
- DnsMock::Server#initialize
|
|
53
55
|
- DnsMock#start_server
|
|
56
|
+
|
|
57
|
+
NilCheck:
|
|
58
|
+
exclude:
|
|
59
|
+
- DnsMock::Record::Builder::Mx#build
|
data/.rubocop.yml
CHANGED
|
@@ -121,6 +121,12 @@ Style/HashExcept:
|
|
|
121
121
|
Style/IfWithBooleanLiteralBranches:
|
|
122
122
|
Enabled: true
|
|
123
123
|
|
|
124
|
+
Style/HashConversion:
|
|
125
|
+
Enabled: true
|
|
126
|
+
|
|
127
|
+
Style/StringChars:
|
|
128
|
+
Enabled: true
|
|
129
|
+
|
|
124
130
|
Layout/LineLength:
|
|
125
131
|
Max: 150
|
|
126
132
|
|
|
@@ -218,6 +224,9 @@ Lint/SymbolConversion:
|
|
|
218
224
|
Lint/TripleQuotes:
|
|
219
225
|
Enabled: true
|
|
220
226
|
|
|
227
|
+
Gemspec/DateAssignment:
|
|
228
|
+
Enabled: true
|
|
229
|
+
|
|
221
230
|
Performance/AncestorsInclude:
|
|
222
231
|
Enabled: true
|
|
223
232
|
|
|
@@ -257,6 +266,15 @@ Performance/MethodObjectAsBlock:
|
|
|
257
266
|
Performance/Sum:
|
|
258
267
|
Enabled: true
|
|
259
268
|
|
|
269
|
+
Performance/RedundantEqualityComparisonBlock:
|
|
270
|
+
Enabled: true
|
|
271
|
+
|
|
272
|
+
Performance/RedundantSplitRegexpArgument:
|
|
273
|
+
Enabled: true
|
|
274
|
+
|
|
275
|
+
Performance/MapCompact:
|
|
276
|
+
Enabled: true
|
|
277
|
+
|
|
260
278
|
RSpec/ExampleLength:
|
|
261
279
|
Enabled: false
|
|
262
280
|
|
data/CHANGELOG.md
CHANGED
|
@@ -2,6 +2,99 @@
|
|
|
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.2.3] - 2021-05-11
|
|
6
|
+
|
|
7
|
+
### Changed
|
|
8
|
+
|
|
9
|
+
- Updated gem development dependencies
|
|
10
|
+
- Updated CircleCI config
|
|
11
|
+
|
|
12
|
+
## [1.2.2] - 2021-05-06
|
|
13
|
+
|
|
14
|
+
### Changed
|
|
15
|
+
|
|
16
|
+
- Updated gem development dependencies
|
|
17
|
+
- Updated rubocop/codeclimate config
|
|
18
|
+
- Updated ci config
|
|
19
|
+
|
|
20
|
+
## [1.2.1] - 2021-03-23
|
|
21
|
+
|
|
22
|
+
### Changed
|
|
23
|
+
|
|
24
|
+
- Updated gem development dependencies
|
|
25
|
+
- Updated rubocop/codeclimate config
|
|
26
|
+
- Updated gem documentation
|
|
27
|
+
- Updated tests
|
|
28
|
+
|
|
29
|
+
## [1.2.0] - 2021-02-04
|
|
30
|
+
|
|
31
|
+
### Ability to specify MX record priority
|
|
32
|
+
|
|
33
|
+
Added ability to specify custom priority of MX record if it needed. Now it impossible 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.
|
|
34
|
+
|
|
35
|
+
```ruby
|
|
36
|
+
records = {
|
|
37
|
+
'example.com' => {
|
|
38
|
+
mx: %w[.:0 mx1.domain.com:10 mx2.domain.com:10 mx3.domain.com] # .:0 - null MX record
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
DnsMock.start_server(records: records)
|
|
43
|
+
```
|
|
44
|
+
|
|
45
|
+
```bash
|
|
46
|
+
dig @localhost -p 5300 MX example.com
|
|
47
|
+
```
|
|
48
|
+
|
|
49
|
+
```
|
|
50
|
+
; <<>> DiG 9.10.6 <<>> @localhost -p 5300 MX example.com
|
|
51
|
+
|
|
52
|
+
;; ANSWER SECTION:
|
|
53
|
+
example.com. 1 IN MX 0 .
|
|
54
|
+
example.com. 1 IN MX 10 mx1.domain.com.
|
|
55
|
+
example.com. 1 IN MX 10 mx2.domain.com.
|
|
56
|
+
example.com. 1 IN MX 40 mx3.domain.com.
|
|
57
|
+
|
|
58
|
+
;; Query time: 0 msec
|
|
59
|
+
;; SERVER: 127.0.0.1#5300(127.0.0.1)
|
|
60
|
+
;; WHEN: Wed Feb 03 20:19:51 EET 2021
|
|
61
|
+
;; MSG SIZE rcvd: 102
|
|
62
|
+
```
|
|
63
|
+
|
|
64
|
+
## [1.1.0] - 2021-02-01
|
|
65
|
+
|
|
66
|
+
### RSpec native support
|
|
67
|
+
|
|
68
|
+
Added DnsMock helper which can simplify integration with RSpec.
|
|
69
|
+
|
|
70
|
+
```ruby
|
|
71
|
+
# spec/support/config/dns_mock.rb
|
|
72
|
+
require 'dns_mock/test_framework/rspec'
|
|
73
|
+
|
|
74
|
+
RSpec.configure do |config|
|
|
75
|
+
config.include DnsMock::TestFramework::RSpec::Helper
|
|
76
|
+
end
|
|
77
|
+
|
|
78
|
+
# your awesome first_a_record_spec.rb
|
|
79
|
+
RSpec.describe FirstARecord do
|
|
80
|
+
subject(:service) do
|
|
81
|
+
described_class.call(
|
|
82
|
+
hostname,
|
|
83
|
+
dns_gateway_host: 'localhost',
|
|
84
|
+
dns_gateway_port: dns_mock_server.port
|
|
85
|
+
)
|
|
86
|
+
end
|
|
87
|
+
|
|
88
|
+
let(:hostname) { 'example.com' }
|
|
89
|
+
let(:first_a_record) { '1.2.3.4' }
|
|
90
|
+
let(:records) { { hostname => { a: [first_a_record] } } }
|
|
91
|
+
|
|
92
|
+
before { dns_mock_server.assign_mocks(records) }
|
|
93
|
+
|
|
94
|
+
it { is_expected.to eq(first_a_record) }
|
|
95
|
+
end
|
|
96
|
+
```
|
|
97
|
+
|
|
5
98
|
## [1.0.0] - 2021-01-29
|
|
6
99
|
|
|
7
100
|
### Configurable record not found behaviour
|
data/Gemfile.lock
CHANGED
|
@@ -1,15 +1,15 @@
|
|
|
1
1
|
PATH
|
|
2
2
|
remote: .
|
|
3
3
|
specs:
|
|
4
|
-
dns_mock (1.
|
|
4
|
+
dns_mock (1.2.3)
|
|
5
5
|
|
|
6
6
|
GEM
|
|
7
7
|
remote: https://rubygems.org/
|
|
8
8
|
specs:
|
|
9
9
|
ast (2.4.2)
|
|
10
|
-
bundler-audit (0.
|
|
10
|
+
bundler-audit (0.8.0)
|
|
11
11
|
bundler (>= 1.2.0, < 3)
|
|
12
|
-
thor (
|
|
12
|
+
thor (~> 1.0)
|
|
13
13
|
byebug (11.1.3)
|
|
14
14
|
childprocess (4.0.0)
|
|
15
15
|
coderay (1.1.3)
|
|
@@ -19,12 +19,12 @@ GEM
|
|
|
19
19
|
dnsruby (1.61.5)
|
|
20
20
|
simpleidn (~> 0.1)
|
|
21
21
|
docile (1.3.5)
|
|
22
|
-
faker (2.
|
|
22
|
+
faker (2.17.0)
|
|
23
23
|
i18n (>= 1.6, < 2)
|
|
24
|
-
fasterer (0.
|
|
24
|
+
fasterer (0.9.0)
|
|
25
25
|
colorize (~> 0.7)
|
|
26
26
|
ruby_parser (>= 3.14.1)
|
|
27
|
-
i18n (1.8.
|
|
27
|
+
i18n (1.8.10)
|
|
28
28
|
concurrent-ruby (~> 1.0)
|
|
29
29
|
iniparse (1.5.0)
|
|
30
30
|
json (2.5.1)
|
|
@@ -34,7 +34,7 @@ GEM
|
|
|
34
34
|
childprocess (>= 0.6.3, < 5)
|
|
35
35
|
iniparse (~> 1.4)
|
|
36
36
|
parallel (1.20.1)
|
|
37
|
-
parser (3.0.
|
|
37
|
+
parser (3.0.1.1)
|
|
38
38
|
ast (~> 2.4.1)
|
|
39
39
|
pry (0.13.1)
|
|
40
40
|
coderay (~> 1.1)
|
|
@@ -42,16 +42,16 @@ GEM
|
|
|
42
42
|
pry-byebug (3.9.0)
|
|
43
43
|
byebug (~> 11.0)
|
|
44
44
|
pry (~> 0.13.0)
|
|
45
|
-
psych (3.3.
|
|
45
|
+
psych (3.3.1)
|
|
46
46
|
rainbow (3.0.0)
|
|
47
47
|
rake (13.0.3)
|
|
48
|
-
reek (6.0.
|
|
48
|
+
reek (6.0.4)
|
|
49
49
|
kwalify (~> 0.7.0)
|
|
50
50
|
parser (~> 3.0.0)
|
|
51
51
|
psych (~> 3.1)
|
|
52
52
|
rainbow (>= 2.0, < 4.0)
|
|
53
|
-
regexp_parser (2.
|
|
54
|
-
rexml (3.2.
|
|
53
|
+
regexp_parser (2.1.1)
|
|
54
|
+
rexml (3.2.5)
|
|
55
55
|
rspec (3.10.0)
|
|
56
56
|
rspec-core (~> 3.10.0)
|
|
57
57
|
rspec-expectations (~> 3.10.0)
|
|
@@ -69,21 +69,21 @@ GEM
|
|
|
69
69
|
diff-lcs (>= 1.2.0, < 2.0)
|
|
70
70
|
rspec-support (~> 3.10.0)
|
|
71
71
|
rspec-support (3.10.2)
|
|
72
|
-
rubocop (1.
|
|
72
|
+
rubocop (1.14.0)
|
|
73
73
|
parallel (~> 1.10)
|
|
74
74
|
parser (>= 3.0.0.0)
|
|
75
75
|
rainbow (>= 2.2.2, < 4.0)
|
|
76
76
|
regexp_parser (>= 1.8, < 3.0)
|
|
77
77
|
rexml
|
|
78
|
-
rubocop-ast (>= 1.
|
|
78
|
+
rubocop-ast (>= 1.5.0, < 2.0)
|
|
79
79
|
ruby-progressbar (~> 1.7)
|
|
80
80
|
unicode-display_width (>= 1.4.0, < 3.0)
|
|
81
|
-
rubocop-ast (1.
|
|
82
|
-
parser (>=
|
|
83
|
-
rubocop-performance (1.
|
|
84
|
-
rubocop (>=
|
|
81
|
+
rubocop-ast (1.5.0)
|
|
82
|
+
parser (>= 3.0.1.1)
|
|
83
|
+
rubocop-performance (1.11.3)
|
|
84
|
+
rubocop (>= 1.7.0, < 2.0)
|
|
85
85
|
rubocop-ast (>= 0.4.0)
|
|
86
|
-
rubocop-rspec (2.
|
|
86
|
+
rubocop-rspec (2.3.0)
|
|
87
87
|
rubocop (~> 1.0)
|
|
88
88
|
rubocop-ast (>= 1.1.0)
|
|
89
89
|
ruby-progressbar (1.11.0)
|
|
@@ -104,24 +104,24 @@ GEM
|
|
|
104
104
|
unicode-display_width (2.0.0)
|
|
105
105
|
|
|
106
106
|
PLATFORMS
|
|
107
|
-
|
|
107
|
+
x86_64-darwin-19
|
|
108
108
|
|
|
109
109
|
DEPENDENCIES
|
|
110
|
-
bundler (~>
|
|
111
|
-
bundler-audit (~> 0.
|
|
110
|
+
bundler (~> 2.2, >= 2.2.17)
|
|
111
|
+
bundler-audit (~> 0.8.0)
|
|
112
112
|
dns_mock!
|
|
113
|
-
faker (~> 2.
|
|
114
|
-
fasterer (~> 0.
|
|
113
|
+
faker (~> 2.17)
|
|
114
|
+
fasterer (~> 0.9.0)
|
|
115
115
|
overcommit (~> 0.57.0)
|
|
116
116
|
pry-byebug (~> 3.9)
|
|
117
117
|
rake (~> 13.0, >= 13.0.3)
|
|
118
|
-
reek (~> 6.0, >= 6.0.
|
|
118
|
+
reek (~> 6.0, >= 6.0.4)
|
|
119
119
|
rspec (~> 3.10)
|
|
120
120
|
rspec-dns (~> 0.1.8)
|
|
121
|
-
rubocop (~> 1.
|
|
122
|
-
rubocop-performance (~> 1.
|
|
123
|
-
rubocop-rspec (~> 2.
|
|
121
|
+
rubocop (~> 1.14)
|
|
122
|
+
rubocop-performance (~> 1.11, >= 1.11.3)
|
|
123
|
+
rubocop-rspec (~> 2.3)
|
|
124
124
|
simplecov (~> 0.17.1)
|
|
125
125
|
|
|
126
126
|
BUNDLED WITH
|
|
127
|
-
|
|
127
|
+
2.2.17
|
data/README.md
CHANGED
|
@@ -16,6 +16,9 @@
|
|
|
16
16
|
- [Requirements](#requirements)
|
|
17
17
|
- [Installation](#installation)
|
|
18
18
|
- [Usage](#usage)
|
|
19
|
+
- [RSpec](#rspec)
|
|
20
|
+
- [DnsMock RSpec helper](#dnsmock-rspec-helper)
|
|
21
|
+
- [DnsMock RSpec interface](#dnsmock-rspec-interface)
|
|
19
22
|
- [Contributing](#contributing)
|
|
20
23
|
- [License](#license)
|
|
21
24
|
- [Code of Conduct](#code-of-conduct)
|
|
@@ -56,13 +59,13 @@ Or install it yourself as:
|
|
|
56
59
|
## Usage
|
|
57
60
|
|
|
58
61
|
```ruby
|
|
59
|
-
# Example of mocked DNS records structure
|
|
62
|
+
# Example of mocked DNS records, please follow this data structure
|
|
60
63
|
records = {
|
|
61
64
|
'example.com' => {
|
|
62
65
|
a: %w[1.1.1.1 2.2.2.2],
|
|
63
66
|
aaaa: %w[2a00:1450:4001:81e::200e],
|
|
64
67
|
ns: %w[ns1.domain.com ns2.domain.com],
|
|
65
|
-
mx: %w[mx1.domain.com mx2.domain.com],
|
|
68
|
+
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
|
|
66
69
|
txt: %w[txt_record_1 txt_record_2],
|
|
67
70
|
cname: 'some.domain.com',
|
|
68
71
|
soa: [
|
|
@@ -110,6 +113,68 @@ DnsMock.running_servers # => [DnsMock::Server instance]
|
|
|
110
113
|
DnsMock.stop_running_servers! # => true
|
|
111
114
|
```
|
|
112
115
|
|
|
116
|
+
### RSpec
|
|
117
|
+
|
|
118
|
+
Require this either in your Gemfile or in RSpec's support scripts. So either:
|
|
119
|
+
|
|
120
|
+
```ruby
|
|
121
|
+
# Gemfile
|
|
122
|
+
group :test do
|
|
123
|
+
gem 'rspec'
|
|
124
|
+
gem 'dns_mock', require: 'dns_mock/test_framework/rspec'
|
|
125
|
+
end
|
|
126
|
+
```
|
|
127
|
+
|
|
128
|
+
or
|
|
129
|
+
|
|
130
|
+
```ruby
|
|
131
|
+
# spec/support/config/dns_mock.rb
|
|
132
|
+
require 'dns_mock/test_framework/rspec'
|
|
133
|
+
```
|
|
134
|
+
|
|
135
|
+
#### DnsMock RSpec helper
|
|
136
|
+
|
|
137
|
+
Just add `DnsMock::TestFramework::RSpec::Helper` if you wanna use shortcut `dns_mock_server` for DnsMock server instance into your `RSpec.describe` blocks:
|
|
138
|
+
|
|
139
|
+
```ruby
|
|
140
|
+
# spec/support/config/dns_mock.rb
|
|
141
|
+
RSpec.configure do |config|
|
|
142
|
+
config.include DnsMock::TestFramework::RSpec::Helper
|
|
143
|
+
end
|
|
144
|
+
```
|
|
145
|
+
|
|
146
|
+
```ruby
|
|
147
|
+
# your awesome first_a_record_spec.rb
|
|
148
|
+
RSpec.describe FirstARecord do
|
|
149
|
+
subject(:service) do
|
|
150
|
+
described_class.call(
|
|
151
|
+
hostname,
|
|
152
|
+
dns_gateway_host: 'localhost',
|
|
153
|
+
dns_gateway_port: dns_mock_server.port
|
|
154
|
+
)
|
|
155
|
+
end
|
|
156
|
+
|
|
157
|
+
let(:hostname) { 'example.com' }
|
|
158
|
+
let(:first_a_record) { '1.2.3.4' }
|
|
159
|
+
let(:records) { { hostname => { a: [first_a_record] } } }
|
|
160
|
+
|
|
161
|
+
before { dns_mock_server.assign_mocks(records) }
|
|
162
|
+
|
|
163
|
+
it { is_expected.to eq(first_a_record) }
|
|
164
|
+
end
|
|
165
|
+
```
|
|
166
|
+
|
|
167
|
+
#### DnsMock RSpec interface
|
|
168
|
+
|
|
169
|
+
If you won't use `DnsMock::TestFramework::RSpec::Helper` you can use `DnsMock::TestFramework::RSpec::Interface` directly instead:
|
|
170
|
+
|
|
171
|
+
```ruby
|
|
172
|
+
DnsMock::TestFramework::RSpec::Interface.start_server # creates and runs DnsMock server instance
|
|
173
|
+
DnsMock::TestFramework::RSpec::Interface.stop_server! # stops current DnsMock server instance
|
|
174
|
+
DnsMock::TestFramework::RSpec::Interface.reset_mocks! # resets mocks in current DnsMock server instance
|
|
175
|
+
DnsMock::TestFramework::RSpec::Interface.clear_server! # stops and clears current DnsMock server instance
|
|
176
|
+
```
|
|
177
|
+
|
|
113
178
|
## Contributing
|
|
114
179
|
|
|
115
180
|
Bug reports and pull requests are welcome on GitHub at https://github.com/mocktools/ruby-dns-mock. This project is intended to be a safe, welcoming space for collaboration, and contributors are expected to adhere to the [Contributor Covenant](http://contributor-covenant.org) code of conduct. Please check the [open tikets](https://github.com/mocktools/ruby-dns-mock/issues). Be shure to follow Contributor Code of Conduct below and our [Contributing Guidelines](CONTRIBUTING.md).
|
data/dns_mock.gemspec
CHANGED
|
@@ -31,18 +31,18 @@ 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.add_development_dependency 'bundler', '~>
|
|
35
|
-
spec.add_development_dependency 'bundler-audit', '~> 0.
|
|
36
|
-
spec.add_development_dependency 'faker', '~> 2.
|
|
37
|
-
spec.add_development_dependency 'fasterer', '~> 0.
|
|
34
|
+
spec.add_development_dependency 'bundler', '~> 2.2', '>= 2.2.17'
|
|
35
|
+
spec.add_development_dependency 'bundler-audit', '~> 0.8.0'
|
|
36
|
+
spec.add_development_dependency 'faker', '~> 2.17'
|
|
37
|
+
spec.add_development_dependency 'fasterer', '~> 0.9.0'
|
|
38
38
|
spec.add_development_dependency 'overcommit', '~> 0.57.0'
|
|
39
39
|
spec.add_development_dependency 'pry-byebug', '~> 3.9'
|
|
40
40
|
spec.add_development_dependency 'rake', '~> 13.0', '>= 13.0.3'
|
|
41
|
-
spec.add_development_dependency 'reek', '~> 6.0', '>= 6.0.
|
|
41
|
+
spec.add_development_dependency 'reek', '~> 6.0', '>= 6.0.4'
|
|
42
42
|
spec.add_development_dependency 'rspec', '~> 3.10'
|
|
43
43
|
spec.add_development_dependency 'rspec-dns', '~> 0.1.8'
|
|
44
|
-
spec.add_development_dependency 'rubocop', '~> 1.
|
|
45
|
-
spec.add_development_dependency 'rubocop-performance', '~> 1.
|
|
46
|
-
spec.add_development_dependency 'rubocop-rspec', '~> 2.
|
|
44
|
+
spec.add_development_dependency 'rubocop', '~> 1.14'
|
|
45
|
+
spec.add_development_dependency 'rubocop-performance', '~> 1.11', '>= 1.11.3'
|
|
46
|
+
spec.add_development_dependency 'rubocop-rspec', '~> 2.3'
|
|
47
47
|
spec.add_development_dependency 'simplecov', '~> 0.17.1'
|
|
48
48
|
end
|
|
@@ -4,18 +4,29 @@ module DnsMock
|
|
|
4
4
|
module Record
|
|
5
5
|
module Builder
|
|
6
6
|
class Mx < DnsMock::Record::Builder::Base
|
|
7
|
+
include DnsMock::Error::Helper
|
|
8
|
+
|
|
9
|
+
MX_RECORD_REGEX_PATTERN = /\A(.+):(\d+)|(.+)\z/.freeze
|
|
7
10
|
RECORD_PREFERENCE_STEP = 10
|
|
8
11
|
|
|
9
12
|
def build
|
|
10
13
|
records_data.map.with_index(1) do |record_data, record_preference|
|
|
14
|
+
record_data, custom_record_preference = parse_mx_record_data(record_data)
|
|
11
15
|
target_factory.new(
|
|
12
16
|
record_data: [
|
|
13
|
-
record_preference * DnsMock::Record::Builder::Mx::RECORD_PREFERENCE_STEP,
|
|
17
|
+
custom_record_preference&.to_i || record_preference * DnsMock::Record::Builder::Mx::RECORD_PREFERENCE_STEP,
|
|
14
18
|
record_data
|
|
15
19
|
]
|
|
16
20
|
).create
|
|
17
21
|
end
|
|
18
22
|
end
|
|
23
|
+
|
|
24
|
+
private
|
|
25
|
+
|
|
26
|
+
def parse_mx_record_data(record_data)
|
|
27
|
+
raise_record_context_type_error(:mx, record_data, ::String)
|
|
28
|
+
record_data.scan(DnsMock::Record::Builder::Mx::MX_RECORD_REGEX_PATTERN).flatten.compact
|
|
29
|
+
end
|
|
19
30
|
end
|
|
20
31
|
end
|
|
21
32
|
end
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require 'rspec/core'
|
|
4
|
+
require_relative '../../dns_mock'
|
|
5
|
+
require_relative './rspec/interface'
|
|
6
|
+
require_relative './rspec/helper'
|
|
7
|
+
|
|
8
|
+
RSpec.configure do |config|
|
|
9
|
+
config.before(:suite) { DnsMock::TestFramework::RSpec::Interface.start_server }
|
|
10
|
+
config.after(:suite) { DnsMock::TestFramework::RSpec::Interface.stop_server! }
|
|
11
|
+
config.after { DnsMock::TestFramework::RSpec::Interface.reset_mocks! }
|
|
12
|
+
end
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require_relative './interface'
|
|
4
|
+
|
|
5
|
+
module DnsMock
|
|
6
|
+
module TestFramework
|
|
7
|
+
module RSpec
|
|
8
|
+
module Helper
|
|
9
|
+
def dns_mock_server(**options)
|
|
10
|
+
DnsMock::TestFramework::RSpec::Interface.start_server(**options)
|
|
11
|
+
end
|
|
12
|
+
end
|
|
13
|
+
end
|
|
14
|
+
end
|
|
15
|
+
end
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module DnsMock
|
|
4
|
+
module TestFramework
|
|
5
|
+
module RSpec
|
|
6
|
+
module Interface
|
|
7
|
+
class << self
|
|
8
|
+
def start_server(**options)
|
|
9
|
+
@dns_mock_server ||= DnsMock.start_server(**options) # rubocop:disable Naming/MemoizedInstanceVariableName
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
def stop_server!
|
|
13
|
+
return unless dns_mock_server
|
|
14
|
+
|
|
15
|
+
dns_mock_server.stop!
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
def reset_mocks!
|
|
19
|
+
return unless dns_mock_server
|
|
20
|
+
|
|
21
|
+
dns_mock_server.reset_mocks!
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
def clear_server!
|
|
25
|
+
@dns_mock_server = nil
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
private
|
|
29
|
+
|
|
30
|
+
attr_reader :dns_mock_server
|
|
31
|
+
end
|
|
32
|
+
end
|
|
33
|
+
end
|
|
34
|
+
end
|
|
35
|
+
end
|
data/lib/dns_mock/version.rb
CHANGED
metadata
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: dns_mock
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 1.
|
|
4
|
+
version: 1.2.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-05-11 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
13
|
- !ruby/object:Gem::Dependency
|
|
14
14
|
name: bundler
|
|
@@ -16,62 +16,62 @@ dependencies:
|
|
|
16
16
|
requirements:
|
|
17
17
|
- - "~>"
|
|
18
18
|
- !ruby/object:Gem::Version
|
|
19
|
-
version: '
|
|
19
|
+
version: '2.2'
|
|
20
|
+
- - ">="
|
|
21
|
+
- !ruby/object:Gem::Version
|
|
22
|
+
version: 2.2.17
|
|
20
23
|
type: :development
|
|
21
24
|
prerelease: false
|
|
22
25
|
version_requirements: !ruby/object:Gem::Requirement
|
|
23
26
|
requirements:
|
|
24
27
|
- - "~>"
|
|
25
28
|
- !ruby/object:Gem::Version
|
|
26
|
-
version: '
|
|
29
|
+
version: '2.2'
|
|
30
|
+
- - ">="
|
|
31
|
+
- !ruby/object:Gem::Version
|
|
32
|
+
version: 2.2.17
|
|
27
33
|
- !ruby/object:Gem::Dependency
|
|
28
34
|
name: bundler-audit
|
|
29
35
|
requirement: !ruby/object:Gem::Requirement
|
|
30
36
|
requirements:
|
|
31
37
|
- - "~>"
|
|
32
38
|
- !ruby/object:Gem::Version
|
|
33
|
-
version: 0.
|
|
39
|
+
version: 0.8.0
|
|
34
40
|
type: :development
|
|
35
41
|
prerelease: false
|
|
36
42
|
version_requirements: !ruby/object:Gem::Requirement
|
|
37
43
|
requirements:
|
|
38
44
|
- - "~>"
|
|
39
45
|
- !ruby/object:Gem::Version
|
|
40
|
-
version: 0.
|
|
46
|
+
version: 0.8.0
|
|
41
47
|
- !ruby/object:Gem::Dependency
|
|
42
48
|
name: faker
|
|
43
49
|
requirement: !ruby/object:Gem::Requirement
|
|
44
50
|
requirements:
|
|
45
51
|
- - "~>"
|
|
46
52
|
- !ruby/object:Gem::Version
|
|
47
|
-
version: '2.
|
|
48
|
-
- - ">="
|
|
49
|
-
- !ruby/object:Gem::Version
|
|
50
|
-
version: 2.15.1
|
|
53
|
+
version: '2.17'
|
|
51
54
|
type: :development
|
|
52
55
|
prerelease: false
|
|
53
56
|
version_requirements: !ruby/object:Gem::Requirement
|
|
54
57
|
requirements:
|
|
55
58
|
- - "~>"
|
|
56
59
|
- !ruby/object:Gem::Version
|
|
57
|
-
version: '2.
|
|
58
|
-
- - ">="
|
|
59
|
-
- !ruby/object:Gem::Version
|
|
60
|
-
version: 2.15.1
|
|
60
|
+
version: '2.17'
|
|
61
61
|
- !ruby/object:Gem::Dependency
|
|
62
62
|
name: fasterer
|
|
63
63
|
requirement: !ruby/object:Gem::Requirement
|
|
64
64
|
requirements:
|
|
65
65
|
- - "~>"
|
|
66
66
|
- !ruby/object:Gem::Version
|
|
67
|
-
version: 0.
|
|
67
|
+
version: 0.9.0
|
|
68
68
|
type: :development
|
|
69
69
|
prerelease: false
|
|
70
70
|
version_requirements: !ruby/object:Gem::Requirement
|
|
71
71
|
requirements:
|
|
72
72
|
- - "~>"
|
|
73
73
|
- !ruby/object:Gem::Version
|
|
74
|
-
version: 0.
|
|
74
|
+
version: 0.9.0
|
|
75
75
|
- !ruby/object:Gem::Dependency
|
|
76
76
|
name: overcommit
|
|
77
77
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -129,7 +129,7 @@ dependencies:
|
|
|
129
129
|
version: '6.0'
|
|
130
130
|
- - ">="
|
|
131
131
|
- !ruby/object:Gem::Version
|
|
132
|
-
version: 6.0.
|
|
132
|
+
version: 6.0.4
|
|
133
133
|
type: :development
|
|
134
134
|
prerelease: false
|
|
135
135
|
version_requirements: !ruby/object:Gem::Requirement
|
|
@@ -139,7 +139,7 @@ dependencies:
|
|
|
139
139
|
version: '6.0'
|
|
140
140
|
- - ">="
|
|
141
141
|
- !ruby/object:Gem::Version
|
|
142
|
-
version: 6.0.
|
|
142
|
+
version: 6.0.4
|
|
143
143
|
- !ruby/object:Gem::Dependency
|
|
144
144
|
name: rspec
|
|
145
145
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -174,48 +174,48 @@ dependencies:
|
|
|
174
174
|
requirements:
|
|
175
175
|
- - "~>"
|
|
176
176
|
- !ruby/object:Gem::Version
|
|
177
|
-
version: '1.
|
|
177
|
+
version: '1.14'
|
|
178
178
|
type: :development
|
|
179
179
|
prerelease: false
|
|
180
180
|
version_requirements: !ruby/object:Gem::Requirement
|
|
181
181
|
requirements:
|
|
182
182
|
- - "~>"
|
|
183
183
|
- !ruby/object:Gem::Version
|
|
184
|
-
version: '1.
|
|
184
|
+
version: '1.14'
|
|
185
185
|
- !ruby/object:Gem::Dependency
|
|
186
186
|
name: rubocop-performance
|
|
187
187
|
requirement: !ruby/object:Gem::Requirement
|
|
188
188
|
requirements:
|
|
189
189
|
- - "~>"
|
|
190
190
|
- !ruby/object:Gem::Version
|
|
191
|
-
version: '1.
|
|
191
|
+
version: '1.11'
|
|
192
192
|
- - ">="
|
|
193
193
|
- !ruby/object:Gem::Version
|
|
194
|
-
version: 1.
|
|
194
|
+
version: 1.11.3
|
|
195
195
|
type: :development
|
|
196
196
|
prerelease: false
|
|
197
197
|
version_requirements: !ruby/object:Gem::Requirement
|
|
198
198
|
requirements:
|
|
199
199
|
- - "~>"
|
|
200
200
|
- !ruby/object:Gem::Version
|
|
201
|
-
version: '1.
|
|
201
|
+
version: '1.11'
|
|
202
202
|
- - ">="
|
|
203
203
|
- !ruby/object:Gem::Version
|
|
204
|
-
version: 1.
|
|
204
|
+
version: 1.11.3
|
|
205
205
|
- !ruby/object:Gem::Dependency
|
|
206
206
|
name: rubocop-rspec
|
|
207
207
|
requirement: !ruby/object:Gem::Requirement
|
|
208
208
|
requirements:
|
|
209
209
|
- - "~>"
|
|
210
210
|
- !ruby/object:Gem::Version
|
|
211
|
-
version: '2.
|
|
211
|
+
version: '2.3'
|
|
212
212
|
type: :development
|
|
213
213
|
prerelease: false
|
|
214
214
|
version_requirements: !ruby/object:Gem::Requirement
|
|
215
215
|
requirements:
|
|
216
216
|
- - "~>"
|
|
217
217
|
- !ruby/object:Gem::Version
|
|
218
|
-
version: '2.
|
|
218
|
+
version: '2.3'
|
|
219
219
|
- !ruby/object:Gem::Dependency
|
|
220
220
|
name: simplecov
|
|
221
221
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -298,6 +298,9 @@ files:
|
|
|
298
298
|
- lib/dns_mock/server.rb
|
|
299
299
|
- lib/dns_mock/server/random_available_port.rb
|
|
300
300
|
- lib/dns_mock/server/records_dictionary_builder.rb
|
|
301
|
+
- lib/dns_mock/test_framework/rspec.rb
|
|
302
|
+
- lib/dns_mock/test_framework/rspec/helper.rb
|
|
303
|
+
- lib/dns_mock/test_framework/rspec/interface.rb
|
|
301
304
|
- lib/dns_mock/version.rb
|
|
302
305
|
homepage: https://github.com/mocktools/ruby-dns-mock
|
|
303
306
|
licenses:
|