rdkafka 0.15.1 → 0.16.0.beta1

Sign up to get free protection for your applications and to get access to all the features.
@@ -14,6 +14,19 @@ describe Rdkafka::Consumer do
14
14
  it { expect(consumer.name).to include('rdkafka#consumer-') }
15
15
  end
16
16
 
17
+ describe 'consumer without auto-start' do
18
+ let(:consumer) { rdkafka_consumer_config.consumer(native_kafka_auto_start: false) }
19
+
20
+ it 'expect to be able to start it later and close' do
21
+ consumer.start
22
+ consumer.close
23
+ end
24
+
25
+ it 'expect to be able to close it without starting' do
26
+ consumer.close
27
+ end
28
+ end
29
+
17
30
  describe "#subscribe, #unsubscribe and #subscription" do
18
31
  it "should subscribe, unsubscribe and return the subscription" do
19
32
  expect(consumer.subscription).to be_empty
@@ -211,6 +224,11 @@ describe Rdkafka::Consumer do
211
224
 
212
225
  # 7. ensure same message is read again
213
226
  message2 = consumer.poll(timeout)
227
+
228
+ # This is needed because `enable.auto.offset.store` is true but when running in CI that
229
+ # is overloaded, offset store lags
230
+ sleep(2)
231
+
214
232
  consumer.commit
215
233
  expect(message1.offset).to eq message2.offset
216
234
  expect(message1.payload).to eq message2.payload
@@ -1296,4 +1314,40 @@ describe Rdkafka::Consumer do
1296
1314
  ])
1297
1315
  end
1298
1316
  end
1317
+
1318
+ describe '#oauthbearer_set_token' do
1319
+ context 'when sasl not configured' do
1320
+ it 'should return RD_KAFKA_RESP_ERR__STATE' do
1321
+ response = consumer.oauthbearer_set_token(
1322
+ token: "foo",
1323
+ lifetime_ms: Time.now.to_i*1000 + 900 * 1000,
1324
+ principal_name: "kafka-cluster"
1325
+ )
1326
+ expect(response).to eq(Rdkafka::Bindings::RD_KAFKA_RESP_ERR__STATE)
1327
+ end
1328
+ end
1329
+
1330
+ context 'when sasl configured' do
1331
+ before do
1332
+ $consumer_sasl = rdkafka_producer_config(
1333
+ "security.protocol": "sasl_ssl",
1334
+ "sasl.mechanisms": 'OAUTHBEARER'
1335
+ ).consumer
1336
+ end
1337
+
1338
+ after do
1339
+ $consumer_sasl.close
1340
+ end
1341
+
1342
+ it 'should succeed' do
1343
+
1344
+ response = $consumer_sasl.oauthbearer_set_token(
1345
+ token: "foo",
1346
+ lifetime_ms: Time.now.to_i*1000 + 900 * 1000,
1347
+ principal_name: "kafka-cluster"
1348
+ )
1349
+ expect(response).to eq(0)
1350
+ end
1351
+ end
1352
+ end
1299
1353
  end
@@ -10,8 +10,9 @@ describe Rdkafka::NativeKafka do
10
10
  subject(:client) { described_class.new(native, run_polling_thread: true, opaque: opaque) }
11
11
 
12
12
  before do
13
+ allow(Rdkafka::Bindings).to receive(:rd_kafka_name).and_return('producer-1')
13
14
  allow(Thread).to receive(:new).and_return(thread)
14
-
15
+ allow(thread).to receive(:name=).with("rdkafka.native_kafka#producer-1")
15
16
  allow(thread).to receive(:[]=).with(:closing, anything)
16
17
  allow(thread).to receive(:join)
17
18
  allow(thread).to receive(:abort_on_exception=).with(anything)
@@ -20,6 +21,12 @@ describe Rdkafka::NativeKafka do
20
21
  after { client.close }
21
22
 
22
23
  context "defaults" do
24
+ it "sets the thread name" do
25
+ expect(thread).to receive(:name=).with("rdkafka.native_kafka#producer-1")
26
+
27
+ client
28
+ end
29
+
23
30
  it "sets the thread to abort on exception" do
24
31
  expect(thread).to receive(:abort_on_exception=).with(true)
25
32
 
@@ -14,6 +14,19 @@ describe Rdkafka::Producer do
14
14
  consumer.close
15
15
  end
16
16
 
17
+ describe 'producer without auto-start' do
18
+ let(:producer) { rdkafka_producer_config.producer(native_kafka_auto_start: false) }
19
+
20
+ it 'expect to be able to start it later and close' do
21
+ producer.start
22
+ producer.close
23
+ end
24
+
25
+ it 'expect to be able to close it without starting' do
26
+ producer.close
27
+ end
28
+ end
29
+
17
30
  describe '#name' do
