summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDana Powers <dana.powers@gmail.com>2016-03-14 00:11:26 -0700
committerDana Powers <dana.powers@gmail.com>2016-04-04 14:42:49 -0700
commitc7bbec07e9b1bd87a48bdae87071b59c0a575153 (patch)
tree0188d0f555f7922c436afd04de02cc3b14e79b5a
parent0a942176a6030c3fd9e77a3a8f5a63f85f376f14 (diff)
downloadkafka-python-c7bbec07e9b1bd87a48bdae87071b59c0a575153.tar.gz
Add basic unit test coverage for BrokerConnection
-rw-r--r--test/test_conn.py82
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