karafka-testing 2.0.5 → 2.1.4
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- checksums.yaml.gz.sig +0 -0
- data/.github/FUNDING.yml +1 -0
- data/.github/workflows/ci.yml +5 -4
- data/.ruby-version +1 -1
- data/CHANGELOG.md +37 -0
- data/Gemfile.lock +16 -16
- data/karafka-testing.gemspec +7 -3
- data/lib/karafka/testing/rspec/helpers.rb +25 -14
- data/lib/karafka/testing/spec_consumer_client.rb +5 -0
- data/lib/karafka/testing/spec_producer_client.rb +3 -22
- data/lib/karafka/testing/version.rb +1 -1
- data/renovate.json +6 -0
- data.tar.gz.sig +0 -0
- metadata +27 -6
- metadata.gz.sig +0 -0
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 053ac6d1b86ca621030d7d73ad5e8c629a8b3c4ebf05c83ab89646772edf6565
|
4
|
+
data.tar.gz: 3c8182120690c121f41ea395ddef68b35ef18af9a4a448b106dc1efbd45cb5d2
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 8dc3c9437a06c83b85329170d670172152b17c0057b6a40655630032d885f7a743306eaafdd737ac7a65db4a0a9aa3da2d53f2aac2659587a31b8b3e9a3cb16e
|
7
|
+
data.tar.gz: 67cbaef664caedeadb54cd8fa1ccc3be917fbc17f5cfe34b22a1ad8ee259937f652de68e16dc870ef7b490f66ec16856d2de3f3e841075ad17620725e041f329
|
checksums.yaml.gz.sig
CHANGED
Binary file
|
data/.github/FUNDING.yml
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
custom: ['https://karafka.io/#become-pro']
|
data/.github/workflows/ci.yml
CHANGED
@@ -16,14 +16,15 @@ jobs:
|
|
16
16
|
fail-fast: false
|
17
17
|
matrix:
|
18
18
|
ruby:
|
19
|
+
- '3.2'
|
19
20
|
- '3.1'
|
20
21
|
- '3.0'
|
21
22
|
- '2.7'
|
22
23
|
include:
|
23
|
-
- ruby: '3.
|
24
|
+
- ruby: '3.2'
|
24
25
|
coverage: 'true'
|
25
26
|
steps:
|
26
|
-
- uses: actions/checkout@
|
27
|
+
- uses: actions/checkout@v3
|
27
28
|
- name: Install package dependencies
|
28
29
|
run: "[ -e $APT_DEPS ] || sudo apt-get install -y --no-install-recommends $APT_DEPS"
|
29
30
|
- name: Set up Ruby
|
@@ -42,13 +43,13 @@ jobs:
|
|
42
43
|
strategy:
|
43
44
|
fail-fast: false
|
44
45
|
steps:
|
45
|
-
- uses: actions/checkout@
|
46
|
+
- uses: actions/checkout@v3
|
46
47
|
with:
|
47
48
|
fetch-depth: 0
|
48
49
|
- name: Set up Ruby
|
49
50
|
uses: ruby/setup-ruby@v1
|
50
51
|
with:
|
51
|
-
ruby-version: 3.
|
52
|
+
ruby-version: 3.2
|
52
53
|
- name: Install latest bundler
|
53
54
|
run: gem install bundler --no-document
|
54
55
|
- name: Install Diffend plugin
|
data/.ruby-version
CHANGED
@@ -1 +1 @@
|
|
1
|
-
3.
|
1
|
+
3.2.2
|
data/CHANGELOG.md
CHANGED
@@ -1,5 +1,42 @@
|
|
1
1
|
# Karafka Test gem changelog
|
2
2
|
|
3
|
+
## 2.1.4 (2023-06-20)
|
4
|
+
- [Fix] Fix invalid consumer group assignment for consumers created for non-default consumer group when same topic is being used multiple times.
|
5
|
+
|
6
|
+
## 2.1.3 (2023-06-19)
|
7
|
+
- [Enhancement] Align with Karafka `2.1.5` API.
|
8
|
+
|
9
|
+
## 2.1.2 (2023-06-13)
|
10
|
+
- [Enhancement] Depend on WaterDrop `>=` `2.6.0` directly and not via Karafka to make sure correct version is used.
|
11
|
+
- [Fix] Use proper WaterDrop `>=` `2.6.0` buffered client reference.
|
12
|
+
|
13
|
+
## 2.1.1 (2023-06-07)
|
14
|
+
- [Enhancement] Support WaterDrop stubs with Mocha.
|
15
|
+
|
16
|
+
## 2.1.0 (2023-05-22)
|
17
|
+
- [Maintenance] Align Karafka expectations to match `2.1.0`.
|
18
|
+
|
19
|
+
## 2.0.11 (2023-04-13)
|
20
|
+
- Align metadata builder format with Karafka `2.0.40`.
|
21
|
+
|
22
|
+
## 2.0.10 (2023-04-11)
|
23
|
+
- Align with changes in Karafka `2.0.39`
|
24
|
+
- Replace direct `described_class` reference for consumer building with `topic.consumer` Karafka routing based one. This change will allow for usage of `karafka.consumer_for` from any specs.
|
25
|
+
|
26
|
+
## 2.0.9 (2023-02-10)
|
27
|
+
- Inject consumer strategy to the test consumer instance.
|
28
|
+
|
29
|
+
## 2.0.8 (2022-11-03)
|
30
|
+
- Do not lock Ruby and rely on `karafka-core` via `karafka`.
|
31
|
+
- Due to changes in the engine, lock to `2.0.20`.
|
32
|
+
|
33
|
+
## 2.0.7 (2022-11-03)
|
34
|
+
- Release version with cert with valid access permissions (#114).
|
35
|
+
|
36
|
+
## 2.0.6 (2022-10-26)
|
37
|
+
- Replace the `subject` reference with named `consumer` reference.
|
38
|
+
- Do not forward sent messages to `consumer` unless it's a Karafka consumer.
|
39
|
+
|
3
40
|
## 2.0.5 (2022-10-19)
|
4
41
|
- Fix for: Test event production without defining a subject (#102)
|
5
42
|
|
data/Gemfile.lock
CHANGED
@@ -1,34 +1,34 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
karafka-testing (2.
|
5
|
-
karafka (>= 2.
|
4
|
+
karafka-testing (2.1.4)
|
5
|
+
karafka (>= 2.1.5, < 3.0.0)
|
6
|
+
waterdrop (>= 2.6.1)
|
6
7
|
|
7
8
|
GEM
|
8
9
|
remote: https://rubygems.org/
|
9
10
|
specs:
|
10
|
-
concurrent-ruby (1.
|
11
|
+
concurrent-ruby (1.2.2)
|
11
12
|
ffi (1.15.5)
|
12
|
-
karafka (2.
|
13
|
-
karafka-core (>= 2.0
|
14
|
-
rdkafka (>= 0.12)
|
13
|
+
karafka (2.1.5)
|
14
|
+
karafka-core (>= 2.1.0, < 2.2.0)
|
15
15
|
thor (>= 0.20)
|
16
|
-
waterdrop (>= 2.
|
16
|
+
waterdrop (>= 2.6.1, < 3.0.0)
|
17
17
|
zeitwerk (~> 2.3)
|
18
|
-
karafka-core (2.0
|
18
|
+
karafka-core (2.1.0)
|
19
19
|
concurrent-ruby (>= 1.1)
|
20
|
-
|
21
|
-
|
22
|
-
rdkafka (0.12.0)
|
20
|
+
karafka-rdkafka (>= 0.13.0, < 0.14.0)
|
21
|
+
karafka-rdkafka (0.13.0)
|
23
22
|
ffi (~> 1.15)
|
24
23
|
mini_portile2 (~> 2.6)
|
25
24
|
rake (> 12)
|
25
|
+
mini_portile2 (2.8.1)
|
26
|
+
rake (13.0.6)
|
26
27
|
thor (1.2.1)
|
27
|
-
waterdrop (2.
|
28
|
-
karafka-core (>= 2.0
|
29
|
-
rdkafka (>= 0.10)
|
28
|
+
waterdrop (2.6.1)
|
29
|
+
karafka-core (>= 2.1.0, < 3.0.0)
|
30
30
|
zeitwerk (~> 2.3)
|
31
|
-
zeitwerk (2.6.
|
31
|
+
zeitwerk (2.6.7)
|
32
32
|
|
33
33
|
PLATFORMS
|
34
34
|
arm64-darwin
|
@@ -38,4 +38,4 @@ DEPENDENCIES
|
|
38
38
|
karafka-testing!
|
39
39
|
|
40
40
|
BUNDLED WITH
|
41
|
-
2.
|
41
|
+
2.4.12
|
data/karafka-testing.gemspec
CHANGED
@@ -20,16 +20,20 @@ Gem::Specification.new do |spec|
|
|
20
20
|
spec.require_paths = %w[lib]
|
21
21
|
spec.cert_chain = %w[certs/cert_chain.pem]
|
22
22
|
|
23
|
-
spec.required_ruby_version = '>= 2.7'
|
24
|
-
|
25
23
|
if $PROGRAM_NAME.end_with?('gem')
|
26
24
|
spec.signing_key = File.expand_path('~/.ssh/gem-private_key.pem')
|
27
25
|
end
|
28
26
|
|
29
|
-
spec.add_dependency 'karafka', '>= 2.
|
27
|
+
spec.add_dependency 'karafka', '>= 2.1.5', '< 3.0.0'
|
28
|
+
spec.add_dependency 'waterdrop', '>= 2.6.1'
|
30
29
|
|
31
30
|
spec.metadata = {
|
31
|
+
'funding_uri' => 'https://karafka.io/#become-pro',
|
32
|
+
'homepage_uri' => 'https://karafka.io',
|
33
|
+
'changelog_uri' => 'https://github.com/karafka/karafka-testing/blob/master/CHANGELOG.md',
|
34
|
+
'bug_tracker_uri' => 'https://github.com/karafka/karafka-testing/issues',
|
32
35
|
'source_code_uri' => 'https://github.com/karafka/karafka-testing',
|
36
|
+
'documentation_uri' => 'https://karafka.io/docs',
|
33
37
|
'rubygems_mfa_required' => 'true'
|
34
38
|
}
|
35
39
|
end
|
@@ -33,7 +33,11 @@ module Karafka
|
|
33
33
|
_karafka_consumer_messages.clear
|
34
34
|
_karafka_producer_client.reset
|
35
35
|
|
36
|
-
|
36
|
+
if Object.const_defined?('Mocha', false)
|
37
|
+
Karafka.producer.stubs(:client).returns(_karafka_producer_client)
|
38
|
+
else
|
39
|
+
allow(Karafka.producer).to receive(:client).and_return(_karafka_producer_client)
|
40
|
+
end
|
37
41
|
end
|
38
42
|
end
|
39
43
|
end
|
@@ -44,7 +48,7 @@ module Karafka
|
|
44
48
|
# create a consumer instance
|
45
49
|
# @param requested_consumer_group [String, Symbol, nil] optional name of the consumer group
|
46
50
|
# if we have multiple consumer groups listening on the same topic
|
47
|
-
# @return [Object]
|
51
|
+
# @return [Object] Karafka consumer instance
|
48
52
|
# @raise [Karafka::Testing::Errors::TopicNotFoundError] raised when we're unable to find
|
49
53
|
# topic that was requested
|
50
54
|
#
|
@@ -85,13 +89,15 @@ module Karafka
|
|
85
89
|
# karafka.produce({ 'hello' => 'world' }.to_json, 'partition' => 6)
|
86
90
|
# end
|
87
91
|
def _karafka_add_message_to_consumer_if_needed(message)
|
88
|
-
#
|
92
|
+
# Consumer needs to be defined in order to pass messages to it
|
93
|
+
return unless defined?(consumer)
|
94
|
+
# We're interested in adding message to consumer only when it is a Karafka consumer
|
89
95
|
# Users may want to test other things (models producing messages for example) and in
|
90
|
-
# their case
|
91
|
-
return unless
|
96
|
+
# their case consumer will not be a consumer
|
97
|
+
return unless consumer.is_a?(Karafka::BaseConsumer)
|
92
98
|
# We target to the consumer only messages that were produced to it, since specs may also
|
93
99
|
# produce other messages targeting other topics
|
94
|
-
return unless message[:topic] ==
|
100
|
+
return unless message[:topic] == consumer.topic.name
|
95
101
|
|
96
102
|
# Build message metadata and copy any metadata that would come from the message
|
97
103
|
metadata = _karafka_message_metadata_defaults
|
@@ -111,12 +117,13 @@ module Karafka
|
|
111
117
|
# Update batch metadata
|
112
118
|
batch_metadata = Karafka::Messages::Builders::BatchMetadata.call(
|
113
119
|
_karafka_consumer_messages,
|
114
|
-
|
120
|
+
consumer.topic,
|
121
|
+
0,
|
115
122
|
Time.now
|
116
123
|
)
|
117
124
|
|
118
125
|
# Update consumer messages batch
|
119
|
-
|
126
|
+
consumer.messages = Karafka::Messages::Messages.new(
|
120
127
|
_karafka_consumer_messages,
|
121
128
|
batch_metadata
|
122
129
|
)
|
@@ -128,7 +135,7 @@ module Karafka
|
|
128
135
|
def _karafka_produce(payload, metadata = {})
|
129
136
|
Karafka.producer.produce_sync(
|
130
137
|
{
|
131
|
-
topic:
|
138
|
+
topic: consumer.topic.name,
|
132
139
|
payload: payload
|
133
140
|
}.merge(metadata)
|
134
141
|
)
|
@@ -144,14 +151,14 @@ module Karafka
|
|
144
151
|
# @return [Hash] message default options
|
145
152
|
def _karafka_message_metadata_defaults
|
146
153
|
{
|
147
|
-
deserializer:
|
154
|
+
deserializer: consumer.topic.deserializer,
|
148
155
|
timestamp: Time.now,
|
149
156
|
headers: {},
|
150
157
|
key: nil,
|
151
158
|
offset: _karafka_consumer_messages.size,
|
152
159
|
partition: 0,
|
153
160
|
received_at: Time.now,
|
154
|
-
topic:
|
161
|
+
topic: consumer.topic.name
|
155
162
|
}
|
156
163
|
end
|
157
164
|
|
@@ -160,11 +167,15 @@ module Karafka
|
|
160
167
|
# @param topic [Karafka::Routing::Topic] topic for which we want to build the consumer
|
161
168
|
# @return [Object] karafka consumer
|
162
169
|
def _karafka_build_consumer_for(topic)
|
163
|
-
coordinators = Karafka::Processing::CoordinatorsBuffer.new
|
170
|
+
coordinators = Karafka::Processing::CoordinatorsBuffer.new(
|
171
|
+
Karafka::Routing::Topics.new([topic])
|
172
|
+
)
|
164
173
|
|
165
|
-
consumer =
|
166
|
-
consumer.topic = topic
|
174
|
+
consumer = topic.consumer.new
|
167
175
|
consumer.producer = Karafka::App.producer
|
176
|
+
# Inject appropriate strategy so needed options and components are available
|
177
|
+
strategy = Karafka::App.config.internal.processing.strategy_selector.find(topic)
|
178
|
+
consumer.singleton_class.include(strategy)
|
168
179
|
consumer.client = _karafka_consumer_client
|
169
180
|
consumer.coordinator = coordinators.find_or_create(topic.name, 0)
|
170
181
|
consumer.coordinator.seek_offset = 0
|
@@ -3,40 +3,21 @@
|
|
3
3
|
module Karafka
|
4
4
|
module Testing
|
5
5
|
# Spec producer client used to buffer messages that we send out in specs
|
6
|
-
class SpecProducerClient < ::WaterDrop::
|
7
|
-
attr_accessor :messages
|
8
|
-
|
9
|
-
# Sync fake response for the message delivery to Kafka, since we do not dispatch anything
|
10
|
-
class SyncResponse
|
11
|
-
# @param _args Handler wait arguments (irrelevant as waiting is fake here)
|
12
|
-
def wait(*_args)
|
13
|
-
false
|
14
|
-
end
|
15
|
-
end
|
16
|
-
|
6
|
+
class SpecProducerClient < ::WaterDrop::Clients::Buffered
|
17
7
|
# @param rspec [RSpec::Core::ExampleGroup] rspec example we need to hold to trigger actions
|
18
8
|
# on it that are rspec context aware
|
19
9
|
def initialize(rspec)
|
20
|
-
super()
|
10
|
+
super(nil)
|
21
11
|
@rspec = rspec
|
22
|
-
self.messages = []
|
23
12
|
end
|
24
13
|
|
25
14
|
# "Produces" message to Kafka. That is, it acknowledges it locally, adds it to the internal
|
26
15
|
# buffer and adds it (if needed) into the current consumer messages buffer
|
27
16
|
# @param message [Hash] `Karafka.producer.produce_sync` message hash
|
28
17
|
def produce(message)
|
29
|
-
messages << message
|
30
|
-
|
31
18
|
@rspec._karafka_add_message_to_consumer_if_needed(message)
|
32
19
|
|
33
|
-
|
34
|
-
end
|
35
|
-
|
36
|
-
# Clears internal buffer
|
37
|
-
# Used in between specs so messages do not leak out
|
38
|
-
def reset
|
39
|
-
messages.clear
|
20
|
+
super
|
40
21
|
end
|
41
22
|
end
|
42
23
|
end
|
data/renovate.json
ADDED
data.tar.gz.sig
CHANGED
Binary file
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: karafka-testing
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.
|
4
|
+
version: 2.1.4
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Maciej Mensfeld
|
@@ -35,7 +35,7 @@ cert_chain:
|
|
35
35
|
Qf04B9ceLUaC4fPVEz10FyobjaFoY4i32xRto3XnrzeAgfEe4swLq8bQsR3w/EF3
|
36
36
|
MGU0FeSV2Yj7Xc2x/7BzLK8xQn5l7Yy75iPF+KP3vVmDHnNl
|
37
37
|
-----END CERTIFICATE-----
|
38
|
-
date:
|
38
|
+
date: 2023-06-20 00:00:00.000000000 Z
|
39
39
|
dependencies:
|
40
40
|
- !ruby/object:Gem::Dependency
|
41
41
|
name: karafka
|
@@ -43,7 +43,7 @@ dependencies:
|
|
43
43
|
requirements:
|
44
44
|
- - ">="
|
45
45
|
- !ruby/object:Gem::Version
|
46
|
-
version:
|
46
|
+
version: 2.1.5
|
47
47
|
- - "<"
|
48
48
|
- !ruby/object:Gem::Version
|
49
49
|
version: 3.0.0
|
@@ -53,10 +53,24 @@ dependencies:
|
|
53
53
|
requirements:
|
54
54
|
- - ">="
|
55
55
|
- !ruby/object:Gem::Version
|
56
|
-
version:
|
56
|
+
version: 2.1.5
|
57
57
|
- - "<"
|
58
58
|
- !ruby/object:Gem::Version
|
59
59
|
version: 3.0.0
|
60
|
+
- !ruby/object:Gem::Dependency
|
61
|
+
name: waterdrop
|
62
|
+
requirement: !ruby/object:Gem::Requirement
|
63
|
+
requirements:
|
64
|
+
- - ">="
|
65
|
+
- !ruby/object:Gem::Version
|
66
|
+
version: 2.6.1
|
67
|
+
type: :runtime
|
68
|
+
prerelease: false
|
69
|
+
version_requirements: !ruby/object:Gem::Requirement
|
70
|
+
requirements:
|
71
|
+
- - ">="
|
72
|
+
- !ruby/object:Gem::Version
|
73
|
+
version: 2.6.1
|
60
74
|
description: Library which provides helpers for easier Karafka consumers tests
|
61
75
|
email:
|
62
76
|
- contact@karafka.io
|
@@ -66,6 +80,7 @@ extra_rdoc_files: []
|
|
66
80
|
files:
|
67
81
|
- ".coditsu/ci.yml"
|
68
82
|
- ".diffend.yml"
|
83
|
+
- ".github/FUNDING.yml"
|
69
84
|
- ".github/workflows/ci.yml"
|
70
85
|
- ".gitignore"
|
71
86
|
- ".rspec"
|
@@ -87,11 +102,17 @@ files:
|
|
87
102
|
- lib/karafka/testing/spec_consumer_client.rb
|
88
103
|
- lib/karafka/testing/spec_producer_client.rb
|
89
104
|
- lib/karafka/testing/version.rb
|
105
|
+
- renovate.json
|
90
106
|
homepage: https://karafka.io
|
91
107
|
licenses:
|
92
108
|
- MIT
|
93
109
|
metadata:
|
110
|
+
funding_uri: https://karafka.io/#become-pro
|
111
|
+
homepage_uri: https://karafka.io
|
112
|
+
changelog_uri: https://github.com/karafka/karafka-testing/blob/master/CHANGELOG.md
|
113
|
+
bug_tracker_uri: https://github.com/karafka/karafka-testing/issues
|
94
114
|
source_code_uri: https://github.com/karafka/karafka-testing
|
115
|
+
documentation_uri: https://karafka.io/docs
|
95
116
|
rubygems_mfa_required: 'true'
|
96
117
|
post_install_message:
|
97
118
|
rdoc_options: []
|
@@ -101,14 +122,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
101
122
|
requirements:
|
102
123
|
- - ">="
|
103
124
|
- !ruby/object:Gem::Version
|
104
|
-
version: '
|
125
|
+
version: '0'
|
105
126
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
106
127
|
requirements:
|
107
128
|
- - ">="
|
108
129
|
- !ruby/object:Gem::Version
|
109
130
|
version: '0'
|
110
131
|
requirements: []
|
111
|
-
rubygems_version: 3.
|
132
|
+
rubygems_version: 3.4.10
|
112
133
|
signing_key:
|
113
134
|
specification_version: 4
|
114
135
|
summary: Library which provides helpers for easier Karafka consumers tests
|
metadata.gz.sig
CHANGED
Binary file
|