Skip to content

Commit 87dd905

Browse files
committed
Add context manager regression test (#1130)
Signed-off-by: Callan Gray <[email protected]>
1 parent 5ec91e7 commit 87dd905

File tree

2 files changed

+51
-0
lines changed

2 files changed

+51
-0
lines changed

tests/test_consumer.py

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
import gc
33
import json
44
import time
5+
import warnings
56
from contextlib import contextmanager
67
from unittest import mock
78

@@ -188,6 +189,36 @@ async def test_consumer_context_manager(self):
188189
raise ValueError
189190
assert consumer._closed
190191

192+
@run_until_complete
193+
async def test_consumer_context_manager_start_error(self):
194+
for target, group_id in [
195+
("aiokafka.consumer.consumer.AIOKafkaClient.bootstrap", None),
196+
("aiokafka.consumer.consumer.Fetcher.__init__", None),
197+
("aiokafka.consumer.consumer.NoGroupCoordinator.__init__", None),
198+
(
199+
"aiokafka.consumer.consumer.GroupCoordinator.__init__",
200+
f"group-{self.id()}",
201+
),
202+
]:
203+
consumer = AIOKafkaConsumer(
204+
self.topic,
205+
group_id=group_id,
206+
bootstrap_servers=self.hosts,
207+
enable_auto_commit=False,
208+
auto_offset_reset="earliest",
209+
)
210+
211+
# make consumer.start() raise
212+
with mock.patch(target, side_effect=RuntimeError("error")):
213+
with self.assertRaises(RuntimeError):
214+
async with consumer:
215+
self.fail(f"{target} did not raise")
216+
217+
# should not require calling consumer.close()
218+
with warnings.catch_warnings(record=True) as w:
219+
del consumer
220+
self.assertEqual(len(w), 0, f"{target} got unexpected warnings: {w}")
221+
191222
@run_until_complete
192223
async def test_consumer_api_version(self):
193224
await self.send_messages(0, list(range(10)))

tests/test_producer.py

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
import gc
33
import json
44
import time
5+
import warnings
56
import weakref
67
from unittest import mock
78

@@ -179,6 +180,25 @@ async def test_producer_context_manager(self):
179180
raise ValueError()
180181
assert producer._closed
181182

183+
@run_until_complete
184+
async def test_producer_context_manager_start_error(self):
185+
for target in [
186+
"aiokafka.producer.producer.AIOKafkaClient.bootstrap",
187+
"aiokafka.producer.producer.Sender.start",
188+
]:
189+
producer = AIOKafkaProducer(bootstrap_servers=self.hosts)
190+
191+
# make producer.start() raise
192+
with mock.patch(target, side_effect=RuntimeError("error")):
193+
with self.assertRaises(RuntimeError):
194+
async with producer:
195+
self.fail(f"{target} did not raise")
196+
197+
# should not require calling producer.close()
198+
with warnings.catch_warnings(record=True) as w:
199+
del producer
200+
self.assertEqual(len(w), 0, f"Unexpected warnings: {w}")
201+
182202
@run_until_complete
183203
async def test_producer_send_noack(self):
184204
producer = AIOKafkaProducer(bootstrap_servers=self.hosts, acks=0)

0 commit comments

Comments
 (0)