+
    Bi                        ^ RI Ht ^ RIHtHtHtHtHt ^ RIH	t	H
t
 ^ RIt^ RIt^ RIt^ RIt^ RIt^ RIt^ RIt^ RIt^ RIt^ RIt^ RIt^ RIt^ RIt^ RIt^ RIt^ RIt^ RIt^ RIt^ RIHt ^ RI H!t!H"t" ^ RIt^ RI#H$t$ ^ RI%H&t&H't'H(t(H)t)H*t*  ^ RI+t+]$PZ                  ! R	R
7        ! R R4      t. ! R R].]4      t/R:RR;R]//R llt0 ! R R]Pb                  4      t2 ! R R]Pf                  4      t4 ! R R]Pb                  4      t5 ! R R]54      t6R t7]Pp                  ! ]+RJ R4       ! R R]54      4       t9 ! R R]54      t: ! R  R!]54      t;R"t<R#t=R$t>R%t?]Pp                  ! ]@! ]R&4      ;'       d    ]P                  ! 4       ^ 8H  R'4      ])! 4        ! R( R)]54      4       4       tB ! R* R+]4      tC ! R, R-]C4      tD ! R. R/4      tE ! R0 R1]Pb                  4      tF ! R2 R3]Pb                  4      tG ! R4 R5]Pb                  4      tH ! R6 R7]Pb                  4      tIR8 tJ]KR98X  d   ]P                  ! 4        R# R#   ], d    Rt+ ELi ; i)<    )OrderedDict)BaseHTTPRequestHandler
HTTPServerHTTPSServerSimpleHTTPRequestHandlerCGIHTTPRequestHandler)server
HTTPStatusN)mock)BytesIOStringIO)support)is_appleimport_helper	os_helperrequires_subprocessthreading_helperT)modulec                   0   a  ] tR t^,t o R tRR ltRtV tR# )NoLogRequestHandlerc                    R # N )selfargss   &*,/usr/lib/python3.14/test/test_httpservers.pylog_messageNoLogRequestHandler.log_message-   s        Nc                    R # ) r   )r   ns   &&r   readNoLogRequestHandler.read1   s    r   r   r   )__name__
__module____qualname____firstlineno__r   r#   __static_attributes____classdictcell____classdict__s   @r   r   r   ,   s      r   r   c                       ] tR t^5tRtR# )DummyRequestHandlerr   Nr%   r&   r'   r(   r)   r   r   r   r.   r.   5   s    r   r.   addressrequest_handlerc                    \        W4WVR 7      # )certfilekeyfilepassword)r   )r4   r5   r6   r0   r1   s   &&&$$r   create_https_serverr7   9   s     X r   c                   &   a  ] tR t^Gt o R tRtV tR# )TestSSLDisabledc           	     >   \         P                  ! 4       ;_uu_ 4        R \        P                  R&   \	        R4      pV P                  \        4      ;_uu_ 4        \        V4       R R R 4       R R R 4       R #   + '       g   i     L; i  + '       g   i     R # ; i)Nsslkeycert.pem)r   isolated_modulessysmodulescertdata_fileassertRaisesRuntimeErrorr7   )r   r4   s   & r   &test_https_server_raises_runtime_error6TestSSLDisabled.test_https_server_raises_runtime_errorH   sd    ++--!%CKK$]3H""<00#H- 1 .- 10 .--s#   <BA8	&B8BBB	r   N)r%   r&   r'   r(   rC   r)   r*   r+   s   @r   r9   r9   G   s     . .r   r9   c                   6   a  ] tR t^Pt o RR ltR tR tRtV tR# )TestServerThreadNc                h    \         P                  P                  V 4       W n        Wn        W0n        R # r   )	threadingThread__init__r1   test_objecttls)r   rK   r1   rL   s   &&&&r   rJ   TestServerThread.__init__Q   s'    !!$'.&r   c                D   V P                   '       d.   V P                   w  rp\        WVV P                  R 7      V n        M\	        RV P                  4      V n        V P                  P
                  P                  4       w  V P                  n        V P                  n	        V P                  P                  P                  4        RV n         V P                  P                  R4       V P                  P                  4        R#   T P                  P                  4        i ; i))r1   Ng?	localhostr   )rL   r7   r1   r	   r   socketgetsocknamerK   HOSTPORTserver_startedsetserve_foreverserver_close)r   r4   r5   r6   s   &   r   runTestServerThread.runW   s    888*.(('Hx-8 $ 4 4DK
 %%5t7K7KLDK7;{{7I7I7U7U7W4t//4''++-	'KK%%d+KK$$&DKK$$&s   D Dc                Z    V P                   P                  4        V P                  4        R # r   )r	   shutdownjoinr   s   &r   stopTestServerThread.stoph   s    		r   )r1   r	   rK   rL   r   )	r%   r&   r'   r(   rJ   rY   r_   r)   r*   r+   s   @r   rF   rF   P   s     '" r   rF   c                   @   a  ] tR t^mt o RtR tR tRR/ 3R ltRtV t	R# )BaseTestCaseNc                \   \         P                  ! 4       V n        \        P                  ! 4       \
        n        \        P                  ! 4       V n	        \        W P                  V P                  4      V n        V P                  P                  4        V P                  P                  4        R # r   )r   threading_setup_threadsr   EnvironmentVarGuardosenvironrH   EventrU   rF   r1   rL   threadstartwaitr^   s   &r   setUpBaseTestCase.setUpr   sk    (88:224
'oo/&t-A-A488L  "r   c                    V P                   P                  4        R V n         \        P                  P	                  4        \
        P                  ! V P                  !   R # r   )rj   r_   rg   rh   __exit__r   threading_cleanupre   r^   s   &r   tearDownBaseTestCase.tearDownz   s;    


**DMM:r   GETc                    \         P                  P                  V P                  V P                  4      V n        V P
                  P                  W!W44       V P
                  P                  4       # r   )httpclientHTTPConnectionrS   rT   
connectionrequestgetresponse)r   urimethodbodyheaderss   &&&&&r   rz   BaseTestCase.request   sI    ++44TYY		JT;**,,r   )re   ry   rU   rj   )
r%   r&   r'   r(   rL   rm   rr   rz   r)   r*   r+   s   @r   rb   rb   m   s)      C#; #(dB - -r   rb   c                      a  ] tR t^t o  ! R R]]4      tR tR tR t	R t
R tR tR	 tR
 tR tR tR tR tR tR tR tR tR tR tR tR tR tR tR tRtV tR# )BaseHTTPServerTestCasec                   ^   a  ] tR t^t o RtRtR tR tR tR t	R t
R tR tR	 tR
 tRtV tR# )&BaseHTTPServerTestCase.request_handlerHTTP/1.1c                    V P                  \        P                  4       V P                  R R4       V P                  RR4       V P	                  4        R# )Content-Type	text/html
ConnectioncloseNsend_responser
   
