zmc
2023-12-22 9fdbf60165db0400c2e8e6be2dc6e88138ac719a
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
U
M±d@—ã@s€ddlmZmZmZmZmZmZmZddlZddl    m
Z
m Z m Z m Z mZddlmZmZmZmZmZmZmZddlmZmZmZmZmZmZmZmZm Z m!Z!m"Z"ddl#m$Z$m%Z%m&Z&dd    l'm(Z(m)Z)m*Z*dd
œd d „Z+dd
œd d„Z,dd
œdd„Z-dd
œdd„Z.dd
œdd„Z/dd
œdd„Z0dd
œdd„Z1dd
œdd„Z2dd
œdd„Z3dd
œdd„Z4dd
œdd „Z5dd
œd!d"„Z6dd
œd#d$„Z7dd
œd%d&„Z8dd
œd'd(„Z9dd
œd)d*„Z:dd
œd+d,„Z;dd
œd-d.„Z<dd
œd/d0„Z=dd
œd1d2„Z>dd
œd3d4„Z?dd
œd5d6„Z@dd
œd7d8„ZAdd
œd9d:„ZBejC Dd;d<d=d>g¡eEdd?œd@dA„ƒZFejC Dd;d<d=dBg¡eEdd?œdCdD„ƒZGdd
œdEdF„ZHdd
œdGdH„ZIdS)Ié)ÚAnyÚcastÚDictÚListÚOptionalÚTupleÚTypeNé)Ú _body_framingÚ _keep_aliveÚ
ConnectionÚ    NEED_DATAÚPAUSED)ÚConnectionClosedÚDataÚ EndOfMessageÚEventÚInformationalResponseÚRequestÚResponse) ÚCLIENTÚCLOSEDÚDONEÚERRORÚIDLEÚMIGHT_SWITCH_PROTOCOLÚ
MUST_CLOSEÚ    SEND_BODYÚ SEND_RESPONSEÚSERVERÚSWITCHED_PROTOCOL)ÚLocalProtocolErrorÚRemoteProtocolErrorÚSentinelé)ÚConnectionPairÚget_all_eventsÚreceive_and_get©ÚreturncCs¾ttdddgdƒst‚ttddddgdƒr2t‚ttddddgdƒrLt‚ttddgddƒrdt‚ttd    gd
ƒsxt‚ttd    dgd
ƒrŽt‚ttd    dgd
ƒr¤t‚ttd    gdd ƒrºt‚dS) NÚGETú/)ÚHostz Example.com©ÚmethodÚtargetÚheaders©r Úclose)r za, b, cLOse, fooú1.0©r.r/r0Ú http_versionéÈ©Ú status_coder0©r8r0r5)r rÚAssertionErrorr©r;r;úPd:\z\workplace\vscode\pyvenv\venv\Lib\site-packages\h11/tests/test_connection.pyÚtest__keep_alive s4ÿýÿýÿÿ ÿr=cs´tttttttfdœdd„‰dtttttdœ‡fdd„ }dttttdœ‡fd    d
„ }id d id did ddœfD]j}tt    tt
f|ƒ}d|f|Žfd|fddi|—Žfd|fddi|—ŽffD]\}}t ||ƒdksÄt ‚qÄqvd did ddœfD]R}tt    tt
f|ƒ}d|f|Žfd|f|ŽffD]\}}t ||ƒdks&t ‚q&qôd|d dfd|d dffD]\}}t ||ƒdksdt ‚qdt d|ƒƒdksšt ‚t d|ƒƒdks°t ‚dS)N)ÚclÚter)cSs0g}|dk    r| dt|ƒf¡|r,| d¡|S)NúContent-Length©zTransfer-EncodingÚchunked)ÚappendÚstr)r>r?r0r;r;r<r0?s 
z#test__body_framing.<locals>.headersr6F)r8r>r?r)cst|ˆ||ƒdS)Nr7)r)r8r>r?©r0r;r<ÚrespGsz test__body_framing.<locals>.respcs"ˆ||ƒ}|dg7}tdd|dS)N©r,z example.comr*r+r-)r)r>r?ÚhrEr;r<ÚreqLs
 
