Skip to content

Commit 66bb227

Browse files
authored
Merge pull request #140 from mocktools/develop
Ruby DnsMock v1.7.0
2 parents 65dbdd5 + 4b53ddd commit 66bb227

File tree

13 files changed

+137
-13
lines changed

13 files changed

+137
-13
lines changed

.circleci/config.yml

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -67,6 +67,10 @@ jobs:
6767
- <<: *bundle_install
6868
- <<: *install_linters
6969

70+
- run:
71+
name: Running commit linters
72+
command: lefthook run commit-linters
73+
7074
- run:
7175
name: Running code style linters
7276
command: lefthook run code-style-linters

.circleci/gemspecs/latest

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ Gem::Specification.new do |spec|
2525
spec.add_development_dependency 'pry-byebug', '~> 3.10', '>= 3.10.1'
2626
spec.add_development_dependency 'rake', '~> 13.1'
2727
spec.add_development_dependency 'reek', '~> 6.3'
28-
spec.add_development_dependency 'rspec', '~> 3.12'
28+
spec.add_development_dependency 'rspec', '~> 3.13'
2929
spec.add_development_dependency 'rspec-dns', '~> 0.1.8'
3030
spec.add_development_dependency 'rubocop', '~> 1.60', '>= 1.60.2'
3131
spec.add_development_dependency 'rubocop-performance', '~> 1.20', '>= 1.20.2'
Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
---
2+
3+
enableGlobDot: true
4+
5+
patterns:
6+
- name: GithubUser
7+
pattern: /\[@.+\]/gmx
8+
9+
languageSettings:
10+
- languageId: markdown
11+
ignoreRegExpList:
12+
- Email
13+
- GithubUser
14+
15+
words:
16+
- bagage
17+
- bagages
18+
- bestwebua
19+
- changeloglint
20+
- configurator
21+
- codebases
22+
- codeclimate
23+
- commitspell
24+
- ffaker
25+
- gemspecs
26+
- hostnames
27+
- lefthook
28+
- markdownlint
29+
- mocktools
30+
- mroach
31+
- mdlrc
32+
- punycode
33+
- rubocop
34+
- representer
35+
- rdns
36+
- shortcuting
37+
- simplecov
38+
- simpleidn
39+
- stdlib
40+
- substeps
41+
- yamlint

.circleci/linter_configs/.lefthook.yml

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,11 @@ no_tty: true
44
skip_output:
55
- meta
66

7+
commit-linters:
8+
commands:
9+
commitspell:
10+
run: .circleci/scripts/commitspell.sh -c '.circleci/linter_configs/.commitspell.yml'
11+
712
code-style-linters:
813
commands:
914
reek:

.circleci/scripts/commitspell.sh

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
#!/bin/sh
2+
set -e
3+
4+
configuration=$(if [ "$2" = "" ]; then echo "$2"; else echo " $1 $2"; fi)
5+
latest_commit=$(git rev-parse HEAD)
6+
7+
spellcheck_info() {
8+
echo "Checking the spelling of the latest commit ($latest_commit) message..."
9+
}
10+
11+
compose_cspell_command() {
12+
echo "cspell-cli lint stdin$configuration"
13+
}
14+
15+
cspell="$(compose_cspell_command)"
16+
17+
spellcheck_latest_commit() {
18+
git log -1 --pretty=%B | $cspell
19+
}
20+
21+
spellcheck_info
22+
spellcheck_latest_commit

CHANGELOG.md

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,17 @@
22

33
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).
44

