@@ -211,6 +211,61 @@ def data_callback(chunk, **kwargs):
211211 assert frames [1 ].data == b'hello there'
212212 assert frames [1 ].flags == set (['END_STREAM' ])
213213
214+ def test_request_correctly_sent_max_chunk (self , frame_buffer ):
215+ """
216+ Test that request correctly sent when data length multiple
217+ max chunk. We check last chunk has a end flag and correct number
218+ of chunks.
219+ """
220+ def data_callback (chunk , ** kwargs ):
221+ frame_buffer .add_data (chunk )
222+
223+ # one chunk
224+ c = HTTP20Connection ('www.google.com' )
225+ c ._sock = DummySocket ()
226+ c ._send_cb = data_callback
227+ c .putrequest ('GET' , '/' )
228+ c .endheaders (message_body = b'1' * 1024 , final = True )
229+
230+ frames = list (frame_buffer )
231+ assert len (frames ) == 2
232+ assert isinstance (frames [1 ], DataFrame )
233+ assert frames [1 ].flags == set (['END_STREAM' ])
234+
235+ # two chunks
236+ c = HTTP20Connection ('www.google.com' )
237+ c ._sock = DummySocket ()
238+ c ._send_cb = data_callback
239+ c .putrequest ('GET' , '/' )
240+ c .endheaders (message_body = b'1' * 2024 , final = True )
241+
242+ frames = list (frame_buffer )
243+ assert len (frames ) == 3
244+ assert isinstance (frames [1 ], DataFrame )
245+ assert frames [2 ].flags == set (['END_STREAM' ])
246+
247+ # two chunks with last chunk < 1024
248+ c = HTTP20Connection ('www.google.com' )
249+ c ._sock = DummySocket ()
250+ c ._send_cb = data_callback
251+ c .putrequest ('GET' , '/' )
252+ c .endheaders (message_body = b'1' * 2000 , final = True )
253+
254+ frames = list (frame_buffer )
255+ assert len (frames ) == 3
256+ assert isinstance (frames [1 ], DataFrame )
257+ assert frames [2 ].flags == set (['END_STREAM' ])
258+
259+ # no chunks
260+ c = HTTP20Connection ('www.google.com' )
261+ c ._sock = DummySocket ()
262+ c ._send_cb = data_callback
263+ c .putrequest ('GET' , '/' )
264+ c .endheaders (message_body = b'' , final = True )
265+
266+ frames = list (frame_buffer )
267+ assert len (frames ) == 1
268+
214269 def test_that_we_correctly_send_over_the_socket (self ):
215270 sock = DummySocket ()
216271 c = HTTP20Connection ('www.google.com' )
0 commit comments