Skip to content

Commit 361d3e0

Browse files
committed
Speed up a spec
1 parent 153a3ac commit 361d3e0

File tree

1 file changed

+19
-13
lines changed

1 file changed

+19
-13
lines changed

spec/functional/consumer_group_spec.rb

Lines changed: 19 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,4 @@
11
describe "Consumer API", functional: true do
2-
let!(:topic) { create_random_topic(num_partitions: 3) }
32
let(:offset_retention_time) { 30 }
43

54
example "consuming messages from the beginning of a topic" do
@@ -52,20 +51,27 @@
5251
expect(received_messages.map(&:value).map(&:to_i)).to match_array messages
5352
end
5453

55-
example "consuming messages a topic that's being written to" do
56-
num_partitions = 15
57-
messages = (1..1000).to_a
54+
example "consuming messages from a topic that's being written to" do
55+
num_partitions = 3
56+
topic = create_random_topic(num_partitions: num_partitions)
57+
messages = (1..100).to_a
58+
59+
mutex = Mutex.new
60+
var = ConditionVariable.new
5861

5962
Thread.new do
6063
kafka = Kafka.new(seed_brokers: kafka_brokers, client_id: "test")
6164
producer = kafka.producer
6265

6366
messages.each do |i|
64-
producer.produce(i.to_s, topic: topic, partition_key: i.to_s)
67+
producer.produce(i.to_s, topic: topic, partition: i % 3)
6568

6669
if i % 100 == 0
6770
producer.deliver_messages
68-
sleep 1
71+
72+
mutex.synchronize do
73+
var.wait(mutex)
74+
end
6975
end
7076
end
7177

@@ -78,11 +84,10 @@
7884
end
7985

8086
group_id = "test#{rand(1000)}"
87+
received_messages = []
8188

8289
threads = 2.times.map do |thread_id|
8390
t = Thread.new do
84-
received_messages = []
85-
8691
kafka = Kafka.new(seed_brokers: kafka_brokers, client_id: "test", logger: logger)
8792
consumer = kafka.consumer(group_id: group_id, offset_retention_time: offset_retention_time)
8893
consumer.subscribe(topic)
@@ -91,21 +96,22 @@
9196
if message.value.nil?
9297
consumer.stop
9398
else
94-
received_messages << Integer(message.value)
99+
mutex.synchronize do
100+
received_messages << Integer(message.value)
101+
var.signal
102+
end
95103
end
96104
end
97-
98-
received_messages
99105
end
100106

101107
t.abort_on_exception = true
102108

103109
t
104110
end
105111

106-
received_messages = threads.map(&:value).flatten
112+
threads.each(&:join)
107113

108-
expect(received_messages.sort).to match_array messages
114+
expect(received_messages).to match_array messages
109115
end
110116

111117
example "consuming messages from the end of a topic" do

0 commit comments

Comments
 (0)