@@ -245,3 +245,56 @@ def socket_handler(listener):
245
245
assert r .content == b'1234567890' * 2
246
246
247
247
self .tear_down ()
248
+
249
+ def test_adapter_sending_values (self ):
250
+ self .set_up ()
251
+
252
+ data = []
253
+ send_event = threading .Event ()
254
+
255
+ def socket_handler (listener ):
256
+ sock = listener .accept ()[0 ]
257
+
258
+ # Do the handshake: conn header, settings, send settings, recv ack.
259
+ sock .recv (65535 )
260
+ sock .recv (65535 )
261
+ sock .send (SettingsFrame (0 ).serialize ())
262
+ sock .recv (65535 )
263
+
264
+ # Now expect some data. One headers frame and one data frame.
265
+ data .append (sock .recv (65535 ))
266
+ data .append (sock .recv (65535 ))
267
+
268
+ # Respond!
269
+ h = HeadersFrame (1 )
270
+ h .data = self .get_encoder ().encode ({':status' : 200 , 'Content-Type' : 'not/real' , 'Content-Length' : 20 })
271
+ h .flags .add ('END_HEADERS' )
272
+ sock .send (h .serialize ())
273
+ d = DataFrame (1 )
274
+ d .data = b'1234567890' * 2
275
+ d .flags .add ('END_STREAM' )
276
+ sock .send (d .serialize ())
277
+
278
+ send_event .set ()
279
+ sock .close ()
280
+
281
+ self ._start_server (socket_handler )
282
+
283
+ s = requests .Session ()
284
+ s .mount ('https://%s' % self .host , HTTP20Adapter ())
285
+ r = s .post (
286
+ 'https://%s:%s/some/path' % (self .host , self .port ),
287
+ data = 'hi there' ,
288
+ )
289
+
290
+ # Assert about the sent values.
291
+ assert r .status_code == 200
292
+
293
+ f = decode_frame (data [0 ])
294
+ assert isinstance (f , HeadersFrame )
295
+
296
+ f = decode_frame (data [1 ])
297
+ assert isinstance (f , DataFrame )
298
+ assert f .data == b'hi there'
299
+
300
+ self .tear_down ()
0 commit comments