
                         L    d dl Z d dlZd dlZd dlZd dlmZ d dlZ G d d      Zy)    N)Serverc                       e Zd Zd Zd Zd Zd Zd Zd Ze	j                  j                  d      d	        Zd
 Zd Zd Zd Zy)TestTestServerc                 "   ddfd}t        |      5 \  }}t        j                         }|j                  ||f       |j                         |j	                  d      }|k(  sJ |j                          ddd       y# 1 sw Y   yxY w)z'messages are sent and received properlys   success?s   yeah, successc                 X    | j                  d      }|k(  sJ | j                         y )N  )recvsendall)socktextanswerquestions     =platform/gsutil/third_party/requests/tests/test_testserver.pyhandlerz*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_basiczTestTestServer.test_basic   st    !	!
 G_t==?DLL$&LL"99T?D6>!>JJL __s   A$BBc                    t        j                         5 \  }}t        j                         }|j                  ||f       |j	                          ddd       t        j                  t        j                        5  t        j                         }|j                  f       ddd       y# 1 sw Y   ]xY w# 1 sw Y   yxY w)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_closesz!TestTestServer.test_server_closes   s    ))+|d==?DLL$&JJL	 , ]]6<<(}}HdD\* )( ,+ )(s   ;B,;(B8,B58Cc                    t        j                  d      }|5 \  }}t        j                  d| d|       }|j                  dk(  sJ |j
                  dk(  sJ |j                  d   dk(  sJ 	 ddd       y# 1 sw Y   yxY w)	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_responsez!TestTestServer.test_text_response*   s    ,,F
 |dwtfAdV45A==C'''66X%%%99-.#555 VVs   AA77B c                     t        j                         5 \  }}t        j                  d| d|       }|j                  dk(  sJ |j
                  dk(  sJ |j                  d   dk(  sJ 	 ddd       y# 1 sw Y   yxY w)z8the basic response server returns an empty http responser!   r"   r#    r%   0N)r   r   r(   r)   r*   r   r+   )r   r   r   r-   s       r   test_basic_responsez"TestTestServer.test_basic_response7   su    ))+|dwtfAdV45A==C'''66R<<99-.#555	 ,++s   AA44A=c                 d   t        j                         }t        j                  |      5 \  }}t	        j                         }|j                  ||f       |j                  d       t        j                  d       |j                  d       |j                          ddd       y# 1 sw Y   yxY w)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_serverz(TestTestServer.test_basic_waiting_server?   s     ())lK P
==?DLL$&LL*+JJsOLL( LKKs   A2B&&B/c                    d}t        j                  |      }|5 \  }}d| d| }t        |      D ](  }t        j                  |      }|j
                  dk(  r(J  t        j                  t        j                  j                        5  t        j                  |      }ddd       ddd       y# 1 sw Y   xY w# 1 sw Y   yxY w)zmultiple requests can be served   requests_to_handler!   r"   r#   N)
r   r   ranger(   r)   r*   r   r   
exceptionsConnectionError)r   r?   r,   r   r   
server_url_r-   s           r   test_multiple_requestsz%TestTestServer.test_multiple_requestsN   s    --AST|d"4&$0J-.LL,}}+++ /
 x22BBCLL, D V DC Vs)   >B=0B=
B1 B=1B:	6B==Cz3this fails non-deterministically under pytest-xdist)reasonc                    t        j                  d      }d}d}|5 }t        j                         }t        j                         }|j                  |       |j	                  |       |j                          |j                  |       |j	                  |       |j                          ddd       |j                  d   |k(  sJ |j                  d   |k(  sJ y# 1 sw Y   2xY w)zcan check the requests content   r>   s   put your hands up in the airs   put your hand down in the floorNr      )r   r   r   r   r
   r   handler_results)r   r,   first_requestsecond_requestaddresssock1sock2s          r   test_request_recoveryz$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                 <   t        j                  d      }|5 }t        j                         }|j                  |       t	        j
                  d       |j                  d       |j                          ddd       |j                  d   dk(  sJ y# 1 sw Y   xY w)z<the basic response handler times out when receiving requestsrI   request_timeout      ?s   hehehe, not receivedNr   r   	r   r   r   r   r7   r8   r
   r   rJ   )r   r,   rM   r   s       r   ,test_requests_after_timeout_are_not_receivedz;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                 @   t        j                  d      }d}|5 }t        j                         }|j                  |       t	        j
                  d       |j                  |       |j                          ddd       |j                  d   |k(  sJ y# 1 sw Y   xY w)z"a biggest timeout can be specified   rR   s
   bananadinerT   Nr   rU   )r   r,   datarM   r   s        r   )test_request_recovery_with_bigger_timeoutz8TestTestServer.test_request_recovery_with_bigger_timeout   s{    --a@w==?DLL!JJsOLLJJL  %%a(D000 Vs   ABBc                     t        j                         }t        j                  t              5  |5  t	               # 1 sw Y   nxY w	 ddd       n# 1 sw Y   nxY wt        |j                        dk(  sJ y)zFthe server thread exits even if an exception exits the context managerNr   )r   r   r   r   	ExceptionlenrJ   r   r,   s     r   test_server_finishes_on_errorz,TestTestServer.test_server_finishes_on_error   sX    --/]]9%k!  &%% 6))*a///s   A<A	AAc                     t        j                         }|5  	 ddd       t        |j                        dk(  sJ y# 1 sw Y   $xY w)z8the server thread exits even if there are no connectionsNr   )r   r   r]   rJ   r^   s     r   (test_server_finishes_when_no_connectionsz7TestTestServer.test_server_finishes_when_no_connections   s>    --/  6))*a/// Vs	   <AN)__name__
__module____qualname__r   r   r.   r2   r;   rE   r   markskiprP   rV   rZ   r_   ra    r   r   r   r      s\    $
+66-  [[RS; T;,0100r   r   )r   r5   r7   r   tests.testserver.serverr   r(   r   rg   r   r   <module>ri      s#        * W0 W0r   