NO_CONTENTsend_headerend_headersr^   s   &r   do_TEST.BaseHTTPServerTestCase.request_handler.do_TEST   sB    z445^[9\73r   c                    V P                  \        P                  4       V P                  R R4       V P                  RR4       V P	                  4        R# )r   r   r   
keep-aliveNr   r^   s   &r   do_KEEP.BaseHTTPServerTestCase.request_handler.do_KEEP   sB    z445^[9\<8r   c                (    V P                  R 4       R# )  N
send_errorr^   s   &r   do_KEYERROR2BaseHTTPServerTestCase.request_handler.do_KEYERROR   s    OOC r   c                D    V P                  \        P                  4       R # r   r   r
   	NOT_FOUNDr^   s   &r   do_NOTFOUND2BaseHTTPServerTestCase.request_handler.do_NOTFOUND   s    OOJ001r   c                ,    V P                  R RR4       R# )r   zShort MessagezThis is a long 
 explanationNr   r^   s   &r   do_EXPLAINERROR6BaseHTTPServerTestCase.request_handler.do_EXPLAINERROR   s    OOC;=r   c                    V P                  R 4       V P                  RR4       V P                  RR4       V P                  4        R# )r   r   r   r   r   N)r   r   r   r^   s   &r   	do_CUSTOM0BaseHTTPServerTestCase.request_handler.do_CUSTOM   s<    s#^[9\73r   c                
   V P                  R 4       V P                  RR4       V P                  RR4       V P                  4        V P                  R,          P	                  R4      pV P
                  P                  V4       R# )r   	X-Special   Dängerous Mindr   r   zx-special-incomingutf-8N)r   r   r   r   encodewfilewrite)r   r~   s   & r   do_LATINONEHEADER8BaseHTTPServerTestCase.request_handler.do_LATINONEHEADER   si    s#[*;<\73<< 45<<WEDJJT"r   c                \    V P                  \        V P                  R ,          4      4       R# :   NNNr   intpathr^   s   &r   do_SEND_ERROR4BaseHTTPServerTestCase.request_handler.do_SEND_ERROR       OOC		"./r   c                \    V P                  \        V P                  R ,          4      4       R# r   r   r^   s   &r   do_HEAD.BaseHTTPServerTestCase.request_handler.do_HEAD   r   r   r   N)r%   r&   r'   r(   protocol_versiondefault_request_versionr   r   r   r   r   r   r   r   r   r)   r*   r+   s   @r   r1   r      sC     %",			!	2	=		#	0	0 	0r   r1   c                    \         P                  V 4       \        P                  P	                  V P
                  V P                  4      V n        V P                  P                  4        R # r   )	rb   rm   rv   rw   rx   rS   rT   conconnectr^   s   &r   rm   BaseHTTPServerTestCase.setUp   s@    4 ;;--diiCr   c                    V P                   P                  R R4       V P                   P                  4       pV P                  VP                  \
        P                  4       R# )rt   /N)r   rz   r{   assertEqualstatusr
   NOT_IMPLEMENTEDr   ress   & r   test_command#BaseHTTPServerTestCase.test_command   sB    $hh""$Z%?%?@r   c                   R V P                   n        V P                   P                  RR4       V P                   P                  4        V P                   P	                  4       pV P                  VP                  \        P                  4       R# )z	HTTP/1.1
XYZBOGUSr   N	r   _http_vsn_str
putrequest
endheadersr{   r   r   r
   r   r   s   & r   test_request_line_trimming1BaseHTTPServerTestCase.test_request_line_trimming   s^    !-J,hh""$Z%?%?@r   c                   R V P                   n        V P                   P                  RR4       V P                   P                  4        V P                   P	                  4       pV P                  VP                  \        P                  4       R# )FUBARrt   r   N	r   r   r   r   r{   r   r   r
   BAD_REQUESTr   s   & r   test_version_bogus)BaseHTTPServerTestCase.test_version_bogus   s^    !(E3'hh""$Z%;%;<r   c                   R V P                   n        V P                   P                  RR4       V P                   P                  4        V P                   P	                  4       pV P                  VP                  \        P                  4       R# )z
HTTP/9.9.9rt   r   Nr   r   s   & r   test_version_digits*BaseHTTPServerTestCase.test_version_digits   s^    !-E3'hh""$Z%;%;<r   c                   R V P                   n        V P                   P                  RR4       V P                   P                  4        V P                   P	                  4       pV P                  VP                  \        P                  4       R# )zHTTP/-9_9_9.+9_9_9rt   r   Nr   r   s   & r   "test_version_signs_and_underscores9BaseHTTPServerTestCase.test_version_signs_and_underscores   s^    !5E3'hh""$Z%;%;<r   c                   R V P                   n        V P                   P                  RR4       V P                   P                  4        V P                   P	                  4       pV P                  VP                  \        P                  4       R# )zHTTP/909876543210.0rt   r   Nr   r   s   & r   "test_major_version_number_too_long9BaseHTTPServerTestCase.test_major_version_number_too_long   ^    !6E3'hh""$Z%;%;<r   c                   R V P                   n        V P                   P                  RR4       V P                   P                  4        V P                   P	                  4       pV P                  VP                  \        P                  4       R# )zHTTP/1.909876543210rt   r   Nr   r   s   & r   "test_minor_version_number_too_long9BaseHTTPServerTestCase.test_minor_version_number_too_long   r   r   c                   R V P                   n        V P                   P                  RR4       V P                   P                  4        V P                   P	                  4       pV P                  VP                  \        P                  4       R# )r!   rt   r   Nr   r   s   & r   test_version_none_get,BaseHTTPServerTestCase.test_version_none_get   s^    !#E3'hh""$Z%?%?@r   c                   R V P                   n        V P                   P                  RR4       V P                   P                  4        V P                   P	                  4       pV P                  VP                  \        P                  4       R# )r!   CUSTOMr   Nr   r   s   & r   test_version_none(BaseHTTPServerTestCase.test_version_none   s^    !#Hc*hh""$Z%;%;<r   c                >   ^cV P                   n        RV P                   n        V P                   P                  RR4       V P                   P	                  4        V P                   P                  4       pV P                  VP                  \        P                  4       R# )c   zHTTP/9.9rt   r   N)
r   	_http_vsnr   r   r   r{   r   r   r
   HTTP_VERSION_NOT_SUPPORTEDr   s   & r   test_version_invalid+BaseHTTPServerTestCase.test_version_invalid   sj    !+E3'hh""$Z%J%JKr   c                   R V P                   n        V P                   P                  R R 4       V P                   P                  4        V P                   P	                  4       pV P                  VP                  \        P                  4       R# )r!   Nr   r   s   & r   test_send_blank&BaseHTTPServerTestCase.test_send_blank   s^    !#B#hh""$Z%;%;<r   c                2   V P                   P                  R R4       V P                   P                  RR4       V P                   P                  4        V P                   P	                  4       pV P                  VP                  \        P                  4       R# )rt   r   r   r   N)	r   r   	putheaderr   r{   r   r   r
   r   r   s   & r   test_header_close(BaseHTTPServerTestCase.test_header_close  sf    E3'<1hh""$Z%?%?@r   c                T   R V P                   n        V P                   P                  RR4       V P                   P                  RR4       V P                   P	                  4        V P                   P                  4       pV P                  VP                  \        P                  4       R# )r   rt   r   r   r   N)
r   r   r   r   r   r{   r   r   r
   r   r   s   & r   test_header_keep_alive-BaseHTTPServerTestCase.test_header_keep_alive  sr    !+E3'<6hh""$Z%?%?@r   c                    V P                   P                  R R4       V P                   P                  4       pV P                  VP                  \
        P                  4       R# )TESTr   N)r   rz   r{   r   r   r
   r   r   s   & r   test_handler#BaseHTTPServerTestCase.test_handler  sB    %hh""$Z%:%:;r   c                6   V P                   P                  R R4       V P                   P                  4       pV P                  VP	                  R4      R4       V P                   P                  RR4       V P                  V P                   P                  4       R# )KEEPr   r   r   r   N)r   rz   r{   r   	getheader
addCleanupr   r   s   & r   test_return_header_keep_alive4BaseHTTPServerTestCase.test_return_header_keep_alive  si    %hh""$|4lC%'r   c                    V P                   P                  R R4       V P                   P                  4       pV P                  VP                  R4       R# )KEYERRORr   r   Nr   rz   r{   r   r   r   s   & r   test_internal_key_error.BaseHTTPServerTestCase.test_internal_key_error"  s<    S)hh""$S)r   c                    V P                   P                  R R4       V P                   P                  4       pV P                  VP                  R4       R# )r   r   r   Nr	  r   s   & r   test_return_custom_status0BaseHTTPServerTestCase.test_return_custom_status'  s<    3'hh""$S)r   c                    V P                   P                  R R4       V P                   P                  4       pV P                  VP                  R4       V P                  \        VP                  R4      4      4       R# )EXPLAINERRORr   r   Content-LengthN)r   rz   r{   r   r   
assertTruer   r  r   s   & r   test_return_explain_error0BaseHTTPServerTestCase.test_return_explain_error,  sW    -hh""$S)CMM*:;<=r   c                   V P                   P                  R RRR/R7       V P                   P                  4       pV P                  VP	                  R4      R4       V P                  VP                  4       RP                  R4      4       R# )	LATINONEHEADERr   zX-Special-Incomingu   Ärger mit Unicoder   r   r   r   N)r   rz   r{   r   r  r#   r   r   s   & r   test_latin1_header)BaseHTTPServerTestCase.test_latin1_header2  sw    )3 (<9
 	 hh""${35FG%9%@%@%IJr   c                L   V P                   P                  R R4       V P                   P                  4       pV P                  VP                  \
        P                  4       VP                  4       pV P                  \        VP                  R4      4      \        V4      4       R# )NOTFOUNDr   r  N)r   rz   r{   r   r   r
   r   r#   r   r  len)r   r   datas   &  r   test_error_content_length0BaseHTTPServerTestCase.test_error_content_length:  sp    S)hh""$Z%9%9:xxzS]]+;<=s4yIr   c                   \         P                  \         P                  3p\         P                  \         P                  \         P                  \         P                  \         P
                  3 F  pV P                  P                  R RP                  V4      4       V P                  P                  4       pV P                  W#P                  4       V P                  RVP                  R4      4       V P                  RVP                  R4      4       W!9  d"   V P                  RVP                  R4      4       VP                  4       pV P                  RV4       K  	  R# )
SEND_ERROR/{}Nr  r   Transfer-Encodingr   )r
   NOT_MODIFIEDRESET_CONTENTr   
PROCESSINGSWITCHING_PROTOCOLSr   rz   formatr{   r   r   r  r#   r   allow_transfer_encoding_codescoder   r  s   &    r   test_send_error&BaseHTTPServerTestCase.test_send_errorC  s   )3)@)@)3)A)A)C%**J,C,C**J,D,D335D HH\5<<+=>((&&(CT::.T3==1A#BCT3==#@A8  s}}5H'IJ88:DS$'5r   c                   \         P                  \         P                  3p\         P                  \         P                  \         P                  \         P                  \         P
                  3 EFR  pV P                  P                  R RP                  V4      4       V P                  P                  4       pV P                  W#P                  4       V\         P                  8X  dO   V P                  \        VP                  R4      4      ^ 8  4       V P                  RVP                  R4      4       MBV P                  RVP                  R4      4       V P                  RVP                  R4      4       W!9  d"   V P                  RVP                  R4      4       VP!                  4       pV P                  RV4       EKU  	  R# )HEADr"  r  r   r   Nr#  r   )r
   r$  r%  OKr   r'  r   rz   r(  r{   r   r   r  r   r  assertInr#   r)  s   &    r   test_head_via_send_error/BaseHTTPServerTestCase.test_head_via_send_errorT  sF   )3)@)@)3)A)A)C%]]J$9$9,,j.F.F335D HHVU\\$%78((&&(CT::.z}}$CMM2B$C Dq HIk3==+HI  s}}5E'FG  s}}^'DE8  s}}5H'IJ88:DS$'!5r   r   N) r%   r&   r'   r(   r   r   r1   rm   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r  r
  r  r  r  r  r,  r2  r)   r*   r+   s   @r   r   r      s     ,0-/E ,0\
A
A=====A=L=AA<
(*
*
>KJ("( (r   r   c                      \         P                  P                  ! \         P                  P                  \        4      R .V O5!  # )certdata)rg   r   r]   dirname__file__)r   s   *r   r@   r@   j  s)    77<<1:EEEr   zrequires sslc                      a  ] tR tRt o ]! R4      t]! R4      t]! R4      t]! R4      t]! R4      t	]! R4      t
]! R4      tR	tR
t]]R3t]tR tRR/ 3R ltR tR tRtV tR# )BaseHTTPSServerTestCasein  r<   zssl_cert.pemzssl_key.pemzkeycert.passwd.pemzssl_key.passwd.pemznullcert.pemzbadcert.pemsomepassbadpassNc                |    V P                  R 4      pV P                  VP                  \        P                  4       R# )r   N)rz   r   r   r
   r0  r   responses   & r   test_get BaseHTTPSServerTestCase.test_get~  s(    <<$*--8r   rt   c                   \         P                  ! 4       p\        P                  P	                  V P
                  V P                  VR 7      V n        V P                  P                  W!W44       V P                  P                  4       # ))context)
r;   _create_unverified_contextrv   rw   HTTPSConnectionrS   rT   ry   rz   r{   )r   r|   r}   r~   r   rC  s   &&&&& r   rz   BaseHTTPSServerTestCase.request  sc    002++55IItyy' 6 
 	T;**,,r   c                   V P                   R R 3V P                   V P                   R 3V P                  R V P                  3V P                  V P                  V P                  3.pV F]  w  r#pV P                  W#VR7      ;_uu_ 4        \        W#V4      pV P                  V\        4       VP                  ! 4        R R R 4       K_  	  R #   + '       g   i     Kt  ; iNr3   )
CERTFILECERTFILE_PROTECTEDKEY_PASSWORDONLYCERTONLYKEY_PROTECTEDsubTestr7   assertIsInstancer   rX   )r   valid_certdatar4   r5   r6   r	   s   &     r   test_valid_certdata+BaseHTTPSServerTestCase.test_valid_certdata  s    ]]D$']]DMM40$$dD,=,=>]]D22D4E4EF	
 ,:'Hx!X    -XI%%fk:##%  ,:  s   4CCc           
         V P                   R R 3V P                  R R 3V P                  R R 3V P                  R R 3V P                  V P                  R 3V P                  R V P
                  3.pV Ff  w  r#pV P                  W#VR7      ;_uu_ 4        V P                  \        P                  4      ;_uu_ 4        \        W#V4       R R R 4       R R R 4       Kh  	  R #   + '       g   i     L; i  + '       g   i     K  ; irH  )BADCERT	EMPTYCERTrL  ONLYKEYrJ  BADPASSWORDrN  rA   r;   SSLErrorr7   )r   invalid_certdatar4   r5   r6   s   &    r   test_invalid_certdata-BaseHTTPSServerTestCase.test_invalid_certdata  s    \\4&^^T4(]]D$'\\4&\\4==$/$$dD,<,<=
 ,<'Hx!X    &&s||44'8D 5  ,< 54  s$   (C,6CC,C)$C,,C=)ry   )r%   r&   r'   r(   r@   rI  rL  rV  rJ  rM  rU  rT  rK  rW  rL   r.   r1   r@  rz   rQ  rZ  r)   r*   r+   s   @r   r:  r:  n  s     ]+H^,HM*G&';<%&:;n-IM*GLKWd
