
    gpT                    n   d dl Z d dlZd dlZd dlZd dlZd dlZd dlZd dlZd dlZd dl	Z	d dl
Z
d dlZ	 d dlZd dlZd dlZd dlmZmZ d dlmZ d dlmZ 	 d dlmZ d dlmZmZmZmZmZm Z m!Z!m"Z" ejH                  j2                  Z%d Z&d Z'd	 Z(d
 Z)d Z*d Z+d Z, G d de      Z- G d de      Z. G d de      Z/ G d de/      Z0 G d de      Z1 G d de      Z2 G d de      Z3 G d de      Z4 G d de      Z5 G d  d!e      Z6 G d" d#e      Z7 G d$ d%e      Z8 G d& d'e      Z9 G d( d)e      Z: G d* d+e      Z; G d, d-e      Z< G d. d/e      Z= G d0 d1e      Z>d2 Z? G d3 d4e"      Z@ G d5 d6e!      ZA G d7 d8e       ZB G d9 d:e      ZC G d; d<e      ZD G d= d>e       ZE G d? d@e      ZF G dA dBe      ZG G dC dDe      ZH G dE dFe       ZI G dG dHe      ZJ G dI dJe      ZK G dK dLe       ZL G dM dNe"      ZM G dO dPe!      ZN G dQ dRe       ZO G dS dTe"      ZP G dU dVe"      ZQ G dW dXe!      ZR G dY dZe       ZS G d[ d\e      ZT G d] d^e      ZUd_ ZVd` ZWda ZXdb ZYejH                  j                  ejH                  j                  dc               Z[dd Z\de Z]df Z^ejH                  j                  dg        Z`dh Zadi Zbdj Zcdk Zddl Ze G dm dne      Zfdo Zgdp Zhdq ZiejH                  j                  ej                  drk(  dst      du        ZlejH                  j                  dv        Zmdw Zndx Zody Zpdz Zqd{ Zr e:d|d}i~      Zs e<d|d}i~      ZtejH                  j                  d        ZuejH                  j                  ej                  drk(  dt      d        Zvd Zwd Zxd Zy eB       Zz e>       Z{d Z|d Z}d Z~d Zd Zd Zd ZejH                  j                  ejH                  j                  d               ZejH                  j                  d        ZejH                  j                  d        ZejH                  j                  d        Zd Zd Zd Zd ZejH                  j                  d        ZejH                  j                  d        ZejH                  j                  ejH                  j                  d               Zd Zd Zd Zd Zd Zd Zd Zd ZejH                  j                  d        Zd Zd Zd Zd Zd Zd ZejH                  j                  d        Z G d de      ZejH                  j                  d        Zd ZejH                  jD                  ejH                  j                  d               ZejH                  jD                  ejH                  j                  d               Z G d de/      Zd ZejH                  j                  d        Zd Z G d de      Zd Zd Zd Zy# e$ r dZY w xY w# e$ r dZe#e#cZZe#e#cZZe#e#cZZ e#e#cZ!Z"Y w xY w)    N)IpcReadOptionstobytes)find_free_port)util)flight)FlightClientFlightServerBaseServerAuthHandlerClientAuthHandlerServerMiddlewareServerMiddlewareFactoryClientMiddlewareClientMiddlewareFactoryc                      dd l } y )Nr   )pyarrow.flight)pyarrows    N/var/www/openai/venv/lib/python3.12/site-packages/pyarrow/tests/test_flight.pytest_importr   >   s        c                      t         j                  j                  d      st        d      t	        j
                  t         j                  d         dz  S )z-Get the path to the test resources directory.ARROW_TEST_DATAzITest resources not found; set ARROW_TEST_DATA to <repo root>/testing/datar   )osenvirongetRuntimeErrorpathlibPath r   r   resource_rootr   C   sF    ::>>+, I J 	J<<

#456AAr   c                    t               }|sy	 || z  j                  d      5 }|j                         cddd       S # 1 sw Y   yxY w# t        $ r1 t	        dj                  || z  t        j                                     w xY w)z)Get the contents of a test resource file.NrbzNTest resource {} not found; did you initialize the test resource submodule?
{})r   openreadFileNotFoundErrorr   format	traceback
format_exc)pathrootfs      r   read_flight_resourcer+   K   s    ?DKTk%668 &%% K++16$+2;2F2F2H,JK 	KKs%   A	 =	A	 AA	 A	 	:Bc                      t        d      t        j                  t        d      t        d            t        j                  t        d      t        d            gdS )z'Get the paths to test TLS certificates.zroot-ca.pemz	cert0.pemz	cert0.key)certkeyz	cert1.pemz	cert1.key)	root_certcertificates)r+   r   CertKeyPairr   r   r   example_tls_certsr2   Z   sY     *-8)+6(5 )+6(5	
 r   c                  v    t        j                  g d      g} t         j                  j                  | dg      S )Nir      
   	some_intsnames)paarrayTablefrom_arrays)datas    r   simple_ints_tabler@   k   s4    
$%D 88[M::r   c                  L   t        j                  g dt        j                               } t        j                  t         j                  j                  g d|       t         j                  j                  ddg|       g      g}t         j                  j                  |dg      S )N)foobazquuxtype)   r   N   rG   
some_dictsr9   )r;   r<   utf8chunked_arrayDictionaryArrayr>   r=   )dict_valuesr?   s     r   simple_dicts_tablerN   r   s    ((1	BK
**<E**Aq6;?
 	D 88\N;;r   c                      t         j                  j                  t        j                  g d      t        j                  g d      gddg      S )N)rB   barrC   quxrG   rH         abr9   )r;   r=   r>   r<   r   r   r   multiple_column_tablerW   }   sB    88*F!G!#,!7!9'*Cj   2 2r   c                   4     e Zd ZdZdZd fd	Zd Zd Z xZS )ConstantFlightServerzA Flight server that always returns the same data.

    See ARROW-4796: this server implementation will segfault if Flight
    does not properly hold a reference to the Table object.
    s   the expected criteriac                 b    t        |   |fi | t        t        t        d| _        || _        y )N)   ints   dicts   multi)super__init__r@   rN   rW   table_factoriesoptions)selflocationra   kwargs	__class__s       r   r_   zConstantFlightServer.__init__   s3    ,V, '(+ 

 r   c              #      K   || j                   k(  rLt        j                  t        j                  g       t        j
                  j                  d      g dd       y y w)N/foo)CRITERIAr   
FlightInfor;   schemaFlightDescriptorfor_pathrb   contextcriterias      r   list_flightsz!ConstantFlightServer.list_flights   sQ     t}}$##		"''008B	  %s   AAc                      | j                   |j                            }t        j                  || j                        S )Nra   )r`   ticketr   RecordBatchStreamra   )rb   ro   rt   tables       r   do_getzConstantFlightServer.do_get   s4     4$$V]]35''t||DDr   NN)	__name__
__module____qualname____doc__ri   r_   rq   rw   __classcell__re   s   @r   rY   rY      s     (HEr   rY   c                   @     e Zd ZdZd fd	Zd Zd Zed        Z xZ	S )MetadataFlightServerz4A Flight server that numbers incoming/outgoing data.c                 2    t        |   di | || _        y Nr   r^   r_   ra   rb   ra   rd   re   s      r   r_   zMetadataFlightServer.__init__       "6"r   c                     t        j                  g d      g}t         j                  j                  |dg      }t	        j
                  |j                  | j                  |      | j                        S )Nr4   rU   r9   rs   )	r;   r<   r=   r>   r   GeneratorStreamrk   number_batchesra   )rb   ro   rt   r?   rv   s        r   rw   zMetadataFlightServer.do_get   sb    HH()
 $$T#$7%%LL&LL" 	"r   c           	      n   d}g d}|D ]  \  }}|j                  t        j                  j                  t        j                  ||   g      gdg            sJ |J t        j                  d|j                               \  }	||	k(  sJ |j                  t        j                  d|             |dz  } y )Nr   r4   rU   <irG   )
equalsr;   RecordBatchr>   r<   structunpack
to_pybyteswritepack)
rb   ro   
descriptorreaderwritercounterexpected_databatchbufclient_counters
             r   do_putzMetadataFlightServer.do_put   s    + JE3<< : :=1234!    ?"?$mmD#..2BCONn,,,LLT734qLG !r   c              #      K   t        | j                               D ]!  \  }}t        j                  d|      }||f # y w)Nr   )	enumerate
to_batchesr   r   )rv   idxr   r   s       r   r   z#MetadataFlightServer.number_batches   s<     #E$4$4$67JC++dC(C* 8s   ?AN)
ry   rz   r{   r|   r_   rw   r   staticmethodr   r}   r~   s   @r   r   r      s)    >"  r   r   c                   6     e Zd ZdZd fd	Zd Zd Zd Z xZS )EchoFlightServerz4A Flight server that returns the last data uploaded.c                 B    t        |   |fi | d | _        || _        y r   )r^   r_   last_messageexpected_schema)rb   rc   r   rd   re   s       r   r_   zEchoFlightServer.__init__   s%    ,V, .r   c                 @    t        j                  | j                        S r   )r   ru   r   rb   ro   rt   s      r   rw   zEchoFlightServer.do_get   s    ''(9(9::r   c                 |    | j                   r| j                   |j                  k(  sJ |j                         | _        y r   )r   rk   read_allr   rb   ro   r   r   r   s        r   r   zEchoFlightServer.do_put   s2    ''6==888"OO-r   c                     |D ]  } y r   r   )rb   ro   r   r   r   chunks         r   do_exchangezEchoFlightServer.do_exchange   s    E r   rx   )	ry   rz   r{   r|   r_   rw   r   r   r}   r~   s   @r   r   r      s    >/
;.
r   r   c                   "    e Zd ZdZd Zd Zd Zy)EchoStreamFlightServerz6An echo server that streams individual record batches.c                     t        j                  | j                  j                  | j                  j	                  d            S )N   max_chunksize)r   r   r   rk   r   r   s      r   rw   zEchoStreamFlightServer.do_get   s;    %%$$((t(<> 	>r   c                     g S r   r   rb   ro   s     r   list_actionsz#EchoStreamFlightServer.list_actions   s    	r   c                     |j                   dk(  r/|j                         |j                         j                  d      gS t        )Nwho-am-iutf-8)rF   peer_identitypeerencodeNotImplementedErrorrb   ro   actions      r   	do_actionz EchoStreamFlightServer.do_action   s9    ;;*$))+W\\^-B-B7-KLL!!r   N)ry   rz   r{   r|   rw   r   r   r   r   r   r   r      s    @>
"r   r   c                       e Zd ZdZd Zd Zy)GetInfoFlightServerz)A Flight server that tests GetFlightInfo.c                    t        j                  t        j                  dt        j                         fg      |t        j
                  ddg      t        j
                  dt         j                  j                  dd      g      gdd      S )NrU   r   grpc://test	localhost  rh   )r   rj   r;   rk   int32FlightEndpointLocationfor_grpc_tcprb   ro   r   s      r   get_flight_infoz#GetInfoFlightServer.get_flight_info   sy      IIRXXZ()*%%cM?;%%__11+tDE 
 	
r   c                 d    | j                  ||      }t        j                  |j                        S r   )r   r   SchemaResultrk   )rb   ro   r   infos       r   
get_schemazGetInfoFlightServer.get_schema  s)    ##GZ8""4;;//r   N)ry   rz   r{   r|   r   r   r   r   r   r   r      s    3
0r   r   c                   &    e Zd ZdZed        Zd Zy)ListActionsFlightServer'A Flight server that tests ListActions.c                 4    ddt        j                  dd      gS )N)action-1description)zaction-2 zaction-3zmore detailr   
ActionType)clss    r   expected_actionsz(ListActionsFlightServer.expected_actions  s$     (j-8
 	
r   c              #   @   K   | j                         E d {    y 7 wr   )r   r   s     r   r   z$ListActionsFlightServer.list_actions  s     ((***s   N)ry   rz   r{   r|   classmethodr   r   r   r   r   r   r   	  s    1
 
+r   r   c                       e Zd ZdZd Zy)ListActionsErrorFlightServerr   c              #      K   d d y w)N)r   r   rB   r   r   s     r   r   z)ListActionsErrorFlightServer.list_actions  s     s   
N)ry   rz   r{   r|   r   r   r   r   r   r     s
    1r   r   c                   0     e Zd ZdZd fd	Zd Zd Z xZS )CheckTicketFlightServerzDA Flight server that compares the given ticket to an expected value.c                 4    t        |   |fi | || _        y r   )r^   r_   expected_ticket)rb   r   rc   rd   re   s       r   r_   z CheckTicketFlightServer.__init__#  s    ,V,.r   c                     | j                   |j                  k(  sJ t        j                  g dt        j                               g}t        j
                  j                  |dg      }t        j                  |      S )Nr4   rE   rU   r9   )	r   rt   r;   r<   r   r=   r>   r   ru   )rb   ro   rt   data1rv   s        r   rw   zCheckTicketFlightServer.do_get'  s`    ##v}}444-BHHJ?@$$U3%$8''..r   c                 .    |j                         | _        y r   )r   r   )rb   ro   r   r   s       r   r   zCheckTicketFlightServer.do_put-  s    "OO-r   r   )ry   rz   r{   r|   r_   rw   r   r}   r~   s   @r   r   r      s    N//.r   r   c                   ^    e Zd ZdZ ej
                  d ej                         fg      Zd Zy)InvalidStreamFlightServerzEA Flight server that tries to return messages with differing schemas.rU   c                    t        j                  g dt        j                               g}t        j                  g dt        j                               g}|j                  |j                  k7  sJ t         j
                  j                  |dg      }t         j
                  j                  |dg      }|j                  | j                  k(  sJ t        j                  | j                  ||g      S )Nr4   rE   )g      $g      g              @g      $@rU   r9   )
