Skip to content

Commit bb5bc1f

Browse files
jeffwidmandpkp
authored andcommitted
Migrate from Unittest to pytest (#1620)
1 parent cd47701 commit bb5bc1f

File tree

7 files changed

+34
-73
lines changed

7 files changed

+34
-73
lines changed

test/conftest.py

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,5 @@
11
from __future__ import absolute_import
22

3-
import inspect
4-
53
import pytest
64

75
from test.fixtures import KafkaFixture, ZookeeperFixture, random_string, version as kafka_version

test/test_consumer.py

Lines changed: 9 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
from mock import MagicMock, patch
44
from . import unittest
5+
import pytest
56

67
from kafka import SimpleConsumer, KafkaConsumer, MultiProcessConsumer
78
from kafka.errors import (
@@ -11,17 +12,13 @@
1112
FetchResponsePayload, OffsetAndMessage, OffsetFetchResponsePayload)
1213

1314

14-
class TestKafkaConsumer(unittest.TestCase):
15-
def test_non_integer_partitions(self):
16-
with self.assertRaises(AssertionError):
17-
SimpleConsumer(MagicMock(), 'group', 'topic', partitions=['0'])
18-
15+
class TestKafkaConsumer:
1916
def test_session_timeout_larger_than_request_timeout_raises(self):
20-
with self.assertRaises(KafkaConfigurationError):
17+
with pytest.raises(KafkaConfigurationError):
2118
KafkaConsumer(bootstrap_servers='localhost:9092', api_version=(0,9), group_id='foo', session_timeout_ms=60000, request_timeout_ms=40000)
2219

2320
def test_fetch_max_wait_larger_than_request_timeout_raises(self):
24-
with self.assertRaises(KafkaConfigurationError):
21+
with pytest.raises(KafkaConfigurationError):
2522
KafkaConsumer(bootstrap_servers='localhost:9092', fetch_max_wait_ms=41000, request_timeout_ms=40000)
2623

2724
def test_subscription_copy(self):
@@ -43,7 +40,12 @@ def test_partition_list(self):
4340
self.assertEqual(fetch_last_known_offsets.call_args[0], (partitions,) )
4441
self.assertEqual(client.get_partition_ids_for_topic.call_count, 0) # pylint: disable=no-member
4542

43+
4644
class TestSimpleConsumer(unittest.TestCase):
45+
def test_non_integer_partitions(self):
46+
with self.assertRaises(AssertionError):
47+
SimpleConsumer(MagicMock(), 'group', 'topic', partitions=['0'])
48+
4749
def test_simple_consumer_failed_payloads(self):
4850
client = MagicMock()
4951
consumer = SimpleConsumer(client, group=None,

test/test_consumer_group.py

Lines changed: 2 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,6 @@
66
import pytest
77
from kafka.vendor import six
88

9-
from kafka import SimpleClient
109
from kafka.conn import ConnectionStates
1110
from kafka.consumer.group import KafkaConsumer
1211
from kafka.coordinator.base import MemberState, Generation
@@ -20,25 +19,10 @@ def get_connect_str(kafka_broker):
2019
return kafka_broker.host + ':' + str(kafka_broker.port)
2120

2221

23-
@pytest.fixture
24-
def simple_client(kafka_broker):
25-
return SimpleClient(get_connect_str(kafka_broker))
26-
27-
28-
@pytest.fixture
29-
def topic(simple_client):
30-
topic = random_string(5)
31-
simple_client.ensure_topic_exists(topic)
32-
return topic
33-
34-
3522
@pytest.mark.skipif(not version(), reason="No KAFKA_VERSION set")
36-
def test_consumer(kafka_broker, version):
37-
23+
def test_consumer(kafka_broker, topic, version):
24+
# The `topic` fixture is included because
3825
# 0.8.2 brokers need a topic to function well
39-
if version >= (0, 8, 2) and version < (0, 9):
40-
topic(simple_client(kafka_broker))
41-
4226
consumer = KafkaConsumer(bootstrap_servers=get_connect_str(kafka_broker))
4327
consumer.poll(500)
4428
assert len(consumer._client._conns) > 0

test/test_consumer_integration.py

Lines changed: 10 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -25,20 +25,21 @@
2525

2626
from test.conftest import version
2727
from test.fixtures import ZookeeperFixture, KafkaFixture, random_string
28-
from test.testutil import (
29-
KafkaIntegrationTestCase, kafka_versions, Timer,
30-
send_messages
31-
)
28+
from test.testutil import KafkaIntegrationTestCase, kafka_versions, Timer
3229

3330

3431
@pytest.mark.skipif(not version(), reason="No KAFKA_VERSION set")
35-
def test_kafka_consumer(simple_client, topic, kafka_consumer_factory):
36-
"""Test KafkaConsumer
37-
"""
32+
def test_kafka_consumer(kafka_producer, topic, kafka_consumer_factory):
33+
"""Test KafkaConsumer"""
3834
kafka_consumer = kafka_consumer_factory(auto_offset_reset='earliest')
3935

40-
send_messages(simple_client, topic, 0, range(0, 100))
41-
send_messages(simple_client, topic, 1, range(100, 200))
36+
# TODO replace this with a `send_messages()` pytest fixture
37+
# as we will likely need this elsewhere
38+
for i in range(0, 100):
39+
kafka_producer.send(topic, partition=0, value=str(i).encode())
40+
for i in range(100, 200):
41+
kafka_producer.send(topic, partition=1, value=str(i).encode())
42+
kafka_producer.flush()
4243

4344
cnt = 0
4445
messages = {0: set(), 1: set()}

test/test_package.py

Lines changed: 10 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,28 +1,25 @@
1-
from . import unittest
2-
3-
4-
class TestPackage(unittest.TestCase):
1+
class TestPackage:
52
def test_top_level_namespace(self):
63
import kafka as kafka1
7-
self.assertEqual(kafka1.KafkaConsumer.__name__, "KafkaConsumer")
8-
self.assertEqual(kafka1.consumer.__name__, "kafka.consumer")
9-
self.assertEqual(kafka1.codec.__name__, "kafka.codec")
4+
assert kafka1.KafkaConsumer.__name__ == "KafkaConsumer"
5+
assert kafka1.consumer.__name__ == "kafka.consumer"
6+
assert kafka1.codec.__name__ == "kafka.codec"
107

118
def test_submodule_namespace(self):
129
import kafka.client as client1
13-
self.assertEqual(client1.__name__, "kafka.client")
10+
assert client1.__name__ == "kafka.client"
1411

1512
from kafka import client as client2
16-
self.assertEqual(client2.__name__, "kafka.client")
13+
assert client2.__name__ == "kafka.client"
1714

1815
from kafka.client import SimpleClient as SimpleClient1
19-
self.assertEqual(SimpleClient1.__name__, "SimpleClient")
16+
assert SimpleClient1.__name__ == "SimpleClient"
2017

2118
from kafka.codec import gzip_encode as gzip_encode1
22-
self.assertEqual(gzip_encode1.__name__, "gzip_encode")
19+
assert gzip_encode1.__name__ == "gzip_encode"
2320

2421
from kafka import SimpleClient as SimpleClient2
25-
self.assertEqual(SimpleClient2.__name__, "SimpleClient")
22+
assert SimpleClient2.__name__ == "SimpleClient"
2623

2724
from kafka.codec import snappy_encode
28-
self.assertEqual(snappy_encode.__name__, "snappy_encode")
25+
assert snappy_encode.__name__ == "snappy_encode"

test/testutil.py

Lines changed: 3 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -3,20 +3,19 @@
33
import functools
44
import operator
55
import os
6-
import socket
76
import time
87
import uuid
98

109
import pytest
1110
from . import unittest
1211

13-
from kafka import SimpleClient, create_message
12+
from kafka import SimpleClient
1413
from kafka.errors import (
1514
LeaderNotAvailableError, KafkaTimeoutError, InvalidTopicError,
1615
NotLeaderForPartitionError, UnknownTopicOrPartitionError,
1716
FailedPayloadsError
1817
)
19-
from kafka.structs import OffsetRequestPayload, ProduceRequestPayload
18+
from kafka.structs import OffsetRequestPayload
2019
from test.fixtures import random_string, version_str_to_list, version as kafka_version #pylint: disable=wrong-import-order
2120

2221

@@ -67,26 +66,6 @@ def wrapper(func, *args, **kwargs):
6766
return real_kafka_versions
6867

6968

70-
_MESSAGES = {}
71-
def msg(message):
72-
"""Format, encode and deduplicate a message
73-
"""
74-
global _MESSAGES #pylint: disable=global-statement
75-
if message not in _MESSAGES:
76-
_MESSAGES[message] = '%s-%s' % (message, str(uuid.uuid4()))
77-
78-
return _MESSAGES[message].encode('utf-8')
79-
80-
def send_messages(client, topic, partition, messages):
81-
"""Send messages to a topic's partition
82-
"""
83-
messages = [create_message(msg(str(m))) for m in messages]
84-
produce = ProduceRequestPayload(topic, partition, messages=messages)
85-
resp, = client.send_produce_request([produce])
86-
assert resp.error == 0
87-
88-
return [x.value for x in messages]
89-
9069
def current_offset(client, topic, partition, kafka_broker=None):
9170
"""Get the current offset of a topic's partition
9271
"""
@@ -101,6 +80,7 @@ def current_offset(client, topic, partition, kafka_broker=None):
10180
else:
10281
return offsets.offsets[0]
10382

83+
10484
class KafkaIntegrationTestCase(unittest.TestCase):
10585
create_client = True
10686
topic = None

tox.ini

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,6 @@ deps =
2020
xxhash
2121
crc32c
2222
py26: unittest2
23-
decorator
2423
commands =
2524
py.test {posargs:--pylint --pylint-rcfile=pylint.rc --pylint-error-types=EF --cov=kafka --cov-config=.covrc}
2625
setenv =

0 commit comments

Comments
 (0)