dns_mock 0.1.0 → 0.2.0
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/.reek.yml +1 -0
- data/.rubocop.yml +1 -1
- data/CHANGELOG.md +34 -0
- data/Gemfile.lock +1 -1
- data/README.md +63 -12
- data/dns_mock.gemspec +1 -1
- data/lib/dns_mock/core.rb +3 -1
- data/lib/dns_mock/record/builder/ptr.rb +9 -0
- data/lib/dns_mock/record/factory/ptr.rb +15 -0
- data/lib/dns_mock/server/records_dictionary_builder.rb +10 -1
- data/lib/dns_mock/version.rb +1 -1
- metadata +6 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 24eced6efdb48a74315875839beb3af4e693962a3eb1c5ea3b82f9de67ab5bf4
|
4
|
+
data.tar.gz: e11a83bb5ba9a8cf5f5ba0d6d98689a6886b9954b4ba0f33cfe3de026671a905
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 5f3863ee0037d22f13e2a0b1e3126193cf485447b3f60edf998ff631204f46fe7ac443f1fc9431431e10a2577392000b388c9b110d26e13535524e6d53e18f66
|
7
|
+
data.tar.gz: 5c795bd05c4eb4502a248f483c01778aaefac1fe32a1d937364518c6e3299414145dd973ca2ffeb6688c940217be4fc11e6e321d9f1da0ef5bce6e1c03f4e025
|
data/.reek.yml
CHANGED
@@ -20,6 +20,7 @@ detectors:
|
|
20
20
|
- DnsMock::RecordsDictionaryHelper#create_records_dictionary_by_records
|
21
21
|
- DnsMock::ServerHelper#start_random_server
|
22
22
|
- DnsMock::ServerHelper#stop_all_running_servers
|
23
|
+
- DnsMock::Server::RecordsDictionaryBuilder#rdns_lookup_prefix
|
23
24
|
|
24
25
|
ControlParameter:
|
25
26
|
exclude:
|
data/.rubocop.yml
CHANGED
data/CHANGELOG.md
CHANGED
@@ -2,6 +2,40 @@
|
|
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
|
+
## [0.2.0] - 2021-01-26
|
6
|
+
|
7
|
+
### PTR record support
|
8
|
+
|
9
|
+
Added ability to mock PTR records. Please note, you can define host address without RDNS lookup prefix (`.in-addr.arpa`). `DnsMock` will do it for you.
|
10
|
+
|
11
|
+
```ruby
|
12
|
+
records = {
|
13
|
+
'1.1.1.1' => {
|
14
|
+
ptr: %w[domain_1.com domain_2.com]
|
15
|
+
}
|
16
|
+
}
|
17
|
+
|
18
|
+
DnsMock.start_server(records: records)
|
19
|
+
```
|
20
|
+
|
21
|
+
```bash
|
22
|
+
dig @localhost -p 5300 -x 1.1.1.1
|
23
|
+
```
|
24
|
+
|
25
|
+
```
|
26
|
+
; <<>> DiG 9.10.6 <<>> @localhost -p 5300 -x 1.1.1.1
|
27
|
+
; (2 servers found)
|
28
|
+
|
29
|
+
;; ANSWER SECTION:
|
30
|
+
1.1.1.1.in-addr.arpa. 1 IN PTR domain_1.com.
|
31
|
+
1.1.1.1.in-addr.arpa. 1 IN PTR domain_2.com.
|
32
|
+
|
33
|
+
;; Query time: 0 msec
|
34
|
+
;; SERVER: 127.0.0.1#5300(127.0.0.1)
|
35
|
+
;; WHEN: Mon Jan 25 19:58:39 EET 2021
|
36
|
+
;; MSG SIZE rcvd: 98
|
37
|
+
```
|
38
|
+
|
5
39
|
## [0.1.0] - 2021-01-19
|
6
40
|
|
7
41
|
### First release
|
data/Gemfile.lock
CHANGED
data/README.md
CHANGED
@@ -1,17 +1,27 @@
|
|
1
1
|
# Ruby DnsMock
|
2
2
|
|
3
|
+
[](https://codeclimate.com/github/mocktools/ruby-dns-mock/maintainability)
|
4
|
+
[](https://codeclimate.com/github/mocktools/ruby-dns-mock/test_coverage)
|
3
5
|
[](https://circleci.com/gh/mocktools/ruby-dns-mock/tree/develop)
|
4
6
|
[](https://badge.fury.io/rb/dns_mock)
|
5
7
|
[](https://rubygems.org/gems/dns_mock)
|
6
8
|
[](LICENSE.txt)
|
7
9
|
[](CODE_OF_CONDUCT.md)
|
8
10
|
|
11
|
+
💎 Ruby DNS mock. Mimic any DNS records for your test environment and even more.
|
12
|
+
|
9
13
|
## Table of Contents
|
10
14
|
|
11
15
|
- [Features](#features)
|
12
16
|
- [Requirements](#requirements)
|
13
17
|
- [Installation](#installation)
|
14
18
|
- [Usage](#usage)
|
19
|
+
- [Contributing](#contributing)
|
20
|
+
- [License](#license)
|
21
|
+
- [Code of Conduct](#code-of-conduct)
|
22
|
+
- [Credits](#credits)
|
23
|
+
- [Versioning](#versioning)
|
24
|
+
- [Changelog](CHANGELOG.md)
|
15
25
|
|
16
26
|
## Requirements
|
17
27
|
|
@@ -19,9 +29,11 @@ Ruby MRI 2.5.0+
|
|
19
29
|
|
20
30
|
## Features
|
21
31
|
|
22
|
-
- Ability to mimic any DNS records
|
32
|
+
- Ability to mimic any DNS records (`A`, `AAAA`, `CNAME`, `MX`, `NS`, `PTR`, `SOA` and `TXT`)
|
23
33
|
- Zero runtime dependencies
|
24
|
-
-
|
34
|
+
- Lightweight UDP DNS mock server with dynamic/manual port assignment
|
35
|
+
- Test framework agnostic (it's PORO, so you can use it outside of `RSpec`, `Test::Unit` or `MiniTest`)
|
36
|
+
- Simple and intuitive DSL
|
25
37
|
|
26
38
|
## Installation
|
27
39
|
|
@@ -44,10 +56,10 @@ Or install it yourself as:
|
|
44
56
|
## Usage
|
45
57
|
|
46
58
|
```ruby
|
47
|
-
# Example of mocked DNS records
|
59
|
+
# Example of mocked DNS records structure
|
48
60
|
records = {
|
49
61
|
'example.com' => {
|
50
|
-
a: %w[1.1.1.1
|
62
|
+
a: %w[1.1.1.1 2.2.2.2],
|
51
63
|
aaaa: %w[2a00:1450:4001:81e::200e],
|
52
64
|
ns: %w[ns1.domain.com ns2.domain.com],
|
53
65
|
mx: %w[mx1.domain.com mx2.domain.com],
|
@@ -64,16 +76,55 @@ records = {
|
|
64
76
|
minimum: 3_600
|
65
77
|
}
|
66
78
|
]
|
79
|
+
},
|
80
|
+
'1.1.1.1' => {
|
81
|
+
ptr: %w[domain_1.com domain_2.com]
|
67
82
|
}
|
68
83
|
}
|
69
84
|
|
70
|
-
# Main DnsMock interface:
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
dns_mock_server.
|
75
|
-
|
85
|
+
# Main DnsMock interface. records:Hash, port:Integer are an
|
86
|
+
# optional params. By default creates dns mock server with empty
|
87
|
+
# records. A free port for server will be randomly assigned in
|
88
|
+
# the range from 49152 to 65535. Returns current dns mock server
|
89
|
+
dns_mock_server = DnsMock.start_server(records: records) # => DnsMock::Server instance
|
90
|
+
|
91
|
+
# returns current dns mock server port
|
92
|
+
dns_mock_server.port # => 49322
|
93
|
+
|
94
|
+
# interface to setup mock records.
|
95
|
+
# Available only in case when server mocked records is empty
|
96
|
+
dns_mock_server.assign_mocks(records) # => true/nil
|
97
|
+
|
98
|
+
# interface to reset current mocked records
|
99
|
+
dns_mock_server.reset_mocks! # => true
|
76
100
|
|
77
|
-
|
78
|
-
|
101
|
+
# interface to stop current dns mock server
|
102
|
+
dns_mock_server.stop! # => true
|
103
|
+
|
104
|
+
# returns list of running dns mock servers
|
105
|
+
DnsMock.running_servers # => [DnsMock::Server instance]
|
106
|
+
|
107
|
+
# interface to stop all running dns mock servers
|
108
|
+
DnsMock.stop_running_servers! # => true
|
79
109
|
```
|
110
|
+
|
111
|
+
## Contributing
|
112
|
+
|
113
|
+
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).
|
114
|
+
|
115
|
+
## License
|
116
|
+
|
117
|
+
The gem is available as open source under the terms of the [MIT License](https://opensource.org/licenses/MIT).
|
118
|
+
|
119
|
+
## Code of Conduct
|
120
|
+
|
121
|
+
Everyone interacting in the DnsMock project’s codebases, issue trackers, chat rooms and mailing lists is expected to follow the [code of conduct](CODE_OF_CONDUCT.md).
|
122
|
+
|
123
|
+
## Credits
|
124
|
+
|
125
|
+
- [The Contributors](https://github.com/mocktools/ruby-dns-mock/graphs/contributors) for code and awesome suggestions
|
126
|
+
- [The Stargazers](https://github.com/mocktools/ruby-dns-mock/stargazers) for showing their support
|
127
|
+
|
128
|
+
## Versioning
|
129
|
+
|
130
|
+
DnsMock uses [Semantic Versioning 2.0.0](https://semver.org)
|
data/dns_mock.gemspec
CHANGED
@@ -11,7 +11,7 @@ Gem::Specification.new do |spec|
|
|
11
11
|
spec.email = ['admin@bestweb.com.ua']
|
12
12
|
|
13
13
|
spec.summary = %(dns_mock)
|
14
|
-
spec.description = %(Ruby DNS mock)
|
14
|
+
spec.description = %(💎 Ruby DNS mock. Mimic any DNS records for your test environment and even more.)
|
15
15
|
|
16
16
|
spec.homepage = 'https://github.com/mocktools/ruby-dns-mock'
|
17
17
|
spec.license = 'MIT'
|
data/lib/dns_mock/core.rb
CHANGED
@@ -4,7 +4,7 @@ require 'resolv'
|
|
4
4
|
require 'socket'
|
5
5
|
|
6
6
|
module DnsMock
|
7
|
-
AVAILABLE_DNS_RECORD_TYPES = %i[a aaaa cname mx ns soa txt].freeze
|
7
|
+
AVAILABLE_DNS_RECORD_TYPES = %i[a aaaa cname mx ns ptr soa txt].freeze
|
8
8
|
|
9
9
|
module Error
|
10
10
|
require_relative '../dns_mock/error/argument_type'
|
@@ -26,6 +26,7 @@ module DnsMock
|
|
26
26
|
require_relative '../dns_mock/record/factory/cname'
|
27
27
|
require_relative '../dns_mock/record/factory/mx'
|
28
28
|
require_relative '../dns_mock/record/factory/ns'
|
29
|
+
require_relative '../dns_mock/record/factory/ptr'
|
29
30
|
require_relative '../dns_mock/record/factory/soa'
|
30
31
|
require_relative '../dns_mock/record/factory/txt'
|
31
32
|
end
|
@@ -39,6 +40,7 @@ module DnsMock
|
|
39
40
|
require_relative '../dns_mock/record/builder/cname'
|
40
41
|
require_relative '../dns_mock/record/builder/mx'
|
41
42
|
require_relative '../dns_mock/record/builder/ns'
|
43
|
+
require_relative '../dns_mock/record/builder/ptr'
|
42
44
|
require_relative '../dns_mock/record/builder/soa'
|
43
45
|
require_relative '../dns_mock/record/builder/txt'
|
44
46
|
end
|
@@ -5,6 +5,8 @@ module DnsMock
|
|
5
5
|
class RecordsDictionaryBuilder
|
6
6
|
include DnsMock::Error::Helper
|
7
7
|
|
8
|
+
IP_ADDRESS_PATTERN = /\A((1\d|[1-9]|2[0-4])?\d|25[0-5])(\.\g<1>){3}\z/.freeze
|
9
|
+
RDNS_LOOKUP_PREFIX = '.in-addr.arpa'
|
8
10
|
TYPE_MAPPER = DnsMock::AVAILABLE_DNS_RECORD_TYPES.zip(
|
9
11
|
[
|
10
12
|
[DnsMock::Record::Builder::A, DnsMock::Record::Factory::A, ::Array],
|
@@ -12,6 +14,7 @@ module DnsMock
|
|
12
14
|
[DnsMock::Record::Builder::Cname, DnsMock::Record::Factory::Cname, ::String],
|
13
15
|
[DnsMock::Record::Builder::Mx, DnsMock::Record::Factory::Mx, ::Array],
|
14
16
|
[DnsMock::Record::Builder::Ns, DnsMock::Record::Factory::Ns, ::Array],
|
17
|
+
[DnsMock::Record::Builder::Ptr, DnsMock::Record::Factory::Ptr, ::Array],
|
15
18
|
[DnsMock::Record::Builder::Soa, DnsMock::Record::Factory::Soa, ::Array],
|
16
19
|
[DnsMock::Record::Builder::Txt, DnsMock::Record::Factory::Txt, ::Array]
|
17
20
|
]
|
@@ -31,7 +34,7 @@ module DnsMock
|
|
31
34
|
raise_unless(DnsMock::Error::ArgumentType.new(records_to_build.class), records_to_build.is_a?(::Hash))
|
32
35
|
records_to_build.each do |hostname, dns_records|
|
33
36
|
raise_unless(DnsMock::Error::RecordHostType.new(hostname, hostname.class), hostname.is_a?(::String))
|
34
|
-
records[hostname] = dns_records.each_with_object({}) do |(record_type, records_data), records_instances_by_type|
|
37
|
+
records[rdns_lookup_prefix(hostname)] = dns_records.each_with_object({}) do |(record_type, records_data), records_instances_by_type|
|
35
38
|
records_instances_by_type[record_type] = build_records_instances_by_type(record_type, records_data)
|
36
39
|
end
|
37
40
|
end
|
@@ -41,6 +44,12 @@ module DnsMock
|
|
41
44
|
|
42
45
|
private
|
43
46
|
|
47
|
+
def rdns_lookup_prefix(hostname)
|
48
|
+
return hostname unless hostname[DnsMock::Server::RecordsDictionaryBuilder::IP_ADDRESS_PATTERN]
|
49
|
+
|
50
|
+
"#{hostname}#{DnsMock::Server::RecordsDictionaryBuilder::RDNS_LOOKUP_PREFIX}"
|
51
|
+
end
|
52
|
+
|
44
53
|
def build_records_instances_by_type(record_type, records_to_build)
|
45
54
|
target_builder, target_factory, expected_type = DnsMock::Server::RecordsDictionaryBuilder::TYPE_MAPPER[record_type]
|
46
55
|
raise_record_type_error(record_type, target_builder)
|
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: 0.
|
4
|
+
version: 0.2.0
|
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-01-
|
11
|
+
date: 2021-01-25 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -236,7 +236,8 @@ dependencies:
|
|
236
236
|
- - "~>"
|
237
237
|
- !ruby/object:Gem::Version
|
238
238
|
version: 0.17.1
|
239
|
-
description: Ruby DNS mock
|
239
|
+
description: "\U0001F48E Ruby DNS mock. Mimic any DNS records for your test environment
|
240
|
+
and even more."
|
240
241
|
email:
|
241
242
|
- admin@bestweb.com.ua
|
242
243
|
executables: []
|
@@ -286,6 +287,7 @@ files:
|
|
286
287
|
- lib/dns_mock/record/builder/cname.rb
|
287
288
|
- lib/dns_mock/record/builder/mx.rb
|
288
289
|
- lib/dns_mock/record/builder/ns.rb
|
290
|
+
- lib/dns_mock/record/builder/ptr.rb
|
289
291
|
- lib/dns_mock/record/builder/soa.rb
|
290
292
|
- lib/dns_mock/record/builder/txt.rb
|
291
293
|
- lib/dns_mock/record/factory/a.rb
|
@@ -294,6 +296,7 @@ files:
|
|
294
296
|
- lib/dns_mock/record/factory/cname.rb
|
295
297
|
- lib/dns_mock/record/factory/mx.rb
|
296
298
|
- lib/dns_mock/record/factory/ns.rb
|
299
|
+
- lib/dns_mock/record/factory/ptr.rb
|
297
300
|
- lib/dns_mock/record/factory/soa.rb
|
298
301
|
- lib/dns_mock/record/factory/txt.rb
|
299
302
|
- lib/dns_mock/response/answer.rb
|