r;   r<   r   float64rF   r=   r>   rk   r   r   )rb   ro   rt   r   data2table1table2s          r   rw   z InvalidStreamFlightServer.do_get6  s    -BHHJ?@7bjjlKLzzUZZ'''%%eC5%9%%eC5%9}}+++%%dkkFF3CDDr   Nry   rz   r{   r|   r;   rk   r   rw   r   r   r   r   r   1  s+    ORYYhbhhj)*+FEr   r   c                   ^    e Zd ZdZ ej
                  d ej                         fg      Zd Zy)NeverSendsDataFlightServerz0A Flight server that never actually yields data.rU   c                    |j                   dk(  r| j                  j                         | j                  j                         t        j                  j                  t        d      g| j                        g}t        j                  | j                  |      S t        j                  | j                  t        j                  | j                  j                                     S )N
   yield_datar6   rk   )rt   rk   empty_tabler;   r   r>   ranger   r   	itertoolsrepeat)rb   ro   rt   r?   s       r   rw   z!NeverSendsDataFlightServer.do_getF  s    ==M) '')'')**E!H:dkk*JD
 ))$++t<<%%KK))$++*A*A*CDF 	Fr   Nr   r   r   r   r   r   A  s+    :RYYhbhhj)*+FFr   r   c                   ,    e Zd ZdZd Zd Zed        Zy)SlowFlightServerz;A Flight server that delays its responses to test timeouts.c                     t        j                  t        j                  dt        j                         fg      | j                               S )NrU   )r   r   r;   rk   r   slow_streamr   s      r   rw   zSlowFlightServer.do_getW  s:    %%bii#rxxz1B0C&D&*&6&6&8: 	:r   c                 0    t        j                  d       g S N      ?)timesleepr   s      r   r   zSlowFlightServer.do_action[  s    

3	r   c               #     K   t        j                  g dt        j                               g} t         j                  j	                  | dg       t        j                  d       t         j                  j	                  | dg       y w)Nr4   rE   rU   r9   r7   )r;   r<   r   r=   r>   r  r  )r   s    r   r   zSlowFlightServer.slow_stream_  se     -BHHJ?@hh""5"66 	

2hh""5"66s   BBN)ry   rz   r{   r|   rw   r   r   r   r   r   r   r   r   T  s#    E: 7 7r   r   c                   2    e Zd ZdZed        Zd Zd Zd Zy)ErrorFlightServerz9A Flight server that uses all the Flight-specific errors.c            	          t         j                  t         j                  t         j                  t         j                  t         j
                  t        t        j                  t        dS )N)internaltimedoutcancelunauthenticatedunauthorizednotimplementedinvalidr.   )
r   FlightInternalErrorFlightTimedOutErrorFlightCancelledErrorFlightUnauthenticatedErrorFlightUnauthorizedErrorr   r;   ArrowInvalidKeyErrorr   r   r   error_caseszErrorFlightServer.error_casesl  sH     222211%@@"::1	
 		
r   c                     t         j                         }|j                  |v r ||j                     d      |j                  dk(  rd}t        j                  d|      t
        )NrB   protobuf   this is an error message)r  r  rF   r   r  r   )rb   ro   r   r  err_msgs        r   r   zErrorFlightServer.do_actiony  s\    '335;;+%*+fkk*511[[J&1G00@@!!r   c              #      K   t        j                  t        j                  g       t         j                  j                  d      g dd       t        j                  d      w)Nrg   rh   rB   )r   rj   r;   rk   rl   rm   r  rn   s      r   rq   zErrorFlightServer.list_flights  sS     IIbM##,,V4	
 	
 ((//s   A!A#c                    |j                   dk(  rt        j                  d      |j                   dk(  rt        j                  d      |j                   dk(  rt        j                  d      |j                   dk(  rt        j
                  d      |j                   dk(  rt        j                  d      |j                   dk(  rd}t        j                  d|      y )	Ns   internalrB   s   timedouts   cancels   unauthenticateds   unauthorizeds   protobufr  )commandr   r  r  r  r  r  )rb   ro   r   r   r   r  s         r   r   zErrorFlightServer.do_put  s    ,,,U33;.,,U339,--e44#5533E::?20077;.1G00@@ /r   N)	ry   rz   r{   r|   r   r  r   rq   r   r   r   r   r  r  i  s'    C

 

"0Ar   r  c                   B     e Zd ZdZd fd	Zd Zd Zd Zd Zd Z	 xZ
S )	ExchangeFlightServerz A server for testing DoExchange.c                 2    t        |   di | || _        y r   r   r   s      r   r_   zExchangeFlightServer.__init__  r   r   c                    |j                   t        j                  j                  k7  rt	        j
                  d      |j                  dk(  r| j                  |||      S |j                  dk(  r| j                  |||      S |j                  dk(  r| j                  |||      S |j                  dk(  r| j                  |||      S t	        j
                  dj                  |j                              )Nz!Must provide a command descriptor   echo   get   put	   transformzUnknown command: {})descriptor_typer   DescriptorTypeCMDr;   r  r  exchange_echoexchange_do_getexchange_do_putexchange_transformr%   r   s        r   r   z ExchangeFlightServer.do_exchange  s    %%)>)>)B)BB//"EFF7*%%gvv>>6)''@@6)''@@</**7FFCC//%,,Z-?-?@B Br   c                     t         j                  j                  t        j                  t	        dd            gdg      }|j                  |j                         |j                  |       y)Emulate DoGet with DoExchange.r    (  rU   r9   N)r;   r=   r>   r<   r   beginrk   write_table)rb   ro   r   r   r?   s        r   r)  z$ExchangeFlightServer.exchange_do_get  sX    xx##HHU1i()%
 $  	T[[!4 r   c                     d}|D ](  }|j                   st        j                  d      |dz  }* |j                  t	        |      j                  d             y)Emulate DoPut with DoExchange.r   zAll chunks must have data.rG   r   N)r?   r;   r  write_metadatastrr   )rb   ro   r   r   num_batchesr   s         r   r*  z$ExchangeFlightServer.exchange_do_put  sR    E::oo&BCC1K  	c+.55g>?r   c                    d}|D ]  }|s?|j                   r3|j                  |j                   j                  | j                         d}|j                  r3|j                   r'|j                  |j                   |j                         |j                  r|j                  |j                         |j                   r|j                  |j                          J d        y)zRun a simple echo server.Frs   TzShould not happenN)r?   r/  rk   ra   app_metadatawrite_with_metadatar3  write_batch)rb   ro   r   r   startedr   s         r   r(  z"ExchangeFlightServer.exchange_echo  s    EuzzUZZ..E!!ejj**5::u7I7IJ##%%e&8&89""5::.111u r   c                 (   |j                   D ]L  }t        j                  j                  |j                        r-t        j
                  dt        |      z          |j                         }dg|j                  z  }|D ]0  }t        |      D ]   \  }}	||xx   |	j                         z  cc<   " 2 t        j                  j                  t        j                  |      gdg      }
|j                  |
j                          |j                  |
       y)zSum rows in an uploaded table.zInvalid field: r   sumr9   N)rk   r;   types
is_integerrF   r  reprr   num_rowsr   as_pyr=   r>   r<   r/  r0  )rb   ro   r   r   fieldrv   sumscolumnrowvalueresults              r   r+  z'ExchangeFlightServer.exchange_transform  s    ]]E88&&uzz2oo&7$u+&EFF # !sU^^#F'/
US	U[[]*	 0  %%rxx~&6ug%FV]]#6"r   r   )ry   rz   r{   r|   r_   r   r)  r*  r(  r+  r}   r~   s   @r   r  r    s&    *B!@2 #r   r  c                   .     e Zd ZdZ fdZd Zd Z xZS )HttpBasicServerAuthHandler7An example implementation of HTTP basic authentication.c                 0    t         |           || _        y r   r^   r_   credsrb   rM  re   s     r   r_   z#HttpBasicServerAuthHandler.__init__      
r   c                 z   |j                         }t        j                  j                  |      }|j                  | j
                  vrt        j                  d      | j
                  |j                     |j                  k7  rt        j                  d      |j                  t        |j                               y )Nunknown userzwrong password)
r#   r   	BasicAuthdeserializeusernamerM  r  passwordr   r   )rb   outgoingincomingr   auths        r   authenticatez'HttpBasicServerAuthHandler.authenticate  s    mmo++C0==

*33NCC::dmm$5334DEEwt}}-.r   c                 z    |st        j                  d      || j                  vrt        j                  d      |S )Nztoken not providedrQ  )r   r  rM  rb   tokens     r   is_validz#HttpBasicServerAuthHandler.is_valid  s9    334HII

"33NCCr   ry   rz   r{   r|   r_   rY  r]  r}   r~   s   @r   rI  rI    s    A/r   rI  c                   .     e Zd ZdZ fdZd Zd Z xZS )HttpBasicClientAuthHandlerrJ  c                 f    t         |           t        j                  ||      | _        d | _        y r   )r^   r_   r   rR  
basic_authr\  rb   rT  rU  re   s      r   r_   z#HttpBasicClientAuthHandler.__init__  s)     **8X>
r   c                     | j                   j                         }|j                  |       |j                         | _        y r   )rb  	serializer   r#   r\  )rb   rV  rW  rX  s       r   rY  z'HttpBasicClientAuthHandler.authenticate  s-    ((*t]]_
r   c                     | j                   S r   r\  rb   s    r   	get_tokenz$HttpBasicClientAuthHandler.get_token      zzr   ry   rz   r{   r|   r_   rY  ri  r}   r~   s   @r   r`  r`    s    A
%
r   r`  c                   .     e Zd ZdZ fdZd Zd Z xZS )TokenServerAuthHandler:An example implementation of authentication via handshake.c                 0    t         |           || _        y r   rL  rN  s     r   r_   zTokenServerAuthHandler.__init__  rO  r   c                     |j                         }|j                         }|| j                  v r:| j                  |   |k(  r(|j                  t        j                  d|z                y t        j                  d      )N   secret:zinvalid username/password)r#   rM  r   base64	b64encoder   r  )rb   rV  rW  rT  rU  s        r   rY  z#TokenServerAuthHandler.authenticate  sf    ==?==?tzz!djj&:h&FNN6++J,ABC33+- -r   c                     t        j                  |      }|j                  d      st        j                  d      |dd  S )Nrq  zinvalid token   )rr  	b64decode
startswithr   r  r[  s     r   r]  zTokenServerAuthHandler.is_valid  s=      '
+33ODDQRyr   r^  r~   s   @r   rm  rm  
  s    D-r   rm  c                   .     e Zd ZdZ fdZd Zd Z xZS )TokenClientAuthHandlerrn  c                 L    t         |           || _        || _        d| _        y )Nr   )r^   r_   rT  rU  r\  rc  s      r   r_   zTokenClientAuthHandler.__init__$  s#      
r   c                     |j                  | j                         |j                  | j                         |j                         | _        y r   )r   rT  rU  r#   r\  rb   rV  rW  s      r   rY  z#TokenClientAuthHandler.authenticate*  s/    t}}%t}}%]]_
r   c                     | j                   S r   rg  rh  s    r   ri  z TokenClientAuthHandler.get_token/  rj  r   rk  r~   s   @r   ry  ry  !  s    D%
r   ry  c                       e Zd ZdZd Zd Zy)NoopAuthHandlerzA no-op auth handler.c                      y)zDo nothing.Nr   r|  s      r   rY  zNoopAuthHandler.authenticate6  s    r   c                      y)zV
        Returning an empty string.
        Returning None causes Type error.
        r   r   r[  s     r   r]  zNoopAuthHandler.is_valid9  s    
 r   N)ry   rz   r{   r|   rY  r]  r   r   r   r  r  3  s    r   r  c                 z    | D ]6  }|j                         |j                         k(  s%| j                  |      c S  y)zcLookup the value of given key in the given headers.
       The key lookup is case-insensitive.
    N)lowerr   )headers
lookup_keyr.   s      r   case_insensitive_header_lookupr  A  s4     99;***,,;;s## r   c                   "    e Zd ZdZd Zd Zd Zy)!ClientHeaderAuthMiddlewareFactoryz@ClientMiddlewareFactory that creates ClientAuthHeaderMiddleware.c                     g | _         y r   call_credentialrh  s    r   r_   z*ClientHeaderAuthMiddlewareFactory.__init__M  s
    !r   c                     t        |       S r   )ClientHeaderAuthMiddlewarerb   r   s     r   
start_callz,ClientHeaderAuthMiddlewareFactory.start_callP  s    )$//r   c                     || _         y r   r  )rb   r  s     r   set_call_credentialz5ClientHeaderAuthMiddlewareFactory.set_call_credentialS  s
    .r   N)ry   rz   r{   r|   r_   r  r  r   r   r   r  r  J  s    J"0/r   r  c                       e Zd ZdZd Zd Zy)r  a  
    ClientMiddleware that extracts the authorization header
    from the server.

    This is an example of a ClientMiddleware that can extract
    the bearer token authorization header from a HTTP header
    authentication enabled server.

    Parameters
    ----------
    factory : ClientHeaderAuthMiddlewareFactory
        This factory is used to set call credentials if an
        authorization header is found in the headers from the server.
    c                     || _         y r   factoryrb   r  s     r   r_   z#ClientHeaderAuthMiddleware.__init__g  	    r   c                 z    t        |d      }| j                  j                  d|d   j                  d      g       y )NAuthorization   authorizationr   r   )r  r  r  r   )rb   r  auth_headers      r   received_headersz+ClientHeaderAuthMiddleware.received_headersj  s:    4WoN((N!!'**, 	-r   N)ry   rz   r{   r|   r_   r  r   r   r   r  r  W  s    -r   r  c                       e Zd ZdZd Zy)!HeaderAuthServerMiddlewareFactoryz)Validates incoming username and password.c                    t        |d      }|d   j                  d      }d}d}|d   dk(  rjt        j                  |d         }|j	                  d      j                  d	      }|d   d
k(  r|d   dk(  st        j                  |      d}t        |      S |d   dk(  r|d   }|dk(  s*t        j                  |      t        j                  |      t        |      S )Nr  r    r   zInvalid credentialsBasicrG   r   :testrU  	token1234Bearer)r  splitrr  rv  decoder   r  HeaderAuthServerMiddleware)	rb   r   r  r  valuesr\  error_messagedecodedpairs	            r   r  z,HeaderAuthServerMiddlewareFactory.start_callt  s    4
 Q%%c*-!9&&vay1G>>'*005DGv%$q'Z*?77FFE *%00 AY("1IEK'77FF33MBB)%00r   Nry   rz   r{   r|   r  r   r   r   r  r  q  s
    31r   r  c                       e Zd ZdZd Zd Zy)r  zBA ServerMiddleware that transports incoming username and password.c                     || _         y r   rg  r[  s     r   r_   z#HeaderAuthServerMiddleware.__init__  s	    
r   c                 $    dd| j                   z   iS )NauthorizationzBearer rg  rh  s    r   sending_headersz*HeaderAuthServerMiddleware.sending_headers  s    TZZ!788r   Nry   rz   r{   r|   r_   r  r   r   r   r  r    s    L9r   r  c                       e Zd ZdZd Zy)HeaderAuthFlightServerz<A Flight server that tests with basic token authentication. c                     |j                  d      }|r@t        |j                         d      }|j                  d      }|d   j	                  d      gS t        j                  d      )NrX  r  r  rG   r   zNo token auth middleware found.)get_middlewarer  r  r  r   r   r  )rb   ro   r   
middlewarer  r  s         r   r   z HeaderAuthFlightServer.do_action  sk    ++F3
8**,o?K &&s+F1I$$W-..//-/ 	/r   Nry   rz   r{   r|   r   r   r   r   r  r    s
    F/r   r  c                       e Zd ZdZd Zy)'ArbitraryHeadersServerMiddlewareFactoryz<A ServerMiddlewareFactory that transports arbitrary headers.c                     t        |      S r   ) ArbitraryHeadersServerMiddlewarerb   r   r  s      r   r  z2ArbitraryHeadersServerMiddlewareFactory.start_call  s    /88r   Nr  r   r   r   r  r    s
    F9r   r  c                       e Zd ZdZd Zd Zy)r  z5A ServerMiddleware that transports arbitrary headers.c                     || _         y r   rW  )rb   rW  s     r   r_   z)ArbitraryHeadersServerMiddleware.__init__  s	     r   c                     | j                   S r   r  rh  s    r   r  z0ArbitraryHeadersServerMiddleware.sending_headers      }}r   Nr  r   r   r   r  r    s    ?!r   r  c                       e Zd ZdZd Zy)ArbitraryHeadersFlightServerz6A Flight server that tests multiple arbitrary headers.c                     |j                  d      }|rT|j                         }t        |d      }t        |d      }|d   j                  d      }|d   j                  d      }||gS t	        j
                  d      )Narbitrary-headersztest-header-1ztest-header-2r   r   zNo headers middleware found)r  r  r  r   r   FlightServerError)	rb   ro   r   r  r  header_1header_2value1value2s	            r   r   z&ArbitraryHeadersFlightServer.do_action  s    ++,?@
 002G5H 6H a[''0Fa[''0FF##&&'DEEr   Nr  r   r   r   r  r    s    @Fr   r  c                       e Zd ZdZd Zy)HeaderServerMiddlewarez/Expose a per-call value to the RPC method body.c                     || _         y r   )special_value)rb   r  s     r   r_   zHeaderServerMiddleware.__init__  s
    *r   N)ry   rz   r{   r|   r_   r   r   r   r  r    s
    9+r   r  c                       e Zd ZdZd Zy)HeaderServerMiddlewareFactoryz:Expose a per-call hard-coded value to the RPC method body.c                     t        d      S )Nzright value)r  r  s      r   r  z(HeaderServerMiddlewareFactory.start_call  s    %m44r   Nr  r   r   r   r  r    s
    D5r   r  c                       e Zd ZdZd Zy)HeaderFlightServerz(Echo back the per-call hard-coded value.c                 d    |j                  d      }|r|j                  j                         gS dgS )Nr  r   )r  r  r   )rb   ro   r   r  s       r   r   zHeaderFlightServer.do_action  s4    ++F3
,,33566ur   Nr  r   r   r   r  r    s
    2r   r  c                       e Zd ZdZd Zy)MultiHeaderFlightServer8Test sending/receiving multiple (binary-valued) headers.c                 r    |j                  d      }t        |j                        j                  d      }|gS )Nr  r   )r  r?  client_headersr   )rb   ro   r   r  r  s        r   r   z!MultiHeaderFlightServer.do_action  s5    ++F3
z00188Ayr   Nr  r   r   r   r  r    s
    Br   r  c                       e Zd ZdZd Zy)$SelectiveAuthServerMiddlewareFactoryz1Deny access to certain methods based on a header.c                     |j                   t        j                  j                  k(  ry |j	                  d      }|st        j
                  d      |d   }|dk7  rt        j
                  d      t        |      S )Nx-auth-tokenzNo tokenr   rU  zInvalid token)methodr   FlightMethodLIST_ACTIONSr   r  r  )rb   r   r  r\  s       r   r  z/SelectiveAuthServerMiddlewareFactory.start_call  sl    ;;&--:::N+33J??aJ33ODD%e,,r   Nr  r   r   r   r  r    s
    ;-r   r  c                       e Zd Zd Zy)$SelectiveAuthClientMiddlewareFactoryc                     t               S r   )SelectiveAuthClientMiddlewarer  s     r   r  z/SelectiveAuthClientMiddlewareFactory.start_call   s    ,..r   N)ry   rz   r{   r  r   r   r   r  r    s    /r   r  c                       e Zd Zd Zy)r  c                 
    ddiS )Nr  rU  r   rh  s    r   r  z-SelectiveAuthClientMiddleware.sending_headers  s    J
 	
r   N)ry   rz   r{   r  r   r   r   r  r    s    
r   r  c                   (     e Zd ZdZ fdZd Z xZS ) RecordingServerMiddlewareFactory Record what methods were called.c                 0    t         |           g | _        y r   r^   r_   methodsrb   re   s    r   r_   z)RecordingServerMiddlewareFactory.__init__      r   c                 N    | j                   j                  |j                         y r   r  appendr  r  s      r   r  z+RecordingServerMiddlewareFactory.start_call      DKK(r   ry   rz   r{   r|   r_   r  r}   r~   s   @r   r  r        *r   r  c                   (     e Zd ZdZ fdZd Z xZS ) RecordingClientMiddlewareFactoryr  c                 0    t         |           g | _        y r   r  r  s    r   r_   z)RecordingClientMiddlewareFactory.__init__  r  r   c                 N    | j                   j                  |j                         y r   r  r  s     r   r  z+RecordingClientMiddlewareFactory.start_call  r  r   r  r~   s   @r   r  r    r  r   r  c                       e Zd ZdZd Zd Zy)"MultiHeaderClientMiddlewareFactoryr  c                     i | _         y r   )last_headersrh  s    r   r_   z+MultiHeaderClientMiddlewareFactory.__init__&  s     r   c                     t        |       S r   )MultiHeaderClientMiddlewarer  s     r   r  z-MultiHeaderClientMiddlewareFactory.start_call+  s    *400r   N)ry   rz   r{   r|   r_   r  r   r   r   r  r  #  s    B
1r   r  c                   <    e Zd ZdZddgddgdgdgdZd Zd	 Zd
 Zy)r   r  rB   rP          rC   )zx-textzx-binary-binzx-MIXED-cases   x-other-MIXED-casec                     || _         y r   r  r  s     r   r_   z$MultiHeaderClientMiddleware.__init__:  r  r   c                     | j                   S r   )EXPECTEDrh  s    r   r  z+MultiHeaderClientMiddleware.sending_headers=  r  r   c                 N    | j                   j                  j                  |       y r   )r  r  update)rb   r  s     r   r  z,MultiHeaderClientMiddleware.received_headers@  s     	!!((1r   N)ry   rz   r{   r|   r  r_   r  r  r   r   r   r   r   /  s6    B %. '* %wH2r   r   c                       e Zd ZdZd Zy)"MultiHeaderServerMiddlewareFactoryr  c                     t        |      S r   )MultiHeaderServerMiddlewarer  s      r   r  z-MultiHeaderServerMiddlewareFactory.start_callI  s    *733r   Nr  r   r   r   r
  r
  F  s
    B4r   r
  c                       e Zd ZdZd Zd Zy)r  r  c                     || _         y r   )r  )rb   r  s     r   r_   z$MultiHeaderServerMiddleware.__init__P  s
    ,r   c                 "    t         j                  S r   )r   r  rh  s    r   r  z+MultiHeaderServerMiddleware.sending_headersS  s    *333r   Nr  r   r   r   r  r  M  s    B-4r   r  c                   .     e Zd ZdZ fdZd Zd Z xZS )LargeMetadataFlightServerz Regression test for ARROW-13253.c                 8    t        |   |i | ddz  | _        y )N           )r^   r_   	_metadata)rb   argsrd   re   s      r   r_   z"LargeMetadataFlightServer.__init__Z  s!    $)&)-r   c                     t        j                  dt        j                         fg      }t        j                  |t        j
                  dgg|      | j                  fg      S )NrU   rG   r   )r;   rk   int64r   r   record_batchr  )rb   ro   rt   rk   s       r   rw   z LargeMetadataFlightServer.do_get^  sS    S"((*-./%%f__qcU62DNNC/
  	r   c                 :    |j                  | j                         y r   )r3  r  r   s        r   r   z%LargeMetadataFlightServer.do_exchanged  s    dnn-r   )ry   rz   r{   r|   r_   rw   r   r}   r~   s   @r   r  r  W  s    *..r   r  c                     d} d}d}d}d}d}d}d}d	}d
}	t        t        j                  dd            | k(  sJ t        t        j                  dd            |k(  sJ t        t        j                  dd            |k(  sJ t        t        j
                  j                  d            |k(  sJ t        t        j                  dg             |k(  sJ t        j                  t        j                  g       t        j
                  j                         g dd      }
t        |
      |k(  sJ t        t        j                  d            |k(  sJ t        t        j                  d            |k(  sJ t        t        j                  t        j                  g                   |k(  sJ t        t        j                  t        j                  dg                  dk(  sJ t        t        j                  d            |	k(  sJ t!        j"                  t$              5  t        j                  dd        d d d        y # 1 sw Y   y xY w)Nz1<pyarrow.flight.Action type='foo' body=(0 bytes)>z)ActionType(type='foo', description='bar')z?<pyarrow.flight.BasicAuth username=b'user' password=(redacted)>z,<pyarrow.flight.FlightDescriptor cmd=b'foo'>zY<pyarrow.flight.FlightEndpoint ticket=<pyarrow.flight.Ticket ticket=b'foo'> locations=[]>z<pyarrow.flight.FlightInfo schema= descriptor=<pyarrow.flight.FlightDescriptor path=[]> endpoints=[] total_records=-1 total_bytes=-1>z6<pyarrow.flight.Location b'grpc+tcp://localhost:1234'>z&<pyarrow.flight.Result body=(3 bytes)>z'<pyarrow.flight.SchemaResult schema=()>z%<pyarrow.flight.Ticket ticket=b'foo'>rB   r   rP   userpass   foorh   grpc+tcp://localhost:1234)intr  z1<pyarrow.flight.SchemaResult schema=(int: int64)>)r?  r   Actionr   rR  rl   for_commandr   rj   r;   rk   rm   r   Resultr   Ticketpytestraises	TypeError)action_repraction_type_reprbasic_auth_reprdescriptor_reprendpoint_repr	info_reprlocation_reprresult_reprschema_result_reprticket_reprr   s              r   	test_reprr2  h  s   EKBWODO%M	  MM:KB9KeS)*k999!!%/04DDDD  01_DDD''33E:;NNN%%fb12mCCC
		"v..7792r2GD:""" ;<=NNNf%&+555##BIIbM237IIII##BII/?.@$ABC;< < <f%&+555	y	!eT" 
"	!	!s   H99Ic            
          d d d d d d d d d	 d
 g
} | D ]+  } |       \  }} |       \  }}||k(  sJ ||k(  sJ ||k7  r+J  y )Nc                  Z    t        j                  dd      t        j                  dd      fS )NrB   r      bar)r   r!  r   r   r   <lambda>ztest_eq.<locals>.<lambda>  s    uc*FMM%,HIr   c                  Z    t        j                  dd      t        j                  dd      fS )NrB   rP   rC   r   r   r   r   r6  ztest_eq.<locals>.<lambda>  s&    ""5%0""5%02r   c                  Z    t        j                  dd      t        j                  dd      fS )Nr  r  user2)r   rR  r   r   r   r6  ztest_eq.<locals>.<lambda>  s&    !!&&1!!'624r   c                  ~    t         j                  j                  d      t         j                  j                  d      fS )NrB   )r   rl   r"  rm   r   r   r   r6  ztest_eq.<locals>.<lambda>  s.    ((44U;((11%8:r   c                  Z    t        j                  dg       t        j                  dg       fS )Nr  r   )r   r   r   r   r   r6  ztest_eq.<locals>.<lambda>  s&    &&vr2&&sB/1r   c                  $   t        j                  t        j                  g       t         j                  j                         g dd      t        j                  t        j                  g       t         j                  j                  d      g dd      fS )Nrh   r  *   )r   rj   r;   rk   rl   rm   r"  r   r   r   r6  ztest_eq.<locals>.<lambda>  sp    		"''002BB@ 		"''33F;RRI	Jr   c                  V    t        j                  d      t        j                  d      fS )Nr  zgrpc+tls://localhost:1234)r   r   r   r   r   r6  ztest_eq.<locals>.<lambda>  s     !<=!<=?r   c                  V    t        j                  d      t        j                  d      fS )Nr  r5  )r   r#  r   r   r   r6  ztest_eq.<locals>.<lambda>  s    v&f(=>r   c                      t        j                  t        j                  g             t        j                  t        j                  dt        j                         fg            fS )Nints)r   r   r;   rk   r  r   r   r   r6  ztest_eq.<locals>.<lambda>  sB    $$RYYr]3$$RYY0D/E%FGIr   c                  V    t        j                  d      t        j                  d      fS )Nr   r  )r   r$  r   r   r   r6  ztest_eq.<locals>.<lambda>  s    s#V]]6%:;r   r   )itemsgenlhs1rhs1lhs2rhs2s         r   test_eqrI    s}    I	2	4	:	1	J	?>	I;-E2 U
dU
dt||t||t|| r   c                      d ddt               fg} | D ])  }t        |      5 }t        |t              sJ 	 d d d        + y # 1 sw Y   6xY w)Ngrpc://localhost:0r   )r   r	   
isinstance)	locationsrc   servers      r   $test_flight_server_location_argumentrO    sP    	n&'I
 h'6f&6777 (' ''s	   ?A	c                      t        j                  t              5  t               5  t               # 1 sw Y   nxY w	 d d d        y # 1 sw Y   y xY wr   )r%  r&  
ValueErrorr	   r   r   r   #test_server_exit_reraises_exceptionrR    s4    	z	",   
#	"	"s   A09	AAc                  D   dt               fd } fd}t              5 }t        j                  |d      }|j	                          t        j
                         }|j                  d       t        j
                         |z
  }|dk\  sJ 	 d d d        y # 1 sw Y   y xY w)Nr   c                  n    t        j                  d       t               at        j	                          y r   )r  r  r	   rN  serverc   s   r   rU  z-test_client_wait_for_available.<locals>.serve  s!    

3!(+r   Ttargetdaemonr6   timeoutr   )r   r   	threadingThreadstartr  wait_for_available)rN  rU  clientthreadr:  elapsedrc   s         @r   test_client_wait_for_availablerc    s     ^-.HF 
h	6!!t<))+!!!!,))+'#~~ 
 		s   A,BBc                  \   t               5 } t        j                  d| j                  f      5 }t	        |j                               g k(  sJ |j                  t         j                        }t        t	        |            dk(  sJ 	 ddd       ddd       y# 1 sw Y   xY w# 1 sw Y   yxY w)zTry a simple list_flights call.r   rG   N)rY   r   connectportlistrq   ri   len)rN  r`  flightss      r   test_flight_list_flightsrj    s    		6NNK56&F'')*b000%%&:&C&CD4=!Q&&& 7 
 	66 
 	s#   "B"ABB"B	B""B+c                     t               5 } t        j                  d| j                  f      5 }t	        |j                               g k(  sJ |j                          |j                          t        j                  t        j                        5  t	        |j                                d d d        d d d        d d d        y # 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   y xY w)Nr   )rY   r   re  rf  rg  rq   closer%  r&  r;   r  rN  r`  s     r   test_flight_client_closern    s    		6NNK56&F'')*b000]]2??+$$&' ,	 7 
 	
 ,+	 76 
 	s;   "CA"CC)C1CCCC	CC#c                  <   t               } t               5 }t        j                  d|j                  f      5 }|j                  t        j                  d            j                         }|j                  |       sJ 	 ddd       ddd       t        j                  j                  t        j                  j                  j                        }t        |      5 }t        j                  d|j                  f      5 }|j                  t        j                  d            j                         }|j                  |       sJ |j                  t        j                  d            j                         j                         }|j                  |       sJ 	 ddd       ddd       t        j                   t        j"                  d      5  t        d      5 }t        j                  d|j                  f      5 }|j                  t        j                  d            j                         }ddd       ddd       ddd       y# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   LxY w# 1 sw Y   PxY w# 1 sw Y   yxY w)	Try a simple do_get call.r   r[   Nmetadata_versionrs   z+expected IpcWriteOptions, got <class 'int'>matchr=  )r@   rY   r   re  rf  rw   r$  r   r   r;   ipcIpcWriteOptionsMetadataVersionV4	to_readerr%  r&  r  )rv   rN  r`  r?   ra   s        r   test_flight_do_get_intsrz    s   E		6NNK56&}}V]]734==?{{5!!! 7 
 
 ff$$//22 % 4G	g	.&NNK56&}}V]]734==?{{5!!! }}V]]734>>@IIK{{5!!! 7 
/ 
v//J
L!"-V[[9:f==w!78AACD ; .
L 
L 76 
 	 76 
/	. ;: .-
L 
Ls   "IAI>I"I.>BI"I.J"J<3I:/J7JI	II"I+	'I..I7:J?JJ	JJc                     t               } t               5 }t        j                  d|j                  f      5 }|j                  t        j                  d            j                         }t        |d         | j                  d      j                         k(  sJ 	 ddd       ddd       y# 1 sw Y   xY w# 1 sw Y   yxY w)rp  r   r[   r8   r   N)r@   rY   r   re  rf  rw   r$  read_pandasrg  rD  	to_pylistrv   rN  r`  r?   s       r   test_do_get_ints_pandasr    s     E		6NNK56&}}V]]734@@BD%&%,,q/*C*C*EEEE 7 
 	66 
 	s#   "B8A#B,B8,B5	1B88Cc                  N   t               } t               5 }t        j                  d|j                  f      5 }|j                  t        j                  d            j                         }|j                  |       sJ 	 d d d        d d d        y # 1 sw Y   xY w# 1 sw Y   y xY w)Nr   r\   )	rN   rY   r   re  rf  rw   r$  r   r   r~  s       r   test_flight_do_get_dictsr    sx     E		6NNK56&}}V]]845>>@{{5!!! 7 
 	66 
 	s#   "BAB>BB	BB$c                     t        j                  g dt        j                               g} t         j                  j	                  | dg      }t        d      5 }t        j                  d|j                  f      5 }|j                  t        j                  d            j                         }|j                  |      sJ 	 ddd       ddd       y# 1 sw Y   xY w# 1 sw Y   yxY w)	z+Make sure Tickets get passed to the server.r4   rE   rU   r9   s
   the-ticket)r   r   N)r;   r<   r   r=   r>   r   r   re  rf  rw   r$  r   r   )r   rv   rN  r`  r?   s        r   test_flight_do_get_ticketr    s    XX)
;<EHH  se 4E	 	?6NNK56&}}V]]=9:CCE{{5!!! 7 
@	?66 
@	?s%   "C!=ACC!C	C!!C*c                     t               5 } t        d| j                  f      }|j                  t        j
                  j                  d            }|j                  dk(  sJ |j                  dk(  sJ |j                  t        j                  dt        j                         fg      k(  sJ t        |j                        dk(  sJ t        |j                  d   j                        dk(  sJ |j                  d   j                  d   t	        j                  d      k(  sJ |j                  d   j                  d   t        j                  j!                  dd	      k(  sJ 	 d
d
d
       y
# 1 sw Y   y
xY w)z8Make sure FlightEndpoint accepts string and object URIs.r   r   rh   rU   rH   r   rG   r   r   N)r   r   rf  r   r   rl   r"  total_recordstotal_bytesrk   r;   r   rh  	endpointsrM  r   r   rN  r`  r   s      r   test_flight_get_infor  $  s9   		&{FKK89%%f&=&=&I&I#&NO!!R'''2%%%{{bii#rxxz):(;<<<<4>>"a'''4>>!$../1444~~a **1-1OOOO~~a **1-OO((d;< 	< < 
		s   EE**E3c                  j   t               5 } t        d| j                  f      5 }|j                  t        j
                  j                  d            }|j                  t        j                  dt        j                         fg      k(  sJ 	 ddd       ddd       y# 1 sw Y   xY w# 1 sw Y   yxY w)z+Make sure GetSchema returns correct schema.r   r   rU   N)
r   r   rf  r   r   rl   r"  rk   r;   r   r  s      r   test_flight_get_schemar  3  s    		&+v{{34  !8!8!D!DS!IJ{{bii#rxxz):(;<<<< 5 
	44 
	s#   B)A(BB)B&	"B))B2c                  8   t               5 } t        d| j                  f      5 }t        j                  t
        j                  d      5  t        |j                                ddd       ddd       ddd       t               5 } t        d| j                  f      5 }t        |j                               t        j                         k(  sJ 	 ddd       ddd       y# 1 sw Y   ~xY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   6xY w# 1 sw Y   yxY w)z6Make sure the return type of ListActions is validated.r   z3Results of list_actions must be ActionType or tuplers  N)r   r   rf  r%  r&  r   r  rg  r   r   r   rm  s     r   test_list_actionsr  ;  s     
&	'6+v{{34]]((-

 $$&'
 5 
( 
!	"f+v{{34F'')*#4467 	7 7 5 
#	"
 
 54 
(	' 54 
#	"s^   C8&C,	C #C,+C8D1DD C)%C,,C5	1C88DD		DDc                   &    e Zd ZdZed        Zd Zy)ConvenienceServerzT
    Server for testing various implementation conveniences (auto-boxing, etc.)
    c                 
    g dS )N)r  r5  s   bazr   rh  s    r   simple_action_resultsz'ConvenienceServer.simple_action_resultsR  s    ''r   c                    |j                   dk(  r| j                  S |j                   dk(  r|j                  gS |j                   dk(  rdgS |j                   dk(  rt        j                         |j                   dk(  rfd} |       S y )Nsimple-actionecho
bad-actionrB   arrow-exceptionforeverc               3   Z   K    j                         sd  j                         sy y w)Nr  )is_cancelled)ro   s   r   rD  z(ConvenienceServer.do_action.<locals>.gen`  s&     !..0 L "..0s   %++)rF   r  bodyr;   ArrowMemoryError)rb   ro   r   rD  s    `  r   r   zConvenienceServer.do_actionV  s    ;;/)---[[F"KK= [[L(7N[[--%%''[[I%! 5L	 &r   N)ry   rz   r{   r|   propertyr  r   r   r   r   r  r  M  s      ( (r   r  c                     t               5 } t        d| j                  f      5 }|j                  d      D cg c]  }|j                   }}|| j
                  k(  sJ d}|j                  d|f      D cg c]  }|j                   }}||gk(  sJ 	 d d d        d d d        y c c}w c c}w # 1 sw Y   xY w# 1 sw Y   y xY w)Nr   r  s   the-bodyr  )r  r   rf  r   r  r  )rN  r`  xresultsr  s        r   !test_do_action_result_conveniencer  f  s    		+v{{34 $*#3#3O#DE#Da166#DE&66666 #)#3#3VTN#CD#Ca166#CD4&    5 
	 F
 E 54 
	s?   B9B-B#