18
31
  it { expect(producer.name).to include('rdkafka#producer-') }
19
32
  end
@@ -734,4 +747,34 @@ describe Rdkafka::Producer do
734
747
  end
735
748
  end
736
749
  end
750
+
751
+ describe '#oauthbearer_set_token' do
752
+ context 'when sasl not configured' do
753
+ it 'should return RD_KAFKA_RESP_ERR__STATE' do
754
+ response = producer.oauthbearer_set_token(
755
+ token: "foo",
756
+ lifetime_ms: Time.now.to_i*1000 + 900 * 1000,
757
+ principal_name: "kafka-cluster"
758
+ )
759
+ expect(response).to eq(Rdkafka::Bindings::RD_KAFKA_RESP_ERR__STATE)
760
+ end
761
+ end
762
+
763
+ context 'when sasl configured' do
764
+ it 'should succeed' do
765
+ producer_sasl = rdkafka_producer_config(
766
+ {
767
+ "security.protocol": "sasl_ssl",
768
+ "sasl.mechanisms": 'OAUTHBEARER'
769
+ }
770
+ ).producer
771
+ response = producer_sasl.oauthbearer_set_token(
772
+ token: "foo",
773
+ lifetime_ms: Time.now.to_i*1000 + 900 * 1000,
774
+ principal_name: "kafka-cluster"
775
+ )
776
+ expect(response).to eq(0)
777
+ end
778
+ end
779
+ end
737
780
  end
data/spec/spec_helper.rb CHANGED
@@ -139,7 +139,7 @@ RSpec.configure do |config|
139
139
  }.each do |topic, partitions|
140
140
  create_topic_handle = admin.create_topic(topic.to_s, partitions, 1)
141
141
  begin
142
- create_topic_handle.wait(max_wait_timeout: 15)
142
+ create_topic_handle.wait(max_wait_timeout: 1.0)
143
143
  rescue Rdkafka::RdkafkaError => ex
144
144
  raise unless ex.message.match?(/topic_already_exists/)
145
145
  end
@@ -155,3 +155,18 @@ RSpec.configure do |config|
155
155
  end
156
156
  end
157
157
  end
158
+
159
+ class RdKafkaTestConsumer
160
+ def self.with
161
+ consumer = Rdkafka::Bindings.rd_kafka_new(
162
+ :rd_kafka_consumer,
163
+ nil,
164
+ nil,
165
+ 0
166
+ )
167
+ yield consumer
168
+ ensure
169
+ Rdkafka::Bindings.rd_kafka_consumer_close(consumer)
170
+ Rdkafka::Bindings.rd_kafka_destroy(consumer)
171
+ end
172
+ end
data.tar.gz.sig CHANGED
Binary file
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rdkafka
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.15.1
4
+ version: 0.16.0.beta1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Thijs Cadier
@@ -36,7 +36,7 @@ cert_chain:
36
36
  AnG1dJU+yL2BK7vaVytLTstJME5mepSZ46qqIJXMuWob/YPDmVaBF39TDSG9e34s
37
37
  msG3BiCqgOgHAnL23+CN3Rt8MsuRfEtoTKpJVcCfoEoNHOkc
38
38
  -----END CERTIFICATE-----
39
- date: 2024-01-30 00:00:00.000000000 Z
39
+ date: 2024-04-29 00:00:00.000000000 Z
40
40
  dependencies:
41
41
  - !ruby/object:Gem::Dependency
42
42
  name: ffi
@@ -216,6 +216,7 @@ files:
216
216
  - lib/rdkafka/consumer/partition.rb
217
217
  - lib/rdkafka/consumer/topic_partition_list.rb
218
218
  - lib/rdkafka/error.rb
219
+ - lib/rdkafka/helpers/oauth.rb
219
220
  - lib/rdkafka/helpers/time.rb
220
221
  - lib/rdkafka/metadata.rb
221
222
  - lib/rdkafka/native_kafka.rb
@@ -278,7 +279,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
278
279
  - !ruby/object:Gem::Version
279
280
  version: '0'
280
281
  requirements: []
281
- rubygems_version: 3.5.3
282
+ rubygems_version: 3.5.9
282
283
  signing_key:
283
284
  specification_version: 4
284
285
  summary: The rdkafka gem is a modern Kafka client library for Ruby based on librdkafka.
metadata.gz.sig CHANGED
Binary file