5+
## [1.7.0] - 2024-04-18
6+
7+
### Added
8+
9+
- Added ability to interact with DNS message question/answer context. Thanks [@mroach](https://github.com/mroach) for feature suggestion and PR
10+
11+
### Updated
12+
13+
- Updated gem documentation
14+
- Updated gem version
15+
516
## [1.6.2] - 2024-01-31
617

718
### Added

README.md

Lines changed: 12 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -115,13 +115,20 @@ dns_mock_server = DnsMock.start_server(records: records) # => DnsMock::Server in
115115
# returns current dns mock server port
116116
dns_mock_server.port # => 49322
117117

118+
# returns current collected server lookup messsages
119+
# represented as array of Resolv::DNS::Message instances
120+
dns_mock_server.messages # => [#<Resolv::DNS::Message>]
121+
118122
# interface to setup mock records.
119123
# Available only in case when server mocked records is empty
120124
dns_mock_server.assign_mocks(records) # => true/nil
121125

122126
# interface to reset current mocked records
123127
dns_mock_server.reset_mocks! # => true
124128

129+
# interface to clear collected lookup messages
130+
dns_mock_server.clear_messages! # => true
131+
125132
# interface to stop current dns mock server
126133
dns_mock_server.stop! # => true
127134

@@ -192,10 +199,11 @@ end
192199
If you won't use `DnsMock::TestFramework::RSpec::Helper` you can use `DnsMock::TestFramework::RSpec::Interface` directly instead:
193200

194201
```ruby
195-
DnsMock::TestFramework::RSpec::Interface.start_server # creates and runs DnsMock server instance
196-
DnsMock::TestFramework::RSpec::Interface.stop_server! # stops current DnsMock server instance
197-
DnsMock::TestFramework::RSpec::Interface.reset_mocks! # resets mocks in current DnsMock server instance
198-
DnsMock::TestFramework::RSpec::Interface.clear_server! # stops and clears current DnsMock server instance
202+
DnsMock::TestFramework::RSpec::Interface.start_server # creates and runs DnsMock server instance
203+
DnsMock::TestFramework::RSpec::Interface.stop_server! # stops current DnsMock server instance
204+
DnsMock::TestFramework::RSpec::Interface.reset_mocks! # resets mocks in current DnsMock server instance
205+
DnsMock::TestFramework::RSpec::Interface.clear_messages! # clears collected lookup messages in current DnsMock server instance
206+
DnsMock::TestFramework::RSpec::Interface.clear_server! # stops and clears current DnsMock server instance
199207
```
200208

201209
## Contributing

dns_mock.gemspec

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,6 @@ Gem::Specification.new do |spec|
3434
spec.add_development_dependency 'ffaker', ffaker_version
3535
spec.add_development_dependency 'net-ftp', '~> 0.3.4' if current_ruby_version >= ::Gem::Version.new('3.1.0')
3636
spec.add_development_dependency 'rake', '~> 13.1'
37-
spec.add_development_dependency 'rspec', '~> 3.12'
37+
spec.add_development_dependency 'rspec', '~> 3.13'
3838
spec.add_development_dependency 'rspec-dns', '~> 0.1.8'
3939
end

lib/dns_mock/response/message.rb

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,8 @@
33
module DnsMock
44
module Response
55
class Message
6+
attr_reader :dns_message
7+
68
def initialize(
79
packet,
810
records,
@@ -23,7 +25,7 @@ def as_binary_string
2325

2426
private
2527

26-
attr_reader :dns_answer, :dns_message
28+
attr_reader :dns_answer
2729

2830
def compose_answer
2931
dns_message.each_question do |hostname, record_type|

lib/dns_mock/server.rb

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ class Server
99
WARMUP_DELAY = 0.1
1010
PACKET_MAX_BYTES_SIZE = 65_535
1111

12-
attr_reader :port
12+
attr_reader :port, :messages
1313

1414
def initialize( # rubocop:disable Metrics/ParameterLists
1515
socket = ::UDPSocket.new,
@@ -25,10 +25,11 @@ def initialize( # rubocop:disable Metrics/ParameterLists
2525
@records = records_dictionary_builder.call(records || {})
2626
@port = port || 0
2727
@exception_if_not_found = exception_if_not_found
28+
@messages = []
2829
prepare_server_thread
2930
end
3031

31-
def run
32+
def run # rubocop:disable Metrics/AbcSize
3233
prepare_socket_for_session
3334
update_server_port
3435

@@ -38,7 +39,9 @@ def run
3839
break if packet.empty?
3940

4041
address, port = addr.values_at(3, 1)
41-
socket.send(DnsMock::Response::Message.new(packet, records, exception_if_not_found).as_binary_string, 0, address, port)
42+
message = DnsMock::Response::Message.new(packet, records, exception_if_not_found)
43+
socket.send(message.as_binary_string, 0, address, port)
44+
messages.push(message.dns_message)
4245
end
4346
ensure
4447
socket.close
@@ -53,6 +56,10 @@ def reset_mocks!
5356
records.clear.empty?
5457
end
5558

59+
def clear_messages!
60+
!!messages.clear
61+
end
62+
5663
def without_mocks?
5764
records.empty?
5865
end

0 commit comments

Comments
 (0)