diff options
author | Dana Powers <dana.powers@gmail.com> | 2016-03-14 00:11:26 -0700 |
---|---|---|
committer | Dana Powers <dana.powers@gmail.com> | 2016-04-04 14:42:49 -0700 |
commit | c7bbec07e9b1bd87a48bdae87071b59c0a575153 (patch) | |
tree | 0188d0f555f7922c436afd04de02cc3b14e79b5a | |
parent | 0a942176a6030c3fd9e77a3a8f5a63f85f376f14 (diff) | |
download | kafka-python-c7bbec07e9b1bd87a48bdae87071b59c0a575153.tar.gz |
Add basic unit test coverage for BrokerConnection
-rw-r--r-- | test/test_conn.py | 82 |
1 files changed, 82 insertions, 0 deletions
diff --git a/test/test_conn.py b/test/test_conn.py new file mode 100644 index 0000000..d394f74 --- /dev/null +++ b/test/test_conn.py @@ -0,0 +1,82 @@ +# pylint: skip-file +from __future__ import absolute_import + +from errno import EALREADY, EINPROGRESS, EISCONN, ECONNRESET +import socket +import time + +import pytest + +from kafka.conn import BrokerConnection, ConnectionStates + + +@pytest.fixture +def socket(mocker): + socket = mocker.MagicMock() + socket.connect_ex.return_value = 0 + mocker.patch('socket.socket', return_value=socket) + return socket + + +@pytest.fixture +def conn(socket): + conn = BrokerConnection('localhost', 9092, socket.AF_INET) + return conn + + +@pytest.mark.parametrize("states", [ + (([EINPROGRESS, EALREADY], ConnectionStates.CONNECTING),), + (([EALREADY, EALREADY], ConnectionStates.CONNECTING),), + (([0], ConnectionStates.CONNECTED),), + (([EINPROGRESS, EALREADY], ConnectionStates.CONNECTING), + ([ECONNRESET], ConnectionStates.DISCONNECTED)), + (([EINPROGRESS, EALREADY], ConnectionStates.CONNECTING), + ([EALREADY], ConnectionStates.CONNECTING), + ([EISCONN], ConnectionStates.CONNECTED)), +]) +def test_connect(socket, conn, states): + assert conn.state is ConnectionStates.DISCONNECTED + + for errno, state in states: + socket.connect_ex.side_effect = errno + conn.connect() + assert conn.state is state + + +def test_connect_timeout(socket, conn): + assert conn.state is ConnectionStates.DISCONNECTED + + # Initial connect returns EINPROGRESS + # immediate inline connect returns EALREADY + # second explicit connect returns EALREADY + # third explicit connect returns EALREADY and times out via last_attempt + socket.connect_ex.side_effect = [EINPROGRESS, EALREADY, EALREADY, EALREADY] + conn.connect() + assert conn.state is ConnectionStates.CONNECTING + conn.connect() + assert conn.state is ConnectionStates.CONNECTING + conn.last_attempt = 0 + conn.connect() + assert conn.state is ConnectionStates.DISCONNECTED + + +def test_blacked_out(conn): + assert not conn.blacked_out() + conn.last_attempt = time.time() + assert conn.blacked_out() + + +def test_connected(conn): + assert not conn.connected() + conn.state = ConnectionStates.CONNECTED + assert conn.connected() + + +def test_connecting(conn): + assert not conn.connecting() + conn.state = ConnectionStates.CONNECTING + assert conn.connecting() + conn.state = ConnectionStates.CONNECTED + assert not conn.connecting() + +# TODO: test_send, test_recv, test_can_send_more, test_close |