ztest__body_framing.<locals>.reqr>édr?T)r>r?óHEADóGETr8éÌi0)úcontent-length)r)rBr;)r>)rN)rJ)zhttp/1.0r;)r6NF)NF) rÚintÚboolrrrDrrrrrr
r:)rFrIÚkwargsÚmethÚrr;rEr<Útest__body_framing>s4"    ÿþ ý $$rTc    Cst t¡tdƒW5QRXtƒ}|jtjtks8t‚|jtj    t
ksLt‚|jt
jt
ks`t‚|jt
j    tkstt‚|  tt ddddgd¡}|dksšt‚|j D]}|jttt
tiks t‚q |jtjtksÐt‚|jtjtksät‚|jt
jtksøt‚|jt
jtkst‚|jtjdks$t‚|jt
jdks:t‚|  t
td    gd
¡}|d ks\t‚|  t
td d gd
¡}|dks€t‚|j D]}|jttt
tiks†t‚q†|jtjdks¼t‚|jt
jdksÒt‚|  ttdd¡}|dksòt‚|j ttddtddtƒgd}|dks"t‚|j ttƒgd}|dksBt‚|j D]}|jttt
tiksHt‚qH|  t
tdd¡}|dksˆt‚|j t
tddtddtƒgd}|dks¸t‚|j t
tƒgd}|dksØt‚|j D]}|jttt
tiksÞt‚qÞdS)Nrr*r+rG©r@Ú10r-s9GET / HTTP/1.1
Host: example.com
Content-Length: 10
 
ó1.1rJr7sHTTP/1.1 100 
 
r6)r@Z11s%HTTP/1.1 200 
Content-Length: 11
 
ó12345©Údataó67890©Úexpectóó
1234567890ó1)ÚpytestÚraisesÚ
ValueErrorr r%ÚconnrÚour_roler:Z
their_rolerÚsendrÚconnsÚstatesrrÚ    our_stateÚ their_stateZtheir_http_versionrrrrr©ÚprZrdr;r;r<Ú)test_Connection_basics_and_content_lengthjsl ýþÿ
 
ÿ
"
rmcCstƒ}| ttddddgd¡| ttdddd¡}|d    ksBt‚| ttd
ddd¡}|d ksdt‚|jttd d gd}|d ks†t‚| ttdgd¡}|dks¦t‚| ttddgd¡| ttdddd¡| ttdddd¡| ttƒ¡|j    D]}|j
tt tt iksüt‚qüdS)Nr*r+rGrAr-r_T©rZZ chunk_startZ    chunk_endsa
1234567890
sabcdes
5
abcde
r^rYr\)ZhelloZthererEs0
hello: there
 
r6r7s54321rX) r%rfrrrr:rrrrgrhrrkr;r;r<Ú test_chunked­s4ýþ     ÿ
rocCs8ttd}d}| |¡| ¡tddddgdks6t‚| ¡tksFt‚| d¡| ¡td    d
d
d ksjt‚| d ¡| ¡td d
dd ksŽt‚| d¡| ¡tdddd ks²t‚| d¡| ¡tddd
d ksÖt‚| d¡| ¡td    d
d
d ksút‚| d¡| ¡tkst‚| d¡| ¡tƒks4t‚dS)N©reóBPOST / HTTP/1.1
Host: example.com
Transfer-Encoding: chunked
 
ÚPOSTr+rGrAr-s
5
hello
shelloTrns5
helshelFólso
óos5
helloó
s0
 
)    r rÚ receive_dataÚ
next_eventrr:r rr)rdÚrequestr;r;r<Útest_chunk_boundariesÌs0
ÿ
ý 
 
 
 
 
 
 
rycCsÆttƒ}| tdddgd¡| tƒ¡|jtks8t‚t|dƒt    dgddd    gksXt‚|jt
ksft‚t|d
ƒt d
d gks€t‚t|d ƒt d d gksšt‚t|d ƒtƒt ƒgks´t‚|j tksÂt‚dS)Nr*r+rGr-sHTTP/1.0 200 OK
 
r6r3sOK)r8r0r5ÚreasonrXrYr[r^)r rrfrrrirr:r'rrrrrjr©Úcr;r;r<Ú$test_client_talking_to_http10_serverós ÿ
r}cCsttƒ}t|dƒtddgddtƒgks,t‚|jtks:t‚| t    dgd¡dksTt‚| t
d    d
¡d    kslt‚| tƒ¡d ks€t‚|j tksŽt‚ttƒ}t|d ƒtd ddgddt
dd
gksÀt‚t|dƒt
dd
tƒgksÞt‚|jtksìt‚t|d ƒt ƒgkst‚dS)NóGET / HTTP/1.0
 
r*r+r3r4r6r7ó$HTTP/1.1 200 
Connection: close
 
rXrYr^s(POST / HTTP/1.0
Content-Length: 10
 
1rrrUr`s    234567890) r rr'rrr:rjrrfrrrirr{r;r;r<Ú$test_server_talking_to_http10_clients4þ
ÿÿüù
    r€c    CsºdggddgfD]¤}tttttf|ƒ}tƒ}| ttdddgdtƒg¡|jt    t