*B-4B(
B-B9#
B--B6	2B99Cc                     t               5 } t        d| j                  f      5 }t        j                  t
        j                  d      5  t        |j                  d             d d d        t        j                  t
        j                  d      5  t        |j                  d             d d d        d d d        d d d        y # 1 sw Y   bxY w# 1 sw Y   &xY w# 1 sw Y   *xY w# 1 sw Y   y xY w)Nr   za bytes-like object is requiredrs  r  r  r  )	r  r   rf  r%  r&  r   r  rg  r   rm  s     r   test_nicer_server_exceptionsr  t  s    		+v{{34]]633!BD!!,/0D ]]633!35!!"3455 5 
	D D5 5 54 
	sR   C)&C	C$-CC,C4C)C
CCCC&	"C))C2c                      t        d      } 	 | j                  dkD  sJ 	 | j                          y# | j                          w xY w)zMake sure port() works.rK  r   N)r   rf  shutdown)rN  s    r   test_get_portr    s7     !56F{{Qs	   0 Antz'Unix sockets can't be tested on Windows)reasonc                  ,   t        j                         5 } | j                          t        j                  j                  | j                        }t        |      5  t        |      5 }|j                  t        j                  d            }t               }|j                  j                  |j                        sJ |j                         }|j                  |      sJ |j                  t        j                  d            }t               }|j                  j                  |j                        sJ |j                         }|j                  |      sJ 	 ddd       ddd       ddd       y# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   yxY w)z3Try a simple do_get call over a Unix domain socket.rV  r[   r\   N)tempfileNamedTemporaryFilerl  r   r   for_grpc_unixnamerY   r   rw   r$  r@   rk   r   r   rN   )sockrc   r`  r   rv   r?   s         r   test_flight_domain_socketr    s$    
	$	$	&$

