ó
    ×›‘h;  ã                   óÐ  • S r SSKrSSKrSSKrSSKJr  SSKJrJrJ	r	J
r
  SSKJr  SSKJrJrJr  SSKJr  SSKJrJrJrJrJrJr  SS	KJrJr  SS
KJr  SSKJ r J!r!  Sr"Sr#Sr$Sr%Sr&Sr'Sr(Sr)Sr* " S S\RV                  5      r, " S S5      r- " S S\-\R\                  5      r/ " S S\-\R\                  5      r0 " S S\R\                  5      r1 " S S \R\                  5      r2S! r3g)"z!
Tests for L{twisted.web.twcgi}.
é    N)ÚBytesIO)ÚaddressÚerrorÚ
interfacesÚreactor)ÚConnectionLost)ÚfailureÚlogÚutil)Úunittest)ÚclientÚhttpÚhttp_headersÚresourceÚserverÚtwcgi)ÚINTERNAL_SERVER_ERRORÚ	NOT_FOUND)Ú_render)ÚDummyChannelÚDummyRequestz2print("Header: OK")
print("")
print("cgi output")
zJprint("Header: spam")
print("Header: eggs")
print("")
print("cgi output")
z+print("XYZ")
print("")
print("cgi output")
zPprint("Server: monkeys")
print("Date: last year")
print("")
print("cgi output")
a&  # This is an example of a correctly-written CGI script which reads a body
# from stdin, which only reads env['CONTENT_LENGTH'] bytes.

import os, sys

body_length = int(os.environ.get('CONTENT_LENGTH',0))
indata = sys.stdin.read(body_length)
print("Header: OK")
print("")
print("readinput ok")
a+  # This is an example of the typical (incorrect) CGI script which expects
# the server to close stdin when the body of the request is complete.
# A correct CGI should only read env['CONTENT_LENGTH'] bytes.

import sys

indata = sys.stdin.read()
print("Header: OK")
print("")
print("readallinput ok")
zMprint("content-type: text/cgi-duplicate-test")
print("")
print("cgi output")
z†import json
import os
print("")
print("")
vals = {x:y for x,y in os.environ.items() if x.startswith("HTTP_")}
print(json.dumps(vals))
z]import os
param = str(os.environ['QUERY_STRING'])
print("Header: OK")
print("")
print(param)
c                   ó,   • \ rS rSr\R
                  rSrg)ÚPythonScriptéb   © N)Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__ÚsysÚ
executableÚfilterÚ__static_attributes__r   ó    Ú]C:\Users\psant\Downloads\Noiseback\school\venv\Lib\site-packages\twisted/web/test/test_cgi.pyr   r   b   s   † Ø�^‰^ƒFr$   r   c                   ó&   • \ rS rSrS rS rS rSrg)Ú_StartServerAndTearDownMixinéf   c                 óD  • [         R                  " 5       n[        R                  " [        U5      nUR                  S[        U5      5        [        R                  " U5      n[        R                  " SU5      U l        U R                  R                  5       R                  $ )Ns   cgir   )r   ÚResourcer   ÚsibpathÚ__file__ÚputChildr   r   ÚSiter   Ú	listenTCPÚpÚgetHostÚport)ÚselfÚcgiÚrootÚcgipathÚsites        r%   ÚstartServerÚ(_StartServerAndTearDownMixin.startServerg   sl   € Ü× Ò Ó"ˆÜ—,’,œx¨Ó-ˆØ�‰�fœl¨7Ó3Ô4Ü�{Š{˜4Ó ˆÜ×"Ò" 1 dÓ+ˆŒØ�v‰v�~‰~Ó×$Ñ$Ð$r$   c                 ó\   • [        U SS 5      (       a  U R                  R                  5       $ g )Nr0   )Úgetattrr0   ÚstopListening)r3   s    r%   ÚtearDownÚ%_StartServerAndTearDownMixin.tearDowno   s)   € Ü�4˜˜d×#Ñ#Ø—6‘6×'Ñ'Ó)Ð)ð $r$   c                 óÐ   • [         R                  R                  U R                  5       5      n[	        US5       nUR                  U5        S S S 5        U$ ! , (       d  f       U$ = f)NÚwt)ÚosÚpathÚabspathÚmktempÚopenÚwrite)r3   ÚsourceÚcgiFilenameÚcgiFiles       r%   ÚwriteCGIÚ%_StartServerAndTearDownMixin.writeCGIs   sL   € Ü—g‘g—o‘o d§k¡k£mÓ4ˆÜ�+˜tÔ$¨Ø�M‰M˜&Ô!÷ %àÐ÷ %Ô$àÐús   ºAÁ
A%)r0   N)r   r   r   r   r8   r=   rJ   r#   r   r$   r%   r'   r'   f   s   † ò%ò*õr$   r'   c                   óÚ   • \ rS rSrSr\R                  R                  \5      (       d  Sr	S r
S rS rS rS rS	 rS
 rS rS\l        S rS rS\l        S rS rS\l        S rS rSrg)ÚCGITestséz   z$
