
                         L    S SK r S SKrS SKrS SKrS SKJr  S SKr " S S5      rg)    N)Serverc                       \ rS rSrS rS rS rS rS rS r	\
R                  R                  SS	9S
 5       rS rS rS rS rSrg)TestTestServer   c                 .  ^^ SmSmUU4S jn[        U5       u  p#[        R                  " 5       nUR                  X#45        UR                  T5        UR	                  S5      nUT:X  d   eUR                  5         SSS5        g! , (       d  f       g= f)z'messages are sent and received properlys   success?s   yeah, successc                 Z   > U R                  S5      nUT:X  d   eU R                  T5        g )N  )recvsendall)socktextanswerquestions     =platform/gsutil/third_party/requests/tests/test_testserver.pyhandler*TestTestServer.test_basic.<locals>.handler   s*    99T?D8###LL     r	   N)r   socketconnectr   r
   close)selfr   hostportr   r   r   r   s         @@r   
test_basicTestTestServer.test_basic   sp    !	!
 G_==?DLL$&LL"99T?D6>!>JJL __s   A$B
Bc                    [         R                  " 5        u  p[        R                  " 5       nUR                  X45        UR	                  5         SSS5        [
        R                  " [        R                  5         [        R                  " 5       nUR                  WW45        SSS5        g! , (       d  f       Nd= f! , (       d  f       g= f)z2the server closes when leaving the context managerN)r   basic_response_serverr   r   r   pytestraiseserror)r   r   r   r   new_socks        r   test_server_closes!TestTestServer.test_server_closes   s    ))+|==?DLL$&JJL	 , ]]6<<(}}HdD\* )( ,+ )(s   :B.<)B?.
B<?
Cc                    [         R                  " S5      nU u  p#[        R                  " SU SU 35      nUR                  S:X  d   eUR
                  S:X  d   eUR                  S   S:X  d   e SSS5        g! , (       d  f       g= f)	z-the text_response_server sends the given textz,HTTP/1.1 200 OK
Content-Length: 6

roflolhttp://:   roflolContent-Length6N)r   text_response_serverrequestsgetstatus_coder   headers)r   serverr   r   rs        r   test_text_response!TestTestServer.test_text_response*   s    ,,F
 |wtfAdV45A==C'''66X%%%99-.#555 VVs   AA;;
B	c                    [         R                  " 5        u  p[        R                  " SU SU 35      nUR                  S:X  d   eUR
                  S:X  d   eUR                  S   S:X  d   e SSS5        g! , (       d  f       g= f)z8the basic response server returns an empty http responser%   r&   r'    r)   0N)r   r   r,   r-   r.   r   r/   )r   r   r   r1   s       r   test_basic_response"TestTestServer.test_basic_response7   ss    ))+|wtfAdV45A==C'''66R<<99-.#555	 ,++s   AA88
Bc                 n   [         R                  " 5       n[        R                  " US9 u  nn[        R                  " 5       nUR                  X#45        UR                  S5        [        R                  " S5        UR                  S5        UR                  5         SSS5        g! , (       d  f       g= f)zDthe server waits for the block_server event to be set before closing)wait_to_close_events   send somethingg      @s   still aliveN)
	threadingEventr   r   r   r   r   timesleepset)r   block_serverr   r   r   s        r   test_basic_waiting_server(TestTestServer.test_basic_waiting_server?   s~     ())lK P
==?DLL$&LL*+JJsOLL( LKKs   A3B&&
B4c                    Sn[         R                  " US9nU u  p4SU SU 3n[        U5       H+  n[        R                  " U5      nUR
                  S:X  a  M+   e   [        R                  " [        R                  R                  5         [        R                  " U5      nSSS5        SSS5        g! , (       d  f       N= f! , (       d  f       g= f)zmultiple requests can be served   requests_to_handler%   r&   r'   N)
r   r   ranger,   r-   r.   r   r   
exceptionsConnectionError)r   rF   r0   r   r   
server_url_r1   s           r   test_multiple_requests%TestTestServer.test_multiple_requestsN   s    --AST|"4&$0J-.LL,}}+++ /
 x22BBCLL, D V DC Vs)   =C2CB4#C4
C	>C
Cz3this fails non-deterministically under pytest-xdist)reasonc                    [         R                  " SS9nSnSnU n[        R                  " 5       n[        R                  " 5       nUR                  U5        UR	                  U5        UR                  5         UR                  U5        UR	                  U5        UR                  5         SSS5        UR                  S   U:X  d   eUR                  S   U:X  d   eg! , (       d  f       N9= f)zcan check the requests content   rE   s   put your hands up in the airs   put your hand down in the floorNr      )r   r   r   r   r   r   handler_results)r   r0   first_requestsecond_requestaddresssock1sock2s          r   test_request_recovery$TestTestServer.test_request_recovery^   s     --C7;wMMOEMMOEMM'"MM-(KKMMM'"MM.)KKM  %%a(M999%%a(N::: Vs   BC
C+c                 H   [         R                  " SS9nU n[        R                  " 5       nUR                  U5        [        R
                  " S5        UR                  S5        UR                  5         SSS5        UR                  S   S:X  d   eg! , (       d  f       N$= f)z<the basic response handler times out when receiving requestsrQ   request_timeout      ?s   hehehe, not receivedNr   r   	r   r   r   r   r=   r>   r   r   rR   )r   r0   rU   r   s       r   ,test_requests_after_timeout_are_not_received;TestTestServer.test_requests_after_timeout_are_not_receivedu   sw    --a@w==?DLL!JJsOLL01JJL  %%a(C/// Vs   AB
B!c                 L   [         R                  " SS9nSnU n[        R                  " 5       nUR                  U5        [        R
                  " S5        UR                  U5        UR                  5         SSS5        UR                  S   U:X  d   eg! , (       d  f       N$= f)z"a biggest timeout can be specified   r[   s
   bananadiner]   Nr   r^   )r   r0   datarU   r   s        r   )test_request_recovery_with_bigger_timeout8TestTestServer.test_request_recovery_with_bigger_timeout   s{    --a@w==?DLL!JJsOLLJJL  %%a(D000 Vs   AB
B#c                    [         R                  " 5       n[        R                  " [        5         U   [	        5       e! , (       d  f       O= f SSS5        O! , (       d  f       O= f[        UR                  5      S:X  d   eg)zFthe server thread exits even if an exception exits the context managerNr   )r   r   r   r   	ExceptionlenrR   r   r0   s     r   test_server_finishes_on_error,TestTestServer.test_server_finishes_on_error   sX    --/]]9%k!  &%% 6))*a///s   A>
A	A
A'c                     [         R                  " 5       nU    SSS5        [        UR                  5      S:X  d   eg! , (       d  f       N*= f)z8the server thread exits even if there are no connectionsNr   )r   r   rh   rR   ri   s     r   (test_server_finishes_when_no_connections7TestTestServer.test_server_finishes_when_no_connections   s>    --/  6))*a/// Vs	   >
A N)__name__
__module____qualname____firstlineno__r   r"   r2   r7   rA   rL   r   markskiprX   r_   rd   rj   rm   __static_attributes__ro   r   r   r   r      s\    $
+66-  [[RS; T;,0100r   r   )r   r;   r=   r   tests.testserver.serverr   r,   r   ro   r   r   <module>rx      s#        * W0 W0r   