??00;!84X&&]]6==#9:F%'E==''555??$D;;u%%%]]6==#:;F&(E==''555??$D;;u%%% ' 5 
'	& '& 54 
'	&s=   AF
E>'C1E2E>!F
2E;7E>>F	F

Fc                  z   t         j                  j                  t        j                  t	        dd            gdg      } t        | j                        5 }t        d|j                  f      5 }|j                  t        j                  j                  d      | j                        \  }}|j                  | d       |j                          |j                  t        j                   d            j#                         }|j%                  |       sJ 	 d	d	d	       d	d	d	       y	# 1 sw Y   xY w# 1 sw Y   y	xY w)
zTry sending/receiving a large message via Flight.

    See ARROW-4421: by default, gRPC won't allow us to send messages >
    4MiB in size.
    r   i   rU   r9   )r   r   r  r   N)r;   r=   r>   r<   r   r   rk   r   rf  r   r   rl   rm   r0  rl  rw   r$  r   r   r?   rN  r`  r   _rG  s         r   test_flight_large_messager    s     88
q*+,!U   D 
$++	6&+v{{34MM&"9"9"B"B6"J"&++/	 	4!12v}}S12;;=}}T""" 5 
7	644 
7	6s%   D1/B$D%D1%D.	*D11D:c                  `   t         j                  j                  t        j                  t	        dd            gdg      } t               5 }t        d|j                  f      5 }|j                  t        j                  j                  d      | j                        \  }}|j                  |        |j                          |j                  t        j                   d            j#                         }|j%                  |       sJ 	 ddd       ddd       y# 1 sw Y   xY w# 1 sw Y   yxY w)	z?Try downloading a flight of RecordBatches in a GeneratorStream.r   r.  rU   r9   r   r  r   N)r;   r=   r>   r<   r   r   r   rf  r   r   rl   rm   rk   r0  rl  rw   r$  r   r   r  s         r   test_flight_generator_streamr    s    88
q)$%!U   D 
 	!V+v{{34MM&"9"9"B"B6"J"&++/	4 v}}S12;;=}}T""" 5 
"	!44 
"	!s%   D$#B#DD$D!	D$$D-c                  n   t               5 } t        d| j                  f      5 }t        j                  t
        j                        5  |j                  t        j                  d            j                          ddd       ddd       ddd       y# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   yxY w)z+Try streaming data with mismatched schemas.r   r   N)r   r   rf  r%  r&  r;   ArrowExceptionrw   r   r$  r   rm  s     r   $test_flight_invalid_generator_streamr    sx    	"	$+v{{34]]2,,-MM&--,-668 . 5 
%	$-- 54 
%	$s:   B+$B3B:BB+BBB(	$B++B4c            	         t               5 } t        d| j                  f      5 }t        j                  dd      }t        j
                  d      }t        j                  t        j                        5  t        |j                  ||             ddd       ddd       ddd       y# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   yxY w)z)Make sure timeouts fire on slow requests.r   r   r   g?rZ  rs   N)r   r   rf  r   r!  FlightCallOptionsr%  r&  r  rg  r   )rN  r`  r   ra   s       r   test_timeout_firesr    s     
	v+v{{34r3'**37 ]]6556!!&'!:; 7 5 
	 76 54 
	s;   CAB53B)B5C)B2.B55B>	:CC
c                  .   t               5 } t        d| j                  f      5 }t        j                  d      }|j                  t        j                  d      |      j                          ddd       ddd       y# 1 sw Y   xY w# 1 sw Y   yxY w)z0Make sure timeouts do not fire on fast requests.r   r   rZ  r[   rs   N)rY   r   rf  r   r  rw   r$  r   )rN  r`  ra   s      r   test_timeout_passesr    sl    		6+v{{34**37fmmG,g>GGI 5 
 	44 
 	s#   BAA?.B?B	BBc                     t         j                  j                  t        j                  g d      gdg      } t	               5 }t        d|j                  f      5 }t        j                  t        dg            }|j                  t        j                  d      |	      j                         }|j                  t        j                  d            j                         }|j                  d
k(  sJ |j                  dk(  sJ || k(  sJ |t               k(  sJ 	 ddd       ddd       y# 1 sw Y   xY w# 1 sw Y   yxY w)z"Make sure ReadOptions can be used.rR   rV   r9   r   rG   )included_fields)read_optionsr]   rs   rH   N)r;   r=   r>   r<   rY   r   rf  r   r  r   rw   r$  r   num_columnsrW   )expectedrN  r`  ra   	response1	response2s         r   test_read_optionsr    s   xx##RXXl%;$<SE#JH		6+v{{34**'<>MM&--#& " ((0
 	MM&--"9:CCE	$$)))$$)))H$$$13333 5 
 	44 
 	s%   D9C D-D9-D6	2D99E   tests   p4ssw0rd)rM  c                  z   t        t              5 } t        d| j                  f      5 }t	        j
                  dd      }t        j                  t        j                  d      5  t        |j                  |             ddd       ddd       ddd       y# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   yxY w)z,Test that auth fails when not authenticated.auth_handlerr   r   r   z.*unauthenticated.*rs  N)r   basic_auth_handlerr   rf  r   r!  r%  r&  r  rg  r   rN  r`  r   s      r   test_http_basic_unauthr    s     
 -?	@F+v{{34z3/]]6<<!68!!&)*8 5 
A	@8 8 54 
A	@s:   B1<B%%B B%B1B"B%%B.	*B11B:z,ARROW-10013: gRPC on Windows corrupts peer()c                     t        t              5 } t        d| j                  f      5 }t	        j
                  dd      }|j                  t        dd             |j                  |      }t        |      }|j                  j                         dk(  sJ t        |      }|j                  j                         dk7  sJ 	 ddd       ddd       y# 1 sw Y   xY w# 1 sw Y   yxY w)	z:Test a Python implementation of HTTP basic authentication.r  r   r   r   r  p4ssw0rdr  N)r   r  r   rf  r   r!  rY  r`  r   nextr  r   )rN  r`  r   r  identitypeer_addresss         r   test_http_basic_authr    s     
 -?	@F+v{{34z3/6vzJK""6*=}}'')W444G}  ++-444 5 
A	@44 
A	@s#   CBCCC	CC'c            	         t        t              5 } t        d| j                  f      5 }t	        j
                  dd      }t        j                  t        j                  d      5  |j                  t        dd             t        |j                  |             d	d	d	       d	d	d	       d	d	d	       y	# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   y	xY w)
z-Test that auth fails with the wrong password.r  r   r   r   z.*wrong password.*rs  r  wrongN)r   r  r   rf  r   r!  r%  r&  r  rY  r`  r  r   r  s      r   %test_http_basic_auth_invalid_passwordr    s    	-?	@F+v{{34z3/]]6<<!57 :67 KL!!&)*7 5 
A	@7 7 54 
A	@s:   C<C %6B4C #C4B=9C  C		CCc                  |   t        t              5 } t        d| j                  f      5 }t	        j
                  dd      }|j                  t        dd             t        |j                  |            }|j                  j                         dk(  sJ 	 ddd       ddd       y# 1 sw Y   xY w# 1 sw Y   yxY w)	-Test an auth mechanism that uses a handshake.r  r   r   r   r  r  r  N)r   token_auth_handlerr   rf  r   r!  rY  ry  r  r   r  r   )rN  r`  r   r  s       r   test_token_authr  &  s    	-?	@F+v{{34z3/26:FG((01}}'')W444	 5 
A	@44 
A	@s#   B2A+B&B2&B/	+B22B;c            	      L   t        t              5 } t        d| j                  f      5 }t	        j
                  t        j                        5  |j                  t        dd             ddd       ddd       ddd       y# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   yxY w)r  r  r   r  r  N)
r   r  r   rf  r%  r&  r   r  rY  ry  rm  s     r   test_token_auth_invalidr  0  su    	-?	@F+v{{34]]6<<= 6vw GH > 5 
A	@== 54 
A	@s:   B$BB)B1BBBB	BB#c                  
   t        t        dt               i      5 } t        d| j                  f      5 }|j                  dd      }|d   dk(  sJ |d   d	k(  sJ 	 d
d
d
       d
d
d
       y
# 1 sw Y   xY w# 1 sw Y   y
xY w)zATest authenticate_basic_token with bearer token and auth headers.rX  r  r  r   r     passwordr   r  rG      Bearer token1234N)r  no_op_auth_handlerr  r   rf  authenticate_basic_token)rN  r`  
token_pairs      r   test_authenticate_basic_tokenr  <  s    	-?13M 

+v{{3444WkJ
!} 0000!} 3333 5
 
 54
 
s"   A9'A-A9-A6	2A99Bc                  P   t        t        dt               i      5 } t        d| j                  f      5 }t        j                  t        j                        5  |j                  dd       ddd       ddd       ddd       y# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   yxY w)z7Test authenticate_basic_token with an invalid password.rX  r  r   r  s   badpasswordN)
r  r  r  r   rf  r%  r&  r   r  r  rm  s     r   .test_authenticate_basic_token_invalid_passwordr  G  s    	-?13M 

+v{{34]]6<<=++G^D > 5
 
 >= 54
 
s:   B$BB+B3BB	BB	BB%c            
         t        t        dt               i      5 } t        d| j                  f      5 }|j                  dd      }|d   dk(  sJ |d   d	k(  sJ t        j                  |g
      }t        |j                  t        j                  dd      |            }|d   j                  j                         dk(  sJ 	 ddd       ddd       y# 1 sw Y   xY w# 1 sw Y   yxY w)z@Test authenticate_basic_token and doAction after authentication.rX  r  r   r  r  r   r  rG   r  r  test-actionr   r   ra   	   token1234N)r  r  r  r   rf  r  r   r  rg  r   r!  r  r   rN  r`  r  ra   rG  s        r   (test_authenticate_basic_token_and_actionr  Q  s    	-?13M 

+v{{3444WkJ
!} 0000!} 3333**J<@f&&==4g ' G Hay~~((*l::: 5
 
 54
 
s#   C"BCC"C	C""C+c            	         t        t        dt               i      5 } t               }t	        d| j
                  f|g      }t        j                  d      }t        j                  dd|z   fg      }t        |j                  t        j                  d	d
      |            }|d   j                  j                         dk(  sJ |j                  d   dk(  sJ |j                  d   dk(  sJ t        |j                  t        j                  d	d
      |            }|d   j                  j                         dk(  sJ |j                  d   dk(  sJ |j                  d   dk(  sJ |j!                          ddd       y# 1 sw Y   yxY w)zTest authenticate_basic_token with client middleware
       to intercept authorization header returned by the
       HTTP header auth enabled server.
    rX  r  r   r  s   test:passwordr  s   Basic r  r  r   r  r   r  rG   r  N)r  r  r  r  r   rf  rr  rs  r   r  rg  r   r!  r  r   r  rl  )rN  client_auth_middlewarer`  encoded_credentialsra   rG  result2s          r   4test_authenticate_basic_token_with_client_middlewarer  `  s   
 
 -?13M 

!B!D&++&./
 %../?@**y+>>?4
  f&&==4g ' G Hay~~((*l:::%55a8<LLLL%55a8%& 	& &v''==4g ( G Hqz))+|;;;%55a8<LLLL%55a8%& 	& &1
 
 
s   EE??Fc            
      6   t        t        t               t               d      5 } t	        d| j
                  f      5 }|j                  dd      }|d   dk(  sJ |d   d	k(  sJ t        j                  |d
dg      }t        |j                  t        j                  dd      |            }|d   j                  j                         dk(  sJ |d   j                  j                         dk(  sJ 	 ddd       ddd       y# 1 sw Y   xY w# 1 sw Y   yxY w)z:Test passing multiple arbitrary headers to the middleware.)rX  r  r  r   r  r  r   r  rG   r  )s   test-header-1   value1)s   test-header-2   value2r  r  r   rs   r  r  N)r  r  r  r  r   rf  r  r   r  rg  r   r!  r  r   r  s        r   -test_arbitrary_headers_in_flight_call_optionsr    s   	%'57!H!J


 +v{{3444WkJ
!} 0000!} 3333**))4
 
 f&&v}}3( )0 ' 2 3ay~~((*i777ay~~((*i777 5
 
 54
 
s#   DB4D2DD	DDc                  ,   t        j                  t        j                  d      5  t	        j
                  d       ddd       t        j                  t        j                  d      5  t        d       ddd       y# 1 sw Y   CxY w# 1 sw Y   yxY w)zTest constructing invalid URIs.z.*Cannot parse URI:.*rs  %N)r%  r&  r;   r  r   re  rY   r   r   r   test_location_invalidr    sa    	r.E	Fs 
G 
r.E	FS! 
G	F 
G	F 
G	Fs   A>)B
>B
Bc                      t        j                  d      j                  dk(  sJ t        j                  d      j                  dk(  sJ y)z,Test creating locations for unknown schemes.zs3://foos   s3://foozhttps://example.com/bar.parquets   https://example.com/bar.parquetN)r   r   urir   r   r   test_location_unknown_schemer    sD    ??:&**k999??<=AA*+ + +r   c                     t               } t        | d         5 }t        dt        |j                        z         5 }t        j                  t        j                        5  |j                  t        j                  d            j                          ddd       ddd       ddd       y# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   yxY w)z>Make sure clients cannot connect when cert verification fails.r0   tls_certificateszgrpc+tls://localhost:r[   N)r2   rY   r   r4  rf  r%  r&  r   FlightUnavailableErrorrw   r$  r   certssr`  s      r   test_tls_failsr    s     E 
u^/D	E03qvv;>?6 ]]6889MM&--01::< : @ 
F	E :9 @? 
F	Es:   "C$B8 3B,B8C,B51B88C	=CCc                  b   t               } t               }t        |d         5 }t        d|j                  f|d         5 }|j                  t        j                  d            j                         }|j                  |       sJ 	 ddd       ddd       y# 1 sw Y   xY w# 1 sw Y   yxY w)z"Try a simple do_get call over TLS.r0   r  r   r/   )tls_root_certsr[   N)
r@   r2   rY   r   rf  rw   r   r$  r   r   rv   r  r  r`  r?   s        r   test_tls_do_getr    s     EE	u^/D	Ek166*$)+$6	8;A}}V]]734==?{{5!!!	8 
F	E	8 	8 
F	Es$   B%ABB%B"	B%%B.c                     t               } t               }t        |d         5 }	 t        d|j                  fd      }j                  t        j                  d            j                         }|j                  |       sJ |j                          ddd       y# t
        $ r t        j                  d       Y ~w xY w# 1 sw Y   yxY w)	zDTry a simple do_get call over TLS with server verification disabled.r0   r  r   Tdisable_server_verificationz4disable_server_verification feature is not availabler[   N)r@   r2   rY   r   rf  r   r%  skiprw   r   r$  r   r   rl  r  s        r   $test_tls_disable_server_verificationr    s     EE	u^/D	E	P!;"7>BDF }}V]]734==?{{5!!! 
F	E # 	PKKNO	P	 
F	Es.   CBACB>;C=B>>CC
c                     t               } t        | d         5 }t        j                  d|j                  f| d   d      5 }t        j                  t        j                        5  |j                  t        j                  d             ddd       ddd       ddd       y# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   yxY w)	z5Check that incorrectly overriding the hostname fails.r0   r  r   r/   fakehostname)r  override_hostnamer[   N)
r2   rY   r   re  rf  r%  r&  r  rw   r$  r   s      r   test_tls_override_hostnamer    s     E	u^/D	EQVV,&+K&8)7	9<B]]6889MM&--01 :	9 
F	E :9	9 	9 
F	Es;   (B<$B0&%B$B0B<$B-)B00B9	5B<<Cc                  ^   t        j                  g d      g} t         j                  j                  | dg      }g }t	               5 }t        d|j                  f      5 }|j                  t        j                  d            }d}|D ]H  \  }}|j                  |       t        j                  d|j                               \  }	||	k(  sJ |dz  }J t         j                  j                  |      } | j                  |      sJ 	 d	d	d	       d	d	d	       y	# 1 sw Y   xY w# 1 sw Y   y	xY w)
z'Try a simple do_get call with metadata.r4   rU   r9   r   r   r   r   rG   N)r;   r<   r=   r>   r   r   rf  rw   r   r$  r  r   r   r   from_batchesr   )
r?   rv   batchesrN  r`  r   r   r   metadata
server_idxs
             r   test_flight_do_get_metadatar    s    	$%D HH  cU 3EG		6+v{{34v}}S12%OE8NN5! --h.A.A.CDKJ*$$$1HC	  &
 xx$$W-{{5!!! 5 
 	44 
 	s%   D#B&DD#D 	D##D,c                  T   g } g }t               5 }t        d|j                  f      5 }|j                  t	        j
                  d            }d}	 	 |j                         \  }}| j                  |       t        j                  d|j                               \  }||k(  sJ |dz  }X# t        $ r Y nw xY w	 ddd       n# 1 sw Y   nxY wddd       n# 1 sw Y   nxY wt               5 }t        d|j                  f      5 }|j                  t	        j
                  d            }d}|D ]H  \  }}|j                  |       t        j                  d|j                               \  }||k(  sJ |dz  }J 	 ddd       n# 1 sw Y   nxY wddd       n# 1 sw Y   nxY w| |k(  sJ y)z0Verify the iterator interface works as expected.r   r   r   r   rG   N)r   r   rf  rw   r   r$  
read_chunkr  r   r   r   StopIteration)	batches1batches2rN  r`  r   r   r   r  r  s	            r   1test_flight_metadata_record_batch_reader_iteratorr    s|   HH		6+v{{34v}}S12"("3"3"5x&$mmD(2E2E2GH
j(((q  !  544 
 		 
	6+v{{34v}}S12%OE8OOE" --h.A.A.CDKJ*$$$1HC	  & 544 
 		 xsl   C(C AB'&C '	B30C 2B33C 7	C C		CC+FA4F8	FF
	FFc                  "   t         j                  j                  t        j                  g d      gdg      } t         j                  j                  t         j                  j                  j                        }t        |      5 }t        d|j                  f      5 }|j                  t        j                  d            }|j                         }|j                  |       sJ 	 ddd       ddd       y# 1 sw Y   xY w# 1 sw Y   yxY w)	z2Try a simple do_get call with V4 metadata version.r4   rU   r9   rq  rs   r   r   N)r;   r=   r>   r<   ru  rv  rw  rx  r   r   rf  rw   r   r$  r   r   )rv   ra   rN  r`  r   r?   s         r   test_flight_do_get_metadata_v4r    s    HH  	%	&'u ! 6Eff$$//22 % 4G	g	.&+v{{34v}}S12 {{5!!! 5 
/	.44 
/	.s%   DAC9(D9D	>DDc            	         t        j                  g d      g} t         j                  j                  | dg      }t	               5 }t        d|j                  f      5 }|j                  t        j                  j                  d      |j                        \  }}|5  t        |j                  d            D ]n  \  }}t        j                  d|      }|j!                  ||       |j#                         }	|	J t        j$                  d|	j'                               \  }
||
k(  rnJ  	 d	d	d	       d	d	d	       d	d	d	       y	# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   y	xY w)
z'Try a simple do_put call with metadata.r4   rU   r9   r   r   rG   r   r   N)r;   r<   r=   r>   r   r   rf  r   r   rl   rm   rk   r   r   r   r   r8  r#   r   r   )r?   rv   rN  r`  r   metadata_readerr   r   r  r   r  s              r   test_flight_do_put_metadatar!  $  s0    	$%D HH  cU 3E		6+v{{34"(--##,,R0LL# '(8(8q(8(IJ
U!;;tS1**5(;%**,&$mmD#..2BC
j((( K 	 5 
 	
 V	 54 
 	sC   E?EB	E&E*E2EEEE	EE$c            	         t         j                  j                  t        j                  t	        j
                  dt	        j                                     gdg      } t               5 }t        d|j                  fd      5 }|j                  t        j                  j                  d      | j                        \  }}|5  t        j                   t        j"                  d	
      5 }|j%                  |        ddd       j&                  j(                  dk(  sJ | j+                  dd      | j+                  d      g}|D ]  }|j%                  |        	 ddd       t         j,                  j/                  | g      }|j1                  t        j2                  d            j5                         }	||	k(  sJ 	 ddd       ddd       y# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   *xY w# 1 sw Y   yxY w)z+Try a simple do_put call with a size limit.i   )dtyperU   r9   r   i   )write_size_limit_bytesr   zexceeded soft limitrs  Nr   i  r   )r;   r   r>   r<   nponesr  r   r   rf  r   r   rl   rm   rk   r%  r&  FlightWriteSizeExceededErrorr9  rF  limitslicer=   r  rw   r$  r   )
large_batchrN  r`  r   r   excinfosmaller_batchesr   r  actuals
             r   test_flight_do_put_limitr.  :  s    ..,,
BHHJ/0.U - K 
	vk6;;/,0	25;"(--##,,R0#  vBB%:<?F"";/< ==&&$...!!!S)!!#&O )""5) )  88((+7v}}S12;;=6!!!%	2 
	< < V	2 	2 
	sV   (G/?G#&G'G	9AGA!G#:G/GGG G##G,	(G//G8c                     t               5 } t        d| j                  f      5 }|j                  t	        j
                  d            }|j                          t        j                  t        j                  d      5  |j                          ddd       ddd       ddd       y# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   yxY w)z4Test canceling a DoGet operation on the client side.r   r[   z(?i).*cancel.*rs  N)rY   r   rf  rw   r   r$  r	  r%  r&  r  r  )rN  r`  r   s      r   test_cancel_do_getr0  W  s     
	6+v{{34v}}W56]]666!133 5 
 	3 3 54 
 	s;   B?AB3=B'B3B?'B0,B33B<	8B??Cc                     t               5 } t        d| j                  f      5 }|j                  t	        j
                  d            t        j                         t        j                         t        j                         t        j                         fd}t        j                  |d      }|j                          j                  d       j                          j                          |j                  d       5  j                         sJ 	 d	d	d	       d	d	d	       d	d	d	       y	# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   y	xY w)
z5Test canceling a DoGet operation from another thread.r   r[   c                     j                          j                          j                  d       	 j                          y # t        j                  $ r+ 5   j                          d d d        Y y # 1 sw Y   Y y xY ww xY w)Nr6   rZ  )r  setwaitr   r  )raised_proper_exceptionread_first_messager   result_lockstream_canceleds   r   
block_readz/test_cancel_do_get_threaded.<locals>.block_readp  sk    ""$   +2!!#.. 2 +//1 ![[2s)   A BA6,B6B 	;B BTrW  r6   rZ  rG   N)r   r   rf  rw   r   r$  r\  EventLockr]  r^  r4  r	  r3  joinis_set)	rN  r`  r9  ra  r5  r6  r   r7  r8  s	       @@@@@r   test_cancel_do_get_threadedr>  c  s    
	v+v{{34v}}W56&__.#//+nn&"+//"3	2 	2 !!DA*A*11333 3 5 
	4 [3 54 
	s;   EC+EE 'E/E E	EE	EE!c                     t               5 } t        d| j                  f      5 }|j                  t	        j
                  dd            }t        |      j                  dk(  sJ ~d d d        d d d        y # 1 sw Y   xY w# 1 sw Y   y xY w)Nr   r  r   r  )r  r   rf  r   r   r!  r  r  )rN  r`  r  s      r   test_streaming_do_actionr@    sp    		+v{{34""6==C#@AG}!!V+++	 5 
	44 
	s#   BAA5$B5A>	:BB
c                     t        j                  dd      } | t         j                  j                  | j                               k(  sJ t        j                  d      }|t         j                  j                  |j                               k(  sJ t        j
                  d      }|t         j
                  j                  |j                               k(  sJ t        j                  dd      }|t         j                  j                  |j                               k(  sJ t        j                  t        j                  dt        j                         fg            }|t         j                  j                  |j                               k(  sJ t         j                  j                  d      }|t         j                  j                  |j                               k(  sJ t         j                  j                  dd	d
      }|t         j                  j                  |j                               k(  sJ t        j                  t        j                  dt        j                         fg      |t        j                  ddg      t        j                  dt         j                   j#                  dd      g      gdd      }t         j                  j                  |j                               }|j                  |j                  k(  sJ |j$                  |j$                  k(  sJ |j&                  |j&                  k(  sJ |j(                  |j(                  k(  sJ |j*                  |j*                  k(  sJ t        j                  |dt         j                   j#                  dd      g      }|t         j                  j                  |j                               k(  sJ y)z(Make sure serializable types round-trip.action1s   action1-bodyrB   s   result1	username1	password1rU   r  rV   z
test.arrowr   r   r   r   rh   N)r   r!  rS  re  r$  r#  rR  r   r;   rk   r   rl   r"  rm   rj   r   r   r   r   r  r  r  )	r   rt   rG  rb  schema_resultdescr   info2endpoints	            r   test_roundtrip_typesrI    s   ]]9o6FV]]..v/?/?/ABBBB]]5!FV]]..v/?/?/ABBBB]]:&FV]]..v/?/?/ABBBB!!+{;J))55j6J6J6LMMMM''		C3D2E(FGMF//;;!# # # # ""..v6D6**66t~~7GHHHH""++ClCD6**66t~~7GHHHH
		C$%&!!#7!!--k4@A	
 	
D ))$..*:;E;;%,,&&&??e.....u00000!4!4444>>U__,,,$$	44[$GHH v,,889K9K9MNNNNr   c                     t               5 } t        d| j                  f      5 }t         j                         j	                         D ]S  \  }}t        j                  |d      5  t        |j                  t        j                  |d                   ddd       U t        j                  t        j                  d      5  t        |j                                ddd       t        j                  g d      g}t        j                  j!                  |dg      }t        j                  t        j"                  t        j$                  t        j&                  t        j(                  d	}|j	                         D ]  \  }}t        j                  |d      5  |j+                  t        j,                  j/                  |      |j0                        \  }	}
|	j3                  |       |	j5                          ddd       t        j                  |d      5  |j+                  t        j,                  j/                  |      |j0                        \  }	}
|	j5                          ddd        	 ddd       ddd       y# 1 sw Y   BxY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   3xY w# 1 sw Y   ExY w# 1 sw Y   yxY w)
z:Ensure that Flight errors propagate from server to client.r   z.*foo.*rs  r   Nr4   rU   r9   )r  r  r	  r
  r  )r  r   rf  r  rC  r%  r&  rg  r   r   r!  r  rq   r;   r<   r=   r>   r  r  r  r  r   rl   r"  rk   r0  rl  )rN  r`  argexc_typer?   rv   
exceptionsr  	exceptionr   r   s              r   test_roundtrip_errorsrO    s   		+v{{34.::<BBDMCxy9V%%fmmC&=>? :9 E ]]655YG$$&' H ,-.$$T#$7 222211%@@"::

 #-"2"2"4GYy	:!'++77@LL"" ""5) ; y	:!'++77@LL"" 	 ;: #5' 5 
	 :9GG  ;: ;:9 54 
	s   J=A J1#/I>	/J1JB=J1AJ	6J1AJ$	"
J1-J=>JJ1JJ1J!J1$J.)J11J:	6J==Kc                     t        j                  g d      g} t         j                  j                  | dg      }t	               5 }t        d|j                  f      5 }|j                  t        j                  j                  d      |j                        \  }dgfd}t        j                  |      }|j                          |j                  d	
      }|5  t!        |      D ]-  \  }}	t#        j$                  d|      }
|j'                  |	|
       / |j)                          |j+                          ddd       d   t-        |      k(  sJ 	 ddd       ddd       y# 1 sw Y   .xY w# 1 sw Y   xY w# 1 sw Y   yxY w)z7Ensure that separate threads can read/write on a DoPut.r4   rU   r9   r   r   r   c                  d    j                          dxx   dz  cc<   j                         y y )Nr   rG   )r#   )countr   s   r   _reader_threadz:test_do_put_independent_read_write.<locals>._reader_thread  s0    !&&(4aA "&&(4r   rX  rG   r   r   N)r;   r<   r=   r>   r   r   rf  r   r   rl   rm   rk   r\  r]  r^  r   r   r   r   r8  done_writingr<  rh  )r?   rv   rN  r`  r   rS  ra  r  r   r   r  rR  r   s              @@r   "test_do_put_independent_read_writerV    sL    	$%D HH  cU 3E		6+v{{34"(--##,,R0LL# 	 !!8"""3'0
