@@ -245,3 +245,56 @@ def socket_handler(listener):
245245 assert r .content == b'1234567890' * 2
246246
247247 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