@@ -165,7 +165,52 @@ def test_can_send_more(conn):
165
165
assert conn .can_send_more () is False
166
166
167
167
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 ):
169
214
pass # TODO
170
215
171
216
0 commit comments