#C)O9 #(dB -&E Er   r:  c                   B   a  ] tR tRt o  ! R R]4      tR tR tRtV t	R# )RequestHandlerLoggingTestCasei  c                   4   a  ] tR tRt o RtRtR tR tRtV t	R# )-RequestHandlerLoggingTestCase.request_handleri  r   c                d    V P                  \        P                  4       V P                  4        R # r   )r   r
   r0  r   r^   s   &r   do_GET4RequestHandlerLoggingTestCase.request_handler.do_GET  s     z}}-r   c                F    V P                  \        P                  R 4       R# )zFile not foundNr   r^   s   &r   do_ERROR6RequestHandlerLoggingTestCase.request_handler.do_ERROR  s    OOJ002BCr   r   N)
r%   r&   r'   r(   r   r   ra  rd  r)   r*   r+   s   @r   r1   r_    s"     %",		D 	Dr   r1   c                   \         P                  P                  V P                  V P                  4      V n        V P
                  P                  4        \        P                  ! 4       ;_uu_ 4       pV P
                  P                  R R4       V P
                  P                  4        RRR4       V P                  XP                  4       R4       R#   + '       g   i     L2; i)rt   r   Nz"GET / HTTP/1.1" 200 -
)rv   rw   rx   rS   rT   r   r   r   captured_stderrrz   r{   assertEndsWithgetvalue)r   errs   & r   r@  &RequestHandlerLoggingTestCase.test_get  s    ;;--diiC$$&&#HHUC(HH  " ' 	CLLN,FG	 '&s   17CC"	c                ,   \         P                  P                  V P                  V P                  4      V n        V P
                  P                  4        \        P                  ! 4       ;_uu_ 4       pV P
                  P                  R R4       V P
                  P                  4        RRR4       XP                  4       P                  R4      pV P                  V^ ,          R4       V P                  V^,          R4       R#   + '       g   i     Lc; i)ERRORr   N
z code 404, message File not foundz"ERROR / HTTP/1.1" 404 -)rv   rw   rx   rS   rT   r   r   r   rg  rz   r{   ri  splitrh  )r   rj  liness   &  r   test_err&RequestHandlerLoggingTestCase.test_err  s    ;;--diiC$$&&#HHWc*HH  " ' $$T*E!H&HIE!H&@A '&s   17DD	r4  N)
r%   r&   r'   r(   r   r1   r@  rq  r)   r*   r+   s   @r   r]  r]    s&     	D0 	DH
B 
Br   r]  c                   F  a a ] tR tRt o ! R R]]4      tV 3R ltV 3R ltR#R lt	R#R lt
R t]P                  ! ]P                  R	4      R
 4       t]P                  ! ]P                  R	4      R 4       t]P$                  ! ]R4      ]P$                  ! ]P*                  R8H  R4      ]P                  ! ]P,                  R4      R 4       4       4       t]P$                  ! ]R4      ]P$                  ! ]P*                  R8H  R4      ]P                  ! ]P,                  R4      R 4       4       4       tR t]P                  ! ]P4                  R4      R 4       t]P                  ! ]P4                  R4      R 4       tR tR tR tR t R t!R t"R t#R t$R t%R t&R  t'R! t(R"t)Vt*V ;t+# )$SimpleHTTPServerTestCasei  c                       ] tR tRtRtR# )(SimpleHTTPServerTestCase.request_handleri  r   Nr/   r   r   r   r1   rv    s    r   r1   c                  < \         SV `  4        \        P                  ! 4       V n        \
        P                  ! 4       p\        P                  ! V4       R V n        \
        P                  ! VR7      V n
        \        P                  P                  V P                  4      V n        RV P                  ,           V n        \        P                  P                  V P                  R4      p\!        VR4      ;_uu_ 4       pVP#                  V P                  4       VP%                  4        RRR4       \        P&                  ! V4      P(                  p\*        P*                  P-                  V\*        P.                  P0                  4      pVP3                  ^ R7      V n        \6        P8                  P;                  VP=                  4       RR7      V n        R#   + '       g   i     L; i)	s   We are the knights who say Ni!)dirr   testwbN)microsecondTusegmt) superrm   rg   getcwdcwdtempfile
gettempdirchdirr  mkdtemptempdirr   basenametempdir_namebase_urlr]   openr   flushstatst_mtimedatetimefromtimestamptimezoneutcreplacelast_modif_datetimeemailutils
formatdate	timestamplast_modif_header)r   basetempdirtempnametempmtime
last_modif	__class__s   &     r   rm   SimpleHTTPServerTestCase.setUp  sD   99;))+
5	''K8GG,,T\\:d///77<<f5(D!!TJJtyy!JJL " !**&&44U!!#
#-#5#5!#5#D !&!7!7  "4 "8 "1 "!s   <,GG%	c                   <  \         P                  ! V P                  4        \        P                  ! V P
                  4       \        ST `  4        R #     L; i  \        ST `  4        i ; ir   )rg   r  r  shutilrmtreer  r~  rr   )r   r  s   &r   rr   !SimpleHTTPServerTestCase.tearDown  sP    	HHTXXdll+ GGs    A  A AA A+c                   aa VV3R  lpRoVSn         SP                  4       pV P                  S4       V P                  SP                  V4       V P                  SP                  4       V'       d   V P                  W54       V P                  SP                  ^
4       V P                  SP                  P                  RR4      R4       V P                  SP                  ^4      RR4       SP                  4        V# )c                  .   < SP                   o R Sn         R # r   )fp)readerr?  s   r   
close_connDSimpleHTTPServerTestCase.check_status_and_reason.<locals>.close_conn  s     [[FHKr   Nr   r   r   zConnection should be closed)_close_connr#   r  r   r   assertIsNotNonereasonversionmsggetr   )r   r?  r   r  r  r~   r  s   &f&&  @r   check_status_and_reason0SimpleHTTPServerTestCase.check_status_and_reason  s    	 )}}!&1X__-T( 	))2.)),@'JR#/LMr   c                (   \         P                  P                  V P                  V4      p \         P                  ! \         P                  P                  V P                  V4      4       Vf"   \        P                  P                  VRR7      pV P                  V P                  R,           V,           R,           4      pV P                  V\        P                  4      p\         P"                  ! V P                   RV R2RR7      p\$        P&                  ! 4       pRV R	2P)                  VR
4      pV P+                  VR,           V4       V P+                  VR,           V4       R#   \
        \        3 d    T P                  R T: R24        EL&i ; i)zCan not create directory  on current file systemNsurrogatepasserrorsr   Fquotelisting for z</surrogateescape   title>   h1>)rg   r   r]   r  mkdirOSErrorUnicodeEncodeErrorskipTesturllibparser  rz   r  r  r
   r0  htmlescaper>   getfilesystemencodingr   r1  )	r   r7  
quotednamefullpathr?  r~   displaypathencprefixs	   &&&      r   check_list_dir_dirname/SimpleHTTPServerTestCase.check_list_dir_dirname  s;   77<<g6	5HHRWW\\$,,89
 ++GO+LJ<< 3j @3 FG++HjmmDkkT]]O1WIQ"?uM'')}B/66s<MNfy($/fvot, +, 	5MM5g[ A3 4 5	5s   >E& &'FFc                   \         P                  P                  V P                  V4      p\	        V4      P                  4       \        P                  ;'       g    R ,           p \        VR4      ;_uu_ 4       pVP                  V4       RRR4       T P                  T P                  R,           4      pT P                  T\        P                   4      p\"        P$                  P'                  TRR7      pTP(                  P+                  4       pT P-                  T4       T P/                  RT R	2P                  R
4      T4       \0        P2                  ! TRR7      p	T P/                  RT	 R2P                  TR4      T4       T P                  T P                  R,           T,           4      pT P                  T\        P                   TR7       R#   + '       g   i     ELO; i  \         d    T P                  RT: R24        ELvi ; i)   rz  NzCan not create file r  r   r  r  zhref=""asciiFr  ><r  r  )rg   r   r]   r  r  r   r   TESTFN_UNDECODABLEr  r   r  r  rz   r  r  r
   r0  r  r  r  r   get_content_charsetr  r1  r  r  )