d|dt
ddgdd    t t    ƒ}t |d
ƒ| t
d|d¡d ksœt ‚| td d ¡d kst ‚qdS)NrA©r@Z100r*r+rGr-r6r7r\r~rrXrY)rrrrDr%rfrrrrrr r'r:r)Z user_headersrlr|r;r;r<Ú,test_automatic_transfer_encoding_in_response(s6ûþþ    
ÿý
 
ÿÿr‚cCs˜tƒ}| ttddddgdtƒg¡|jD]}|jttks,t‚q,|jt    t
dgdtƒgt
ddgdtƒgd    |jD]}|jttt    tiksxt‚qxdS)
Nr*r+rGr1r-rMr7)Ú
connectionr2r\) r%rfrrrrgrhrr:rr©rlrdr;r;r<Ú(test_automagic_connection_close_handlingRs,ýúþ
 þû
 
r…cCsÀtdœdd„}|ƒ}| ttdgd¡|jD]}|jr<t‚|jr.t‚q.|ƒ}| ttddgd¡|jD]}|jrxt‚|jrjt‚qj|ƒ}| t    t
dd    ¡|jD]}|jr°t‚|jr¢t‚q¢dS)
Nr(c    Ss\tƒ}| ttdddddgd¡|jD]}|js(t‚q(|jtjrHt‚|jt    jsXt‚|S)Nr*r+rGr)ZExpectz 100-continuer-)
r%rfrrrgÚ"client_is_waiting_for_100_continuer:rdÚ!they_are_waiting_for_100_continuerr„r;r;r<Úsetupss"ýýþ
 z test_100_continue.<locals>.setuprJr7r6rArXrY) r%rfrrrgr†r:r‡rrr©rˆrlrdr;r;r<Útest_100_continuers&
 
  ÿ
 
 
 
rŠc    Csttƒ}| d¡| ¡tks"t‚t t¡| d¡| ¡q.W5QRXttdd}| d¡| d¡| d¡t    |ƒt
dd    d
d gd t ƒgksšt‚ttd d}| d¡| d¡t t¡| ¡W5QRXttdd}| d¡| ddd¡t    |ƒt
dd    d
dgd t dddt ƒgks2t‚ttdd}| d¡t    |ƒt
dddgdt ƒgkslt‚| d¡|  tdgd¡|  t ƒ¡| ¡t    |ƒt
dddgdt ƒgksÀt‚|  tdgd¡|  t ƒ¡| ¡t t¡| ¡W5QRXdS)NsGET / HTTP/1.0
Endless: saaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaiˆ)Zmax_incomplete_event_sizesGET / HTTP/1.0
Big: s aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaas
 
r*r+r3)ÚbigA aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa)r.r/r5r0i s%GET / HTTP/1.0
Content-Length: 10000óai')r@Z10000rYrJs GET /1 HTTP/1.1
Host: a
 
GET /2 HTTP/1.1
Host: b
 
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXú/1)ÚhostÚar-sèXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXr6r7ú/2)rŽÚb)r rrvrwr r:rarbr"r&rrrrfrÚstart_next_cycler{r;r;r<Ú-test_max_incomplete_event_size_countermeasureŸst
 
 
 
 
ÿü
 
 
 
ü ø ÿþ 
 þ   r“cCs¨tƒ}| ttdddgdtƒg¡| ttddgdtƒg¡|jD]"}|jtt    tt    iks`t
‚|  ¡qF| ttdd    dgdtƒg¡| ttd
dgdtƒg¡dS) Nr*r+©r,rr-r6©stransfer-encodingschunkedr7ÚDELETEú/fooé”) r%rfrrrrrrgrhrr:r’r„r;r;r<Útest_reuse_simpleës4þ þþ
 
