Skip to content

Commit 0b664ff

Browse files
committed
Add disconnected socket tests for conn.recv()
1 parent 2d75945 commit 0b664ff

File tree

1 file changed

+46
-1
lines changed

1 file changed

+46
-1
lines changed

test/test_conn.py

Lines changed: 46 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -165,7 +165,52 @@ def test_can_send_more(conn):
165165
assert conn.can_send_more() is False
166166

167167

168-
def test_recv(socket, conn):
168+
def test_recv_disconnected():
169+
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
170+
sock.bind(('127.0.0.1', 0))
171+
port = sock.getsockname()[1]
172+
sock.listen(5)
173+
174+
conn = BrokerConnection('127.0.0.1', port, socket.AF_INET)
175+
timeout = time.time() + 1
176+
while time.time() < timeout:
177+
conn.connect()
178+
if conn.connected():
179+
break
180+
else:
181+
assert False, 'Connection attempt to local socket timed-out ?'
182+
183+
conn.send(MetadataRequest[0]([]))
184+
185+
# Disconnect server socket
186+
sock.close()
187+
188+
# Attempt to receive should mark connection as disconnected
189+
assert conn.connected()
190+
conn.recv()
191+
assert conn.disconnected()
192+
193+
194+
def test_recv_disconnected_too(_socket, conn):
195+
conn.connect()
196+
assert conn.connected()
197+
198+
req = MetadataRequest[0]([])
199+
header = RequestHeader(req, client_id=conn.config['client_id'])
200+
payload_bytes = len(header.encode()) + len(req.encode())
201+
_socket.send.side_effect = [4, payload_bytes]
202+
conn.send(req)
203+
204+
# Empty data on recv means the socket is disconnected
205+
_socket.recv.return_value = b''
206+
207+
# Attempt to receive should mark connection as disconnected
208+
assert conn.connected()
209+
conn.recv()
210+
assert conn.disconnected()
211+
212+
213+
def test_recv(_socket, conn):
169214
pass # TODO
170215

171216

0 commit comments

Comments
 (0)