U!;;tS1**5(; 1 !KKM  Qx3w<'''3 5 
 	  V 54 
 	s>   F B E4AE(;E4F (E1-E44E=	9F  F	c            
      x   t        dt               i      5 } t        d| j                  f      5 }t	        |j                  t        j                  dd                  }t        |      dk(  sJ |d   j                  j                         }d|k(  sJ 	 d	d	d	       d	d	d	       y	# 1 sw Y   xY w# 1 sw Y   y	xY w)
z@Ensure that server middleware run on the same thread as the RPC.r  r  r   r  r   rG   r   s   right valueN)r  r  r   rf  rg  r   r   r!  rh  r  r   )rN  r`  r  rF  s       r   "test_server_middleware_same_threadrX    s    	-/( 

+v{{34v''gs(CDE7|q   
**,&&&	 5
 
 54
 
s#   B0A#B$B0$B-	)B00B9c                      t        dt               i      5 } t        d| j                  f      5 }t	        j
                  t        j                        5  t        |j                                ddd       t	        j
                  t        j                        5  t        |j                  t        j                  dd                   ddd       t        d| j                  ft               g      }t        |j                  t        j                  dd                  }d|j                   j#                         k(  sJ 	 ddd       ddd       y# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   *xY w# 1 sw Y   yxY w)z-Test rejecting an RPC with server middleware.r  r  r   Nr   r  )r  r  r   rf  r%  r&  r;   ArrowNotImplementedErrorrg  r   r   r  r   r!  r  r  r  r   )rN  r`  responses      r   test_middleware_rejectr\    s    	46( 

+v{{34]]2667$$&' 8 ]]6<<=!!&--S"9:; > &++&<>?
 ((sC)@ABhmm668888 5
 

 87 >= 54
 
sS   E4$E(E-+E(/EA7E(?E4EE(E%!E((E1	-E44E=c                     t               } t               }t        d| i      5 }t        d|j                  f|g      5 }t
        j                  j                  d      }t        j                  t              5  t        |j                                ddd       t        j                  t              5  |j                  |       ddd       t        j                  t              5  |j                  |       ddd       t        j                  t              5  |j                  t        j                   d             ddd       t        j                  t              5  |j#                  |t%        j&                  g             \  }}|j)                          ddd       t        j                  t              5  t        |j+                  t        j,                  dd                   ddd       t        j                  t              5  t        |j/                                ddd       t        j                  t              5  |j1                  |      \  }}|j)                          ddd       t
        j2                  j4                  t
        j2                  j6                  t
        j2                  j8                  t
        j2                  j:                  t
        j2                  j<                  t
        j2                  j>                  t
        j2                  j@                  t
        j2                  jB                  g}| jD                  |k(  sJ |jD                  |k(  sJ 	 ddd       ddd       y# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   ZxY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   cxY w# 1 sw Y   zxY w# 1 sw Y   yxY w)z/Test that middleware records methods correctly.r  r  r   r   N)#r  r  r	   r   rf  r   rl   r"  r%  r&  r   rg  rq   r   r   rw   r$  r   r;   rk   rl  r   r!  r   r   r  LIST_FLIGHTSGET_FLIGHT_INFO
GET_SCHEMADO_GETDO_PUT	DO_ACTIONr  DO_EXCHANGEr  )server_middlewareclient_middlewarerN  r`  r   r   r  r  s           r   test_middleware_mappingrg  0  s   8:8:	f.?%@	AV&++&)*	 
,,88=
]]./$$&' 0]]./"":. 0]]./j) 0]]./MM&--,- 0]]./j"))B-@IFALLN 0 ]]./!!&--S"9:; 0]]./$$&' 0]]./**:6IFALLN 0
 ,,//**&&&&)),,++	
 !((H444 ((H444I	 
B	A 0///////// 0/////+	 	 
B	As   O"9O7M.!O2M;!O%N7!O%N=!O9N"!O8/N/'!ON<"!O%O	(C4OO".M83O;N ONONO"N,'O/N94O<OO	OOO	O""O+c            
         t               5 } t        d| j                  f      5 }	 t        |j	                  t        j                  dd                   J # t
        j                  $ r+}|j                  J |j                  }|dk(  sJ Y d }~nd }~ww xY w	 d d d        n# 1 sw Y   nxY wd d d        y # 1 sw Y   y xY w)Nr   r  r   r  )	r  r   rf  rg  r   r   r!  r  
extra_info)rN  r`  eeis       r   test_extra_inforl  \  s    		+v{{34	5!!&--
C"@AB5-- 	5<<+++B4444	5 5 544 
		sE   B5B 0AB(!B	B BB 	B5 B)	%B55B>c                     t               } t               }t        | d   d   gd| d         5 }t        d|j                  f| d   | d   d   j
                  | d   d   j                        5 }|j                  t        j                  d            j                         }|j                  |      sJ 	 d	d	d	       d	d	d	       y	# 1 sw Y   xY w# 1 sw Y   y	xY w)
z!Test mutual TLS (mTLS) with gRPC.r0   r   Tr/   )r  verify_clientroot_certificatesr   )r  
cert_chainprivate_keyr[   N)r2   r@   rY   r   rf  r-   r.   rw   r   r$  r   r   )r  rv   r  r`  r?   s        r   	test_mtlsrr  h  s     EE	#N3A67#K0
2 67!&&! -^,Q/44n-a044		6 :@}}V]]734==?{{5!!!	6	
2 
2	6 	6	
2 
2s$   ?C,AC3CC		CCc                     t         j                  j                  t        j                  t	        dd            gdg      } t               5 }t        d|j                  f      5 }t        j                  j                  d      }|j                  |      \  }}|5  |j                         }ddd       | k(  sJ 	 ddd       ddd       y# 1 sw Y   "xY w# 1 sw Y   xY w# 1 sw Y   yxY w)r-  r   r.  rU   r9   r   r"  N)r;   r=   r>   r<   r   r  r   rf  r   rl   r"  r   r   )r  rN  r`  r   r   r   rv   s          r   test_doexchange_getrt  {  s    xx##
q)$%%U $ H 
	6+v{{34,,88@
++J7OO%E 5    5 
 	 V 54 
 	s<   C##6CC*C:C#CCC 	C##C,c                     t         j                  j                  t        j                  t	        dd            gdg      } | j                  d      }t               5 }t        d|j                  f      5 }t        j                  j                  d      }|j                  |      \  }}|5  |j                  | j                         |D ]  }|j                  |        |j!                          |j#                         }|j$                  J t'        t)        |            j+                  d
      }	|j,                  |	k(  sJ 	 d	d	d	       d	d	d	       d	d	d	       y	# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   y	xY w)r2  r   r.  rU   r9      r   r   r#  Nr   )r;   r=   r>   r<   r   r   r  r   rf  r   rl   r"  r   r/  rk   r9  rU  r  r?   r4  rh  r   r7  )
r?   r  rN  r`  r   r   r   r   r   expected_bufs
             r   test_doexchange_putrx    s=   88
q)$%!U   D ooCo0G		6+v{{34,,88@
++J7LL% ""5) !!%%'E::%%%s7|,33G<L%%555  5 
 	 V 54 
 	s=   E356E'+BEE'
E3E$ E''E0	,E33E<c                     t         j                  j                  t        j                  t	        dd            gdg      } | j                  d      }t               5 }t        d|j                  f      5 }t        j                  j                  d      }|j                  |      \  }}|5  t	        d	      D ]\  }t        |      j                  d
      }|j                  |       |j!                         }	|	j"                  J |	j$                  |k(  r\J  |j'                  | j(                         |D ]]  }
|j+                  |
       |j(                  | j(                  k(  sJ |j!                         }	|	j"                  |
k(  sJ |	j$                  ]J  t-        |      D ]c  \  }}
t        |      j                  d
      }|j/                  |
|       |j!                         }	|	j"                  |
k(  sJ |	j$                  |k(  rcJ  	 ddd       ddd       ddd       y# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   yxY w)zTry a DoExchange echo server.r   r.  rU   r9   rv  r   r   r!  r7   r   N)r;   r=   r>   r<   r   r   r  r   rf  r   rl   r"  r   r4  r   r3  r  r?   r7  r/  rk   r9  r   r8  )r?   r  rN  r`  r   r   r   ir   r   r   s              r   test_doexchange_echor{    s   88
q)$%!U   D ooCo0G		6+v{{34,,88A
++J72Y!fmmG,%%c*))+zz)))))S000  LL% ""5)}}333))+zzU***))111 ! &g.5!fmmG,**5#6))+zzU***))S000 /'  5 
 	 V 54 
 	sQ   H656H*+A'HA<HA0HHH*H6H'#H**H3	/H66H?c                  Z   t         j                  j                  t        j                  t	        dd            gdg      } | j                  d      }t         j                  j                  t         j                  j                  j                        }t        |      5 }t        d	|j                  f      5 }t        j                  j                  d
      }|j!                  |      \  }}|5  |j#                  | j$                  |       |D ]]  }|j'                  |       |j$                  | j$                  k(  sJ |j)                         }	|	j*                  |k(  sJ |	j,                  ]J  	 ddd       ddd       ddd       y# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   yxY w)z;Try a DoExchange echo server using the V4 metadata version.r   r.  rU   r9   rv  r   rq  rs   r   r!  N)r;   r=   r>   r<   r   r   ru  rv  rw  rx  r  r   rf  r   rl   r"  r   r/  rk   r9  r  r?   r7  )
r?   r  ra   rN  r`  r   r   r   r   r   s
             r   test_doexchange_echo_v4r}    s`   88
q)$%!U   D ooCo0Gff$$//22 % 4G	g	.&+v{{34,,88A
++J7LLgL6 ""5)}}333))+zzU***))111 !  5 
/	. V 54 
/	.sC   !F!96F/A<F	,F	0F8F!	FFF	F!!F*c            
      R   t         j                  j                  t        j                  t	        dd            t        j                  t	        dd            t        j                  t	        dd            gg d      } t         j                  j                  t        j                  t	        d	d
d	            gdg      }t               5 }t        d|j                  f      5 }t        j                  j                  d      }|j                  |      \  }}|5  |j                  | j                         |j                  |        |j                          |j!                         }ddd       |k(  sJ 	 ddd       ddd       y# 1 sw Y   "xY w# 1 sw Y   xY w# 1 sw Y   yxY w)z!Transform a table with a service.r   r   rG   i  rH   i  )rU   rV   cr9   rS   i  r<  r   r$  N)r;   r=   r>   r<   r   r  r   rf  r   rl   r"  r   r/  rk   r0  rU  r   )r?   r  rN  r`  r   r   r   rv   s           r   test_doexchange_transformr    sQ   88
q$ 
q$ 
q$ ! 	   D
 xx##
q,*+%W $ H 
	6+v{{34,,88F
++J7LL%t$!OO%E	 
 5    5 
 	 V 54 
 	s=   	F!6FAF$F4FF
FF	FF&c            
         t        dt               i      5 } t               }t        d| j                  f|g      5 }t        |j                  t        j                  dd                  }|j                  j                         j                  d      }t        j                  |      }t        j                  j!                         D ]l  \  }}|j#                         }t%        |t&              r|j                  d      }|j)                  |      |k(  sJ |j*                  j)                  |      |k(  rlJ  	 ddd       ddd       y# 1 sw Y   xY w# 1 sw Y   yxY w)r  r  r  r   r   r   asciiN)r  r
  r  r   rf  r  r   r   r!  r  r   r  astliteral_evalr   r  rC  r  rL  bytesr   r  )rN  r  r`  r[  raw_headersr  headerr  s           r   test_middleware_multi_headerr    s*   	 24- 

46fkk*#9&)/F,,V]]3-DEFH"--224;;GDK --k:N"="F"F"L"L"Nfe,#]]73F%))&1V;;;++//76AAA #O&	
 
& &	
 
s)   %EC6E3E7EE	EEc                     t               } t        | d         5 }dg}t        j                  d|j                  f| d   |      }t        j                  t        j                        5  |j                  t        j                  d             ddd       |j                          d	g}t        j                  d|j                  f| d   |      }t        j                  t        j                  t        j                  f      5  |j                  t        j                  d             ddd       |j                          ddd       y# 1 sw Y   xY w# 1 sw Y   .xY w# 1 sw Y   yxY w)
z$Test setting generic client options.r0   r  )zgrpc.ssl_target_name_overrider  r   r/   )r  generic_optionsr[   N)zgrpc.max_receive_message_length    )r2   rY   r   re  rf  r%  r&  r  rw   r$  rl  r;   r  r  )r  r  ra   r`  s       r   test_generic_optionsr    s    E	u^/D	EDEaff 5/4[/A079 ]]6889MM&--01 ::;aff 5/4[/A079 ]]BOOV-H-HIJMM&--01 K! 
F	E :9 KJ 
F	Es=   AE (%EA5E %E'E E	E E	E  E)c                       e Zd ZdZd Zd Zy)CancelFlightServerzA server for testing StopToken.c                     t        j                  g       }t         j                  j                  g |      }t	        j
                  |t        j                  |            S )Nr   )r;   rk   r   r>   r   r   r   r   )rb   ro   rt   rk   r!   s        r   rw   zCancelFlightServer.do_get&  sF    2^^''6':%%fi.>.>r.BCCr   c                 "   t        j                  g       }t         j                  j                  g |      }|j	                  |       |j                         s8|j                  |       t        j                  d       |j                         s7y y )Nr   r   )	r;   rk   r   r>   r/  r  r9  r  r  )rb   ro   r   r   r   rk   r!   s          r   r   zCancelFlightServer.do_exchange+  sg    2^^''6':V&&(r"JJsO &&(r   N)ry   rz   r{   r|   rw   r   r   r   r   r  r  #  s    )D
r   r  c                     t        j                         j                  t        j                         j                  k7  rt	        j
                  d       d t        t        j                  ffd} t               5 }t        d|j                  f      5 }|j                  t        j                  d            } | |j                         t        j                   j#                  d      }|j%                  |      \  }} | |j                         	 |j'                          d d d        d d d        y # t        t        j(                  f$ r Y ,w xY w# 1 sw Y   1xY w# 1 sw Y   y xY w)Nz'test only works from main Python threadc                  t    t        j                  d       t        j                  t        j                         y r   )r  r  signalraise_signalSIGINTr   r   r   signal_from_threadz*test_interrupt.<locals>.signal_from_thread9  s    

3FMM*r   c                    	 	 t        j                        }t        j                        5 }|j	                           |         d d d        |j                          	 j                  }t        |t        j                  t        f      s-t        |j                  t        j                  t        f      sJ y y # 1 sw Y   txY w# j                          w xY w# t        $ r t        j                  d       Y w xY w)NrT  z2KeyboardInterrupt didn't interrupt Flight read_all)r\  r]  r%  r&  r^  r<  KeyboardInterruptfailrF  rL  r;   ArrowCancelled__context__)r   texc_inforj  	exc_typesr  s       r   r  ztest_interrupt.<locals>.test?  s    	N$$,>?]]9-GGIJ .  NN!b//1BCDq}}r'8'8:K&LM	N NM E .-   	N KKLM	Ns:   +C B:C C :C?C CC C<;C<r   r   r!  )r\  current_threadidentmain_threadr%  r  r  r;   r  r  r   rf  rw   r   r$  r   rl   r"  r   rl  r  )r  rN  r`  r   r   r   r  r  s         @@r   test_interruptr  4  s   !''9+@+@+B+H+HH=>+ #B$5$56IN$ 
	+v{{34v}}S12V__,,88A
++J7V__	LLN 5 
	 "6#>#>? 		 54 
	sC   >EA<ED4#E4EEEEE	EE(c                     d} t               5 }t        j                  d|j                  f      5 }t	        j
                  t        j                  |       5  |j                  t        j                  d            j                          d d d        |j                  t        j                  d            j                         }|j                  dk(  sJ 	 d d d        d d d        y # 1 sw Y   ^xY w# 1 sw Y   xY w# 1 sw Y   y xY w)Nz'application server implementation errorr   rs  r   r   r6   )r   r   re  rf  r%  r&  r  rw   r$  r   r@  )rt  rN  r`  rv   s       r   test_never_sends_datar  a  s    5E	#	%NNK56&]]6335AMM&--,-668 B
 fmmM:;DDF~~""" 7 
&	%AA 76 
&	%s;   "C=&C13C%AC1C=%C.*C11C:	6C==Dc            	      X   t         j                  j                  ddz        } t               5 }t        j                  d|j
                  f      5 }t        j                  t        d      5  |j                  | t        j                  g             \  }}|j                          d d d        t        j                  t        j                  d      5  |j                  |        d d d        d d d        d d d        y # 1 sw Y   YxY w# 1 sw Y   &xY w# 1 sw Y   *xY w# 1 sw Y   y xY w)Nr  r  r   z%Failed to serialize Flight descriptorrs  )r   rl   r"  r	   re  rf  r%  r&  OSErrorr   r;   rk   rl  r  r   )large_descriptorrN  r`  r   r  s        r   test_large_descriptorr  o  s    
 ..::		vNNK56&]]7!HJ&6		"FIFALLNJ ]]2,,!HJ/0J 7 
	J JJ J 76 
	sS   "D D+9C<$-DD#D+D <DDDDD	D  D)c            	         t         j                  j                  d      } ddz  }t               5 }t        j                  d|j
                  f      5 }t        j                  t        j                  d      5  |j                  | t        j                  g             \  }}|5  |j                  |       |j                          d d d        d d d        t        j                  t        j                  d      5  |j                  |       \  }}|5  |j                  |       d d d        d d d        d d d        d d d        ~t               5 }t        j                  d|j
                  f      5 }t        j                  t         j                   d      5  |j#                  t        j$                  d            }|j'                          d d d        t        j                  t        j(                  d      5  |j                  |       \  }}|5  |j'                          d d d        d d d        d d d        d d d        y # 1 sw Y   ~xY w# 1 sw Y   xY w# 1 sw Y   :xY w# 1 sw Y   ?xY w# 1 sw Y   DxY w# 1 sw Y   IxY w# 1 sw Y   xY w# 1 sw Y   |xY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   y xY w)Nr   r  r  r   zapp_metadata size overflowrs  )r   rl   r"  r   re  rf  r%  r&  r;   ArrowCapacityErrorr   rk   r3  rl  r   r  r  rw   r$  r   r  )r   r  rN  r`  r   r  r   s          r   test_large_metadata_clientr    s    ((44S9J{#H		vNNK56&]]200!=?j"))B-@IFA%%h/ ? ]]200!=?#//
;NFF%%h/ ? 7 
 		"	$NNK56&]]633!=?]]6==#56FOO? ]]2,,!=?#//
;NFF! ? 7 
%	$ ? ? ? ? 76 
	"? ? ? ? 76 
%	$s   "J&I47+I""I 	I-I49I'I	"I'*I42J"J>/&J25J
-J27J&J	J&'J2/J> I
III4I$I''I1,I44I>	9JJJJ2J#J&&J/+J22J;	7J>>Kc                       e Zd ZdZg Zd Zy)ActionNoneFlightServerz@A server that implements a side effect to a non iterable action.c                     |j                   dk(  r/t        j                  | j                        j	                  d      gS |j                   dk(  r| j                  j                  d       y t        )N	get_valuer   r  T)rF   jsondumpsVALUESr   r  r   r   s      r   r   z ActionNoneFlightServer.do_action  sV    ;;+%JJt{{+227;<<[[H$KKt$!!r   N)ry   rz   r{   r|   r  r   r   r   r   r  r    s    JF"r   r  c                     t               5 } t        d| j                  f      5 }|j                  t	        j
                  dd             |j                  t	        j
                  dd            }t        j                  t        |      j                  j                               dgk(  sJ 	 ddd       ddd       y# 1 sw Y   xY w# 1 sw Y   yxY w)zEnsure that actions are executed even when we don't consume iterator.

    See https://issues.apache.org/jira/browse/ARROW-14255
    r   r  r   r  TN)r  r   rf  r   r   r!  r  loadsr  r  r   )rN  r`  rs      r   test_none_action_side_effectr    s     
 	!V+v{{34x56V]];<=zz$q',,1134>>> 5 
"	!44 
"	!s#   CBB<+C<C	CCc            	         d} d}t        j                  | |      t         j                  j                  d      }t	        j
                  dt	        j                         fg      } G fddt         j                        } |       5 }t        d|j                  f      5 }|j                  ||      \  }fd	}t        j                  |d
      }	|	j                          t        j                  t         j                        5 }
	 |j!                  t	        j"                  dgg|             )# 1 sw Y   nxY w
j$                  j&                  |k(  sJ t        j                  t         j                        5 }
|j)                          ddd       n# 1 sw Y   nxY w|
j$                  j&                  |k(  sJ |	j+                          |j-                  |      \  }fd}t        j                  |d
      }	|	j                          t        j                  t         j                        5 }
	 |j/                  d       # 1 sw Y   nxY w|
j$                  j&                  |k(  sJ t        j                  t         j                        5 }
|j)                          ddd       n# 1 sw Y   nxY w|
j$                  j&                  |k(  sJ |	j+                          ddd       n# 1 sw Y   nxY wddd       y# 1 sw Y   yxY w)z
    Ensure that exceptions during writing preserve error context.

    See https://issues.apache.org/jira/browse/ARROW-16592.
    rB   r5  )ri  r   r  c                   "    e Zd Z fdZ fdZy)0test_write_error_propagation.<locals>.FailServerc                     r   r   rb   ro   r   r   r   excs        r   r   z7test_write_error_propagation.<locals>.FailServer.do_put      Ir   c                     r   r   r  s        r   r   z<test_write_error_propagation.<locals>.FailServer.do_exchange  r  r   N)ry   rz   r{   r   r   )r  s   r   
FailServerr    s    		r   r  r   c                  \    	 	  j                          # t        j                  $ r Y y w xY wr   )r#   r   FlightErrorr   s   r   _readerz-test_write_error_propagation.<locals>._reader  s1    KKM %%     ++TrW  rG   r   Nc                  \    	 	  j                          # t        j                  $ r Y y w xY wr   )r  r   r  r  s   r   r  z-test_write_error_propagation.<locals>._reader  s4    %%' %% r  r  )r   r  rl   r"  r;   rk   r  r	   r   rf  r   r\  r]  r^  r%  r&  r9  r  rF  ri  rl  r<  r   r3  )expected_messageexpected_infor   rk   r  rN  r`  r   r  ra  r  r  r   s              @@r   test_write_error_propagationr    sG    M

%
%]4C((44S9JYY"((*-./FV,,  
+v{{34z6:	 !!>]]66678""2??QC5#HI  87 ~~((M999]]66678LLN 877~~((M999  ++J7	 !!>]]66678%%d+  87 ~~((M999]]66678LLN 877~~((M999] 544 
s|   	K<!A%K'+D11D:6AK';F	K'FBK'/IIAK'J'	K''J0,2K'	K<'K0	,K<<Lc                  .    t        j                  d       y)z
    Ensure that the gRPC server is stopped at interpreter shutdown.

    See https://issues.apache.org/jira/browse/ARROW-16597.
    zarrow_16597.pyN)r   invoke_scriptr   r   r   test_interpreter_shutdownr  	  s     	'(r   c                       e Zd ZdZd Zy)TracingFlightServerz/A server that echoes back trace context values.c                 f    |j                  d      j                  }d |j                         D        S )Ntracingc              3   N   K   | ]  \  }}| d | j                  d        yw)z: r   N)r   ).0r.   rF  s      r   	<genexpr>z0TracingFlightServer.do_action.<locals>.<genexpr>	  s2      ;$9LS% 55'"**73$9s   #%)r  trace_contextrC  )rb   ro   r   r  s       r   r   zTracingFlightServer.do_action	  s3    ..y9GG;$1$7$7$9; 	;r   Nr  r   r   r   r  r  	  s
    9;r   r  c                  (   t        dt        j                         i      5 } t        d| j                  f      5 }t        j
                  ddg      }|j                  d|      D ]  } 	 d d d        d d d        y # 1 sw Y   xY w# 1 sw Y   y xY w)	Nr  r  r   )s   traceparents7   00-000ff00f00f0ff000f0f00ff0f00fff0-000f0000f0f00000-00)s
   tracestater   r  )r   r   rs   )r  r   TracingServerMiddlewareFactoryr   rf  r  r   )rN  r`  ra   rF  s       r   test_tracingr  	  s    	v<<>) 

+v{{34 **5 	4
  %%j'%BE C 5
 
 54
 
s"   B1A<+B<B	BBc                      t        dd      } d}t        j                  t        |      5  | j	                  t
        j                  j                  d      d        d d d        y # 1 sw Y   y xY w)Nzgrpc+tls://localhost:9643Tr	  zRArgument 'schema' has incorrect type \(expected pyarrow.lib.Schema, got NoneType\)rs  rB   r   )r   r%  r&  r'  r   r   rl   r"  )r`  msgs     r   .test_do_put_does_not_crash_when_schema_is_noner  +	  sZ    56:<F<C	y	,f--99%@! 	 	# 
-	,	,s   1A%%A.c                      G d dt               }  G fddt              } G d dt               |       } |        5 }t        d|j                  f|g      5 }|j                  t        j                  j                  d	             d
|j                  v sJ d|j                  v sJ d|j                  v sJ d|j                  v sJ 	 ddd       ddd       y# 1 sw Y   xY w# 1 sw Y   yxY w)z9Ensure that server-sent headers/trailers make it through.c                       e Zd Zd Zy):test_headers_trailers.<locals>.HeadersTrailersFlightServerc                     |j                  dd       |j                  dd       |j                  dd       |j                  dd       t        j                  t	        j
                  g       |g d	d	      S )
Nx-headerheader-valuex-header-binzheadervalue	x-trailertrailer-valuex-trailer-binztrailervaluerh   )
add_headeradd_trailerr   rj   r;   rk   r   s      r   r   zJtest_headers_trailers.<locals>.HeadersTrailersFlightServer.get_flight_info9	  sm    z>:~/@A_=1CD$$		"B	 r   N)ry   rz   r{   r   r   r   r   HeadersTrailersFlightServerr  8	  s    
	r   r  c                       e Zd Zd Z fdZy)?test_headers_trailers.<locals>.HeadersTrailersMiddlewareFactoryc                     g | _         y r   r  rh  s    r   r_   zHtest_headers_trailers.<locals>.HeadersTrailersMiddlewareFactory.__init__F	  s	    DLr   c                      |       S r   r   )rb   r   HeadersTrailersMiddlewares     r   r  zJtest_headers_trailers.<locals>.HeadersTrailersMiddlewareFactory.start_callI	  s    ,T22r   N)ry   rz   r{   r_   r  )r  s   r    HeadersTrailersMiddlewareFactoryr  E	  s    		3r   r  c                       e Zd Zd Zd Zy)8test_headers_trailers.<locals>.HeadersTrailersMiddlewarec                     || _         y r   r  r  s     r   r_   zAtest_headers_trailers.<locals>.HeadersTrailersMiddleware.__init__M	  s	    "DLr   c                     |j                         D ]3  \  }}|D ])  }| j                  j                  j                  ||f       + 5 y r   )rC  r  r  r  )rb   r  r.   r  rF  s        r   r  zItest_headers_trailers.<locals>.HeadersTrailersMiddleware.received_headersP	  s<    &}}V#ELL((//e= $  /r   N)ry   rz   r{   r_   r  r   r   r   r  r  L	  s    	#	>r   r  r   r  r   )r  r  )r  s   headervalue)r  r  )r  s   trailervalueN)
r	   r   r   r   rf  r   r   rl   rm   r  )r  r  r  rN  r`  r  s        @r   test_headers_trailersr  5	  s    &6 3+B 3>$4 > /0G	$	&&+v{{3	Jfv66??CD+w>>>3wFFF-@@@5HHH K 
'	&JJ 
'	&s$   C'A/C
C'C$	 C''C0)r  rr  r   r   r   r  r   r  r\  r  r&   r  numpyr%  ImportErrorr%  r   r;   pyarrow.libr   r   pyarrow.utilr   pyarrow.testsr   r   r   r   r	   r
   r   r   r   r   r   objectmark
pytestmarkr   r   r+   r2   r@   rN   rW   rY   r   r   r   r   r   r   r   r   r   r   r  r  rI  r`  rm  ry  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r   r
  r  r  r2  rI  rO  rR  slowrc  rj  rn  rz  pandasr  r  r  r  r  r  r  r  r  r  skipifr  r  r  r  r  r  r  r  r  r  r  r  r  r  r  %header_auth_server_middleware_factoryr  r  r  r  r  r  r  r  requires_testing_datar  r  r  r  r  r  r  r!  r.  r0  r>  r@  rI  rO  rV  rX  r\  rg  rl  rr  rt  rx  r{  r}  r  r  r  r  r  r  large_memoryr  r  r  r  r  r  r  r  r  r  r   r   r   <module>r      su  $    	           / ' ?   [[

BK";<2 E+  EF#+ #L' *"- ""0* 0.+. +#3 .. ."E 0 E F!1 F&7' 7*/A( /AdC#+ C#L!2 0!2 ". .. $' $
/(? 
/-!1 -41(? 189!1 9/- /9.E 9'7 F#3 F*+- +5$; 5) . -+B -&/+B /

$4 
	'> 		'> 		1)@ 	12"2 2.4)@ 44"2 4. 0 ."$#ND8   ('(D6 F F""<=7$( 2!6 BGGtOD  F&F&* # #*# 9<J4" 0[7   ,[3  
 + + BGGtOI  K
5K
5+5I )J(K %$& 4E;@8."+ ""= # = ""	" #	" "" #  ""	2 #	2"* @
"), " "8     4  4@0Of#L$(N	'9,)5X	5 """ #"$!6,#1L20!.B, "" #.) " ) )X# 1  1  "  "@
"- 
"
? C CL)	;* 	;$#'IiH  	B"  ?F%+V"L"+16((06--06--?s#   X X XXX43X4