r   filenamer  contentfr?  r~   r  r  displaynames
   &&        r   check_list_dir_filename0SimpleHTTPServerTestCase.check_list_dir_filename  s   77<<h7/((*i.J.J.U.UgV	5h%%  & << 34++HjmmD\\'''I
224S!
|1-55g>Ekk(%8+a(//5FGN<< 3j @A$$Xz}}7$K! &%% 	5MM0 =3 4 5	5s0   $G$ 8G
G$ G!	G$ !G$ $!H	H	zneed os_helper.TESTFN_NONASCIIc                V    \         P                  R ,           pV P                  V4       R# .dirN)r   TESTFN_NONASCIIr  r   r7  s   & r   test_list_dir_nonascii_dirname7SimpleHTTPServerTestCase.test_list_dir_nonascii_dirname5  s"     ++f4##G,r   c                V    \         P                  R ,           pV P                  V4       R# .txtN)r   r  r  r   r  s   & r   test_list_dir_nonascii_filename8SimpleHTTPServerTestCase.test_list_dir_nonascii_filename;  s"     ,,v5$$X.r   z<undecodable name cannot always be decoded on Apple platformswin32z+undecodable name cannot be decoded on win32z!need os_helper.TESTFN_UNDECODABLEc                ~    \         P                  ! \        P                  4      R ,           pV P	                  V4       R# r  )rg   fsdecoder   r  r  r  s   & r   !test_list_dir_undecodable_dirname:SimpleHTTPServerTestCase.test_list_dir_undecodable_dirnameA  s+     ++i::;fD##G,r   c                ~    \         P                  ! \        P                  4      R ,           pV P	                  V4       R# r  )rg   r  r   r  r  r  s   & r   "test_list_dir_undecodable_filename;SimpleHTTPServerTestCase.test_list_dir_undecodable_filenameK  s+     ;;y;;<vE$$X.r   c                0    R pV P                  VRR7       R# )u   �.dirz%ff.dirr  N)r  r  s   & r   "test_list_dir_undecodable_dirname2;SimpleHTTPServerTestCase.test_list_dir_undecodable_dirname2U  s    ##G	#Br   z!need os_helper.TESTFN_UNENCODABLEc                V    \         P                  R ,           pV P                  V4       R# r  )r   TESTFN_UNENCODABLEr  r  s   & r   !test_list_dir_unencodable_dirname:SimpleHTTPServerTestCase.test_list_dir_unencodable_dirnameY  s"     ..7##G,r   c                V    \         P                  R ,           pV P                  V4       R# r  )r   r  r  r  s   & r   "test_list_dir_unencodable_filename;SimpleHTTPServerTestCase.test_list_dir_unencodable_filename_  s"     //&8$$X.r   c                    R Fa  pV P                  VR7      ;_uu_ 4        VR,           pV P                  V\        P                  P	                  VRR7      R7       RRR4       Kc  	  R#   + '       g   i     Kx  ; i)q?namer  z&<>'")safer  N	r  zf#z&amp;z&ampz<i>z"dq"z'sq'z%A4z	%E2%82%AC)rN  r  r  r  r  )r   r  r7  s   &  r   test_list_dir_escape_dirname5SimpleHTTPServerTestCase.test_list_dir_escape_dirnamee  sg    )D4((-++G#)<<#5#5gH#5#M , O )()(((s   <A**A;c           	     6   R F~  pV P                  VR7      ;_uu_ 4        VR,           pV P                  V4       \        P                  ! \        P
                  P                  V P                  V4      4       RRR4       K  	  R#   + '       g   i     K  ; i)r  r  r  Nr   )rN  r  r   unlinkrg   r   r]   r  )r   r  r  s   &  r   test_list_dir_escape_filename6SimpleHTTPServerTestCase.test_list_dir_escape_filenamen  si    )D4((&=,,X6  dllH!EF )()(((s   ABBc                   R V P                    R2P                  R4      pV P                  V P                   R,           4      P                  4       pV P	                  VR,           V4       V P	                  VR,           V4       V P                  V P                   R,           4      P                  4       pV P	                  VR,           V4       V P	                  VR,           V4       R# )r  z/</latin1z/#123r  r  z/?x=123N)r  r   rz   r#   r1  )r   r  r?  s   &  r   %test_list_dir_with_query_and_fragment>SimpleHTTPServerTestCase.test_list_dir_with_query_and_fragmentw  s    c299(C<< 78==?fy((3fvox0<<	 9:??Afy((3fvox0r   c                   \         P                  ! \         P                  P                  V P                  R 4      4       RV P
                   R2pV R2pV P                  V4      pV P                  V\        P                  4       VP                  R4      pV P                  WBRR7       RV 2pV P                  V4      pV P                  V\        P                  4       VP                  R4      pV P                  VR4       V P                  WBRR7       RV 2pV P                  V4      pV P                  V\        P                  4       V P                  VP                  R4      V4       R	V 2pV R2pV P                  V4      pV P                  V\        P                  4       VP                  R4      pV P                  VR	4       R
# )existing_directoryz2/python.org/..%2f..%2f..%2f..%2f..%2f../%0a%0d/../z/existing_directoryr   Locationznon-attack failed!r  //zcExpected Location header to start with a single / and end with a / as this is a directory redirect.zhttps://pypi.org/N)rg   r  r   r]   r  r  rz   r  r
   MOVED_PERMANENTLYr  r   assertNotStartsWithassertStartsWith)	r   urlexpected_locationr?  location
attack_urlattack3_urlattack_scheme_netloc_2slash_urlexpected_scheme_netloc_locations	   &        r   3test_get_dir_redirect_location_domain_injection_bugLSimpleHTTPServerTestCase.test_get_dir_redirect_location_domain_injection_bug  s    	dll,@ABB4CTCTBUUhi"e1I <<$$$Xz/K/KL%%j1:NO Y
<<
+$$Xz/K/KL%%j1  40@ 	 	A
 3%j<<,$$Xz/K/KL++J79JK ->cU*C'-L,MQ*O'<< ?@$$Xz/K/KL%%j1 	h(;<r   c                "   V P                  V P                  R ,           4      pV P                  V\        P                  V P
                  R7       V P                  V P                  R,           4      pV P                  V\        P                  4       V P                  V P                  R,           4      pV P                  V\        P                  4       V P                  V P                  R,           4      pV P                  V\        P                  4       V P                  V P                  R,           4      pV P                  V\        P                  4       V P                  V P                  R,           4      pV P                  V\        P                  4       V P                  V P                  R,           4      pV P                  V\        P                  4       V P                  V P                  4      pV P                  V\        P                  4       V P                  VP                  R4      V P                  R,           4       V P                  VP                  R	4      R
4       V P                  V P                  R,           4      pV P                  V\        P                  4       V P                  V P                  R,           4      pV P                  V\        P                  4       V P                  VP                  R4      V P                  R,           4       V P                  R4      pV P                  V\        P                  4       V P                  R4      pV P                  V\        P                  4       \        P                  ! \        P                  P                  V P                  RR4      4       V P                  V P                  R,           4      pV P                  V\        P                  4       Rp\        \        P                  P                  V P                   R4      R4      ;_uu_ 4       pVP#                  V4       RRR4       V P                  V P                  R,           4      pV P                  V\        P                  V4       \        P$                  R8X  d   \        P&                  ! 4       ^ 8w  d   \        P(                  ! V P                  ^ 4        V P                  V P                  R,           4      pV P                  V\        P                  4       \        P(                  ! V P                  R4       R# R# R#   + '       g   i     EL; i  \        P(                  ! T P                  R4       i ; i)/testr  /test/z/test%2fz/test%2Fr   z%2fz%2Fr  r  0/?hi=2?hi=1/?hi=1z/ThisDoesNotExistspamz
index.htmlz/spam/s   Dummy index file
rz  Nposixi  z/ThisDoesNotExist/)rz   r  r  r
   r0  r  r   r  r   r  rg   makedirsr   r]   r  r  r  r   r  geteuidchmod)r   r?  r  r  s   &   r   r@  !SimpleHTTPServerTestCase.test_get  s   << 78$$Xz}}499$M<< 89$$Xz/C/CD<<
 :;$$Xz/C/CD<<
 :;$$Xz/C/CD<< 34$$Xz}}=<< 56$$Xz}}=<< 56$$Xz}}=<<.$$Xz/K/KL++J79LM++,<=sC<< 89$$Xz}}=<< 78$$Xz/K/KL++J71	3<< 34$$Xz/C/CD<< >?$$Xz/C/CD
BGGLLv|DE<< 89$$Xz}}=&"'',,t00,?FF!GGDM G<< 34$$Xz}}dC 77g"**,!"3HHT\\1%.<<(;<,,Xz7K7KLu- #4 GFF u-s    U.AU+ U(	+#Vc                J   V P                  V P                  R ,           RR7      pV P                  V\        P                  4       V P                  VP                  R4      \        \        V P                  4      4      4       V P                  VP                  R4      R4       R# )r  r/  r}   zcontent-lengthzcontent-typezapplication/octet-streamN)
rz   r  r  r
   r0  r   r  strr  r  r>  s   & r   	test_head"SimpleHTTPServerTestCase.test_head  s    <<MMG#F   4$$Xz}}=++,<=S^,	.++N;3	5r   c                D   \         P                  P                  4       pV P                  VR &   V P	                  V P
                  R,           VR7      pV P                  V\        P                  4       V P                  \        P                  ! ^R7      ,           p\         P                  P                  4       p\         P                  P                  VRR7      VR &   V P	                  V P
                  R,           VR7      pV P                  V\        P                  4       R# )If-Modified-Sincer  r  )hoursTr|  N)r  messageMessager  rz   r  r  r
   r$  r  r  	timedeltar  format_datetime)r   r   r?  new_dts   &   r   test_browser_cache+SimpleHTTPServerTestCase.test_browser_cache  s    
 --'')'+'='=#$<< 7<I$$Xz/F/FG ))H,>,>Q,GG--'')',{{'B'B6 (C (#$<< 7<I$$Xz/F/FGr   c                f   V P                   pV\        P                  ! R R7      ,
          p\        P                  P                  4       p\        P                  P                  VRR7      VR&   V P                  V P                  R,           VR7      pV P                  V\        P                  4       R# )im  )daysTr|  r/  r  r  N)r  r  r3  r  r1  r2  r  r4  rz   r  r  r
   r0  )r   dtold_dtr   r?  s   &    r   test_browser_cache_file_changed8SimpleHTTPServerTestCase.test_browser_cache_file_changed  s    %%h((c22--'')',{{'B'B6 (C (#$<< 7<I$$Xz}}=r   c                    \         P                  P                  4       pV P                  VR &   RVR&   V P	                  V P
                  R,           VR7      pV P                  V\        P                  4       R# )r/  *zIf-None-Matchr  r  N)	r  r1  r2  r  rz   r  r  r
   r0  )r   r   r?  s   &  r   ,test_browser_cache_with_If_None_Match_headerESimpleHTTPServerTestCase.test_browser_cache_with_If_None_Match_header
  s`     --'')'+'='=#$#& << 7<I$$Xz}}=r   c                8   V P                  R RR7      pV P                  V\        P                  4       V P                  R RR7      pV P                  V\        P                  4       V P                  R RR7      pV P                  V\        P                  4       R# )r   FOOr*  customGETsN)rz   r  r
   r   r>  s   & r   test_invalid_requests.SimpleHTTPServerTestCase.test_invalid_requests  sz    <<E<2$$Xz/I/IJ<<H<5$$Xz/I/IJ<<F<3$$Xz/I/IJr   c                    V P                  V P                  R ,           4      pV P                  V\        P                  V P
                  R7       VP                  R,          pV P                  W P                  4       R# )r  r  zLast-modifiedN)	rz   r  r  r
   r0  r  r   r   r  )r   r?  r  s   &  r   test_last_modified+SimpleHTTPServerTestCase.test_last_modified  s^     << 78$$Xz}}499$M$,,_=*,B,BCr   c                   V P                  V P                  R ,           4      pV P                  V\        P                  V P
                  R7       V P                  V P                  R,           4      pV P                  V\        P                  4       V P                  V P                  R,           4      pV P                  V\        P                  4       V P                  V P                  4      pV P                  V\        P                  4       V P                  VP                  R4      V P                  R,           4       V P                  V P                  R,           4      pV P                  V\        P                  4       V P                  V P                  R,           4      pV P                  V\        P                  4       V P                  VP                  R4      V P                  R,           4       R# )	r  r  r  r   r  r   r!  r"  N)
rz   r  r  r
   r0  r  r   r  r   r  r>  s   & r   test_path_without_leading_slash8SimpleHTTPServerTestCase.test_path_without_leading_slash%  sl   << 1 1G ;<$$Xz}}499$M<< 1 1H <=$$Xz/C/CD<< 1 1C 78$$Xz}}=<< 1 12$$Xz/K/KL++J7**S0	2<< 1 1H <=$$Xz}}=<< 1 1G ;<$$Xz/K/KL++J7**X5	7r   )r  r  r  r  r  r  r  r   ),r%   r&   r'   r(   r   r   r1   rm   rr   r  r  r  unittest
skipUnlessr   r  r  r  skipIfr   r>   platformr  r  r  r  r  r  r  r  r  r	  r  r@  r,  r6  r<  r@  rF  rI  rL  r)   r*   __classcell__r  r,   s   @@r   rt  rt    s    -/G 1*2-$L, 229;-;- 229;/;/ __XSU__S\\W,BD55<>->DU- __XSU__S\\W,BD55<>/>DU/C 55<>->- 55<>/>/OG1/=b1.f5H$	>>KD7 7r   rt  zD#!%s

print("Content-type: text/html")
print()
print("Hello World")
a  #!%s
import os
import sys
import urllib.parse

print("Content-type: text/html")
print()

content_length = int(os.environ["CONTENT_LENGTH"])
query_string = sys.stdin.buffer.read(content_length)
params = {key.decode("utf-8"): val.decode("utf-8")
            for key, val in urllib.parse.parse_qsl(query_string)}

print("%%s, %%s, %%s" %% (params["spam"], params["eggs"], params["bacon"]))
zR#!%s
import os

print("Content-type: text/html")
print()

print(os.environ["%s"])
a'  #!%s
import os

print("X-ambv: was here")
print("Content-type: text/html")
print()
print("<pre>")
for k, v in os.environ.items():
    try:
        k.encode('ascii')
        v.encode('ascii')
    except UnicodeEncodeError:
        continue  # see: BPO-44647
    print(f"{k}={v}")
print("</pre>")
r&  z7This test can't be run reliably as root (issue #13308).c                      a  ] tR tRt o  ! R R]]4      t]P                  P                  R4      tR t
R tR tR tR	 tR
 tR tR tR tR tR tR tR tR tR tR tRtV tR# )CGIHTTPServerTestCasein  c                   6   a a ] tR tRt oRtV 3R ltRtVtV ;t# )%CGIHTTPServerTestCase.request_handlerir  Nc                   < V P                   P                  \        R 4      ;_uu_ 4        \        SV `  ! V/ VB  RRR4       R#   + '       g   i     R# ; i)z#http\.server\.CGIHTTPRequestHandlerN)_test_case_selfassertWarnsRegexDeprecationWarningr~  rJ   )r   r   kwargsr  s   &*,r   rJ   .CGIHTTPServerTestCase.request_handler.__init__u  sK    %%66&:< <
  $1&1< < < <s   AA	r   )	r%   r&   r'   r(   rY  rJ   r)   r*   rR  rS  s   @@r   r1   rW  r  s     	2 	2r   r1   r  c                    W P                   n        \        P                  V 4       \        P
                  ! 4       V n        \        P                  ! 4       V n	        \        P                  P                  V P                  R 4      V n        \        P                  P                  V P                  R4      V n        \        P                  P                  V P                  R4      V n        \        P                  P                  V P                  R4      V n        \        P                  P                  V P                  R 4      V n        \        P"                  ! V P                  4       \        P"                  ! V P                  4       \        P"                  ! V P                  4       \        P"                  ! V P                  4       \        P"                  ! V P                   4       RV n        RV n        RV n        RV n        RV n        RV n        RV n        \2        P4                  ! 4       '       dd   \        P                  P                  V P                  R4      V n        \8        P:                  ! V P6                  4      P=                  4       V n        M\>        P@                  V n         V P6                  PC                  R4       \        P                  P                  V P                  R4      V n        \K        V P$                  R	RR
7      ;_uu_ 4       pVPM                  \N        V P6                  ,          4       RRR4       \        PP                  ! V P$                  R4       \        P                  P                  V P                  R4      V n        \K        V P&                  R	RR
7      ;_uu_ 4       pVPM                  \N        V P6                  ,          4       RRR4       \        PP                  ! V P&                  R4       \        P                  P                  V P                  R4      V n        \K        V P(                  R	RR
7      ;_uu_ 4       pVPM                  \R        V P6                  ,          4       RRR4       \        PP                  ! V P(                  R4       \        P                  P                  V P                  R4      V n        \K        V P*                  R	RR
7      ;_uu_ 4       pVPM                  \N        V P6                  ,          4       RRR4       \        PP                  ! V P*                  R4       \        P                  P                  V P                  R4      V n        \K        V P,                  R	RR
7      ;_uu_ 4       pVPM                  \T        V P6                  R3,          4       RRR4       \        PP                  ! V P,                  R4       \        P                  P                  V P                   R4      V n        \K        V P.                  R	RR
7      ;_uu_ 4       pVPM                  \N        V P6                  ,          4       RRR4       \        PP                  ! V P.                  R4       \        P                  P                  V P                  R4      V n+        \K        V PV                  R	RR
7      ;_uu_ 4       pVPM                  \X        V P6                  ,          4       RRR4       \        PP                  ! V PV                  R4       \        PZ                  ! V P                  4       R#   \D         d&    T PG                  4        T PI                  R4        ELi ; i  + '       g   i     ELC; i  + '       g   i     EL; i  + '       g   i     EL-; i  + '       g   i     EL; i  + '       g   i     EL; i  + '       g   i     EL; i  + '       g   i     L; i)zcgi-binz	child-dirsubrx  Npythonr   z0Python executable path is not encodable to utf-8znocgi.pyw)encodingi  zfile1.pyzfile2.pyzfile3.pyzfile4.pyQUERY_STRINGzfile5.pyzfile6.py).r1   rY  rb   rm   rg   r  r  r  r  
parent_dirr   r]   cgi_dircgi_child_dir	sub_dir_1	sub_dir_2cgi_dir_in_sub_dirr  
nocgi_path
file1_path
file2_path
file3_path
file4_path
file5_path_pythonexe_symlinkr   can_symlink	pythonexer   PythonSymlink	__enter__r>   
executabler   r  rr   r  r  r   	cgi_file1r'  	cgi_file2	cgi_file4
file6_path	cgi_file6r  )r   r  file1file2file3file4file5file6s   &       r   rm   CGIHTTPServerTestCase.setUp  s   /3,4 99;"**,ww||DOOY?WW\\$,,Ddoou=dnne<"$'',,t~~y"I

##$
 
 
(() #'  ""WW\\$//8DDN&-&;&;DNN&K&U&U&WD# ^^DN	N NN!!'*
 '',,t
C$//399RHHY/0 :
%('',,t||Z@$//399UKK	DNN23 :
%('',,t||Z@$//399UKK	DNN23 :
%('',,t'9'9:F$//399UKK	DNN23 :
%('',,t||Z@$//399UKK	T^^^$DDE :
%('',,t'>'>
K$//399UKK	DNN23 :
%('',,t||Z@$//399UKK	DNN23 :
%(
!O " 	NMMOMMLM	N
 :99
 :99
 :99
 :99
 :99
 :99
 :9sf   *] ']53'^	'^1'^1)_1'_'_-,]21]25^		^	^.	1_	_	_*	-_=	c                   R V P                   n         \        P                  ! V P                  4       V P
                  '       d   V P
                  P                  R R R 4       V P                  '       d!   \        P                  ! V P                  4       V P                  '       d!   \        P                  ! V P                  4       V P                  '       d!   \        P                  ! V P                  4       V P                  '       d!   \        P                  ! V P                  4       V P                  '       d!   \        P                  ! V P                  4       V P                  '       d!   \        P                  ! V P                  4       V P                  '       d!   \        P                  ! V P                  4       \        P                  ! V P                   4       \        P                  ! V P"                  4       \        P                  ! V P$                  4       \        P                  ! V P&                  4       \        P                  ! V P(                  4       \*        P,                  ! \        P.                  P1                  V P2                  R4      4       \        P                  ! V P2                  4       \4        P7                  V 4       R #   \4        P7                  T 4       i ; i)Nzgmon.out)r1   rY  rg   r  r  rp  rp   rj  removerk  rl  rm  rn  ro  ry  rmdirrf  re  ri  rh  rg  r   r  r   r]   rd  rb   rr   r^   s   &r   rr   CGIHTTPServerTestCase.tearDown  s   /3,	(HHTXX&&&''00tTB		$//*		$//*		$//*		$//*		$//*		$//*		$//*HHT''(HHT\\"HHT,,-HHT^^$HHT^^$ RWW\\$//:FGHHT__%!!$'L!!$'s<   1K .K 41K &1K 1K 
1K <1K .1K  DK K,c                   / R RbR\         bR\         bRRbRRbRRbRRbRR	bR	R	bR
RbRRbRRbRRbRRbRRbRRbRRbRRRRRRRRRRR\         RRRRR \         R!RR"R/CpVP                  4        F  w  r#\        V\        4      '       d:   \	        V\
        4      '       d$   V P                  V\        P                  V4       KT  \        P                  ! V4      pV P                  W4R#V: R$V: R%V: 2R&7       K  	  R'# )(r!   r  z..z/.//..r   z/\z//\z/.//cgi-bin/file1.py/cgi-bin/file1.pyaz//az/az./az./C:/z/C:/z/a/bz/a/b/z/a/b/.z	/a/b/c/..z/a/b/c/../dz/a/b/dz/a/b/c/../d/e/../fz/a/b/d/fz/a/b/c/../d/e/../../fz/a/b/fz/a/b/c/../d/e/.././././..//fz../a/b/c/../d/e/.././././..//fz/a/b/c/../d/e/../../../fz/a/fz/a/b/c/../d/e/../../../../fz//fz/a/b/c/../d/e/../../../../../fz/a/b/c/../d/e/../../../../f/..z /a/b/c/../d/e/../../../../f/../.zpath = z	
Got:    z	
Wanted: r  N)

IndexErroritems
isinstancetype
issubclass	ExceptionrA   r	   _url_collapse_pathr   )r   test_vectorsr   expectedactuals   &    r   test_url_collapse_path,CGIHTTPServerTestCase.test_url_collapse_path  s   

*
 j
 	

 $
 6
 D
  3
  !4
 
 %
 5
 5
 V
 F
  W!
" g#
$ 8 *#X*H,j&)5,j,d.9
< +002ND(D))j9.M.M!!("(";";TC  2248  6"&&: ! ; 3r   c                    V P                  R 4      pV P                  VP                  4       VP                  R4      VP                  3RV P
                  ,           R\        P                  34       R# )r  Content-type   Hello Worldr   N)rz   r   r#   r  r   linesepr
   r0  r   s   & r   test_headers_and_content.CGIHTTPServerTestCase.test_headers_and_content  sT    ll./XXZ~6

Cdll*KG	Ir   c                |    V P                  R 4      pV P                  VP                  \        P                  4       R# )z)///////////nocgi.py/../cgi-bin/nothere.shN)rz   r   r   r
   r   r   s   & r   test_issue19435%CGIHTTPServerTestCase.test_issue19435  s+    llFGZ%9%9:r   c                    \         P                  P                  R ^RRRR/4      pRR/pV P                  RRW4      pV P	                  VP                  4       R	V P                  ,           4       R
# )r#  eggsr`  baconi@ r  z!application/x-www-form-urlencodedz/cgi-bin/file2.pyPOSTs   1, python, 123456N)r  r  	urlencoderz   r   r#   r  )r   paramsr   r   s   &   r   	test_postCGIHTTPServerTestCase.test_post   sd    ''a(Gf=?!$GHll.H%9DLL%HIr   c                    V P                  R 4      pVP                  4        V P                  VP                  \        P
                  4       R# )z/cgi-bin/invalidN)rz   r#   r   r   r
   r   r   s   & r   test_invaliduri%CGIHTTPServerTestCase.test_invaliduri(  s4    ll-.
Z%9%9:r   c                (   R R\         P                  ! R4      ,           /pV P                  RRVR7      pV P                  RV P                  ,           R\
        P                  3VP                  4       VP                  R4      VP                  34       R	# )
s   Authorizations   Basic s   username:passr  rt   r  r  r   r  N)
base64	b64encoderz   r   r  r
   r0  r#   r  r   )r   r   r   s   &  r   test_authorization(CGIHTTPServerTestCase.test_authorization-  sz    #i##$45'6 7ll.wlGdll*KGXXZ~6

C	Er   c                    V P                  R 4      pV P                  RV P                  ,           R\        P                  3VP                  4       VP                  R4      VP                  34       R# )r  r  r   r  Nrz   r   r  r
   r0  r#   r  r   r   s   & r   test_no_leading_slash+CGIHTTPServerTestCase.test_no_leading_slash5  sT    ll-.dll*KGXXZ~6

C	Er   c                \   R pV\         P                  R&   V P                  R4      pV P                  RV P                  ,           R\
        P                  3VP                  4       VP                  R4      VP                  34       V P                  \         P                  R,          V4       R# )zTest CGI ServerSERVER_SOFTWAREr  r  r   r  N)
rg   rh   rz   r   r  r
   r0  r#   r  r   )r   	signaturer   s   &  r   test_os_environ_is_not_altered4CGIHTTPServerTestCase.test_os_environ_is_not_altered<  s    %	(1

$%ll./dll*KGXXZ~6

C	E 	$56	Br   c                    V P                  R 4      pV P                  RV P                  ,           R\        P                  3VP                  4       VP                  R4      VP                  34       R# )z/cgi-bin%2ffile1.pyr  r   r  Nr  r   s   & r   #test_urlquote_decoding_in_cgi_check9CGIHTTPServerTestCase.test_urlquote_decoding_in_cgi_checkE  sT    ll01dll*KGXXZ~6

C	Er   c                    V P                  R 4      pV P                  RV P                  ,           R\        P                  3VP                  4       VP                  R4      VP                  34       R# )z/cgi-bin/child-dir/file3.pyr  r   r  Nr  r   s   & r   test_nested_cgi_path_issue213235CGIHTTPServerTestCase.test_nested_cgi_path_issue21323K  sT    ll89dll*KGXXZ~6

C	Er   c                    V P                  R 4      pV P                  RV P                  ,           R\        P                  3VP                  4       VP                  R4      VP                  34       R# )z/cgi-bin/file4.py?a=b?c=ds   a=b?c=dr   r  Nr  r   s   & r   &test_query_with_multiple_question_mark<CGIHTTPServerTestCase.test_query_with_multiple_question_markQ  sT    ll67$,,&Z]]CXXZ~6

C	Er   c                    V P                  R 4      pV P                  RV P                  ,           R\        P                  3VP                  4       VP                  R4      VP                  34       R# )z0/cgi-bin/file4.py?k=aa%2F%2Fbb&//q//p//=//a//b//s   k=aa%2F%2Fbb&//q//p//=//a//b//r   r  Nr  r   s   & r   "test_query_with_continuous_slashes8CGIHTTPServerTestCase.test_query_with_continuous_slashesW  sW    llMN.=*--)XXZ~6

C	Er   c                    \         P                  P                  R 4       V P                  R4      pV P	                  RV P
                  ,           R\        P                  3VP                  4       VP                  R4      VP                  34       \         P                  P                  R 4       R#   \         P                  P                  R 4       i ; i)z/sub/dir/cgi-binz/sub/dir/cgi-bin/file5.pyr  r   r  N)r   cgi_directoriesappendrz   r   r  r
   r0  r#   r  r   r  r   s   & r    test_cgi_path_in_sub_directories6CGIHTTPServerTestCase.test_cgi_path_in_sub_directories^  s    	M!11889KL,,:;C$,,.Z]]KS]]>:CJJGI "11889KL!11889KLs   BB1 1!Cc           	        R pRV33V3RR	3pV F  w  r4\        V4      pV P                  V4      ;_uu_ 4        V P                  RRVR7      pV P                  \        P
                  P                  VP                  4       RV 2P                  R4      pV P                  WEP                  4       4       RRR4       K  	  R#   + '       g   i     K  ; i)
z?text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8Acceptz/cgi-bin/file6.pyrt   r  zHTTP_ACCEPT=r  N)r   r!   )))r  r   )ACCEPTz
text/plainztext/html,text/plain)r   rN  rz   r   rv   r
   r0  r   r   r1  r#   )r   browser_accepttestsr   r  r   s   &     r   test_accept!CGIHTTPServerTestCase.test_accepth  s    U 	 (*N;'	
 "'G!'*Gg&&ll#6wlO  !3!3SZZ@)(4;;GDh
3	 '& "'&&&s   A<CC)rp  rf  re  ri  r  rk  rl  rm  rn  ro  ry  rj  rd  rr  rg  rh  N)r%   r&   r'   r(   r   r   r1   rg   r  r   rm   rr   r  r  r  r  r  r  r  r  r  r  r  r  r  r  r)   r*   r+   s   @r   rU  rU  n  s     	2-/D 	2 jj(GK"Z(@(;TI;J;
EECEEEEM4 4r   rU  c                   B   a a ] tR tRt oRV 3R lltR tR tRtVtV ;t	# )SocketlessRequestHandleri{  c                   < \         P                  ! 4       p\        4       VP                  n        \
        SV `  VR R VR7       RV n        RV n        R # )N	directoryFr   )	r   Mockr   makefilereturn_valuer~  rJ   
get_calledr   )r   r  rz   r  s   && r   rJ   !SocketlessRequestHandler.__init__|  sC    ))+(/	%$	B *r   c                    R V n         V P                  \        P                  4       V P	                  RR4       V P                  4        V P                  P                  R4       R# )Tr   r       <html><body>Data</body></html>
N)r  r   r
   r0  r   r   r   r   r^   s   &r   ra  SocketlessRequestHandler.do_GET  sJ    :==)5

>?r   c                    R # r   r   )r   r(  r   s   &&*r   r   $SocketlessRequestHandler.log_message  s    r   )r  r   r   )
r%   r&   r'   r(   rJ   ra  r   r)   r*   rR  rS  s   @@r   r  r  {  s     +@ r   r  c                   &   a  ] tR tRt o R tRtV tR# )!RejectingSocketlessRequestHandleri  c                D    V P                  \        P                  4       R # )F)r   r
   EXPECTATION_FAILEDr^   s   &r   handle_expect_1003RejectingSocketlessRequestHandler.handle_expect_100  s    
556r   r   N)r%   r&   r'   r(   r  r)   r*   r+   s   @r   r  r    s      r   r  c                   B   a  ] tR tRt o R tR tR t]R 4       tRt	V t
R# )AuditableBytesIOi  c                    . V n         R # r   datasr^   s   &r   rJ   AuditableBytesIO.__init__  s	    
r   c                <    V P                   P                  V4       R # r   )r  r  )r   r  s   &&r   r   AuditableBytesIO.write  s    

$r   c                8    R P                  V P                  4      # )r   )r]   r  r^   s   &r   getDataAuditableBytesIO.getData  s    xx

##r   c                ,    \        V P                  4      # r   )r  r  r^   s   &r   	numWritesAuditableBytesIO.numWrites  s    4::r   r  N)r%   r&   r'   r(   rJ   r   r  propertyr  r)   r*   r+   s   @r   r  r    s(      $  r   r  c                      a  ] tR tRt o ]P
                  ! R4      tR tR tR t	R t
R tR tR	 tR
 tR tR tR tR tR tR tR tR tR tR tR tR tR tR tR tRtV tR# )BaseHTTPRequestHandlerTestCasei  s   HTTP/1.[0-9]+ 200 OKc                $    \        4       V n        R # r   )r  handlerr^   s   &r   rm   $BaseHTTPRequestHandlerTestCase.setUp  s    /1r   c                    \        V4      p\        4       pW P                  n        W0P                  n        V P                  P	                  4        VP                  ^ 4       VP                  4       # r   )r   r  rfiler   handle_one_requestseek	readlines)r   r1  inputoutputs   &&  r   send_typical_request3BaseHTTPRequestHandlerTestCase.send_typical_request  sQ     "#'')A!!r   c                P    V P                  V P                  P                  4       R # r   )r  r  r  r^   s   &r   verify_get_called0BaseHTTPRequestHandlerTestCase.verify_get_called  s    //0r   c                d   a R F(  oV P                  \        V3R lV 4       4      ^4       K*  	  R# )   Server: c              3   D   <"   T F  qP                  S4      x  K  	  R # 5ir   )
startswith).0h	fieldNames   & r   	<genexpr>IBaseHTTPRequestHandlerTestCase.verify_expected_headers.<locals>.<genexpr>  s      J'Qi!8!8's    N)r  s   Date: s   Content-Type: )r   sum)r   r   r  s   &&@r   verify_expected_headers6BaseHTTPRequestHandlerTestCase.verify_expected_headers  s)    BIS J' JJAN Cr   c                ^    V P                   P                  V4      pV P                  V4       R # r   )HTTPResponseMatchsearchr  )r   r?  matchs   && r   verify_http_server_response:BaseHTTPRequestHandlerTestCase.verify_http_server_response  s&    &&--h7U#r   c                .   RV P                   n        \        P                  p\        P
                  P                  \        R\        4       4      ;_uu_ 4       pV! V P                   R4       V! V P                   R4       V! V P                   RR4       V! V P                   RR4       V! V P                   R4       RRR4       XP                  4       pV P                  R	V4       V P                  R
V4       VP                  4       pV P                  RV^ ,          4       V P                  RV^,          4       V P                  RV^,          4       V P                  RV^,          4       V P                  RV^,          4       R#   + '       g   i     L; i)	127.0.0.1stderrz/fooz/bar z	/spam %s.r  u    beansz"GET /foo\b"ar HTTP/1.0"N z/\x1bbar\x00\x1bz/spam a.u   /spam \x1b\x7f\x9f beans.z"GET /foo\\b"ar\x07 HTTP/1.0")r  i9  )r  client_addressr   r   r   patchobjectr>   r   ri  assertNotIn
splitlinesr1  )r   r   fake_stderrr  rp  s   &    r   test_unprintable_not_logged:BaseHTTPRequestHandlerTestCase.test_unprintable_not_logged  s.    ':#,88ZZsHhj99[f-&89k37k3JK&EF : %%'((!!#feAh')584j%(+7qB6aA :9s   A"FF	c                j   V P                  R 4      pV P                  V^ ,          4       V P                  V^R 4       V P                  4        V P	                  VR,          R4       V P	                  V P
                  P                  R4       V P	                  V P
                  P                  R4       V P	                  V P
                  P                  R4       V P	                  V P
                  P                  R4       V P                  V P
                  P                  P                  4       R4       R# )	   GET / HTTP/1.1

r  GET / HTTP/1.1rt   r   r   Nr   r  r  r  r  r   r  requestlinecommandr   request_versionassertSequenceEqualr   r  r   results   & r   test_http_1_1,BaseHTTPRequestHandlerTestCase.test_http_1_1      **+DE((3$$VAb\2 %JK113CD--u5**C055zB  !5!5!;!;!=rBr   c                j   V P                  R 4      pV P                  V^ ,          4       V P                  V^R 4       V P                  4        V P	                  VR,          R4       V P	                  V P
                  P                  R4       V P	                  V P
                  P                  R4       V P	                  V P
                  P                  R4       V P	                  V P
                  P                  R4       V P                  V P
                  P                  P                  4       R4       R# )	s   GET / HTTP/1.0

r  GET / HTTP/1.0rt   r   HTTP/1.0Nr(  r   r)  r.  s   & r   test_http_1_0,BaseHTTPRequestHandlerTestCase.test_http_1_0  r2  r   c                    V P                  R 4      pV P                  \        V4      ^4       V P                  V^ ,          R4       V P                  4        R# )s   GET / HTTP/0.9

r  N)r  r   r  r  r.  s   & r   test_http_0_9,BaseHTTPRequestHandlerTestCase.test_http_0_9  sH    **+DEVa($IJ r   c                    V P                  R 4      pV P                  V^ ,          R4       V P                  V^VP                  R4       4       V P	                  V P
                  P                  4       R# )s)   GET /spaced out HTTP/1.1
Host: dummy

s   HTTP/1.1 400    
N)r  r  r  indexassertFalser  r  r.  s   & r   test_extra_space/BaseHTTPRequestHandlerTestCase.test_extra_space  sd    **

 	fQi)9:$$VAfll7.C%DE001r   c                n   V P                  R 4      pV P                  V^ ,          4       V P                  V^R 4       V P                  4        V P	                  VR,          R4       V P	                  V P
                  P                  R4       V P	                  V P
                  P                  R4       V P	                  V P
                  P                  R4       V P	                  V P
                  P                  R4       RpV P                  V P
                  P                  P                  4       V4       R# )	s(   GET / HTTP/1.0
Expect: 100-continue

r  r4  rt   r   r5  Nr(  )Expectz100-continuer)  r   r/  r   s   &  r   test_with_continue_1_05BaseHTTPRequestHandlerTestCase.test_with_continue_1_0   s    **+\]((3$$VAb\2 %JK113CD--u5**C055zB/  !5!5!;!;!=wGr   c                   V P                  R 4      pV P                  V^ ,          R4       V P                  V^,          R4       V P                  V^,          R4       V P                  V^R
 4       V P                  4        V P                  VR
,          R4       V P                  V P                  P
                  R4       V P                  V P                  P                  R4       V P                  V P                  P                  R4       V P                  V P                  P                  R4       RpV P                  V P                  P                  P                  4       V4       R	# )(   GET / HTTP/1.1
Expect: 100-continue

s   HTTP/1.1 100 Continue
r<  s   HTTP/1.1 200 OK
r  r'  rt   r   r   Nr(  rB  )r  r   r  r  r  r*  r+  r   r,  r-  r   r  rD  s   &  r   test_with_continue_1_15BaseHTTPRequestHandlerTestCase.test_with_continue_1_1  s   **+\]$@AG,$:;$$VAb\2 %JK113CD--u5**C055zB/  !5!5!;!;!=wGr   c                    \        R 4      p\        4       p\        4       pWn        W#n        RVn        RVn        RVn        VP                  R4       V P                  VP                  ^4       R# )r&  r   r!   N  )r   r  r  r  r   r,  r*  r+  r   r   r  r   r  r   r  s   &   r   #test_header_buffering_of_send_errorBBaseHTTPRequestHandlerTestCase.test_header_buffering_of_send_error  sb    12!#*,", 3))1-r   c                   \        R 4      p\        4       p\        4       pWn        W#n        RVn        VP                  R4       V P                  VP                  ^ 4       VP                  4        V P                  VP                  ^4       R# )r&  r   rL  N)
r   r  r  r  r   r,  send_response_onlyr   r  r   rM  s   &   r   +test_header_buffering_of_send_response_onlyJBaseHTTPRequestHandlerTestCase.test_header_buffering_of_send_response_only*  su    12!#*,",""3'))1-))1-r   c                   \        R 4      p\        4       p\        4       pWn        W#n        RVn        VP                  RR4       VP                  RR4       V P                  VP                  ^ 4       VP                  4        V P                  VP                  4       R4       V P                  VP                  ^4       R# )r&  r   Foofoobars   Foo: foo
bar: bar

N)r   r  r  r  r   r,  r   r   r  r   r  rM  s   &   r   $test_header_buffering_of_send_headerCBaseHTTPRequestHandlerTestCase.test_header_buffering_of_send_header8  s    12!#*,",E5)E5)))1-)+JK))1-r   c                   R  p\        R4      p\        4       pW P                  n        W0P                  n        RV P                  n        V P                  P                  4        V P                  V! V4      R4       V! V4      P                  R4      pV P                  V^ ,          R4       V P                  V^,          R4       V P                  V^,          R4       R# )c                     V P                  4       pV P                  ^ 4       V P                  4       pV P                  V4       V# r  )tellr  r#   )r  posr  s   &  r   _readAndReseek[BaseHTTPRequestHandlerTestCase.test_header_unbuffered_when_continue.<locals>._readAndReseekJ  s3    &&(CFF1I668DFF3KKr   rH  r   r   r<  s   HTTP/1.1 100 Continues   HTTP/1.1 200 OKN)	r   r  r  r   r,  r  assertNotEqualro  r   )r   r^  r  r   r/  s   &    r   $test_header_unbuffered_when_continueCBaseHTTPRequestHandlerTestCase.test_header_unbuffered_when_continueH  s    	 IJ"#'1$'')N62C8'--g6$<=C($67r   c                X   V P                   p\        4       V n         V P                  R 4      pV P                  V^ ,          R4       V P	                  V^R 4       V P                  V P                   P                  4       V P                  \        R V^R  4       4      ^4       Wn         R# )rH  s!   HTTP/1.1 417 Expectation Failed
c              3   *   "   T F	  qR 8H  x  K  	  R# 5i)s   Connection: close
Nr   )r
  rs   & r   r  MBaseHTTPRequestHandlerTestCase.test_with_continue_rejected.<locals>.<genexpr>g  s     QLq"::Ls   Nr(  )r  r  r  r   r  r>  r  r  )r   usual_handlerr/  s   &  r   test_with_continue_rejected:BaseHTTPRequestHandlerTestCase.test_with_continue_rejected^  s    8:**+\]$JK$$VAb\2 	001QF1RLQQSTU$r   c                   V P                  R RR,          ,           4      pV P                  V^ ,          R4       V P                  V P                  P                  4       V P                  V P                  P                  \        4       R# )s   GET    x  s   HTTP/1.1 414 URI Too Long
N)r  r   r>  r  r  rO  r*  r+  r.  s   & r   test_request_length2BaseHTTPRequestHandlerTestCase.test_request_lengthj  sd     **7TE\+AB$DE001dll66<r   c                   V P                  R RR,          ,           R,           4      pV P                  V^ ,          R4       V P                  V P                  P                  4       V P                  V P                  P
                  R4       R# )s   GET / HTTP/1.1
X-Foo: bar   rrl  s   

s   HTTP/1.1 431 Line too long
r'  Nr  r   r>  r  r  r*  r.  s   & r   test_header_length1BaseHTTPRequestHandlerTestCase.test_header_lengthr  sl    **+dUl:[HJ$EF001113CDr   c                    V P                  R4      pV P                  V^ ,          R4       V P                  V P                  P                  4       V P                  V P                  P
                  R4       R# )s   GET / HTTP/1.1
s   HTTP/1.1 431 Too many headers
r'  Ns  GET / HTTP/1.1
X-Foo: bar
X-Foo: bar
X-Foo: bar
X-Foo: bar
X-Foo: bar
X-Foo: bar
X-Foo: bar
X-Foo: bar
X-Foo: bar
X-Foo: bar
X-Foo: bar
X-Foo: bar
X-Foo: bar
X-Foo: bar
X-Foo: bar
X-Foo: bar
X-Foo: bar
X-Foo: bar
X-Foo: bar
X-Foo: bar
X-Foo: bar
X-Foo: bar
X-Foo: bar
X-Foo: bar
X-Foo: bar
X-Foo: bar
X-Foo: bar
X-Foo: bar
X-Foo: bar
X-Foo: bar
X-Foo: bar
X-Foo: bar
X-Foo: bar
X-Foo: bar
X-Foo: bar
X-Foo: bar
X-Foo: bar
X-Foo: bar
X-Foo: bar
X-Foo: bar
X-Foo: bar
X-Foo: bar
X-Foo: bar
X-Foo: bar
X-Foo: bar
X-Foo: bar
X-Foo: bar
X-Foo: bar
X-Foo: bar
X-Foo: bar
X-Foo: bar
X-Foo: bar
X-Foo: bar
X-Foo: bar
X-Foo: bar
X-Foo: bar
X-Foo: bar
X-Foo: bar
X-Foo: bar
X-Foo: bar
X-Foo: bar
X-Foo: bar
X-Foo: bar
X-Foo: bar
X-Foo: bar
X-Foo: bar
X-Foo: bar
X-Foo: bar
X-Foo: bar
X-Foo: bar
X-Foo: bar
X-Foo: bar
X-Foo: bar
X-Foo: bar
X-Foo: bar
X-Foo: bar
X-Foo: bar
X-Foo: bar
X-Foo: bar
X-Foo: bar
X-Foo: bar
X-Foo: bar
X-Foo: bar
X-Foo: bar
X-Foo: bar
X-Foo: bar
X-Foo: bar
X-Foo: bar
X-Foo: bar
X-Foo: bar
X-Foo: bar
X-Foo: bar
X-Foo: bar
X-Foo: bar
X-Foo: bar
X-Foo: bar
X-Foo: bar
X-Foo: bar
X-Foo: bar
X-Foo: bar
X-Foo: bar

rq  r.  s   & r   test_too_many_headers4BaseHTTPRequestHandlerTestCase.test_too_many_headersz  s^    **EG$HI001113CDr   c                    V P                  R 4      pRP                  V4      pRpV P                  \        P                  ! VRR7      P                  R4      V4       R# )s*   <script>alert("hello")</script> / HTTP/1.1r   z<script>alert("hello")</script>Fr  r  N)r  r]   r1  r  r  r   )r   r/  texts   &  r   test_html_escape_on_error8BaseHTTPRequestHandlerTestCase.test_html_escape_on_error  sL    **9;&!0dkk$e4;;GDfMr   c                :  a a VV 3R  lpVS P                   n        \        R4      oS P                   P                  4        S P	                  \
        \        S4       \        R4      oS P                   P                  4        S P	                  \
        \        S4       R# )c                  <   < \        S 4      SP                  n        R # r   )nextr  close_connection)close_valuesr   s   r   r  PBaseHTTPRequestHandlerTestCase.test_close_connection.<locals>.handle_one_request  s    ,0,>DLL)r   N)T)FFT)r  r  iterhandlerA   StopIterationr}  )r   r  r  s   f @r   test_close_connection4BaseHTTPRequestHandlerTestCase.test_close_connection  sl    	?*<'G}-|<01-|<r   c           	     H   \         P                   ! 4       p\         P                  ! V4      w	  r#rErgrp
R V P                  P                  V,          VV P                  P                  V,          W%Wg3,          pV P                  V P                  P                  VR7      V4       R# )z#%s, %02d %3s %4d %02d:%02d:%02d GMT)r  N)timegmtimer  weekdayname	monthnamer   date_time_string)r   nowyearmonthdayhhmmsswdyzr  s   &           r   test_date_time_string4BaseHTTPRequestHandlerTestCase.test_date_time_string  s    iik15S1A.SbbQ8LL$$R(LL""5)b	<
 
 	666ExPr   )r  N) r%   r&   r'   r(   recompiler  rm   r  r  r  r  r#  r0  r6  r9  r?  rE  rI  rN  rR  rX  ra  rh  rm  rr  ru  ry  r  r  r)   r*   r+   s   @r   r  r    s      

#:;2"1O$B*
C
C!2HH... 8,
%=EEN=
Q 
Qr   r  c                   8   a  ] tR tRt o R tR tR tR tRtV t	R# ) SimpleHTTPRequestHandlerTestCasei  c                   \         P                  P                  \         P                  ! 4       R 4      V n        \         P                  P                  RR 4      V n        \         P                  P                  RR 4      V n        \        4       V n        \        RR7      V n	        \        \        P                  ! R4      R7      V n        R# )r  rV  rW  r  N)rg   r   r]   r  translated_1translated_2translated_3r  	handler_1	handler_2pathlibPurePath	handler_3r^   s   &r   rm   &SimpleHTTPRequestHandlerTestCase.setUp  sz    GGLLjAGGLL
;GGLL
;131EB1G<L<LU<STr   c                   V P                   P                  R 4      pV P                  WP                  4       V P                  P                  R 4      pV P                  WP
                  4       V P                  P                  R 4      pV P                  WP                  4       V P                   P                  R4      pV P                  WP                  4       V P                  P                  R4      pV P                  WP
                  4       V P                  P                  R4      pV P                  WP                  4       V P                   P                  R4      pV P                  WP                  4       V P                  P                  R4      pV P                  WP
                  4       V P                  P                  R4      pV P                  WP                  4       R# )z	/filenamez/filename?foo=barz/filename?a=b&spam=eggs#zotNr  translate_pathr   r  r  r  r  r  r   r   s   & r   test_query_arguments5SimpleHTTPRequestHandlerTestCase.test_query_arguments  sp   ~~,,[9001~~,,[9001~~,,[9001~~,,-@A001~~,,-@A001~~,,-@A001~~,,-JK001~~,,-JK001~~,,-JK001r   c                   V P                   P                  R 4      pV P                  WP                  4       V P                  P                  R 4      pV P                  WP
                  4       V P                  P                  R 4      pV P                  WP                  4       V P                   P                  R4      pV P                  WP                  4       V P                  P                  R4      pV P                  WP
                  4       V P                  P                  R4      pV P                  WP                  4       R# )z
//filenamez//filename?foo=barNr  r  s   & r   test_start_with_double_slash=SimpleHTTPRequestHandlerTestCase.test_start_with_double_slash  s    ~~,,\:001~~,,\:001~~,,\:001~~,,-AB001~~,,-AB001~~,,-AB001r   c                
   \         P                  ! \        P                  R \        4      ;_uu_ 4        V P
                  P                  R4      pVP                  \        P                  \        P                  4      pV P                  WP                  4       V P                  P                  R4      pVP                  \        P                  \        P                  4      pV P                  WP                  4       V P                  P                  R4      pVP                  \        P                  \        P                  4      pV P                  WP                  4       V P
                  P                  R4      pVP                  \        P                  \        P                  4      pV P                  WP                  4       V P                  P                  R4      pVP                  \        P                  \        P                  4      pV P                  WP                  4       V P                  P                  R4      pVP                  \        P                  \        P                  4      pV P                  WP                  4       V P
                  P                  R4      pVP                  \        P                  \        P                  4      pV P                  WP                  4       V P                  P                  R4      pVP                  \        P                  \        P                  4      pV P                  WP                  4       V P                  P                  R4      pVP                  \        P                  \        P                  4      pV P                  WP                  4       V P
                  P                  R4      pVP                  \        P                  \        P                  4      pV P                  WP                  4       V P                  P                  R4      pVP                  \        P                  \        P                  4      pV P                  WP                  4       V P                  P                  R4      pVP                  \        P                  \        P                  4      pV P                  WP                  4       RRR4       R#   + '       g   i     R# ; i)r   zc:c:c:foo/filenamez\c:../filenamezc:\c:..\foo/filenamezc:c:foo\c:c:bar/filenameN)r   	swap_attrr	   rg   ntpathr  r  r  sepr   r  r  r  r  r  r  s   & r   test_windows_colon3SimpleHTTPRequestHandlerTestCase.test_windows_colon  s7   vyy&&99>>001EFD<<

BFF3DT#4#45>>001EFD<<

BFF3DT#4#45>>001EFD<<

BFF3DT#4#45>>001BCD<<

BFF3DT#4#45>>001BCD<<

BFF3DT#4#45>>001BCD<<

BFF3DT#4#45>>001IJD<<

BFF3DT#4#45>>001IJD<<

BFF3DT#4#45>>001IJD<<

BFF3DT#4#45>>001LMD<<

BFF3DT#4#45>>001LMD<<

BFF3DT#4#45>>001LMD<<

BFF3DT#4#45O :999s   R1S..S?	)r  r  r  r  r  r  N)
r%   r&   r'   r(   rm   r  r  r  r)   r*   r+   s   @r   r  r    s     U2,2(6 (6r   r  c                   &   a  ] tR tRt o R tRtV tR# )MiscTestCasei  c                &   . p0 Rmp\        \        4       FW  pVP                  R4      '       g   W29   d   K"  \        \        V4      p\        VRR4      R8X  g   KF  VP	                  V4       KY  	  V P                  \        P                  V4       R# )ru  _r&   Nzhttp.server>   ry  ru  
nobody_uid)rx  r	   r	  getattrr  assertCountEqual__all__)r   r  denylistr  module_objects   &    r   test_allMiscTestCase.test_all  sp    7KDs##t'7#FD1M}lD9]J%   	fnnh7r   r   N)r%   r&   r'   r(   r  r)   r*   r+   s   @r   r  r    s     	8 	8r   r  c                      a  ] tR tRt o R t]P                  ! R4      R 4       t]P                  ! R4      R 4       tR
t	Rt
]P                  ! R4      R 4       t]P                  ! R4      R 4       tRtV tR	# )ScriptTestCasei  c                    \         P                  ! \         P                  ! \         P                  ! \         P                  ! \         P                  ! R  R7      R7      R7      R7      R7      # )c                      R# )r!   )r!   r   r   r   r   r   <lambda>2ScriptTestCase.mock_server_class.<locals>.<lambda>  s    r   )rR   )rQ   )r  )rt  )r   	MagicMockr^   s   &r   mock_server_class ScriptTestCase.mock_server_class  sF    ~~..!%#~~(7 "

 
	
r   zbuiltins.printc                    V P                  4       p\        P                  ! VR R7       V P                  VP                  \
        P                  \
        P                  34       R # )NServerClassbindr  r	   ry  r1  address_familyrQ   AF_INET6AF_INETr   r  mock_servers   && r   test_server_test_unspec&ScriptTestCase.test_server_test_unspec  sC    ,,.$7&&__fnn-	
r   c                    V P                  4       p\        P                  ! VR R7       V P                  VP                  \
        P                  \
        P                  34       R# )rP   r  Nr  r  s   && r   test_server_test_localhost)ScriptTestCase.test_server_test_localhost#  sC    ,,.+>&&__fnn-	
r   c                    V P                    FT  pV P                  4       p\        P                  ! W2R 7       V P	                  VP
                  \        P                  4       KV  	  R# r  N)
ipv6_addrsr  r	   ry  r   r  rQ   r  r   r  r  r  s   &&  r   test_server_test_ipv6$ScriptTestCase.test_server_test_ipv68  sD    OOD002KKKK;[77I $r   c                    V P                    FT  pV P                  4       p\        P                  ! W2R 7       V P	                  VP
                  \        P                  4       KV  	  R# r  )
ipv4_addrsr  r	   ry  r   r  rQ   r  r  s   &&  r   test_server_test_ipv4$ScriptTestCase.test_server_test_ipv4?  sD    OOD002KKKK;[77H $r   r   N)z::z'2001:0db8:85a3:0000:0000:8a2e:0370:7334z::1)z0.0.0.0z8.8.8.8r  )r%   r&   r'   r(   r  r   r  r  r  r  r  r  r  r)   r*   r+   s   @r   r  r    s     
 
ZZ !
 "
 
ZZ !
 "
JJ 
ZZ !J "J 
ZZ !I "Ir   r  c                  v    \         P                  ! \        P                  \        P                  ! 4       4       R # r   )rN  addModuleCleanuprg   r  r  r   r   r   setUpModuler  G  s    bhh		4r   __main__)NNrO   )Mcollectionsr   http.serverr   r   r   r   r   rv   r	   r
   rg   rQ   r>   r  r  r  r  r  email.messager  email.utilsr  http.clienturllib.parser  r  r  r  rH   rN  r   ior   r   ry  r   test.supportr   r   r   r   r   r;   ImportErrorrequires_working_socketr   r.   r7   TestCaser9   rI   rF   rb   r   r@   rP  r:  r]  rt  rv  rw  rx  rz  hasattrr&  rU  r  r  r  r  r  r  r  r  r%   mainr   r   r   <module>r     s]   $5 5 # 	  
 	                      t , 	-/G 	
  (.h'' .y'' :-8$$ -2a(\ a(HF 
n-<El <E .<E~ BL  BFd7| d7N		"		& 
Y'==BJJLA,=ACG4L G4 CG4T7 &(@   }QX%6%6 }Q@W6x'8'8 W6t
88$$ 
89IX&& 9Ix5 zMMO I1  
Cs   H3 3	I ?I 