þþ þþr™c    Csttƒ}| ¡tkst‚| d¡t|ƒtddddgdtddt    ƒgksNt‚|j
t ks\t‚|j t ksjt‚| ¡tkszt‚| td    gd
¡| t    ƒ¡|j
t ks¦t‚|j t ks´t‚| ¡t|ƒtdd ddgdtd dt    ƒgksèt‚| ¡tksøt‚| td    gd
¡| t    ƒ¡| ¡t|ƒtdd dgdt    ƒgksBt‚| ¡tksTt‚| td    gd
¡| t    ƒ¡| ¡tks„t‚| d¡| ¡tks t‚|jdks°t‚| d¡|jdksÊt‚| ¡tksÜt‚| d¡| ¡tksøt‚t t¡| d¡W5QRXdS)NsGET /1 HTTP/1.1
Host: a.com
Content-Length: 5
 
12345GET /2 HTTP/1.1
Host: a.com
Content-Length: 5
 
67890GET /3 HTTP/1.1
Host: a.com
 
r*r)r,úa.com)r@Ú5r-rXrYr6r7rr[z/3óSADF)rœFr^)rœTsFDSA)r rrwr r:rvr&rrrrjrrirrrfrr’Ú trailing_datararbÚ RuntimeErrorr{r;r;r<Útest_pipelining sjÿýù
     ýù
     þ  
 
 
 rŸc
sXtddddgdtddgdtd    dgdftd
d ddd gdtd    dgdtd dgdftddddd gdtddgdtd    dgdftddddd gdtddgdtd dgdffD]ž\‰}}tdœ‡fdd„ }|ƒ}| t|¡|jD]}|jtt    tt
iksèt ‚qè| tt ƒ¡|jD]}|  ¡q|ƒ}| t|¡|jD]f}|jttttiks\t ‚| d¡| ¡tksxt ‚| d¡| ¡tks”t ‚|jdks@t ‚q@|ƒ}|jt}| d¡| ¡tksÔt ‚|jdksät ‚| |¡| ¡tkst ‚| t ƒ¡|  ¡t|ƒtd
d gddt ƒgks8t ‚|ƒ}|jt}| d¡| ¡tksdt ‚|jdkstt ‚| t|¡| ¡tks’t ‚|ƒ}|jt}| d¡| ¡tks¾t ‚| |¡| ¡tƒksÜt ‚|ƒ}t t¡"|jt td
d dgd¡W5QRX|ƒ}| t|¡t t¡|jt tdd¡W5QRXq²dS)NZCONNECTzexample.com:443)r,Zfoo)r@Ú1r-r˜r•r7r6r*r+)ÚUpgradeza, bée)r¡r)r¡r‘r(cs€tƒ}| tˆ¡|jD]}|jttkst‚q| ttddtƒg¡|jD]}|jtt    ksNt‚qN|j
t   ¡t ks|t‚|S)Nr`rY)r%rfrrgrhrr:rrrrdrrwrr„©rIr;r<rˆ~s 
 
z#test_protocol_switch.<locals>.setupó123s456)s123456Fr~)r~Fr3r4r^)r^Tr”rY)rrrr%rfrrgrhrrrr:rr’r rvrwrrrdr&rrarbr!r)ZdenyÚacceptrˆrlrdZscr;r£r<Útest_protocol_switchTsªý  ù
ý  ù
ý  ø ý  øã) 
 
 
 
 
 
 
 
 þ 
 
 
 
 
 
ÿ  r¦c
s4ttfttffD]\‰‰tdœ‡‡fdd„ }|ƒ}|jˆ ¡tƒksLt‚|jˆ ¡tƒksdt‚|jˆ d¡|jˆ ¡tƒksŒt‚|ƒ}| ˆtƒ¡|j    D] }|j
t ks¸t‚|j t ks¦t‚q¦|ƒ}t  t¡|jˆ d¡W5QRX|ƒ}|jˆ d¡t  t¡|jˆ ¡W5QRXqdS)Nr(cs:tƒ}| ˆtƒ¡|jD]}|jˆtˆtikst‚q|S©N)r%rfrrgrhrrr:r„©Zwho_shot_firstZwho_shot_secondr;r<rˆÖs
þ z test_close_simple.<locals>.setupr^r¤rL)rrr%rdrwrr:rvrfrgrirrjrarbržr"r‰r;r¨r<Útest_close_simpleÑs& 
  r©c    Cs8tdddgdtƒg}tddgdtƒg}tƒ}| ttƒ¡|jD]}|jtt    t
t iksDt ‚qDtƒ}| t|¡| ttƒ¡|jD]}|jtt    t
t iks†t ‚q†tƒ}| t|¡t t¡|jt
 tƒ¡W5QRX|jt d¡t t¡|jt ¡W5QRXtƒ}| t|¡| t
|¡| t
tƒ¡|jD]}|jtt t
t    iksBt ‚qBtƒ}| t|¡| t
|¡| ttƒ¡| t
tƒ¡| ttƒ¡| t
tƒ¡tƒ}| ttdd    dd
gd¡t t¡|jt tƒ¡W5QRX|jt
 d¡t t¡|jt
 ¡W5QRXdS) Nr*r—r”r-r6r•r7r^r+rU)rrrr%rfrrrgrhrrrr:rrarbr!rdrvr"rw)rIrFrlrdr;r;r<Útest_close_different_statesúsbþ þ
 
 
  ÿþ  rªcCs6ttƒ}| d¡| d¡t|ƒtddddgdtdd    tƒgksHt‚|jt    t
ksZt‚|  t d
gd ¡|  tƒ¡|jtt
ksŠt‚|  ¡t|ƒtdd ddgdtd d    tƒtƒgksÂt‚|jt    tttiksØt‚|  t d
gd ¡|  tƒ¡|jt    tttikst‚|  tƒ¡|jt    tttiks2t‚dS)NspGET /1 HTTP/1.1
Host: a.com
Content-Length: 5
 
12345GET /2 HTTP/1.1
Host: a.com
Content-Length: 5
 
67890r^r*r)rŽrš)rNr›r-rXrYr6r7rr[)r rrvr&rrrr:rhrrrfrr’rrrrr{r;r;r<Útest_pipelined_close<sFÿ
ýù
     ýø
 
  r«csÒGdd„dƒ}|ƒ‰tttfttttttfdœ‡fdd„ }|ddƒ\}}|ˆgks^t‚| tƒ¡|ddƒ\}}ˆ|ks„t‚d    ||     ˆ¡<d
 
|¡d ks¤t‚|dd ƒ\}}|ˆgksÀt‚|j t ksÎt‚dS) Nc@seZdZedœdd„ZdS)z*test_sendfile.<locals>.SendfilePlaceholderr(cSsdS)Né
r;)Úselfr;r;r<Ú__len__hsz2test_sendfile.<locals>.SendfilePlaceholder.__len__N)Ú__name__Ú
__module__Ú __qualname__rOr®r;r;r;r<ÚSendfilePlaceholdergsr²)Úheaderr5r)csVttƒ}t|d |¡ d¡ƒg}|r0| |¡| td|d¡|| t    ˆd¡fS)NzGET / HTTP/{}
Host: a
 
Úasciir6r7rY)
r rr'ÚformatÚencoderCrfrZsend_with_data_passthroughr)r³r5r|r0©Ú placeholderr;r<rˆmsÿ
ztest_sendfile.<locals>.setuprUz1.1rAs
xxxxxxxxxxr^sa
xxxxxxxxxx
r3) rrDr rrÚbytesr:rfrÚindexÚjoinrir)r²rˆr|rZÚ_r;r·r<Ú test_sendfilefs 
þ   r½c
CsttfD]ž}t|d}| d¡t t¡| ¡W5QRX|jt    ksLt
‚|j t    k    sZt
‚t |j jƒt t¡| ¡W5QRX|tkr| tdgd¡dkst
‚qtttdœdd„}ttfD]4}|tkrötd    d
d gd }td    d
d gd d}n$|tkrtdgd}tdgd d}||ƒ}| |¡|j t    k    s<t
‚||ƒ}t t¡| |¡W5QRX|j t    kstt
‚|jt    k    s„t
‚t t¡| |¡W5QRX||ƒ}| ¡|j t    ksÄt
‚|jt    k    sÔt
‚| ¡|j t    ksìt
‚|jt    k    sÄt
‚qÄdS)Nrps gibberish
 
ir7s$HTTP/1.1 400 
Connection: close
 
)Úroler)cSs.t|d}|tkr*t|dƒ|jtks*t‚|S)Nrpr~)r rr'rirr:©r¾r|r;r;r<rd¡s
 
 
ztest_errors.<locals>.connr*r+rGr-r3r4r6r9)rrr rvrarbr"rwrjrr:riÚprintZ_cstaterhrfrrr#rr!Z send_failed)r¾r|rdZgoodÚbadr;r;r<Ú test_errorsŠsZ 
 
   ÿÿü
 
  rÂcCs*ttfD]}t|ƒ}| ¡tkst‚qdSr§)rrr rwr r:r¿r;r;r<Útest_idle_receive_nothingÐs rÃc    CsNttƒ}| d¡| ¡tks"t‚| d¡t t¡| ¡W5QRXdS)NsGET /r^)    r rrvrwr r:rarbr"r{r;r;r<Útest_connection_drop×s 
 
 rÄcCs tƒ}| ttddgd¡dS)Ni˜)s
connectionscloser7)r%rfrr)rlr;r;r<Útest_408_request_timeoutàsrÅc    Cs4ttƒ}| d¡t t¡| ¡W5QRXdS)Nru©r rrvrarbr"rwr{r;r;r<Útest_empty_requestès
 rÇc    CsJttƒ}| tdddgd¡| d¡t t¡| ¡W5QRXdS)Nr*r+r”r-ru)    r rrfrrvrarbr"rwr{r;r;r<Útest_empty_responseðs
 
 rÈrZóó s¥)rZr)c    Cs4ttƒ}| |¡t t¡| ¡W5QRXdSr§rÆ©rZr|r;r;r<Ú'test_early_detection_of_invalid_requestøs    
 rÌs1c    Cs4ttƒ}| |¡t t¡| ¡W5QRXdSr§)r rrvrarbr"rwrËr;r;r<Ú(test_early_detection_of_invalid_responses    
 rÍcCstttdœdd„}dD]t}||dƒ}| tdgd¡dks>t‚||d    ƒ}| tdgd¡d
ksbt‚||dƒ}| tdd d gd¡dkst‚qdS) N)r.r5r)cSsNttƒ}| |d|dd¡t| ¡ƒtks6t‚t| ¡ƒtksJt‚|S)Ns / HTTP/rusHost: example.com
 
)r rrvÚtyperwrr:r)r.r5r|r;r;r<rˆsÿz(test_HEAD_framing_headers.<locals>.setup)rLrKrWr6r7s-HTTP/1.1 200 
Transfer-Encoding: chunked
 
s1.0rrrA)r¹r rfrr:)rˆr.r|r;r;r<Útest_HEAD_framing_headerss(    
ÿ
ÿ
þþÿ    ÷ÿrÏc    Cs4ttƒ}| d¡t| ¡ƒtks&t‚| ¡tks6t‚| d¡| ¡tddksVt‚| d¡t     
t ¡}| ¡W5QRXdt |j ƒkst‚dt |j ƒks¢t‚ttƒ}| d¡t| ¡ƒtksÈt‚| ¡tksØt‚| d¡| ¡jd    ksôt‚| d¡t     
t ¡}| ¡W5QRXd
t |j ƒks0t‚dS) Ns;POST / HTTP/1.1
Host: example.com
Content-Length: 100
 
rXrYr^zreceived 5 bytesz expected 100rqs    8
012345s012345zincomplete chunked read)r rrvrÎrwrr:r rrarbr"rDÚvaluerZ)r|Úexcinfor;r;r<Ú;test_special_exceptions_for_lost_connection_in_message_bodyFs2ÿ
 
 ÿ
 
 rÒ)JÚtypingrrrrrrrraÚ _connectionr
r r r rZ_eventsrrrrrrrÚ_staterrrrrrrrrrr Z_utilr!r"r#Zhelpersr%r&r'r=rTrmroryr}r€r‚r…rŠr“r™rŸr¦r©rªr«r½rÂrÃrÄrÅrÇrÈÚmarkZ parametrizer¹rÌrÍrÏrÒr;r;r;r<Ú<module>s`$$    4 ,C'%* -L!H})B*$F    ýþýþ *