Tests for L{twcgi.FilteredScript}.
z5CGI tests require a functional reactor.spawnProcess()c                 óH  • U R                  [        5      nU R                  U5      nSU4-  nUR                  S5      n[        R
                  " [        5      R                  SU5      nUR                  [        R                  5        UR                  U R                  5        U$ )Núhttp://localhost:%d/cgiÚasciió   GET)rJ   Ú	DUMMY_CGIr8   Úencoder   ÚAgentr   ÚrequestÚaddCallbackÚreadBodyÚ
_testCGI_1)r3   rH   ÚportnumÚurlÚds        r%   Útest_CGIÚCGITests.test_CGI‚   sz   € Ø—m‘m¤IÓ.ˆà×"Ñ" ;Ó/ˆØ'¨7¨*Ñ4ˆØ�j‰j˜Ó!ˆÜ�LŠLœÓ!×)Ñ)¨&°#Ó6ˆØ	�‰”f—o‘oÔ&Ø	�‰�d—o‘oÔ&Øˆr$   c                 óh   • U R                  US[        R                  R                  S5      -   5        g )Ns
   cgi outputrQ   )ÚassertEqualrA   ÚlineseprT   )r3   Úress     r%   rY   ÚCGITests._testCGI_1�   s&   € Ø×Ñ˜˜m¬b¯j©j×.?Ñ.?ÀÓ.HÑHÕIr$   c                 ó2  ^ • T R                  [        5      nT R                  U5      nSU4-  nUR                  S5      n[        R
                  " [        5      nUR                  SU5      nUR                  [        5        U 4S jnUR                  U5        U$ )zK
If the CGI script emits a I{Server} or I{Date} header, these are
ignored.
rP   rQ   rR   c                 ó²   >• TR                  SU R                  R                  S5      5        TR                  SU R                  R                  S5      5        g )NÚmonkeysr   z	last yearÚdate)ÚassertNotInÚheadersÚgetRawHeaders©Úresponser3   s    €r%   ÚcheckResponseÚ;CGITests.test_protectedServerAndDate.<locals>.checkResponsež   sE   ø€ Ø×Ñ˜Y¨×(8Ñ(8×(FÑ(FÀxÓ(PÔQØ×Ñ˜[¨(×*:Ñ*:×*HÑ*HÈÓ*PÕQr$   )
rJ   ÚSPECIAL_HEADER_CGIr8   rT   r   rU   r   rV   rW   ÚdiscardBody©r3   rH   rZ   r[   Úagentr\   rm   s   `      r%   Útest_protectedServerAndDateÚ$CGITests.test_protectedServerAndDate�   s�   ø€ ð
 —m‘mÔ$6Ó7ˆà×"Ñ" ;Ó/ˆØ'¨7¨*Ñ4ˆØ�j‰j˜Ó!ˆÜ—’œWÓ%ˆØ�M‰M˜& #Ó&ˆØ	�‰”kÔ"õ	Rð 	
�‰�mÔ$Øˆr$   c                 ó2  ^ • T R                  [        5      nT R                  U5      nSU4-  nUR                  S5      n[        R
                  " [        5      nUR                  SU5      nUR                  [        5        U 4S jnUR                  U5        U$ )zŒ
If the CGI script emits a I{content-type} header, make sure that the
server doesn't add an additional (duplicate) one, as per ticket 4786.
rP   rQ   rR   c                 ó`   >• TR                  U R                  R                  S5      S/5        U $ )Nzcontent-typeztext/cgi-duplicate-test©r`   ri   rj   rk   s    €r%   rm   ÚBCGITests.test_noDuplicateContentTypeHeaders.<locals>.checkResponse³   s2   ø€ Ø×ÑØ× Ñ ×.Ñ.¨~Ó>Ø*Ð+ôð ˆOr$   )
rJ   Ú$NO_DUPLICATE_CONTENT_TYPE_HEADER_CGIr8   rT   r   rU   r   rV   rW   rp   rq   s   `      r%   Ú"test_noDuplicateContentTypeHeadersÚ+CGITests.test_noDuplicateContentTypeHeaders¥   s€   ø€ ð
 —m‘mÔ$HÓIˆà×"Ñ" ;Ó/ˆØ'¨7¨*Ñ4ˆØ�j‰j˜Ó!ˆÜ—’œWÓ%ˆØ�M‰M˜& #Ó&ˆØ	�‰”kÔ"õ	ð 	
�‰�mÔ$Øˆr$   c                 óx  ^ • T R                  [        5      nT R                  U5      nSU4-  nUR                  S5      n[        R
                  " [        5      n[        R                  " S/S/S.5      nUR                  SX5S9nU 4S jnUR                  [        R                  5        UR                  U5        U$ )	zF
The CGI script is never called with the Proxy header passed through.
rP   rQ   s   foos   bar)s   Proxys   X-Innocent-HeaderrR   )ri   c                 ó¦   >• [         R                  " U R                  S5      5      nTR                  [	        UR                  5       5      1 Sk5        g )NrQ   >   Ú	HTTP_HOSTÚHTTP_CONNECTIONÚHTTP_X_INNOCENT_HEADER)ÚjsonÚloadsÚdecoder`   ÚsetÚkeys)rl   ri   r3   s     €r%   rm   Ú7CGITests.test_noProxyPassthrough.<locals>.checkResponseÎ   s9   ø€ Ü—j’j §¡°Ó!9Ó:ˆGØ×ÑÜ�G—L‘L“NÓ#ÚJõr$   )rJ   ÚHEADER_OUTPUT_CGIr8   rT   r   rU   r   r   ÚHeadersrV   rW   rX   )r3   rH   rZ   r[   rr   ri   r\   rm   s   `       r%   Útest_noProxyPassthroughÚ CGITests.test_noProxyPassthrough½   s¤   ø€ ð —m‘mÔ$5Ó6ˆà×"Ñ" ;Ó/ˆØ'¨7¨*Ñ4ˆØ�j‰j˜Ó!ˆä—’œWÓ%ˆä×&Ò&Ø�x¸°xÑ@ó
ˆð �M‰M˜& #ˆMÐ7ˆõ	ð 	
�‰”f—o‘oÔ&Ø	�‰�mÔ$Øˆr$   c                 ó2  ^ • T R                  [        5      nT R                  U5      nSU4-  nUR                  S5      n[        R
                  " [        5      nUR                  SU5      nUR                  [        5        U 4S jnUR                  U5        U$ )zX
If a CGI script emits two instances of the same header, both are sent
in the response.
rP   rQ   rR   c                 ó`   >• TR                  U R                  R                  S5      SS/5        g )NÚheaderÚspamÚeggsrw   rk   s    €r%   rm   Ú7CGITests.test_duplicateHeaderCGI.<locals>.checkResponseç   s*   ø€ Ø×Ñ˜X×-Ñ-×;Ñ;¸HÓEÈÐPVÐGWÕXr$   )
rJ   ÚDUAL_HEADER_CGIr8   rT   r   rU   r   rV   rW   rp   rq   s   `      r%   Útest_duplicateHeaderCGIÚ CGITests.test_duplicateHeaderCGIÙ   s€   ø€ ð
 —m‘m¤OÓ4ˆà×"Ñ" ;Ó/ˆØ'¨7¨*Ñ4ˆØ�j‰j˜Ó!ˆÜ—’œWÓ%ˆØ�M‰M˜& #Ó&ˆØ	�‰”kÔ"õ	Yð 	
�‰�mÔ$Øˆr$   c                 ó²  ^ ^• T R                  [        5      nT R                  U5      nSU4-  nUR                  S5      n[        R
                  " [        5      nUR                  SU5      nUR                  [        5        / mU4S jn[        R                  " U5        T R                  [        R                  U5        UU 4S jnUR                  U5        U$ )z6
Check for the error message in the duplicated header
rP   rQ   rR   c                 óP   >• TR                  [        R                  " U 5      5        g ©N)Úappendr
   ÚtextFromEventDict)Ú	eventDictÚloggedMessagess    €r%   Ú
addMessageÚ4CGITests.test_malformedHeaderCGI.<locals>.addMessageû   s   ø€ Ø×!Ñ!¤#×"7Ò"7¸	Ó"BÕCr$   c                 óB   >• TR                  S[        S5      -   T5        g )Nzignoring malformed CGI header: s   XYZ)ÚassertInÚrepr)Úignoredrš   r3   s    €€r%   rm   Ú7CGITests.test_malformedHeaderCGI.<locals>.checkResponse  s   ø€ Ø�M‰MØ1´D¸³LÑ@À.õr$   )rJ   ÚBROKEN_HEADER_CGIr8   rT   r   rU   r   rV   rW   rp   r
   ÚaddObserverÚ
addCleanupÚremoveObserver)	r3   rH   rZ   r[   rr   r\   r›   rm   rš   s	   `       @r%   Útest_malformedHeaderCGIÚ CGITests.test_malformedHeaderCGIí   s­   ù€ ð —m‘mÔ$5Ó6ˆà×"Ñ" ;Ó/ˆØ'¨7¨*Ñ4ˆØ�j‰j˜Ó!ˆÜ—’œWÓ%ˆØ�M‰M˜& #Ó&ˆØ	�‰”kÔ"Øˆõ	Dô 	�Š˜
Ô#Ø�‰œ×*Ñ*¨JÔ7ö	ð
 	
�‰�mÔ$Øˆr$   c                 óò  • [         R                  R                  U R                  5       5      n[	        US5       nUR                  [        5        S S S 5        U R                  U5      n[        R                  " [        5      nSU4-  nUR                  S5      nUR                  SU5      nUR                  [        R                  5        UR                  U R                  5        U$ ! , (       d  f       Nž= f)Nr@   rP   rQ   rR   )rA   rB   rC   rD   rE   rF   ÚREADINPUT_CGIr8   r   rU   r   rT   rV   rW   rX   Ú_test_ReadEmptyInput_1©r3   rH   rI   rZ   rr   r[   r\   s          r%   Útest_ReadEmptyInputÚCGITests.test_ReadEmptyInput	  s±   € Ü—g‘g—o‘o d§k¡k£mÓ4ˆÜ�+˜tÔ$¨Ø�M‰Mœ-Ô(÷ %ð ×"Ñ" ;Ó/ˆÜ—’œWÓ%ˆØ'¨7¨*Ñ4ˆØ�j‰j˜Ó!ˆØ�M‰M˜& #Ó&ˆØ	�‰”f—o‘oÔ&Ø	�‰�d×1Ñ1Ô2Øˆ÷ %Õ$ús   ºC(Ã(
C6é   c                 ón   • S[         R                   3nUR                  S5      nU R                  X5        g ©Nzreadinput okrQ   ©rA   ra   rT   r`   ©r3   rb   Úexpecteds      r%   rª   ÚCGITests._test_ReadEmptyInput_1  ó.   € Ø!¤"§*¡* Ð.ˆØ—?‘? 7Ó+ˆØ×Ñ˜Õ'r$   c           	      ó*  • [         R                  R                  U R                  5       5      n[	        US5       nUR                  [        5        S S S 5        U R                  U5      n[        R                  " [        5      nSU4-  nUR                  S5      nUR                  US[        R                  " [        S5      5      S9nUR                  [        R                   5        UR                  U R"                  5        U$ ! , (       d  f       Nº= f©Nr@   rP   rQ   s   POSTs   Here is your stdin)ÚuriÚmethodÚbodyProducer)rA   rB   rC   rD   rE   rF   r©   r8   r   rU   r   rT   rV   ÚFileBodyProducerr   rW   rX   Ú_test_ReadInput_1r«   s          r%   Útest_ReadInputÚCGITests.test_ReadInput  sÐ   € Ü—g‘g—o‘o d§k¡k£mÓ4ˆÜ�+˜tÔ$¨Ø�M‰Mœ-Ô(÷ %ð ×"Ñ" ;Ó/ˆÜ—’œWÓ%ˆØ'¨7¨*Ñ4ˆØ�j‰j˜Ó!ˆØ�M‰MØØÜ×0Ò0´Ð9NÓ1OÓPð ð 
ˆð
 	
�‰”f—o‘oÔ&Ø	�‰�d×,Ñ,Ô-Øˆ÷ %Õ$ús   ºDÄ
Dc                 ón   • S[         R                   3nUR                  S5      nU R                  X5        g r°   r±   r²   s      r%   r¼   ÚCGITests._test_ReadInput_12  rµ   r$   c           	      ó&  • [         R                  R                  U R                  5       5      n[	        US5       nUR                  [        5        S S S 5        U R                  U5      nSU4-  nUR                  S5      n[        R                  " [        5      R                  US[        R                  " [        S5      5      S9nUR                  [        R                   5        UR                  U R"                  5        U$ ! , (       d  f       N¸= fr·   )rA   rB   rC   rD   rE   rF   ÚREADALLINPUT_CGIr8   rT   r   rU   r   rV   r»   r   rW   rX   Ú_test_ReadAllInput_1)r3   rH   rI   rZ   r[   r\   s         r%   Útest_ReadAllInputÚCGITests.test_ReadAllInput7  sÎ   € Ü—g‘g—o‘o d§k¡k£mÓ4ˆÜ�+˜tÔ$¨Ø�M‰MÔ*Ô+÷ %ð ×"Ñ" ;Ó/ˆØ'¨7¨*Ñ4ˆØ�j‰j˜Ó!ˆÜ�LŠLœÓ!×)Ñ)ØØÜ×0Ò0´Ð9NÓ1OÓPð *ð 
ˆð
 	
�‰”f—o‘oÔ&Ø	�‰�d×/Ñ/Ô0Øˆ÷ %Õ$ús   ºDÄ
Dc                 ón   • S[         R                   3nUR                  S5      nU R                  X5        g )Nzreadallinput okrQ   r±   r²   s      r%   rÃ   ÚCGITests._test_ReadAllInput_1J  s.   € Ø$¤R§Z¡Z LÐ1ˆØ—?‘? 7Ó+ˆØ×Ñ˜Õ'r$   c                 óð   •  " S S5      nU" 5       n[        SS/5      n[        R                  " SSS5      Ul        [        R
                  " SUS	9n[        XC5        U R                  UR                  5        g
)z_
L{twcgi.FilteredScript.runProcess} uses the reactor passed as an
argument to the constructor.
c                   ó"   • \ rS rSrSrSrS rSrg)Ú5CGITests.test_useReactorArgument.<locals>.FakeReactoriU  z:
A fake reactor recording whether spawnProcess is called.
Fc                 ó   • SU l         g)z‡
Set the C{called} flag to C{True} if C{spawnProcess} is called.

@param args: Positional arguments.
@param kwargs: Keyword arguments.
TN©Úcalled)r3   ÚargsÚkwargss      r%   ÚspawnProcessÚBCGITests.test_useReactorArgument.<locals>.FakeReactor.spawnProcess\  s   € ð #�•r$   rÌ   N)r   r   r   r   Ú__doc__rÍ   rÐ   r#   r   r$   r%   ÚFakeReactorrÊ   U  s   † ñð ˆFõ#r$   rÓ   ÚaÚbÚTCPú	127.0.0.1é90  z
dummy-file©r   N)	r   r   ÚIPv4Addressr   r   ÚFilteredScriptr   Ú
assertTruerÍ   )r3   rÓ   ÚfakeReactorrV   r   s        r%   Útest_useReactorArgumentÚ CGITests.test_useReactorArgumentO  se   € ÷	#ñ 	#ñ  "“mˆÜ  S˜zÓ*ˆÜ ×,Ò,¨U°KÀÓGˆŒÜ×'Ò'¨¸kÑJˆÜ�Ô"à�‰˜×*Ñ*Õ+r$   r   N)r   r   r   r   rÒ   r   ÚIReactorProcessÚ
providedByr   Úskipr]   rY   rs   rz   r‰   r’   r¦   r¬   Útimeoutrª   r½   r¼   rÄ   rÃ   rÞ   r#   r   r$   r%   rM   rM   z   sŒ   † ñð ×%Ñ%×0Ñ0°×9Ñ9ØFˆò	òJòò*ò0ò8ò(ò8ð #$ÐÔò(ò
ð$ €NÔò(ò
ð" !"ÐÔò(õ
,r$   rM   c                   ó*   • \ rS rSrSrS rS rS rSrg)ÚCGIScriptTestsin  z
Tests for L{twcgi.CGIScript}.
c                 ó*  • U R                  [        5      nU R                  U5      nSU4-  n[        R                  " [
        5      nUR                  SU5      nUR                  [        R                  5        UR                  U R                  5        U$ )zS
If the CGI script is passed URL parameters, do not fall over,
as per ticket 9887.
s"   http://localhost:%d/cgi?param=1234rR   )
rJ   ÚURL_PARAMETER_CGIr8   r   rU   r   rV   rW   rX   Ú_test_urlParameters_1)r3   rH   rZ   r[   rr   r\   s         r%   Útest_urlParametersÚ!CGIScriptTests.test_urlParameterss  st   € ð
 —m‘mÔ$5Ó6ˆØ×"Ñ" ;Ó/ˆØ3°w°jÑ@ˆÜ—’œWÓ%ˆØ�M‰M˜& #Ó&ˆØ	�‰”f—o‘oÔ&Ø	�‰�d×0Ñ0Ô1Øˆr$   c                 ón   • S[         R                   3nUR                  S5      nU R                  X5        g )Nz
param=1234rQ   r±   r²   s      r%   rè   Ú$CGIScriptTests._test_urlParameters_1�  s.   € Ø¤§
¡
˜|Ð,ˆØ—?‘? 7Ó+ˆØ×Ñ˜Õ'r$   c                 ó  •  " S S5      nU" 5       n[         R                  " U R                  5       US9n[        SS/5      n[        R
                  " SSS5      Ul        [        X45        U R                  UR                  S	   S
5        g)z\
L{twcgi.CGIScript.render} sets the process environment
I{PATH_INFO} from the request path.
c                   ó   • \ rS rSrSrS rSrg)Ú1CGIScriptTests.test_pathInfo.<locals>.FakeReactoriŒ  zB
A fake reactor recording the environment passed to spawnProcess.
c                 ó   • X@l         g)zÉ
Store the C{env} L{dict} to an instance attribute.

@param process: Ignored
@param filename: Ignored
@param args: Ignored
@param env: The environment L{dict} which will be stored
@param wdir: Ignored
N©Úprocess_env)r3   ÚprocessÚfilenamerÎ   ÚenvÚwdirs         r%   rÐ   Ú>CGIScriptTests.test_pathInfo.<locals>.FakeReactor.spawnProcess‘  s
   € ð $'Õ r$   rñ   N)r   r   r   r   rÒ   rÐ   r#   r   r$   r%   rÓ   rï   Œ  s   † ñõ
'r$   rÓ   rÙ   rÔ   rÕ   rÖ   r×   rØ   Ú	PATH_INFOz/a/bN)
r   Ú	CGIScriptrD   r   r   rÚ   r   r   r`   rò   )r3   rÓ   Ú_reactorr   rV   s        r%   Útest_pathInfoÚCGIScriptTests.test_pathInfo†  sr   € ÷	'ñ 	'ñ" “=ˆÜ—?’? 4§;¡;£=¸(ÑCˆÜ  S˜zÓ*ˆÜ ×,Ò,¨U°KÀÓGˆŒÜ�Ô"à×Ñ˜×-Ñ-¨kÑ:¸FÕCr$   r   N)	r   r   r   r   rÒ   ré   rè   rû   r#   r   r$   r%   rå   rå   n  s   † ñòò(õ
Dr$   rå   c                   ó$   • \ rS rSrSrS rS rSrg)ÚCGIDirectoryTestsi¦  z"
Tests for L{twcgi.CGIDirectory}.
c                 ó²   ^ ^• [         R                  " T R                  5       5      n[        S/5      m[	        UT5      nUU 4S jnUR                  U5        U$ )zK
L{twcgi.CGIDirectory.render} sets the HTTP response code to I{NOT
FOUND}.
Ú c                 óF   >• TR                  TR                  [        5        g r–   ©r`   ÚresponseCoder   ©r    rV   r3   s    €€r%   Ú
cbRenderedÚ1CGIDirectoryTests.test_render.<locals>.cbRendered´  ó   ø€ Ø×Ñ˜W×1Ñ1´9Õ=r$   )r   ÚCGIDirectoryrD   r   r   rW   )r3   r   r\   r  rV   s   `   @r%   Útest_renderÚCGIDirectoryTests.test_render«  sK   ù€ ô
 ×%Ò% d§k¡k£mÓ4ˆÜ ˜tÓ$ˆÜ�H˜gÓ&ˆö	>ð 	
�‰�jÔ!Øˆr$   c                 ó  ^ ^• T R                  5       n[        R                  " U5        [        R                  " U5      n[        S/5      mUR                  " ST5      n[        UT5      nUU 4S jnUR                  U5        U$ )zæ
L{twcgi.CGIDirectory.getChild} returns a resource which renders an
response with the HTTP I{NOT FOUND} status code if the indicated child
does not exist as an entry in the directory used to initialized the
L{twcgi.CGIDirectory}.
Úfooc                 óF   >• TR                  TR                  [        5        g r–   r  r  s    €€r%   r  Ú8CGIDirectoryTests.test_notFoundChild.<locals>.cbRenderedÈ  r  r$   )	rD   rA   Úmakedirsr   r  r   ÚgetChildr   rW   )r3   rB   r   Úchildr\   r  rV   s   `     @r%   Útest_notFoundChildÚ$CGIDirectoryTests.test_notFoundChildº  sn   ù€ ð �{‰{‹}ˆÜ
�Š�DÔÜ×%Ò% dÓ+ˆÜ ˜wÓ'ˆØ×!Ò! %¨Ó1ˆÜ�E˜7Ó#ˆö	>ð 	
�‰�jÔ!Øˆr$   r   N)r   r   r   r   rÒ   r	  r  r#   r   r$   r%   rþ   rþ   ¦  s   † ñòõr$   rþ   c                   ó$   • \ rS rSrSrS rS rSrg)ÚCGIProcessProtocolTestsiÏ  z(
Tests for L{twcgi.CGIProcessProtocol}.
c                 óø   • [        S/5      n[        R                  " U5      nUR                  [        R
                  " [        R                  " 5       5      5        U R                  UR                  [        5        g)z¢
If the process communicating with L{CGIProcessProtocol} ends before
finishing writing out headers, the response has I{INTERNAL SERVER
ERROR} as its status code.
r   N)r   r   ÚCGIProcessProtocolÚprocessEndedr	   ÚFailurer   ÚProcessTerminatedr`   r  r   )r3   rV   Úprotocols      r%   Útest_prematureEndOfHeadersÚ2CGIProcessProtocolTests.test_prematureEndOfHeadersÔ  sW   € ô  ˜tÓ$ˆÜ×+Ò+¨GÓ4ˆØ×ÑœgŸošo¬e×.EÒ.EÓ.GÓHÔIØ×Ñ˜×-Ñ-Ô/DÕEr$   c                 ó>  • [        5       n[        R                  " US5      n[        R                  " U5      nUR                  [        R                  " [        S5      5      5        UR                  [        R                  " [        R                  " 5       5      5        g)zO
Ensure that the CGI process ends cleanly when the request connection
is lost.
TzConnection doneN)r   r   ÚRequestr   r  ÚconnectionLostr	   r  r   r  r   r  )r3   r\   rV   r  s       r%   Útest_connectionLostÚ+CGIProcessProtocolTests.test_connectionLostß  sh   € ô
 ‹NˆÜ—,’,˜q $Ó'ˆÜ×+Ò+¨GÓ4ˆØ×ÑœwŸš¬~Ð>OÓ/PÓQÔRØ×ÑœgŸošo¬e×.EÒ.EÓ.GÓHÕIr$   r   N)r   r   r   r   rÒ   r  r!  r#   r   r$   r%   r  r  Ï  s   † ñò	Fõ	Jr$   r  c                 óV   ^ • [         R                  " T 5      R                  U 4S j5      $ )z^
Discard the body of a HTTP response.

@param response: The response.

@return: The response.
c                 ó   >• T$ r–   r   )Ú_rl   s    €r%   Ú<lambda>ÚdiscardBody.<locals>.<lambda>ó  s   ø€ ¹8r$   )r   rX   rW   )rl   s   `r%   rp   rp   ë  s    ø€ ô �?Š?˜8Ó$×0Ñ0Ô1CÓDÐDr$   )4rÒ   r�   rA   r    Úior   Útwisted.internetr   r   r   r   Útwisted.internet.errorr   Útwisted.pythonr	   r
   r   Útwisted.trialr   Útwisted.webr   r   r   r   r   r   Útwisted.web.httpr   r   Útwisted.web.test._utilr   Útwisted.web.test.requesthelperr   r   rS   r‘   r¢   ro   r©   rÂ   ry   r‡   rç   rÛ   r   r'   ÚTestCaserM   rå   rþ   r  rp   r   r$   r%   Ú<module>r2     s÷   ðñó Û 	Û 
Ý ç @Ó @Ý 1ß -Ñ -Ý "ß K× Kß =Ý *ß Eð€	ð€ðÐ ðÐ ð€ðÐ ð(Ð $ðÐ ðÐ ô�5×'Ñ'ô ÷ñ ô(q,Ð+¨X×->Ñ->ô q,ôh5DÐ1°8×3DÑ3Dô 5Dôp&˜×)Ñ)ô &ôRJ˜h×/Ñ/ô Jó8Er$   