
    z-Phh                    B   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 	 d dlZn# e$ r dZY nw xY w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# n!# 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 nw xY wej%        j        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          Z0 G d de0          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 d/ d0e          Z> G d1 d2e          Z?d3 Z@ G d4 d5e#          ZA G d6 d7e"          ZB G d8 d9e!          ZC G d: d;e           ZD G d< d=e          ZE G d> d?e!          ZF G d@ dAe           ZG G dB dCe          ZH G dD dEe           ZI G dF dGe!          ZJ G dH dIe          ZK G dJ dKe          ZL G dL dMe!          ZM G dN dOe#          ZN G dP dQe"          ZO G dR dSe!          ZP G dT dUe#          ZQ G dV dWe#          ZR G dX dYe"          ZS G dZ d[e!          ZT G d\ d]e           ZU G d^ d_e          ZVd` ZWda ZXdb ZYdc ZZdd Z[ej%        j        ej%        j\        de                         Z]df Z^dg Z_dh Z`ej%        ja        di             Zbdj Zcdk Zddl Zedm Zfdn Zg G do dpe          Zhdq Zidr Zjds Zkej%        l                    ejm        dtk    duv          dw             Znej%        j\        dx             Zody Zpdz Zqd{ Zrd| Zsd} Zt e;d~di          Zu e=d~di          Zvej%        j\        d             Zwej%        l                    ejm        dtk    dv          d             Zxd Zyd Zzd Z{ eC            Z| e?            Z}d Z~d Zd Zd Zd Zd Zd Zej%        j\        ej%        j        d                         Zej%        j        d             Zej%        j        d             Zej%        j        d             Zd Zd Zd Zd Zej%        j        d             Zej%        j\        d             Zej%        j        ej%        j\        d                         Zd Zd Zd Zd Zd Zd Zd Zd Zej%        j        d             Zd Zd Zd Zd Zd Zd Zej%        j        d             Z G d de          Zej%        j        d             Zd Zej%        j        ej%        j\        d                         Zej%        j        ej%        j\        d                         Z G d de0          Zd Zej%        j\        d             Zd Z G d de          Zd Zd Zd ZdS )    N)datetime)IpcReadOptionstobytes)find_free_port)util)flight)FlightClientFlightServerBaseServerAuthHandlerClientAuthHandlerServerMiddlewareServerMiddlewareFactoryClientMiddlewareClientMiddlewareFactoryc                      dd l } d S )Nr   )pyarrow.flight)pyarrows    Y/var/www/html/test/jupyter/venv/lib/python3.11/site-packages/pyarrow/tests/test_flight.pytest_importr   ?   s        c                      t           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    D   sR    :>>+,, J I J J 	J<
#4566AAr   c                 >   t                      }|sdS 	 || z                      d          5 }|                                cddd           S # 1 swxY w Y   dS # t          $ r8 t	          d                    || 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,   L   s    ??D tKTk%% 	6688	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 K K K++16$+2;2F2H2H,J ,JK K 	KKs/   A A A 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_certsr3   [   s{     *-88)+66(55   )+66(55  	
  r   c                  t    t          j        g d          g} t           j                            | dg          S )Nir      
   	some_intsnames)paarrayTablefrom_arrays)datas    r   simple_ints_tablerA   l   s<    
$$$%%D 8[M:::r   c                  F   t          j        g dt          j                              } t          j        t           j                            g d|           t           j                            ddg|           g          g}t           j                            |dg          S )N)foobazquuxtype)   r   N   rH   
some_dictsr:   )r<   r=   utf8chunked_arrayDictionaryArrayr?   r>   )dict_valuesr@   s     r   simple_dicts_tablerO   s   s    (111		BBBK
**<<<EE**Aq6;??
 	 	D 8\N;;;r   c                      t           j                            t          j        g d          t          j        g d          gddg          S )N)rC   barrD   quxrH   rI         abr:   )r<   r>   r?   r=   r   r   r   multiple_column_tablerX   ~   sQ    8*F*F*F!G!G!#,,,!7!7!9'*Cj   2 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 criteriaNc                 ~     t                      j        |fi | t          t          t          d| _        || _        d S )N)   ints   dicts   multi)super__init__rA   rO   rX   table_factoriesoptions)selflocationrb   kwargs	__class__s       r   r`   zConstantFlightServer.__init__   sI    ,,V,,, '(+ 
  

 r   c              #      K   || j         k    rIt          j        t          j        g           t          j                            d          g           V  d S d S )N/foo)CRITERIAr   
FlightInfor<   schemaFlightDescriptorfor_pathrc   contextcriterias      r   list_flightsz!ConstantFlightServer.list_flights   sf      t}$$#	"'0088       %$r   c                 l     | j         |j                             }t          j        || j                  S )Nrb   )ra   ticketr   RecordBatchStreamrb   )rc   ro   rt   tables       r   do_getzConstantFlightServer.do_get   s3     4$V]355't|DDDDr   NN)	__name__
__module____qualname____doc__ri   r`   rq   rw   __classcell__rf   s   @r   rZ   rZ      ss          (H       E E E E E E Er   rZ   c                   F     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.Nc                 H     t                      j        di | || _        d S Nr   r_   r`   rb   rc   rb   re   rf   s      r   r`   zMetadataFlightServer.__init__   +    ""6"""r   c                     t          j        g d          g}t           j                            |dg          }t	          j        |j        |                     |          | j                  S )Nr5   rV   r:   rs   )	r<   r=   r>   r?   r   GeneratorStreamrk   number_batchesrb   )rc   ro   rt   r@   rv   s        r   rw   zMetadataFlightServer.do_get   sp    H((())
 $$T#$77%L&&L" " " 	"r   c           	         d}g d}|D ]\  }}|                     t          j                            t          j        ||         g          gdg                    sJ |J t          j        d|                                          \  }	||	k    sJ |                    t          j	        d|                     |dz  }d S )Nr   r5   rV   <irH   )
equalsr<   RecordBatchr?   r=   structunpack
to_pybyteswritepack)
rc   ro   
descriptorreaderwritercounterexpected_databatchbufclient_counters
             r   do_putzMetadataFlightServer.do_put   s    +++  		 		JE3<< : :=12334! !      ???$mD#..2B2BCCONn,,,,LLT733444qLGG		 		r   c              #      K   t          |                                           D ] \  }}t          j        d|          }||fV  !d S )Nr   )	enumerate
to_batchesr   r   )rv   idxr   r   s       r   r   z#MetadataFlightServer.number_batches   s[      #E$4$4$6$677 	 	JC+dC((C*	 	r   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.Nc                 X     t                      j        |fi | d | _        || _        d S r   )r_   r`   last_messageexpected_schema)rc   rd   r   re   rf   s       r   r`   zEchoFlightServer.__init__   s8    ,,V,,, .r   c                 4    t          j        | j                  S r   )r   ru   r   rc   ro   rt   s      r   rw   zEchoFlightServer.do_get   s    '(9:::r   c                 j    | j         r| j         |j        k    sJ |                                | _        d S r   )r   rk   read_allr   rc   ro   r   r   r   s        r   r   zEchoFlightServer.do_put   s;     	9'6=8888"OO--r   c                     |D ]}d S r   r   )rc   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      sp        >>/ / / / / /
; ; ;. . .
      r   r   c                   $    e Zd ZdZd Zd Zd ZdS )EchoStreamFlightServerz6An echo server that streams individual record batches.c                 r    t          j        | j        j        | j                            d                    S )N   max_chunksize)r   r   r   rk   r   r   s      r   rw   zEchoStreamFlightServer.do_get   s7    %$((t(<<> > 	>r   c                     g S r   r   rc   ro   s     r   list_actionsz#EchoStreamFlightServer.list_actions   s    	r   c                     |j         dk    r;|                                |                                                    d          gS t          )Nwho-am-iutf-8)rG   peer_identitypeerencodeNotImplementedErrorrc   ro   actions      r   	do_actionz EchoStreamFlightServer.do_action   sB    ;*$$))++W\\^^-B-B7-K-KLL!!r   N)ry   rz   r{   r|   rw   r   r   r   r   r   r   r      sG        @@> > >
  " " " " "r   r   c                       e Zd ZdZd Zd ZdS )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                            dd          gt          j        d          	                    t          j
        d                    d          gd	d
dd          S )NrV   r   grpc://test	localhost  2023-04-05T12:34:56.789012345nszendpoint app metadatarH   *   Tzinfo app metadata)r   rj   r<   rk   int32FlightEndpointLocationfor_grpc_tcpscalarcast	timestamprc   ro   r   s      r   get_flight_infoz#GetInfoFlightServer.get_flight_info   s     IRXZZ()**%cM?;;%_11+tDDEI=>>CCBLQUDVDVWW+	  
 
 	
r   c                 `    |                      ||          }t          j        |j                  S r   )r   r   SchemaResultrk   )rc   ro   r   infos       r   
get_schemazGetInfoFlightServer.get_schema  s*    ##GZ88"4;///r   N)ry   rz   r{   r|   r   r   r   r   r   r   r      s8        33
 
 
&0 0 0 0 0r   r   c                   .    e Zd ZdZed             Zd ZdS )ListActionsFlightServer'A Flight server that tests ListActions.c                 2    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8
 	
r   c              #   >   K   |                                  E d {V  d S r   )r   r   s     r   r   z$ListActionsFlightServer.list_actions  s0      ((***********r   N)ry   rz   r{   r|   classmethodr   r   r   r   r   r   r     sB        11
 
 [
+ + + + +r   r   c                       e Zd ZdZd ZdS )ListActionsErrorFlightServerr   c              #      K   dV  dV  d S )N)r   r   rC   r   r   s     r   r   z)ListActionsErrorFlightServer.list_actions  s      r   N)ry   rz   r{   r|   r   r   r   r   r   r     s)        1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.Nc                 J     t                      j        |fi | || _        d S r   )r_   r`   expected_ticket)rc   r   rd   re   rf   s       r   r`   z CheckTicketFlightServer.__init__'  s0    ,,V,,,.r   c                     | j         |j        k    sJ t          j        g dt          j                              g}t          j                            |dg          }t          j        |          S )Nr5   rF   rV   r:   )	r   rt   r<   r=   r   r>   r?   r   ru   )rc   ro   rt   data1rv   s        r   rw   zCheckTicketFlightServer.do_get+  si    #v}4444---BHJJ???@$$U3%$88'...r   c                 8    |                                 | _        d S r   )r   r   )rc   ro   r   r   s       r   r   zCheckTicketFlightServer.do_put1  s    "OO--r   r   )ry   rz   r{   r|   r`   rw   r   r}   r~   s   @r   r   r   $  sa        NN/ / / / / // / /. . . . . . .r   r   c                   X    e Zd ZdZ ej        d ej                    fg          Zd ZdS )InvalidStreamFlightServerzEA Flight server that tries to return messages with differing schemas.rV   c                    t          j        g dt          j                              g}t          j        g dt          j                              g}|j        |j        k    sJ t           j                            |dg          }t           j                            |dg          }|j        | j        k    sJ t          j	        | j        ||g          S )Nr5   rF   )g      $g      g              @g      $@rV   r:   )
r<   r=   r   float64rG   r>   r?   rk   r   r   )rc   ro   rt   r   data2table1table2s          r   rw   z InvalidStreamFlightServer.do_get:  s    ---BHJJ???@777bjllKKKLzUZ''''%%eC5%99%%eC5%99}++++%dkFF3CDDDr   Nry   rz   r{   r|   r<   rk   r   rw   r   r   r   r   r   5  sO        OORYhbhjj)*++FE E E E Er   r   c                   X    e Zd ZdZ ej        d ej                    fg          Zd ZdS )NeverSendsDataFlightServerz0A Flight server that never actually yields data.rV   c                    |j         dk    r| j                                        | j                                        t          j                            t          d          g| j                  g}t          j        | j        |          S t          j        | j        t          j
        | j                                                            S )N
   yield_datar7   rk   )rt   rk   empty_tabler<   r   r?   ranger   r   	itertoolsrepeat)rc   ro   rt   r@   s       r   rw   z!NeverSendsDataFlightServer.do_getJ  s    =M)) ''))''))**E!HH:dk*JJD
 )$+t<<<%K)$+*A*A*C*CDDF F 	Fr   Nr   r   r   r   r   r   E  sO        ::RYhbhjj)*++FF F F F Fr   r   c                   4    e Zd ZdZd Zd Zed             ZdS )SlowFlightServerz;A Flight server that delays its responses to test timeouts.c                     t          j        t          j        dt          j                    fg          |                                           S )NrV   )r   r   r<   rk   r   slow_streamr   s      r   rw   zSlowFlightServer.do_get[  s@    %bi#rxzz1B0C&D&D&*&6&6&8&8: : 	:r   c                 .    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                            | dg          V  t          j        d           t           j                            | dg          V  d S )Nr5   rF   rV   r:   r8   )r<   r=   r   r>   r?   r  r  )r   s    r   r  zSlowFlightServer.slow_streamc  s      ---BHJJ???@h""5"66666 	
2h""5"6666666r   N)ry   rz   r{   r|   rw   r   r   r  r   r   r   r  r  X  sS        EE: : :   7 7 \7 7 7r   r  c                   :    e Zd ZdZed             Zd Zd Zd ZdS )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_casesp  s<     221%@":1	
 	
 		
r   c                     t                                           }|j        |v r ||j                 d          |j        dk    rd}t          j        d|          t
          )NrC   protobuf   this is an error message)r  r  rG   r   r  r   )rc   ro   r   r  err_msgs        r   r   zErrorFlightServer.do_action}  sb    '3355;+%%*+fk*5111[J&&1G0@@@!!r   c              #      K   t          j        t          j        g           t           j                            d          g           V  t          j        d          )Nrh   rC   )r   rj   r<   rk   rl   rm   r  rn   s      r   rq   zErrorFlightServer.list_flights  sZ      IbMM#,,V44
 
 	
 	
 	

 (///r   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|          d S )	Ns   internalrC   s   timedouts   cancels   unauthenticateds   unauthorizeds   protobufr  )commandr   r  r  r  r  r  )rc   ro   r   r   r   r  s         r   r   zErrorFlightServer.do_put  s    ,,,U333;..,U3339,,-e444#5553E:::?220777;..1G0@@@ /.r   N)	ry   rz   r{   r|   r   r  r   rq   r   r   r   r   r  r  m  se        CC

 

 \

" " "0 0 0A A A A 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.Nc                 H     t                      j        di | || _        d S r   r   r   s      r   r`   zExchangeFlightServer.__init__  r   r   c                    |j         t          j        j        k    rt	          j        d          |j        dk    r|                     |||          S |j        dk    r|                     |||          S |j        dk    r| 	                    |||          S |j        dk    r| 
                    |||          S t	          j        d                    |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F7**%%gvv>>>6))''@@@6))''@@@<//**7FFCCC/%,,Z-?@@B B Br   c                     t           j                            t          j        t	          dd                    gdg          }|                    |j                   |                    |           dS )Emulate DoGet with DoExchange.r    (  rV   r:   N)r<   r>   r?   r=   r   beginrk   write_table)rc   ro   r   r   r@   s        r   r/  z$ExchangeFlightServer.exchange_do_get  so    x##HU1i(())%
 $   	T[!!!4     r   c                     d}|D ]"}|j         st          j        d          |dz  }#|                    t	          |                              d                     dS )Emulate DoPut with DoExchange.r   zAll chunks must have data.rH   r   N)r@   r<   r  write_metadatastrr   )rc   ro   r   r   num_batchesr   s         r   r0  z$ExchangeFlightServer.exchange_do_put  sn     	 	E: Do&BCCC1KKc+..55g>>?????r   c                 n   d}|D ]}|s/|j         r(|                    |j         j        | j                   d}|j        r(|j         r!|                    |j         |j                   b|j        r|                    |j                   |j         r|                    |j                    J d            dS )zRun a simple echo server.Frs   TzShould not happenN)r@   r5  rk   rb   app_metadatawrite_with_metadatar9  write_batch)rc   ro   r   r   startedr   s         r   r.  z"ExchangeFlightServer.exchange_echo  s     	2 	2E uz UZ.EEE! 2ej 2**5:u7IJJJJ# 2%%e&89999 2""5:....11111	2 	2r   c                 (   |j         D ]J}t          j                            |j                  s$t          j        dt          |          z             K|                                }dg|j        z  }|D ]9}t          |          D ]'\  }}	||xx         |	
                                z  cc<   (:t          j                            t          j        |          gdg          }
|                    |
j                    |                    |
           dS )zSum rows in an uploaded table.zInvalid field: r   sumr:   N)rk   r<   types
is_integerrG   r  reprr   num_rowsr   as_pyr>   r?   r=   r5  r6  )rc   ro   r   r   fieldrv   sumscolumnrowvalueresults              r   r1  z'ExchangeFlightServer.exchange_transform  s   ] 	G 	GE8&&uz22 Go&7$u++&EFFFG!!sU^# 	+ 	+F'// + +
US			U[[]]*				+%%rx~~&6ug%FFV]###6"""""r   r   )ry   rz   r{   r|   r`   r   r/  r0  r.  r1  r}   r~   s   @r   r$  r$    s        **     B B B! ! !@ @ @2 2 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                 V    t                                                       || _        d S r   r_   r`   credsrc   rS  rf   s     r   r`   z#HttpBasicServerAuthHandler.__init__  $    


r   c                 \   |                                 }t          j                            |          }|j        | j        vrt          j        d          | j        |j                 |j        k    rt          j        d          |                    t          |j                             d S )Nunknown userzwrong password)
r$   r   	BasicAuthdeserializeusernamerS  r  passwordr   r   )rc   outgoingincomingr   auths        r   authenticatez'HttpBasicServerAuthHandler.authenticate  s    mmoo++C00=
**3NCCC:dm$5534DEEEwt}--.....r   c                 l    |st          j        d          || j        vrt          j        d          |S )Nztoken not providedrW  )r   r  rS  rc   tokens     r   is_validz#HttpBasicServerAuthHandler.is_valid  s@     	J34HIII
""3NCCCr   ry   rz   r{   r|   r`   r_  rc  r}   r~   s   @r   rO  rO    s\        AA    / / /      r   rO  c                   .     e Zd ZdZ fdZd Zd Z xZS )HttpBasicClientAuthHandlerrP  c                     t                                                       t          j        ||          | _        d | _        d S r   )r_   r`   r   rX  
basic_authrb  rc   rZ  r[  rf   s      r   r`   z#HttpBasicClientAuthHandler.__init__  s8     *8X>>


r   c                     | j                                         }|                    |           |                                | _        d S r   )rh  	serializer   r$   rb  )rc   r\  r]  r^  s       r   r_  z'HttpBasicClientAuthHandler.authenticate  s:    ((**t]]__


r   c                     | j         S r   rb  rc   s    r   	get_tokenz$HttpBasicClientAuthHandler.get_token	  
    zr   ry   rz   r{   r|   r`   r_  ro  r}   r~   s   @r   rf  rf    s\        AA    
% % %
      r   rf  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                 V    t                                                       || _        d S r   rR  rT  s     r   r`   zTokenServerAuthHandler.__init__  rU  r   c                    |                                 }|                                 }|| j        v r=| j        |         |k    r,|                    t          j        d|z                        d S t          j        d          )N   secret:zinvalid username/password)r$   rS  r   base64	b64encoder   r  )rc   r\  r]  rZ  r[  s        r   r_  z#TokenServerAuthHandler.authenticate  sz    ==??==??tz!!dj&:h&F&FNN6+J,ABBCCCCC3+- - -r   c                     t          j        |          }|                    d          st          j        d          |dd          S )Nrw  zinvalid token   )rx  	b64decode
startswithr   r  ra  s     r   rc  zTokenServerAuthHandler.is_valid  sH     ''
++ 	E3ODDDQRRyr   rd  r~   s   @r   rs  rs    s\        DD    - - -      r   rs  c                   .     e Zd ZdZ fdZd Zd Z xZS )TokenClientAuthHandlerrt  c                 r    t                                                       || _        || _        d| _        d S )Nr   )r_   r`   rZ  r[  rb  ri  s      r   r`   zTokenClientAuthHandler.__init__'  s2      


r   c                     |                     | j                   |                     | j                   |                                | _        d S r   )r   rZ  r[  r$   rb  rc   r\  r]  s      r   r_  z#TokenClientAuthHandler.authenticate-  s=    t}%%%t}%%%]]__


r   c                     | j         S r   rm  rn  s    r   ro  z TokenClientAuthHandler.get_token2  rp  r   rq  r~   s   @r   r  r  $  s\        DD    % % %
      r   r  c                       e Zd ZdZd Zd ZdS )NoopAuthHandlerzA no-op auth handler.c                     dS )zDo nothing.Nr   r  s      r   r_  zNoopAuthHandler.authenticate9  s      r   c                     dS )zV
        Returning an empty string.
        Returning None causes Type error.
        r   r   ra  s     r   rc  zNoopAuthHandler.is_valid<  s	    
 rr   N)ry   rz   r{   r|   r_  rc  r   r   r   r  r  6  s8              r   r  c                     | D ]C}|                                 |                                 k    r|                     |          c S DdS )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  D  sY      $ $99;;***,,,,;;s##### -$ $r   c                   $    e Zd ZdZd Zd Zd ZdS )!ClientHeaderAuthMiddlewareFactoryz@ClientMiddlewareFactory that creates ClientAuthHeaderMiddleware.c                     g | _         d S r   call_credentialrn  s    r   r`   z*ClientHeaderAuthMiddlewareFactory.__init__P  s    !r   c                      t          |           S r   )ClientHeaderAuthMiddlewarerc   r   s     r   
start_callz,ClientHeaderAuthMiddlewareFactory.start_callS  s    )$///r   c                     || _         d S r   r  )rc   r  s     r   set_call_credentialz5ClientHeaderAuthMiddlewareFactory.set_call_credentialV  s    .r   N)ry   rz   r{   r|   r`   r  r  r   r   r   r  r  M  sG        JJ" " "0 0 0/ / / / /r   r  c                       e Zd ZdZd Zd ZdS )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                     || _         d S r   factoryrc   r  s     r   r`   z#ClientHeaderAuthMiddleware.__init__j      r   c                     t          |d          }| j                            d|d                             d          g           d S )NAuthorization   authorizationr   r   )r  r  r  r   )rc   r  auth_headers      r   received_headersz+ClientHeaderAuthMiddleware.received_headersm  sR    4WoNN((N!!'***, 	- 	- 	- 	- 	-r   N)ry   rz   r{   r|   r`   r  r   r   r   r  r  Z  s<           - - - - -r   r  c                       e Zd ZdZd ZdS )!HeaderAuthServerMiddlewareFactoryz)Validates incoming username and password.c                    t          |d          }|d                             d          }d}d}|d         dk    rqt          j        |d                   }|                    d                              d	          }|d         d
k    r|d         dk    st          j        |          d}nC|d         dk    r#|d         }|dk    st          j        |          nt          j        |          t          |          S )Nr  r    r   zInvalid credentialsBasicrH   r   :testr[  	token1234Bearer)r  splitrx  r|  decoder   r  HeaderAuthServerMiddleware)	rc   r   r  r  valuesrb  error_messagedecodedpairs	            r   r  z,HeaderAuthServerMiddlewareFactory.start_callw  s   4
 
 Q%%c**-!9&vay11G>>'**0055DGv%%$q'Z*?*?7FFFEEAY(""1IEK''7FFF ( 3MBBB)%000r   Nry   rz   r{   r|   r  r   r   r   r  r  t  s)        331 1 1 1 1r   r  c                       e Zd ZdZd Zd ZdS )r  zBA ServerMiddleware that transports incoming username and password.c                     || _         d S r   rm  ra  s     r   r`   z#HeaderAuthServerMiddleware.__init__  s    


r   c                     dd| j         z   iS )NauthorizationzBearer rm  rn  s    r   sending_headersz*HeaderAuthServerMiddleware.sending_headers  s    TZ!788r   Nry   rz   r{   r|   r`   r  r   r   r   r  r    s8        LL  9 9 9 9 9r   r  c                       e Zd ZdZd ZdS )HeaderAuthFlightServerz<A Flight server that tests with basic token authentication. c                     |                     d          }|rSt          |                                d          }|                    d          }|d                             d          gS t          j        d          )Nr^  r  r  rH   r   zNo token auth middleware found.)get_middlewarer  r  r  r   r   r  )rc   ro   r   
middlewarer  r  s         r   r   z HeaderAuthFlightServer.do_action  s    ++F33
 	/8**,,o? ?K &&s++F1I$$W--../-/ / 	/r   Nry   rz   r{   r|   r   r   r   r   r  r    s)        FF/ / / / /r   r  c                       e Zd ZdZd ZdS )'ArbitraryHeadersServerMiddlewareFactoryz<A ServerMiddlewareFactory that transports arbitrary headers.c                      t          |          S r   ) ArbitraryHeadersServerMiddlewarerc   r   r  s      r   r  z2ArbitraryHeadersServerMiddlewareFactory.start_call  s    /888r   Nr  r   r   r   r  r    s)        FF9 9 9 9 9r   r  c                       e Zd ZdZd Zd ZdS )r  z5A ServerMiddleware that transports arbitrary headers.c                     || _         d S r   r]  )rc   r]  s     r   r`   z)ArbitraryHeadersServerMiddleware.__init__  s     r   c                     | j         S r   r  rn  s    r   r  z0ArbitraryHeadersServerMiddleware.sending_headers  
    }r   Nr  r   r   r   r  r    s8        ??! ! !    r   r  c                       e Zd ZdZd ZdS )ArbitraryHeadersFlightServerz6A Flight server that tests multiple arbitrary headers.c                 4   |                     d          }|rn|                                }t          |d          }t          |d          }|d                             d          }|d                             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)	rc   ro   r   r  r  header_1header_2value1value2s	            r   r   z&ArbitraryHeadersFlightServer.do_action  s    ++,?@@
 	$ 0022G5 H 6 H a[''00Fa[''00FF##&'DEEEr   Nr  r   r   r   r  r    s.        @@F F F F Fr   r  c                       e Zd ZdZd ZdS )HeaderServerMiddlewarez/Expose a per-call value to the RPC method body.c                     || _         d S r   )special_value)rc   r  s     r   r`   zHeaderServerMiddleware.__init__  s    *r   N)ry   rz   r{   r|   r`   r   r   r   r  r    s)        99+ + + + +r   r  c                       e Zd ZdZd ZdS )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44r   Nr  r   r   r   r  r    s)        DD5 5 5 5 5r   r  c                       e Zd ZdZd ZdS )HeaderFlightServerz(Echo back the per-call hard-coded value.c                 j    |                     d          }|r|j                                        gS dgS )Nr  r   )r  r  r   )rc   ro   r   r  s       r   r   zHeaderFlightServer.do_action  s<    ++F33
 	7,335566ur   Nr  r   r   r   r  r    s)        22    r   r  c                       e Zd ZdZd ZdS )MultiHeaderFlightServer8Test sending/receiving multiple (binary-valued) headers.c                     |                     d          }t          |j                                      d          }|gS )Nr  r   )r  rE  client_headersr   )rc   ro   r   r  r  s        r   r   z!MultiHeaderFlightServer.do_action  s;    ++F33
z01188AAyr   Nr  r   r   r   r  r    s)        BB    r   r  c                       e Zd ZdZd ZdS )$SelectiveAuthServerMiddlewareFactoryz1Deny access to certain methods based on a header.c                     |j         t          j        j        k    rd S |                    d          }|st          j        d          |d         }|dk    rt          j        d          t          |          S )Nx-auth-tokenzNo tokenr   r[  zInvalid token)methodr   FlightMethodLIST_ACTIONSr   r  r  )rc   r   r  rb  s       r   r  z/SelectiveAuthServerMiddlewareFactory.start_call  sx    ;&-:::FN++ 	@3J???aJ3ODDD%e,,,r   Nr  r   r   r   r  r    s)        ;;- - - - -r   r  c                       e Zd Zd ZdS )$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dS )r  c                 
    ddiS )Nr  r[  r   rn  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                 V    t                                                       g | _        d S r   r_   r`   methodsrc   rf   s    r   r`   z)RecordingServerMiddlewareFactory.__init__  $    r   c                 D    | j                             |j                   d S r   r  appendr  r  s      r   r  z+RecordingServerMiddlewareFactory.start_call      DK(((tr   ry   rz   r{   r|   r`   r  r}   r~   s   @r   r  r    M        **          r   r  c                   (     e Zd ZdZ fdZd Z xZS ) RecordingClientMiddlewareFactoryr  c                 V    t                                                       g | _        d S r   r  r  s    r   r`   z)RecordingClientMiddlewareFactory.__init__  r  r   c                 D    | j                             |j                   d S 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dS )"MultiHeaderClientMiddlewareFactoryr  c                     i | _         d S r   )last_headersrn  s    r   r`   z+MultiHeaderClientMiddlewareFactory.__init__)  s     r   c                      t          |           S r   )MultiHeaderClientMiddlewarer  s     r   r  z-MultiHeaderClientMiddlewareFactory.start_call.  s    *4000r   N)ry   rz   r{   r|   r`   r  r   r   r   r  r  &  s8        BB  
1 1 1 1 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dS )r  r  rC   rQ          rD   )zx-textzx-binary-binzx-MIXED-cases   x-other-MIXED-casec                     || _         d S r   r  r  s     r   r`   z$MultiHeaderClientMiddleware.__init__=  r  r   c                     | j         S r   )EXPECTEDrn  s    r   r  z+MultiHeaderClientMiddleware.sending_headers@  r  r   c                 D    | j         j                            |           d S r   )r  r  update)rc   r  s     r   r  z,MultiHeaderClientMiddleware.received_headersC  s#     	!((11111r   N)ry   rz   r{   r|   r  r`   r  r  r   r   r   r  r  2  sn        BB %. '* %w H    2 2 2 2 2r   r  c                       e Zd ZdZd ZdS )"MultiHeaderServerMiddlewareFactoryr  c                      t          |          S r   )MultiHeaderServerMiddlewarer  s      r   r  z-MultiHeaderServerMiddlewareFactory.start_callL  s    *7333r   Nr  r   r   r   r  r  I  s)        BB4 4 4 4 4r   r  c                       e Zd ZdZd Zd ZdS )r  r  c                     || _         d S r   )r  )rc   r  s     r   r`   z$MultiHeaderServerMiddleware.__init__S  s    ,r   c                     t           j        S r   )r  r  rn  s    r   r  z+MultiHeaderServerMiddleware.sending_headersV  s    *33r   Nr  r   r   r   r  r  P  s8        BB- - -4 4 4 4 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                 N     t                      j        |i | ddz  | _        d S )N           )r_   r`   	_metadata)rc   argsre   rf   s      r   r`   z"LargeMetadataFlightServer.__init__]  s/    $)&)))-r   c                     t          j        dt          j                    fg          }t          j        |t          j        dgg|          | j        fg          S )NrV   rH   r   )r<   rk   int64r   r   record_batchr  )rc   ro   rt   rk   s       r   rw   z LargeMetadataFlightServer.do_geta  sX    S"(**-.//%f_qcU6222DNC/
   	r   c                 :    |                     | j                   d S r   )r9  r  r   s        r   r   z%LargeMetadataFlightServer.do_exchangeg  s    dn-----r   )ry   rz   r{   r|   r`   rw   r   r}   r~   s   @r   r  r  Z  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                            d                    |k    sJ t          j        dg t          j	        d          
                    t          j        d                    d          }
t          |
          |k    sJ t          j        t          j        g           t          j                                        g dd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            n# 1 swxY w Y   t'          j        t*                    5  t          j        t-                      g            d d d            n# 1 swxY w Y   t'          j        t*                    5  t          j        dddt-                      g           d d d            n# 1 swxY w Y   t'          j        t*                    5  t          j        dg d           d d d            n# 1 swxY w Y   t'          j        t*                    5  t          j        dg t/          dd d!dd"d#                     d d d            n# 1 swxY w Y   t'          j        t*                    5  t          j        dg t-                      $           d d d            d S # 1 swxY w Y   d S )%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'>z<pyarrow.flight.FlightEndpoint ticket=<pyarrow.flight.Ticket ticket=b'foo'> locations=[] expiration_time=2023-04-05 12:34:56+00:00 app_metadata=b'endpoint app metadata'>z<pyarrow.flight.FlightInfo schema= descriptor=<pyarrow.flight.FlightDescriptor path=[]> endpoints=[] total_records=1 total_bytes=42 ordered=True app_metadata=b'test app metadata'>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'>rC   r   rQ   userpass   foo2023-04-05T12:34:56s   endpoint app metadatarH   r   T   test app metadatagrpc+tcp://localhost:1234)intr  z1<pyarrow.flight.SchemaResult schema=(int: int64)>r   s   grpc://testz2023-04-05T01:02:03)expiration_timei  rU   r7   rI   rT   r=  )rE  r   Actionr   rX  rl   for_commandr   r<   r   r   r   rj   rk   rm   r   Resultr   Ticketpytestraises	TypeErrorobjectr   )action_repraction_type_reprbasic_auth_reprdescriptor_reprendpoint_repr	info_reprlocation_reprresult_reprschema_result_reprticket_reprendpointr   s               r   	test_reprr@  k  s   EKBWODO>M	-  MM:KB9KeS))**k9999!%//004DDDDD 0011_DDDD'33E::;;NNNN$BI34499",s:K:KLL  H >>]****
	"v.77992	2t) D ::"""" ;<<==NNNNf%%&&+5555#BIbMM22337IIIII#BI/?.@$A$ABBCC;< < < <f%%&&+5555	y	!	! # #eT"""# # # # # # # # # # # # # # # 
y	!	! , ,fhh+++, , , , , , , , , , , , , , ,	y	!	! P Pem^VXX%NOOOP P P P P P P P P P P P P P P	y	!	! P PeR9NOOOOP P P P P P P P P P P P P P P	y	!	! X XeR$1aQRTU9V9VWWWWX X X X X X X X X X X X X X X	y	!	! @ @eRfhh????@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @sl    J""J&)J&"K44K8;K8%M		MM-NNN5*O++O/2O/$Q  QQc                     d d d d d d d d d	 d
 d d d d d d d d d d d g} | D ]T} |            \  }} |            \  }}||k    sJ ||k    sJ ||k    sJ ||k    sJ ||k    sJ ||k    sJ ||k    sJ Ud S )Nc                  V    t          j        dd          t          j        dd          fS )NrC   r   rQ   r   r-  r   r   r   <lambda>ztest_eq.<locals>.<lambda>  s#    uc**FM%,E,EF r   c                  V    t          j        dd          t          j        dd          fS )NrC   r      barrC  r   r   r   rD  ztest_eq.<locals>.<lambda>  s#    uc**FM%,H,HI r   c                  V    t          j        dd          t          j        dd          fS )NrC   rQ   rD   r   r   r   r   rD  ztest_eq.<locals>.<lambda>  s(    "5%00"5%002 r   c                  V    t          j        dd          t          j        dd          fS )Nr"  r#  user2r   rX  r   r   r   rD  ztest_eq.<locals>.<lambda>  s(    !&&11!'6224 r   c                  V    t          j        dd          t          j        dd          fS )Nr"  r#  pass2rJ  r   r   r   rD  ztest_eq.<locals>.<lambda>  s(    !&&11!&'224 r   c                  ~    t           j                            d          t           j                            d          fS )NrC   )r   rl   r.  rm   r   r   r   rD  ztest_eq.<locals>.<lambda>  s0    (44U;;(11%88: r   c                  V    t          j        dg           t          j        dg           fS Nr$  rF  r   r   r   r   r   rD  ztest_eq.<locals>.<lambda>  s(    &vr22&vr224 r   c                      t          j        dt          j        d          g          t          j        dt          j        d          g          fS )Nr$  r)  grpc+tls://localhost:1234)r   r   r   r   r   r   rD  ztest_eq.<locals>.<lambda>  sS    !)DEEFH H!)DEEFH H
 r   c            
      6   t          j        dg t          j        d                              t          j        d                              t          j        dg t          j        d                              t          j        d                              fS )Nr$  r%  r&  z2023-04-05T12:34:56.789ms)r   r   r<   r   r   r   r   r   r   rD  ztest_eq.<locals>.<lambda>  s    !BI&;<<AA",sBSBSTTV V!	34499",t:L:LMMO OP r   c                  ^    t          j        dg d          t          j        dg d          fS )Nr$  r   r,     metarP  r   r   r   rD  ztest_eq.<locals>.<lambda>  s3    &vrDDD&vrHHHJ r   c                  :   t          j        t          j        g           t           j                                        g           t          j        t          j        dt          j                    fg          t           j                                        g           fS Nints)r   rj   r<   rk   rl   rm   r  r   r   r   rD  ztest_eq.<locals>.<lambda>  sy    	"'0022B8 8 	FBHJJ/011'0022B8 8	9 r   c                     t          j        t          j        g           t           j                                        g           t          j        t          j        g           t           j                            d          g           fS Nr$  )r   rj   r<   rk   rl   rm   r.  r   r   r   rD  ztest_eq.<locals>.<lambda>  sn    	"'0022B8 8 	"'33F;;RA A	B r   c            	      b   t          j        t          j        g           t           j                                        t          j        dg           g          t          j        t          j        g           t           j                                        t          j        dg           g          fS rO  )r   rj   r<   rk   rl   rm   r   r   r   r   rD  ztest_eq.<locals>.<lambda>  s    	"'0022&vr2235 5 	"'0022&vr2235 56 r   c                     t          j        t          j        g           t           j                                        g d          t          j        t          j        g           t           j                                        g d          fS )N)total_recordsrH   r   rj   r<   rk   rl   rm   r   r   r   rD  ztest_eq.<locals>.<lambda>  s~    	"'0022BbJ J J 	"'0022BaI I I	J r   c                     t          j        t          j        g           t           j                                        g d          t          j        t          j        g           t           j                                        g d          fS )Nr^  )total_bytesr   r`  r   r   r   rD  ztest_eq.<locals>.<lambda>  s~    	"'0022BBH H H 	"'0022BBH H H	I r   c                     t          j        t          j        g           t           j                                        g d          t          j        t          j        g           t           j                                        g d          fS )NF)orderedTr`  r   r   r   rD  ztest_eq.<locals>.<lambda>  s~    	"'0022BG G G 	"'0022BF F F	G r   c                     t          j        t          j        g           t           j                                        g d          t          j        t          j        g           t           j                                        g d          fS )Nr   r,  rV  r`  r   r   r   rD  ztest_eq.<locals>.<lambda>  s~    	"'0022BSJ J J 	"'0022BWN N N	O r   c                  R    t          j        d          t          j        d          fS )Nr)  rR  )r   r   r   r   r   rD  ztest_eq.<locals>.<lambda>  s$    !<==!<==? r   c                  R    t          j        d          t          j        d          fS rO  )r   r/  r   r   r   rD  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 rX  )r   r   r<   rk   r  r   r   r   rD  ztest_eq.<locals>.<lambda>  sE    $RYr]]33$RY0D/E%F%FGGI r   c                  R    t          j        d          t          j        d          fS )Nr   r$  )r   r0  r   r   r   rD  ztest_eq.<locals>.<lambda>  s    s##V]6%:%:; r   r   )itemsgenlhs1rhs1lhs2rhs2s         r   test_eqrp    st   FFII	2 	2	4 	4	4 	4	: 	:	4 	4	
 	
	P 	P	J 	J	9 	9	B 	B	6 	6	J 	J	I 	I	G 	G	O 	O	? 	?>>	I 	I;;gTEl  	 	SUU
dSUU
dt||||t||||t||||t||||t||||t||||t|||||	 	r   c                  F   t          j        t          j        g           t           j                                        g           } t          j        t          j        g           t           j                                        g dd          }t          j        t          j        g           t           j                                        g d d           }| j        dk    sJ |j        dk    sJ |j        dk    sJ | j        dk    sJ |j        dk    sJ |j        dk    sJ d S )Nr^  )r_  rb  )r   rj   r<   rk   rl   rm   r_  rb  )fi1fi2fi3s      r   test_flight_info_defaultsru  
  s'   

BIbMM6+B+K+K+M+Mr
R
RC


	"((**BbbR R RC 

	"((**BdPTV V VC """"""""""""?b    ?b    ?b      r   c                      d ddt                      fg} | D ]A}t          |          5 }t          |t                    sJ 	 d d d            n# 1 swxY w Y   Bd S )Ngrpc://localhost:0r   )r   r
   
isinstance)	locationsrd   servers      r   $test_flight_server_location_argumentr{    s    	n&&'I
  8 8h'' 	86f&6777777	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	88 8s   AA	A	c                      t          j        t                    5  t                      5  t                      # 1 swxY w Y   	 d d d            d S # 1 swxY w Y   d S r   )r1  r2  
ValueErrorr
   r   r   r   #test_server_exit_reraises_exceptionr~  '  s    	z	"	"   	 	,,	 	 	 	 	 	 	 	 	                 s(   A8<	A<	 AAAc                  j   dt                      fd } fd}t                    5 }t          j        |d          }|                                 t          j                    }|                    d           t          j                    |z
  }|dk    sJ 	 d d d            d S # 1 swxY w Y   d S )Nr   c                      t          j        d           t                     at                                           d S r  )r  r  r
   rz  serverd   s   r   r  z-test_client_wait_for_available.<locals>.serve3  s.    
3!(++r   Ttargetdaemonr7   timeoutr  )r   r	   	threadingThreadstartr  wait_for_available)rz  r  clientthreadr@  elapsedrd   s         @r   test_client_wait_for_availabler  -  s    ^--.HF     
h		 6!t<<<)++!!!!,,,)++'#~~~~~                 s   A2B((B,/B,c                     t                      5 } t          j        d| j        f          5 }t	          |                                          g k    sJ |                    t           j                  }t          t	          |                    dk    sJ 	 ddd           n# 1 swxY w Y   ddd           dS # 1 swxY w Y   dS )zTry a simple list_flights call.r   rH   N)rZ   r   connectportlistrq   ri   len)rz  r  flightss      r   test_flight_list_flightsr  C  s7   			 '6NK566':@F''))**b0000%%&:&CDD4==!!Q&&&&&	' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' 's5   B9A)B!B9!B%	%B9(B%	)B99B= B=c                     t                      5 } t          j        d| j        f          5 }t	          |                                          g k    sJ |                                 |                                 t          j        t          j
                  5  t	          |                                           d d d            n# 1 swxY w Y   d d d            n# 1 swxY w Y   d d d            d S # 1 swxY w Y   d S )Nr   )rZ   r   r  r  r  rq   closer1  r2  r<   r  rz  r  s     r   test_flight_client_closer  L  s   			 (6NK566(:@F''))**b0000]2?++ 	( 	($$&&'''	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	(( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( (sY   C6A.C"C;CCCCCC6C"	"C6%C"	&C66C:=C:c                     t                      } t                      5 }t          j        d|j        f          5 }|                    t          j        d                                                    }|                    |           sJ 	 ddd           n# 1 swxY w Y   ddd           n# 1 swxY w Y   t          j
                            t          j
        j        j                  }t          |          5 }t          j        d|j        f          5 }|                    t          j        d                                                    }|                    |           sJ |                    t          j        d                                                                                    }|                    |           sJ 	 ddd           n# 1 swxY w Y   ddd           n# 1 swxY w Y   t          j        t          j        d          5  t          d          5 }t          j        d|j        f          5 }|                    t          j        d                                                    }ddd           n# 1 swxY w Y   ddd           n# 1 swxY w Y   ddd           dS # 1 swxY w Y   dS )	Try a simple do_get call.r   r\   Nmetadata_versionrs   z+expected IpcWriteOptions, got <class 'int'>matchr   )rA   rZ   r   r  r  rw   r0  r   r   r<   ipcIpcWriteOptionsMetadataVersionV4	to_readerr1  r2  r  )rv   rz  r  r@   rb   s        r   test_flight_do_get_intsr  V  sL   E			 "6NK566":@}}V]73344==??{{5!!!!!!" " " " " " " " " " " " " " " " " " " " " " " " " " " " " "
 f$$/2 % 4 4G	g	.	.	. "&NK566":@}}V]73344==??{{5!!!!! }}V]73344>>@@IIKK{{5!!!!!!" " " " " " " " " " " " " " " " " " " " " " " " " " " " " " 
v/J
L 
L 
L D D!"--- 	DV[9::	D>D==w!7!788AACCD	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	DD D D D D D D D D D D D D D D D D Ds   B.ABB.B	B.B	B..B25B2=G0B3GG0G	G0 G	!G00G47G4J=,J%:JJ%JJ%JJ%J=%J)	)J=,J)	-J==KKc                     t                      } t                      5 }t          j        d|j        f          5 }|                    t          j        d                                                    }t          |d                   | 	                    d          
                                k    sJ 	 ddd           n# 1 swxY w Y   ddd           dS # 1 swxY w Y   dS )r  r   r\   r9   r   N)rA   rZ   r   r  r  rw   r0  read_pandasr  rJ  	to_pylistrv   rz  r  r@   s       r   test_do_get_ints_pandasr  q  sg    E			 F6NK566F:@}}V]73344@@BBD%&&%,,q//*C*C*E*EEEEEEF F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F Fs5   CA:C 4C C	CC	CCCc                  x   t                      } t                      5 }t          j        d|j        f          5 }|                    t          j        d                                                    }|                    |           sJ 	 d d d            n# 1 swxY w Y   d d d            d S # 1 swxY w Y   d S )Nr   r]   )	rO   rZ   r   r  r  rw   r0  r   r   r  s       r   test_flight_do_get_dictsr  |  s&     E			 "6NK566":@}}V]84455>>@@{{5!!!!!!" " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " "s5   B/ABB/B	B/B	B//B36B3c                     t          j        g dt          j                              g} t           j                            | dg          }t          d          5 }t          j        d|j        f          5 }|	                    t          j
        d                                                    }|                    |          sJ 	 ddd           n# 1 swxY w Y   ddd           dS # 1 swxY w Y   dS )	z+Make sure Tickets get passed to the server.r5   rF   rV   r:   s
   the-ticket)r   r   N)r<   r=   r   r>   r?   r   r   r  r  rw   r0  r   r   )r   rv   rz  r  r@   s        r   test_flight_do_get_ticketr    s`   X)))

;;;<EH  se 44E	 	?	?	? "6NK566":@}}V]=99::CCEE{{5!!!!!!" " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " "s7   C/9ACC/C	C/C	C//C36C3c                  *   t                      5 } t          d| j        f          }|                    t          j                            d                    }|j        dk    sJ |j        dk    sJ |j	        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        J |j        d         j
        dk    sJ |j        d         j        d         t	          j        d
          k    sJ |j        d         j        t          j        d                              t          j        dd                    k    sJ |j        d         j
        dk    sJ |j        d         j        d         t          j                            dd          k    sJ 	 d	d	d	           d	S # 1 swxY w Y   d	S )z8Make sure FlightEndpoint accepts string and object URIs.r   r   rH   r   s   info app metadatarV   rI   r   Nr   z#2023-04-05T12:34:56.789012345+00:00r   UTCr'  r   )r   r	   r  r   r   rl   r.  r_  rb  rd  r=  rk   r<   r   r  	endpointsry  r+  r   r   r   r   r   rz  r  r   s      r   test_flight_get_infor    s\   			 <&{FK899%%f&=&I&I#&N&NOO!Q&&&&2%%%%| $88888{bi#rxzz):(;<<<<<<4>""a''''4>!$.//14444~a 0888~a -4444~a *1-1O1OOOOO~a 0I;<<tBLu--../ / / / ~a -1IIIII~a *1-O((d;;< < < < <#< < < < < < < < < < < < < < < < < <s   G+HHHc                  |   t                      5 } t          d| j        f          5 }|                    t          j                            d                    }|j        t          j        dt          j	                    fg          k    sJ 	 ddd           n# 1 swxY w Y   ddd           dS # 1 swxY w Y   dS )z+Make sure GetSchema returns correct schema.r   r   rV   N)
r   r	   r  r   r   rl   r.  rk   r<   r   r  s      r   test_flight_get_schemar    s)   			 =&+v{344=8>  !8!D!DS!I!IJJ{bi#rxzz):(;<<<<<<<= = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =s5   B1A&BB1B	B1 B	!B11B58B5c                     t                      5 } t          d| j        f          5 }t          j        t
          j        d          5  t          |                                           ddd           n# 1 swxY w Y   ddd           n# 1 swxY w Y   ddd           n# 1 swxY w Y   t                      5 } t          d| j        f          5 }t          |                                          t          
                                k    sJ 	 ddd           n# 1 swxY w Y   ddd           dS # 1 swxY w Y   dS )z6Make sure the return type of ListActions is validated.r   z3Results of list_actions must be ActionType or tupler  N)r   r	   r  r1  r2  r   r  r  r   r   r   r  s     r   test_list_actionsr    ss    
&	'	' (6+v{344(8>](-
 
 
 	( 	(
 $$&&'''	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	(( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( 
!	"	" 7f+v{34478>F''))**#44667 7 7 7 77 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7s   B#!B"A5)B5A99B<A9=B B#B	B#B	B##B'*B'<D7?DD7D#	#D7&D#	'D77D;>D;c                   .    e Zd ZdZed             Zd ZdS )ConvenienceServerzT
    Server for testing various implementation conveniences (auto-boxing, etc.)
    c                 
    g dS )N)r$  rF  s   bazr   rn  s    r   simple_action_resultsz'ConvenienceServer.simple_action_results  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 d S )Nsimple-actionecho
bad-actionrC   arrow-exceptionforeverc               3   h   K                                     sdV                                    d S d S r[  )is_cancelled)ro   s   r   rk  z(ConvenienceServer.do_action.<locals>.gen  sN      !..00 ! LLL "..00 ! ! ! ! !r   )rG   r  bodyr<   ArrowMemoryError)rc   ro   r   rk  s    `  r   r   zConvenienceServer.do_action  s    ;/))--[F""K= [L((7N[---%'''[I%%! ! ! ! ! 355L	 &%r   N)ry   rz   r{   r|   propertyr  r   r   r   r   r  r    sH          ( ( X(    r   r  c                  b   t                      5 } t          d| j        f          5 }d |                    d          D             }|| j        k    sJ d}d |                    d|f          D             }||gk    sJ 	 d d d            n# 1 swxY w Y   d d d            d S # 1 swxY w Y   d S )Nr   c                     g | ]	}|j         
S r   r  .0xs     r   
<listcomp>z5test_do_action_result_convenience.<locals>.<listcomp>  s    EEEa16EEEr   r  s   the-bodyc                     g | ]	}|j         
S r   r  r  s     r   r  z5test_do_action_result_convenience.<locals>.<listcomp>  s    DDDa16DDDr   r  )r  r	   r  r   r  )rz  r  resultsr  s       r   !test_do_action_result_conveniencer    sQ   			 
!+v{344
!8> FE6#3#3O#D#DEEE&66666 DD6#3#3VTN#C#CDDD4&     
! 
! 
! 
! 
! 
! 
! 
! 
! 
! 
! 
! 
! 
! 
! 
! 
! 
! 
! 
! 
! 
! 
! 
! 
! 
! 
! 
! 
! 
! 
! 
! 
!s5   B$AB B$B	B$B	B$$B(+B(c                     t                      5 } t          d| j        f          5 }t          j        t
          j        d          5  t          |                    d                     d d d            n# 1 swxY w Y   t          j        t
          j        d          5  t          |                    d                     d d d            n# 1 swxY w Y   d d d            n# 1 swxY w Y   d d d            d S # 1 swxY w Y   d S )Nr   za bytes-like object is requiredr  r  r  r  )	r  r	   r  r1  r2  r   r  r  r   r  s     r   test_nicer_server_exceptionsr    s   			 6+v{34468>]63!BD D D 	1 	1!!,//000	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 ]63!35 5 5 	6 	6!!"344555	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	66 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6s|   C?!C'#A6*C'6A::C'=A:>#C'!#CC'CC'CC'C?'C+	+C?.C+	/C??DDc                      t          d          } 	 | j        dk    sJ 	 |                                  dS # |                                  w xY w)zMake sure port() works.rw  r   N)r   r  shutdown)rz  s    r   test_get_portr    sR     !566F{Qs	   5 Antz'Unix sockets can't be tested on Windows)reasonc                  r   t          j                    5 } |                                  t          j                            | j                  }t          |          5  t          |          5 }|	                    t          j
        d                    }t                      }|j                            |j                  sJ |                                }|                    |          sJ |	                    t          j
        d                    }t                      }|j                            |j                  sJ |                                }|                    |          sJ 	 ddd           n# 1 swxY w Y   ddd           n# 1 swxY w Y   ddd           dS # 1 swxY w Y   dS )z3Try a simple do_get call over a Unix domain socket.r  r\   r]   N)tempfileNamedTemporaryFiler  r   r   for_grpc_unixnamerZ   r	   rw   r0  rA   rk   r   r   rO   )sockrd   r  r   rv   r@   s         r   test_flight_domain_socketr    s8    
	$	&	& &$

?00;;!8444 	& 	&X&&	&*0]]6=#9#9::F%''E=''55555??$$D;;u%%%%%]]6=#:#:;;F&((E=''55555??$$D;;u%%%%%%	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	&& & & & & & & & & & & & & & & & & &s[   A	F,F-DE=1F=FFFFF,F	F,F	F,,F03F0c                     t           j                            t          j        t	          dd                    gdg          } t          | j                  5 }t          d|j        f          5 }|	                    t          j                            d          | j                  \  }}|                    | d           |                                 |                    t          j        d                                                    }|                    |           sJ 	 d	d	d	           n# 1 swxY w Y   d	d	d	           d	S # 1 swxY w Y   d	S )
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   rV   r:   )r   r   r  r   N)r<   r>   r?   r=   r   r   rk   r	   r  r   r   rl   rm   r6  r  rw   r0  r   r   r@   rz  r  r   _rM  s         r   test_flight_large_messager    s    8
q*++,,!U    D 
$+	6	6	6 #&+v{344#8>MM&"9"B"B6"J"J"&+/ /	 	4!1222v}S1122;;==}}T""""""# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #s7   E0B6D3'E3D7	7E:D7	;EEEc                     t           j                            t          j        t	          dd                    gdg          } t                      5 }t          d|j        f          5 }|                    t          j
                            d          | j                  \  }}|                    |            |                                 |                    t          j        d                                                    }|                    |           sJ 	 ddd           n# 1 swxY w Y   ddd           dS # 1 swxY w Y   dS )	z?Try downloading a flight of RecordBatches in a GeneratorStream.r   r4  rV   r:   r   r  r   N)r<   r>   r?   r=   r   r   r	   r  r   r   rl   rm   rk   r6  r  rw   r0  r   r   r  s         r   test_flight_generator_streamr  ,  s   8
q)$$%%!U    D 
 	!	! #V+v{344#8>MM&"9"B"B6"J"J"&+/ /	4   v}S1122;;==}}T""""""# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #s7   E)B5D+E+D/	/E2D/	3EE
Ec                     t                      5 } t          d| j        f          5 }t          j        t
          j                  5  |                    t          j	        d                    
                                 ddd           n# 1 swxY w Y   ddd           n# 1 swxY w Y   ddd           dS # 1 swxY w Y   dS )z+Try streaming data with mismatched schemas.r   r   N)r   r	   r  r1  r2  r<   ArrowExceptionrw   r   r0  r   r  s     r   $test_flight_invalid_generator_streamr  <  sg   	"	$	$ 9+v{34498>]2,-- 	9 	9MM&-,,--66888	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	99 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9sX   B:B":B?B"BB"BB"B:"B&	&B:)B&	*B::B>B>c            	         t                      5 } t          d| j        f          5 }t          j        dd          }t          j        d          }t          j        t          j                  5  t          |
                    ||                     ddd           n# 1 swxY w Y   ddd           n# 1 swxY w Y   ddd           dS # 1 swxY w Y   dS )z)Make sure timeouts fire on slow requests.r   r   r   g?r  rs   N)r  r	   r  r   r-  FlightCallOptionsr1  r2  r  r  r   )rz  r  r   rb   s       r   test_timeout_firesr  D  s    
		 <v+v{344<8>r3''*3777 ]6566 	< 	<!!&'!::;;;	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	<< < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < <sY   CA	B7/%B B7 B$$B7'B$(B7+C7B;	;C>B;	?CCCc                  P   t                      5 } t          d| j        f          5 }t          j        d          }|                    t          j        d          |                                           ddd           n# 1 swxY w Y   ddd           dS # 1 swxY w Y   dS )z0Make sure timeouts do not fire on fast requests.r   r   r  r\   rs   N)rZ   r	   r  r   r  rw   r0  r   )rz  r  rb   s      r   test_timeout_passesr  R  s9   			 J6+v{344J8>*3777fmG,,g>>GGIIIJ J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J Js5   BAB7BB	B
B	BB"Bc                     t           j                            t          j        g d          gdg          } t	                      5 }t          d|j        f          5 }t          j        t          dg                    }|
                    t          j        d          |	                                          }|
                    t          j        d                                                    }|j        d
k    sJ |j        dk    sJ || k    sJ |t                      k    sJ 	 ddd           n# 1 swxY w Y   ddd           dS # 1 swxY w Y   dS )z"Make sure ReadOptions can be used.rS   rW   r:   r   rH   )included_fields)read_optionsr^   rs   rI   N)r<   r>   r?   r=   rZ   r	   r  r   r  r   rw   r0  r   num_columnsrX   )expectedrz  r  rb   	response1	response2s         r   test_read_optionsr  Z  s   x##RXlll%;%;$<SE#JJH			 46+v{34448>*'<<<> > >MM&-# #& " ( ((0

 	MM&-"9"9::CCEE	$))))$))))H$$$$133333334 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4s7   ECD9-E9D=	=E D=	EEE   tests   p4ssw0rd)rS  c                     t          t                    5 } t          d| j        f          5 }t	          j        dd          }t          j        t          j        d          5  t          |
                    |                     ddd           n# 1 swxY w Y   ddd           n# 1 swxY w Y   ddd           dS # 1 swxY w Y   dS )z,Test that auth fails when not authenticated.auth_handlerr   r   r   z.*unauthenticated.*r  N)r   basic_auth_handlerr	   r  r   r-  r1  r2  r  r  r   rz  r  r   s      r   test_http_basic_unauthr  t  s    
 -?	@	@	@ +F+v{344+8>z3//]6<!68 8 8 	+ 	+!!&))***	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +sX   C6B)##BB)BB)BB)C)B-	-C0B-	1CCCz,ARROW-10013: gRPC on Windows corrupts peer()c                     t          t                    5 } t          d| j        f          5 }t	          j        dd          }|                    t          dd                     |                    |          }t          |          }|j
                                        dk    sJ t          |          }|j
                                        dk    sJ 	 ddd           n# 1 swxY w Y   ddd           dS # 1 swxY w Y   dS )	z:Test a Python implementation of HTTP basic authentication.r  r   r   r   r  p4ssw0rdr  N)r   r  r	   r  r   r-  r_  rf  r   nextr  r   )rz  r  r   r  identitypeer_addresss         r   test_http_basic_authr    sz    
 -?	@	@	@ 5F+v{34458>z3//6vzJJKKK""6**==}''))W4444G}} ++--444445 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5s5   C<B*C$C<$C(	(C<+C(	,C<<D D c            	         t          t                    5 } t          d| j        f          5 }t	          j        dd          }t          j        t          j        d          5  |	                    t          dd                     t          |                    |                     d	d	d	           n# 1 swxY w Y   d	d	d	           n# 1 swxY w Y   d	d	d	           d	S # 1 swxY w Y   d	S )
z-Test that auth fails with the wrong password.r  r   r   r   z.*wrong password.*r  r  wrongN)r   r  r	   r  r   r-  r1  r2  r  r_  rf  r  r   r  s      r   %test_http_basic_auth_invalid_passwordr    s   	-?	@	@	@ +F+v{344+8>z3//]6<!57 7 7 	+ 	+ :67 K KLLL!!&))***	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +sY   C$6C#AB5)C5B99C<B9=C C$C	C$C	C$$C(+C(c                     t          t                    5 } t          d| j        f          5 }t	          j        dd          }|                    t          dd                     t          |	                    |                    }|j
                                        dk    sJ 	 ddd           n# 1 swxY w Y   ddd           dS # 1 swxY w Y   dS )	-Test an auth mechanism that uses a handshake.r  r   r   r   r  r  r  N)r   token_auth_handlerr	   r  r   r-  r_  r  r  r   r  r   )rz  r  r   r   s       r   test_token_authr	    sJ   	-?	@	@	@ 5F+v{34458>z3//26:FFGGG((0011}''))W444445 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5s5   CA:B4(C4B8	8C;B8	<CCCc            	      p   t          t                    5 } t          d| j        f          5 }t	          j        t          j                  5  |                    t          dd                     ddd           n# 1 swxY w Y   ddd           n# 1 swxY w Y   ddd           dS # 1 swxY w Y   dS )r  r  r   r  r  N)
r   r  r	   r  r1  r2  r   r  r_  r  r  s     r   test_token_auth_invalidr    s   	-?	@	@	@ IF+v{344I8>]6<== 	I 	I 6vw G GHHH	I 	I 	I 	I 	I 	I 	I 	I 	I 	I 	I 	I 	I 	I 	II I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I IsX   B+B$A<0B<B  BB BB+B	B+B	B++B/2B/c                  B   t          t          dt                      i          5 } t          d| j        f          5 }|                    dd          }|d         dk    sJ |d         d	k    sJ 	 d
d
d
           n# 1 swxY w Y   d
d
d
           d
S # 1 swxY w Y   d
S )zATest authenticate_basic_token with bearer token and auth headers.r^  r  r  r   r     passwordr   r  rH      Bearer token1234N)r  no_op_auth_handlerr  r	   r  authenticate_basic_token)rz  r  
token_pairs      r   test_authenticate_basic_tokenr    s<   	-?133M 
 
 
 4
+v{3444 9?44WkJJ
!} 00000!} 3333334 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4s4   B3A<0B<B 	 BB 	BBBc                  t   t          t          dt                      i          5 } t          d| j        f          5 }t          j        t          j                  5  |	                    dd           ddd           n# 1 swxY w Y   ddd           n# 1 swxY w Y   ddd           dS # 1 swxY w Y   dS )z7Test authenticate_basic_token with an invalid password.r^  r  r   r  s   badpasswordN)
r  r  r  r	   r  r1  r2  r   r  r  r  s     r   .test_authenticate_basic_token_invalid_passwordr    s   	-?133M 
 
 
 E
+v{344E 9?]6<== 	E 	E++G^DDD	E 	E 	E 	E 	E 	E 	E 	E 	E 	E 	E 	E 	E 	E 	E	E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E EsX   B-BA>2B>BBBB	B-B	B-B	B--B14B1c            
      &   t          t          dt                      i          5 } t          d| j        f          5 }|                    dd          }|d         dk    sJ |d         d	k    sJ t          j        |g
          }t          |	                    t          j
        dd          |                    }|d         j                                        dk    sJ 	 ddd           n# 1 swxY w Y   ddd           dS # 1 swxY w Y   dS )z@Test authenticate_basic_token and doAction after authentication.r^  r  r   r  r  r   r  rH   r  r  test-actionr   r   rb   	   token1234N)r  r  r  r	   r  r  r   r  r  r   r-  r  r   rz  r  r  rb   rM  s        r   (test_authenticate_basic_token_and_actionr    s   	-?133M 
 
 
 
;
+v{344
; 9?44WkJJ
!} 00000!} 33333*J<@@@f&&=44g ' G G H Hay~((**l:::::
; 
; 
; 
; 
; 
; 
; 
; 
; 
; 
; 
; 
; 
; 
; 
; 
; 
; 
; 
; 
; 
; 
; 
; 
; 
; 
; 
; 
; 
; 
; 
; 
;s5   DB%C."D.C2	2D5C2	6DD
D
c            	      \   t          t          dt                      i          5 } t                      }t	          d| j        f|g          }t          j        d          }t          j	        dd|z   fg          }t          |                    t          j        d	d
          |                    }|d         j                                        dk    sJ |j        d         dk    sJ |j        d         dk    sJ t          |                    t          j        d	d
          |                    }|d         j                                        dk    sJ |j        d         dk    sJ |j        d         dk    sJ |                                 ddd           dS # 1 swxY w Y   dS )zTest authenticate_basic_token with client middleware
       to intercept authorization header returned by the
       HTTP header auth enabled server.
    r^  r  r   r  s   test:passwordr  s   Basic r  r  r   r  r   r  rH   r  N)r  r  r  r  r	   r  rx  ry  r   r  r  r   r-  r  r   r  r  )rz  client_auth_middlewarer  encoded_credentialsrb   rM  result2s          r   4test_authenticate_basic_token_with_client_middlewarer"    sA   
 
 -?133M 
 
 
 
!B!D!D&+&./
 
 
 %./?@@*y+>>?4
    f&&=44g ' G G H Hay~((**l::::%5a8<LLLLL%5a8%& & & &v''=44g ( G G H Hqz))++|;;;;%5a8<LLLLL%5a8%& & & &1                 s   E/F!!F%(F%c            
         t          t          t                      t                      d          5 } t	          d| j        f          5 }|                    dd          }|d         dk    sJ |d         d	k    sJ t          j        |d
dg          }t          |
                    t          j        dd          |                    }|d         j                                        dk    sJ |d         j                                        dk    sJ 	 ddd           n# 1 swxY w Y   ddd           dS # 1 swxY w Y   dS )z:Test passing multiple arbitrary headers to the middleware.)r^  r  r  r   r  r  r   r  rH   r  )s   test-header-1   value1)s   test-header-2   value2r  r  r   rs   r$  r%  N)r  r  r  r  r	   r  r  r   r  r  r   r-  r  r   r  s        r   -test_arbitrary_headers_in_flight_call_optionsr&    s   	%'577!H!J!J
 

 
 
 8
 +v{3448 9?44WkJJ
!} 00000!} 33333*))4
   
 f&&v}3(  ( )0 ' 2 2 3 3ay~((**i7777ay~((**i77777%8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8s6   D:	CD"D:"D&	&D:)D&	*D::D>D>c                  .   t          j        t          j        d          5  t	          j        d           ddd           n# 1 swxY w Y   t          j        t          j        d          5  t          d           ddd           dS # 1 swxY w Y   dS )zTest constructing invalid URIs.z.*Cannot parse URI:.*r  %N)r1  r2  r<   r  r   r  rZ   r   r   r   test_location_invalidr)  
  s   	r.E	F	F	F  s               
r.E	F	F	F " "S!!!" " " " " " " " " " " " " " " " " "s#   AA	A-B

BBc                      t          j        d          j        dk    sJ t          j        d          j        dk    sJ dS )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,    sR    ?:&&*k9999?<==A*+ + + + + +r   c                     t                      } t          | d                   5 }t          dt          |j                  z             5 }t          j        t          j                  5  |	                    t          j
        d                                                     ddd           n# 1 swxY w Y   ddd           n# 1 swxY w Y   ddd           dS # 1 swxY w Y   dS )z>Make sure clients cannot connect when cert verification fails.r1   tls_certificateszgrpc+tls://localhost:r\   N)r3   rZ   r	   r:  r  r1  r2  r   FlightUnavailableErrorrw   r0  r   certsr&  r  s      r   test_tls_failsr3    s    E 
u^/D	E	E	E =03qv;;>??=CI ]6899 	= 	=MM&-0011::<<<	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	=	= = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =sY   %C
C):B/#C/B33C6B37C:CC
	
CC
	CC"%C"c                     t                      } t                      }t          |d                   5 }t          d|j        f|d                   5 }|                    t          j        d                                                    }|	                    |           sJ 	 ddd           n# 1 swxY w Y   ddd           dS # 1 swxY w Y   dS )z"Try a simple do_get call over TLS.r1   r.  r   r0   )tls_root_certsr\   N)
rA   r3   rZ   r	   r  rw   r   r0  r   r   rv   r2  r&  r  r@   s        r   test_tls_do_getr7  *  sL    EE	u^/D	E	E	E "k16*$)+$6	8 	8 	8";A}}V]73344==??{{5!!!!!!	" " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " "s6   CAB0$C0B4	4C7B4	8CCCc                     t                      } t                      }t          |d                   5 }	 t          d|j        fd          }n$# t
          $ r t          j        d           Y nw xY w|                    t          j
        d                                                    }|                    |           sJ |                                 ddd           dS # 1 swxY w Y   dS )	zDTry a simple do_get call over TLS with server verification disabled.r1   r.  r   Tdisable_server_verificationz4disable_server_verification feature is not availabler\   N)rA   r3   rZ   r	   r  r   r1  skiprw   r   r0  r   r   r  r6  s        r   $test_tls_disable_server_verificationr<  7  s>    EE	u^/D	E	E	E 	P!;"7>BD D DFF" 	P 	P 	PKNOOOOO	P}}V]73344==??{{5!!!!!                 s5   C#AC#A/,C#.A//A'C##C'*C'c                     t                      } t          | d                   5 }t          j        d|j        f| d         d          5 }t          j        t          j                  5  |                    t          j	        d                     ddd           n# 1 swxY w Y   ddd           n# 1 swxY w Y   ddd           dS # 1 swxY w Y   dS )	z5Check that incorrectly overriding the hostname fails.r1   r.  r   r0   fakehostname)r5  override_hostnamer\   N)
r3   rZ   r   r  r  r1  r2  r0  rw   r0  r1  s      r   test_tls_override_hostnamer@  H  s    E	u^/D	E	E	E 2QV,&+K&8)7	9 	9 	92 =C]6899 	2 	2MM&-00111	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2	2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2sY   %C
B4)(BB4B!!B4$B!%B4(C4B8	8C;B8	<CCCc                     t          j        g d          g} t           j                            | dg          }g }t	                      5 }t          d|j        f          5 }|                    t          j	        d                    }d}|D ]P\  }}|
                    |           t          j        d|                                          \  }	||	k    sJ |dz  }Qt           j                            |          } |                     |          sJ 	 d	d	d	           n# 1 swxY w Y   d	d	d	           d	S # 1 swxY w Y   d	S )
z'Try a simple do_get call with metadata.r5   rV   r:   r   r   r   r   rH   N)r<   r=   r>   r?   r   r	   r  rw   r   r0  r  r   r   r   from_batchesr   )
r@   rv   batchesrz  r  r   r   r   metadata
server_idxs
             r   test_flight_do_get_metadatarF  U  s    	$$$%%D H  cU 33EG			 
"6+v{344
"8>v}S1122% 	 	OE8NN5!!! -h.A.A.C.CDDKJ*$$$$1HCCx$$W--{{5!!!!!!
" 
" 
" 
" 
" 
" 
" 
" 
" 
" 
" 
" 
" 
" 
" 
" 
" 
" 
" 
" 
" 
" 
" 
" 
" 
" 
" 
" 
" 
" 
" 
" 
"s7   
D9!B3D!D9!D%	%D9(D%	)D99D= D=c                     g } g }t                      5 }t          d|j        f          5 }|                    t	          j        d                    }d}	 	 |                                \  }}|                     |           t          j	        d|
                                          \  }||k    sJ |dz  }n# t          $ r Y nw xY wu	 ddd           n# 1 swxY w Y   ddd           n# 1 swxY w Y   t                      5 }t          d|j        f          5 }|                    t	          j        d                    }d}|D ]P\  }}|                    |           t          j	        d|
                                          \  }||k    sJ |dz  }Q	 ddd           n# 1 swxY w Y   ddd           n# 1 swxY w Y   | |k    sJ dS )z0Verify the iterator interface works as expected.r   r   r   Tr   rH   N)r   r	   r  rw   r   r0  
read_chunkr  r   r   r   StopIteration)	batches1batches2rz  r  r   r   r   rD  rE  s	            r   1test_flight_metadata_record_batch_reader_iteratorrL  j  s   HH			 6+v{3448>v}S1122	"("3"3"5"5x&&&$mD(2E2E2G2GHH
j((((q    	                               
		 6+v{3448>v}S1122% 	 	OE8OOE""" -h.A.A.C.CDDKJ*$$$$1HCC			                              xs   C.+CA"B98C9
CCCCC.C	C.C	C..C25C2F?A=F(F?(F,	,F?/F,	0F??GGc                  0   t           j                            t          j        g d          gdg          } t           j                            t           j        j        j                  }t          |          5 }t          d|j
        f          5 }|                    t          j        d                    }|                                }|                    |           sJ 	 ddd           n# 1 swxY w Y   ddd           dS # 1 swxY w Y   dS )	z2Try a simple do_get call with V4 metadata version.r5   rV   r:   r  rs   r   r   N)r<   r>   r?   r=   r  r  r  r  r   r	   r  rw   r   r0  r   r   )rv   rb   rz  r  r   r@   s         r   test_flight_do_get_metadata_v4rN    s   H  	%%%	&	&'u ! 6 6Ef$$/2 % 4 4G	g	.	.	. "&+v{344"8>v}S1122  {{5!!!!!!	" " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " "s7   <DAC3'D3C7	7D:C7	;DDDc            	         t          j        g d          g} t           j                            | dg          }t	                      5 }t          d|j        f          5 }|                    t          j	        
                    d          |j                  \  }}|5  t          |                    d                    D ]y\  }}t          j        d|          }|                    ||           |                                }	|	J t          j        d|	                                          \  }
||
k    sJ z	 d	d	d	           n# 1 swxY w Y   d	d	d	           n# 1 swxY w Y   d	d	d	           d	S # 1 swxY w Y   d	S )
z'Try a simple do_put call with metadata.r5   rV   r:   r   r   rH   r   r   N)r<   r=   r>   r?   r   r	   r  r   r   rl   rm   rk   r   r   r   r   r>  r$   r   r   )r@   rv   rz  r  r   metadata_readerr   r   rD  r   rE  s              r   test_flight_do_put_metadatarQ    sC    	$$$%%D H  cU 33E			 )6+v{344)8>"(--#,,R00L# #  	) 	)'(8(8q(8(I(IJJ ) )
U!;tS11**5(;;;%**,,$mD#..2B2BCC
j((((()	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	)) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) )s[   E7>EBE<EEEEEE7E#	#E7&E#	'E77E;>E;c            	          t           j                            t          j        t	          j        dt	          j                                        gdg          } t                      5 }t          d|j	        fd          5 }|
                    t          j                            d          | j                  \  }}|5  t          j        t          j        d	
          5 }|                    |            ddd           n# 1 swxY w Y   |j        j        dk    sJ |                     dd          |                     d          g}|D ]}|                    |           	 ddd           n# 1 swxY w Y   t           j                            | g          }|                    t          j        d                                                    }	||	k    sJ 	 ddd           n# 1 swxY w Y   ddd           dS # 1 swxY w Y   dS )z+Try a simple do_put call with a size limit.i   )dtyperV   r:   r   i   )write_size_limit_bytesr   zexceeded soft limitr  Nr   i  r   )r<   r   r?   r=   nponesr  r   r	   r  r   r   rl   rm   rk   r1  r2  FlightWriteSizeExceededErrorr?  rL  limitslicer>   rB  rw   r0  r   )
large_batchrz  r  r   rP  excinfosmaller_batchesr   r  actuals
             r   test_flight_do_put_limitr^    s    .,,
BHJJ///00.U -  K 
		 "vk6;/,0	2 	2 	2"5;"(--#,,R00#  #   
	* 
	*vB%:< < < 0?F"";///0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 =&$....!!!S))!!#&&O ) * *""5))))*
	* 
	* 
	* 
	* 
	* 
	* 
	* 
	* 
	* 
	* 
	* 
	* 
	* 
	* 
	* 8((+77v}S1122;;==6!!!!!'" " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " "s   )H>G+ !E2!D	7E2DE2
DAE2&G+2E66G+9E6:A$G+H+G/	/H2G/	3HH
Hc                     t                      5 } t          d| j        f          5 }|                    t	          j        d                    }|                                 t          j        t          j	        d          5  |
                                 ddd           n# 1 swxY w Y   ddd           n# 1 swxY w Y   ddd           dS # 1 swxY w Y   dS )z4Test canceling a DoGet operation on the client side.r   r\   z(?i).*cancel.*r  N)rZ   r	   r  rw   r   r0  r  r1  r2  r  rH  )rz  r  r   s      r   test_cancel_do_getr`    s    
		  6+v{344 8>v}W5566]66!13 3 3 	  	 	  	  	  	  	  	  	  	  	  	  	  	  	  	  	 	                                                                 sY   CAB:B#B:#B''B:*B'+B:.C:B>	>CB>	CCCc                     t                      5 } t          d| j        f          5 }|                    t	          j        d                    t          j                    t          j                    t          j                    t          j                    fd}t          j	        |d          }|
                                                     d                                                                             |                    d           5                                  sJ 	 d	d	d	           n# 1 swxY w Y   d	d	d	           n# 1 swxY w Y   d	d	d	           d	S # 1 swxY w Y   d	S )
z5Test canceling a DoGet operation from another thread.r   r\   c                  :                                                                                          d           	                                   d S # t          j        $ r4 5                                    d d d            Y d S # 1 swxY w Y   Y d S w xY w)Nr7   r  )rH  setwaitr   r  )raised_proper_exceptionread_first_messager   result_lockstream_canceleds   r   
block_readz/test_cancel_do_get_threaded.<locals>.block_read  s    ""$$$   +++2!!#####. 2 2 2  2 2+//1112 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 22s6   A B(B=BB	BB	BBTr  r7   r  rH   N)r  r	   r  rw   r   r0  r  EventLockr  r  rd  r  rc  joinis_set)	rz  r  ri  r  re  rf  r   rg  rh  s	       @@@@@r   test_cancel_do_get_threadedrn    s@    
		 4v+v{34448>v}W5566&_..#/++n&&"+/"3"3	2 	2 	2 	2 	2 	2 	2 	2 	2 !DAAA***A 	4 	4*11333333	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	454 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4sY   E;C=E#(E E#EE#EE#E;#E'	'E;*E'	+E;;E?E?c                  6   t                      5 } t          d| j        f          5 }|                    t	          j        dd                    }t          |          j        dk    sJ ~d d d            n# 1 swxY w Y   d d d            d S # 1 swxY w Y   d S )Nr   r  r   r$  )r  r	   r  r   r   r-  r  r  )rz  r  r  s      r   test_streaming_do_actionrp    s   			 +v{3448>""6=C#@#@AAG}}!V++++                                s5   BAA6*B6A:	:B=A:	>BBBc                     t          j        dd          } | t           j                            |                                           k    sJ t          j        d          }|t           j                            |                                          k    sJ t          j        d          }|t           j                            |                                          k    sJ t          j        dd          }|t           j                            |                                          k    sJ t          j        t          j	        dt          j
                    fg                    }|t           j                            |                                          k    sJ t           j                            d          }|t           j                            |                                          k    sJ t           j                            dd	d
          }|t           j                            |                                          k    sJ t          j        t          j	        dt          j
                    fg          |t          j        ddg          t          j        dt           j                            dd          gt          j        d                              t          j        d                    d          gdddd          }t           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 |j        |j        k    sJ |j        |j        k    sJ t          j        |dt           j                            dd          gt          j        d                              t          j        d                    d          }|t           j                            |                                          k    sJ dS )z(Make sure serializable types round-trip.action1s   action1-bodyrC   s   result1	username1	password1rV   r  rW   z
test.arrowr   r   r   r   r   r   r'  rH   r   Tr(  r%  r&  N)r   r-  rY  rk  r0  r/  rX  r   r<   rk   r   rl   r.  rm   rj   r   r   r   r   r   r   r   rb  r_  rd  r=  r  )	r   rt   rM  rh  schema_resultdescr   info2r?  s	            r   test_roundtrip_typesrx    s   ]9o66FV]..v/?/?/A/ABBBBBB]5!!FV]..v/?/?/A/ABBBBBB]:&&FV]..v/?/?/A/ABBBBBB!+{;;J)55j6J6J6L6LMMMMMM'	C3D2E(F(FGGMF/;;!!# # # # # # "..v66D6*66t~~7G7GHHHHHH"++ClCCD6*66t~~7G7GHHHHHH
	C$%&&!#77!--k4@@A	9::??T@R@RSS(	 	
 	

 D" ))$..*:*:;;E;%,&&&&?e.....u00000!44444<5=(((( 22222>U_,,,,$	44[$GGH
	'((--bl3.?.?@@ 	 H v,889K9K9M9MNNNNNNNNr   c                     t                      5 } t          d| j        f          5 }t                                                                           D ]h\  }}t          j        |d          5  t          |                    t          j
        |d                               ddd           n# 1 swxY w Y   it          j        t          j        d          5  t          |                                           ddd           n# 1 swxY w Y   t          j        g d          g}t          j                            |dg          }t          j        t          j        t          j        t          j        t          j        d	}|                                D ]\  }}t          j        |d          5  |                    t          j                            |          |j                  \  }	}
|	                    |           |	                                 ddd           n# 1 swxY w Y   t          j        |d          5  |                    t          j                            |          |j                  \  }	}
|	                                 ddd           n# 1 swxY w Y   	 ddd           n# 1 swxY w Y   ddd           dS # 1 swxY w Y   dS )
z:Ensure that Flight errors propagate from server to client.r   z.*foo.*r  r   Nr5   rV   r:   )r  r  r  r  r  )r  r	   r  r  rj  r1  r2  r  r   r   r-  r  rq   r<   r=   r>   r?   r  r  r  r  r   rl   r.  rk   r6  r  )rz  r  argexc_typer@   rv   
exceptionsr"  	exceptionr   r   s              r   test_roundtrip_errorsr~  <  s"   			 !+v{344!8>.::<<BBDD 	@ 	@MCxy999 @ @V%%fmC&=&=>>???@ @ @ @ @ @ @ @ @ @ @ @ @ @ @]65YGGG 	( 	($$&&'''	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( ,,,--.$$T#$77 221%@":
 

 #-"2"2"4"4 	 	GYy	:::  !'+77@@L"" "" ""5)))               y	:::  !'+77@@L"" "" 	              	)! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! !s   KAJ?-6B/	#J?/B33J?6B37$J?"D	=J?	DJ?DB&J?7A%H(	J?(H,,J?/H,0J?	AJ%	J?%J))J?,J)-J?3K?K	KK	KKKc                  h   t          j        g d          g} t           j                            | dg          }t	                      5 }t          d|j        f          5 }|                    t          j	        
                    d          |j                  \  }dgfd}t          j        |          }|                                 |                    d	
          }|5  t!          |          D ]0\  }}	t#          j        d|          }
|                    |	|
           1|                                 |                                 ddd           n# 1 swxY w Y   d         t-          |          k    sJ 	 ddd           n# 1 swxY w Y   ddd           dS # 1 swxY w Y   dS )z7Ensure that separate threads can read/write on a DoPut.r5   rV   r:   r   r   r   c                  |                                     & dxx         dz  cc<                                    $d S d S )Nr   rH   )r$   )countrP  s   r   _reader_threadz:test_do_put_independent_read_write.<locals>._reader_threadt  sJ    !&&((4aA "&&((44444r   r  rH   r   r   N)r<   r=   r>   r?   r   r	   r  r   r   rl   rm   rk   r  r  r  r   r   r   r   r>  done_writingrl  r  )r@   rv   rz  r  r   r  r  rC  r   r   rD  r  rP  s              @@r   "test_do_put_independent_read_writer  b  s    	$$$%%D H  cU 33E			 (6+v{344(8>"(--#,,R00L# # 	 	 	 	 	 	 !888"""33 	 	'00 < <
U!;tS11**5(;;;;!!!KKMMM	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 Qx3w<<'''''5( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( (s\   
F'!BF'A)EFE  F#E $FF'F	F'F	F''F+.F+c            
         t          dt                      i          5 } t          d| j        f          5 }t	          |                    t          j        dd                              }t          |          dk    sJ |d         j	        
                                }d|k    sJ 	 d	d	d	           n# 1 swxY w Y   d	d	d	           d	S # 1 swxY w Y   d	S )
z@Ensure that server middleware run on the same thread as the RPC.r  r  r   r  r   rH   r   s   right valueN)r  r  r	   r  r  r   r   r-  r  r  r   )rz  r  r  rL  s       r   "test_server_middleware_same_threadr    s]   	-//( 
 
 
 '
+v{344' 9?v''gs(C(CDDEE7||q    
**,,&&&&&' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' 's5   CA2B5)C5B9	9C<B9	=CCCc                  H   t          dt                      i          5 } t          d| j        f          5 }t	          j        t          j                  5  t          |	                                           ddd           n# 1 swxY w Y   t	          j        t          j                  5  t          |                    t          j        dd                               ddd           n# 1 swxY w Y   t          d| j        ft                      g          }t          |                    t          j        dd                              }d|j                                        k    sJ 	 ddd           n# 1 swxY w Y   ddd           dS # 1 swxY w Y   dS )z-Test rejecting an RPC with server middleware.r  r  r   Nr   r  )r  r  r	   r  r1  r2  r<   ArrowNotImplementedErrorr  r   r   r  r   r-  r  r  r  r   )rz  r  responses      r   test_middleware_rejectr    s   	466( 
 
 
 9
+v{3449 9?]2677 	( 	($$&&'''	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( ]6<== 	< 	<!!&-S"9"9::;;;	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< &+&<>>?
 
 
 ((sC)@)@AABBhm668888888#9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9s}   FE?"B7E?BE?
B!E?,6C."E?.C22E?5C26A<E?3F?F	FF	FFFc                     t                      } t                      }t          d| i          5 }t          d|j        f|g          5 }t
          j                            d          }t          j	        t                    5  t          |                                           ddd           n# 1 swxY w Y   t          j	        t                    5  |                    |           ddd           n# 1 swxY w Y   t          j	        t                    5  |                    |           ddd           n# 1 swxY w Y   t          j	        t                    5  |                    t          j        d                     ddd           n# 1 swxY w Y   t          j	        t                    5  |                    |t%          j        g                     \  }}|                                 ddd           n# 1 swxY w Y   t          j	        t                    5  t          |                    t          j        dd                               ddd           n# 1 swxY w Y   t          j	        t                    5  t          |                                           ddd           n# 1 swxY w Y   t          j	        t                    5  |                    |          \  }}|                                 ddd           n# 1 swxY w Y   t
          j        j        t
          j        j        t
          j        j        t
          j        j        t
          j        j        t
          j        j        t
          j        j         t
          j        j!        g}| j"        |k    sJ |j"        |k    sJ 	 ddd           n# 1 swxY w Y   ddd           dS # 1 swxY w Y   dS )z/Test that middleware records methods correctly.r  r  r   r   N)#r  r  r
   r	   r  r   rl   r.  r1  r2  r   r  rq   r   r   rw   r0  r   r<   rk   r  r   r-  r   r   r  LIST_FLIGHTSGET_FLIGHT_INFO
GET_SCHEMADO_GETDO_PUT	DO_ACTIONr  DO_EXCHANGEr  )server_middlewareclient_middlewarerz  r  r   r   r  r  s           r   test_middleware_mappingr    s   8::8::	f.?%@	A	A	A %5V&+&)*	 	 	%5 
,88==
].// 	( 	($$&&'''	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	(].// 	/ 	/"":...	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/].// 	* 	*j)))	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	*].// 	. 	.MM&-,,---	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	.].// 	 	j")B--@@IFALLNNN	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 ].// 	< 	<!!&-S"9"9::;;;	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	<].// 	( 	($$&&'''	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	(].// 	 	**:66IFALLNNN	 	 	 	 	 	 	 	 	 	 	 	 	 	 	
 ,/*&&),+	
 !(H4444 (H44444K%5 %5 %5 %5 %5 %5 %5 %5 %5 %5 %5 %5 %5 %5 %5 %5 %5 %5 %5 %5 %5 %5 %5 %5 %5 %5 %5 %5 %5 %5 %5 %5 %5sW  O%	9O"B0$O0B44O7B48OC6*O6C::O=C:>OD<0O<E  OE O (FOFOFO8A H8OHOHO(6I*O*I..O1I.2O"J<0O<K  OK O -LOLO L!BOO%O	O%O	O%%O),O)c            
         t                      5 } t          d| j        f          5 }	 t          |                    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xY w Y   d d d            d S # 1 swxY w Y   d S )Nr   r  r   Fr  )	r  r	   r  r  r   r   r-  r  
extra_info)rz  r  eeis       r   test_extra_infor    sf   			 5+v{34458>	5!!&-
C"@"@AABBBL- 	5 	5 	5<+++B4444444444	5 55 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5sW   B8B 7AB.BB BB B8 B$	$B8'B$	(B88B<?B<c                     t                      } t                      }t          | d         d         gd| d                   5 }t          d|j        f| d         | d         d         j        | d         d         j                  5 }|                    t          j	        d                    
                                }|                    |          sJ 	 d	d	d	           n# 1 swxY w Y   d	d	d	           d	S # 1 swxY w Y   d	S )
z!Test mutual TLS (mTLS) with gRPC.r1   r   Tr0   )r/  verify_clientroot_certificatesr   )r5  
cert_chainprivate_keyr\   N)r3   rA   rZ   r	   r  r.   r/   rw   r   r0  r   r   )r2  rv   r&  r  r@   s        r   	test_mtlsr    s    EE	#N3A67#K0
2 
2 
2 
" 67!&! -^,Q/4n-a04		6 	6 	6	
" :@}}V]73344==??{{5!!!!!!
" 
" 
" 
" 
" 
" 
" 
" 
" 
" 
" 
" 
" 
" 
" 
" 
" 
" 
" 
" 
" 
" 
" 
" 
" 
" 
" 
" 
" 
" 
" 
" 
"s8   AC;AC#C;#C'	'C;*C'	+C;;C?C?c                     t           j                            t          j        t	          dd                    gdg          } t                      5 }t          d|j        f          5 }t          j	        
                    d          }|                    |          \  }}|5  |                                }ddd           n# 1 swxY w Y   | |k    sJ 	 ddd           n# 1 swxY w Y   ddd           dS # 1 swxY w Y   dS )r3  r   r4  rV   r:   r   r(  N)r<   r>   r?   r=   r   r$  r	   r  r   rl   r.  r   r   )r  rz  r  r   r   r   rv   s          r   test_doexchange_getr    s   x##
q)$$%%%U $  H 
		 !6+v{344!8>,88@@
++J77 	& 	&OO%%E	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	&5     ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! !sZ   C<):C$#C8C$CC$CC$C<$C(	(C<+C(	,C<<D D c                  H   t           j                            t          j        t	          dd                    gdg          } |                     d          }t                      5 }t          d|j        f          5 }t          j
                            d          }|                    |          \  }}|5  |                    | j                   |D ]}|                    |           |                                 |                                }|j        J t'          t)          |                                        d
          }	|j        |	k    sJ 	 d	d	d	           n# 1 swxY w Y   d	d	d	           n# 1 swxY w Y   d	d	d	           d	S # 1 swxY w Y   d	S )r8  r   r4  rV   r:      r   r   r)  Nr   )r<   r>   r?   r=   r   r   r$  r	   r  r   rl   r.  r   r5  rk   r?  r  rH  r@   r:  r  r   r=  )
r@   rC  rz  r  r   r   r   r   r   expected_bufs
             r   test_doexchange_putr    sT   8
q)$$%%!U    D ooCo00G			 66+v{34468>,88@@
++J77 	6 	6LL%%%  * *""5))))!!!%%''E:%%%s7||,,33G<<L%55555	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6	6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6s[   (F?:E?9B"E(E?(E,,E?/E,0E?3F?F	FF	FFFc                     t           j                            t          j        t	          dd                    gdg          } |                     d          }t                      5 }t          d|j        f          5 }t          j
                            d          }|                    |          \  }}|5  t	          d	          D ]c}t          |                              d
          }|                    |           |                                }	|	j        J |	j        |k    sJ d|                    | j                   |D ]S}
|                    |
           |j        | j        k    sJ |                                }	|	j        |
k    sJ |	j        J Tt-          |          D ]k\  }}
t          |                              d
          }|                    |
|           |                                }	|	j        |
k    sJ |	j        |k    sJ l	 ddd           n# 1 swxY w Y   ddd           n# 1 swxY w Y   ddd           dS # 1 swxY w Y   dS )zTry a DoExchange echo server.r   r4  rV   r:   r  r   r   r'  r8   r   N)r<   r>   r?   r=   r   r   r$  r	   r  r   rl   r.  r   r:  r   r9  rH  r@   r=  r5  rk   r?  r   r>  )r@   rC  rz  r  r   r   r   ir   r   r   s              r   test_doexchange_echor    s5   8
q)$$%%!U    D ooCo00G			 16+v{34418>,88AA
++J77 	1 	12YY 1 1!ffmmG,,%%c***))++z))))S00000 LL%%%  2 2""5)))}3333))++zU****)1111 &g.. 1 15!ffmmG,,**5#666))++zU****)S000001'	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1	1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1s[   (I?:H<9EH%H<%H))H<,H)-H<0I<I 	 II 	IIIc                  V   t           j                            t          j        t	          dd                    gdg          } |                     d          }t           j                            t           j        j        j	                  }t          |          5 }t          d	|j        f          5 }t          j                            d
          }|                    |          \  }}|5  |                    | j        |           |D ]S}|                    |           |j        | j        k    sJ |                                }	|	j        |k    sJ |	j        J T	 ddd           n# 1 swxY w Y   ddd           n# 1 swxY w Y   ddd           dS # 1 swxY w Y   dS )z;Try a DoExchange echo server using the V4 metadata version.r   r4  rV   r:   r  r   r  rs   r   r'  N)r<   r>   r?   r=   r   r   r  r  r  r  r$  r	   r  r   rl   r.  r   r5  rk   r?  rH  r@   r=  )
r@   rC  rb   rz  r  r   r   r   r   r   s
             r   test_doexchange_echo_v4r  A  sh   8
q)$$%%!U    D ooCo00Gf$$/2 % 4 4G	g	.	.	. 2&+v{34428>,88AA
++J77 	2 	2LLgL666  2 2""5)))}3333))++zU****)11112	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2	2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2s[   F5:F/A3E/#F/E33F6E37F:FF
	
FF
	FF"%F"c            
         t           j                            t          j        t	          dd                    t          j        t	          dd                    t          j        t	          dd                    gg d          } t           j                            t          j        t	          d	d
d	                    gdg          }t                      5 }t          d|j        f          5 }t          j	        
                    d          }|                    |          \  }}|5  |                    | j                   |                    |            |                                 |                                }ddd           n# 1 swxY w Y   ||k    sJ 	 ddd           n# 1 swxY w Y   ddd           dS # 1 swxY w Y   dS )z!Transform a table with a service.r   r   rH   i  rI   i  )rV   rW   cr:   rT   i  rB  r   r*  N)r<   r>   r?   r=   r   r$  r	   r  r   rl   r.  r   r5  rk   r6  r  r   )r@   r  rz  r  r   r   r   rv   s           r   test_doexchange_transformr  Y  sj   8
q$  
q$  
q$  ! __	    D
 x##
q,**++%W $  H 
		 	!6+v{344	!8>,88FF
++J77 	& 	&LL%%%t$$$!!!OO%%E		& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	&
 5     	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	!s[   G0:F.*AFF.FF.FF."G.F2	2G5F2	6GG
G
c            
         t          dt                      i          5 } t                      }t          d| j        f|g          5 }t          |                    t          j        dd                              }|j	        
                                                    d          }t          j        |          }t          j                                        D ]~\  }}|                                }t%          |t&                    r|                    d          }|                    |          |k    sJ |j                            |          |k    sJ 	 ddd           n# 1 swxY w Y   ddd           dS # 1 swxY w Y   dS )r  r  r  r   r   r   asciiN)r  r  r  r	   r  r  r   r   r-  r  r   r  astliteral_evalr  r  rj  r  rx  bytesr   r  )rz  r  r  r  raw_headersr  headerr  s           r   test_middleware_multi_headerr  p  s%   	 244- 
 
 
 B
466fk*#9& & & 	B)/F,,V]3-D-DEEFFH"-2244;;GDDK -k::N"="F"L"L"N"N B Bfe,, 4#]]733F%))&11V;;;;+//776AAAAAB	B 	B 	B 	B 	B 	B 	B 	B 	B 	B 	B 	B 	B 	B 	B	B B B B B B B B B B B B B B B B B Bs6   (E?DE'E?'E+	+E?.E+	/E??FFc                     t                      } t          | d                   5 }dg}t          j        d|j        f| d         |          }t          j        t          j                  5  |                    t          j	        d                     ddd           n# 1 swxY w Y   |
                                 d	g}t          j        d|j        f| d         |          }t          j        t          j        t          j        f          5  |                    t          j	        d                     ddd           n# 1 swxY w Y   |
                                 ddd           dS # 1 swxY w Y   dS )
z$Test setting generic client options.r1   r.  )zgrpc.ssl_target_name_overrider>  r   r0   )r5  generic_optionsr\   N)zgrpc.max_receive_message_length    )r3   rZ   r   r  r  r1  r2  r0  rw   r0  r  r<   r  r  )r2  r&  rb   r  s       r   test_generic_optionsr    s    E	u^/D	E	E	E DEaf 5/4[/A079 9 9 ]6899 	2 	2MM&-00111	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2:;af 5/4[/A079 9 9 ]BOV-HIJJ 	2 	2MM&-00111	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2!                 s[   AE/+(BE/B#	#E/&B#	'A(E/(E7E/E	E/
E	E//E36E3c                       e Zd ZdZd Zd ZdS )CancelFlightServerzA server for testing StopToken.c                     t          j        g           }t           j                            g |          }t	          j        |t          j        |                    S )Nr   )r<   rk   r   r?   r   r   r   r   )rc   ro   rt   rk   r"   s        r   rw   zCancelFlightServer.do_get  sG    2^''6'::%fi.>r.B.BCCCr   c                 @   t          j        g           }t           j                            g |          }|                    |           |                                s?|                    |           t          j        d           |                                =d S d S )Nr   r  )	r<   rk   r   r?   r5  r  r?  r  r  )rc   ro   r   r   r   rk   r"   s          r   r   zCancelFlightServer.do_exchange  s    2^''6'::V&&(( 	r"""JsOOO &&(( 	 	 	 	 	r   N)ry   rz   r{   r|   rw   r   r   r   r   r  r    s;        ))D D D
    r   r  c                     t          j                    j        t          j                    j        k    rt	          j        d           d t          t          j        ffd} t                      5 }t          d|j        f          5 }|                    t          j        d                    } | |j                   t          j                            d          }|                    |          \  }} | |j                   	 |                                 n# t          t          j        f$ r Y nw xY wd d d            n# 1 swxY w Y   d d d            d S # 1 swxY w Y   d S )Nz'test only works from main Python threadc                  j    t          j        d           t          j        t          j                   d S r  )r  r  signalraise_signalSIGINTr   r   r   signal_from_threadz*test_interrupt.<locals>.signal_from_thread  s(    
3FM*****r   c                    	 	 t          j                  }t          j                  5 }|                                  |              d d d            n# 1 swxY w Y   |                                 n# |                                 w xY wn$# t          $ r t          j        d           Y nw xY w|j        }t          |t          j        t          f          s(t          |j        t          j        t          f          sJ d S d S )Nr  z2KeyboardInterrupt didn't interrupt Flight read_all)r  r  r1  r2  r  rl  KeyboardInterruptfailrL  rx  r<   ArrowCancelled__context__)r   texc_infor  	exc_typesr  s       r   r  ztest_interrupt.<locals>.test  s`   	N$,>???]9-- GGIIIHJJJ                 	N 	N 	N KLMMMMM	N
 N!b/1BCDD 	Nq}r'8:K&LMM	N 	N 	N 	N 	N 	N 	NsF   )A8 AA8 AA8 A A8 #B 8BB B32B3r   r   r'  )r  current_threadidentmain_threadr1  r;  r  r<   r  r  r	   r  rw   r   r0  r   rl   r.  r   r  r  )r  rz  r  r   r   r   r  r  s         @@r   test_interruptr    s   !!'9+@+B+B+HHH=>>>+ + + #B$56IN N N N N N$ 
		 +v{3448>v}S1122V_,88AA
++J77V_	LLNNNN!6#>? 	 	 	D	                                s[   3E
A?E
DED85E7D88E;EE	EE	EE#&E#c                  .   d} t                      5 }t          j        d|j        f          5 }t	          j        t          j        |           5  |                    t          j        d                    	                                 d d d            n# 1 swxY w Y   |                    t          j        d                    	                                }|j
        dk    sJ 	 d d d            n# 1 swxY w Y   d d d            d S # 1 swxY w Y   d S )Nz'application server implementation errorr   r  r   r   r7   )r   r   r  r  r1  r2  r  rw   r0  r   rF  )r  rz  r  rv   s       r   test_never_sends_datar    s   5E	#	%	% #NK566#:@]635AAA 	9 	9MM&-,,--66888	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9
 fmM::;;DDFF~"""""# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #sY   D
!C2:BC2BC2BA	C2&D
2C6	6D
9C6	:D

DDc            	      |   t           j                            ddz            } t                      5 }t          j        d|j        f          5 }t          j        t          d          5  |	                    | t          j        g                     \  }}|                                 d d d            n# 1 swxY w Y   t          j        t          j        d          5  |                    |            d d d            n# 1 swxY w Y   d d d            n# 1 swxY w Y   d d d            d S # 1 swxY w Y   d S )Nr  r  r   z%Failed to serialize Flight descriptorr  )r   rl   r.  r
   r  r  r1  r2  OSErrorr   r<   rk   r  r  r   )large_descriptorrz  r  r   r  s        r   test_large_descriptorr    s+   
 .:: 			 1vNK5661:@]7!HJ J J 	 	&6	"FFIFALLNNN	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 ]2,!HJ J J 	1 	1/000	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	11 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1s~   D1D)A B5)D5B99D<B9=#D D6DDD	D
DD1D	D1 D	!D11D58D5c            	         t           j                            d          } ddz  }t                      5 }t          j        d|j        f          5 }t          j        t          j	        d          5  |
                    | t          j        g                     \  }}|5  |                    |           |                                 d d d            n# 1 swxY w Y   d d d            n# 1 swxY w Y   t          j        t          j	        d          5  |                    |           \  }}|5  |                    |           d d d            n# 1 swxY w Y   d d d            n# 1 swxY w Y   d d d            n# 1 swxY w Y   d d d            n# 1 swxY w Y   ~t                      5 }t          j        d|j        f          5 }t          j        t           j        d          5  |                    t          j        d                    }|                                 d d d            n# 1 swxY w Y   t          j        t          j        d          5  |                    |           \  }}|5  |                                 d d d            n# 1 swxY w Y   d d d            n# 1 swxY w Y   d d d            n# 1 swxY w Y   d d d            d S # 1 swxY w Y   d S )Nr   r  r  r   zapp_metadata size overflowr  )r   rl   r.  r   r  r  r1  r2  r<   ArrowCapacityErrorr   rk   r9  r  r   r  r  rw   r0  r   r  )r   rD  rz  r  r   r  r   s          r   test_large_metadata_clientr    sj    (44S99J{#H			 0vNK5660:@]20!=? ? ? 	 	j")B--@@IFA  %%h///              	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 ]20!=? ? ? 	0 	0#//
;;NFF 0 0%%h///0 0 0 0 0 0 0 0 0 0 0 0 0 0 0	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	00 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 		"	$	$ 
"NK566
":@]63!=? ? ? 	 	]]6=#5#566FOO	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 ]2,!=? ? ? 	" 	"#//
;;NFF " "!!!" " " " " " " " " " " " " " "	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	"
" 
" 
" 
" 
" 
" 
" 
" 
" 
" 
" 
" 
" 
" 
" 
" 
" 
" 
" 
" 
" 
" 
" 
" 
" 
" 
" 
" 
" 
" 
" 
" 
"sg  F!F0.C+*C	C+CC+CC+F+C//F2C/3#FE*1E	E*EE*EE*F*E..F1E.2F5FF	FF		FFF2K$!K/<H7+K7H;;K>H;?#K"J5=J	J5J""J5%J"&J5)K5J99K<J9=K K$K	K$K	K$$K(+K(c                       e Zd ZdZg Zd ZdS )ActionNoneFlightServerz@A server that implements a side effect to a non iterable action.c                     |j         dk    r-t          j        | j                                      d          gS |j         dk    r| j                            d           d S t          )N	get_valuer   r  T)rG   jsondumpsVALUESr   r  r   r   s      r   r   z ActionNoneFlightServer.do_action"	  s`    ;+%%Jt{++227;;<<[H$$Kt$$$4!!r   N)ry   rz   r{   r|   r  r   r   r   r   r  r  	  s.        JJF" " " " "r   r  c                     t                      5 } t          d| j        f          5 }|                    t	          j        dd                     |                    t	          j        dd                    }t          j        t          |          j	        
                                          dgk    sJ 	 ddd           n# 1 swxY w Y   ddd           dS # 1 swxY w Y   dS )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	   r  r   r   r-  r  loadsr  r  r   )rz  r  rs      r   test_none_action_side_effectr  +	  sL    
 	!	! ?V+v{344?8>x55666V];<<==z$q'',113344>>>>>	? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?s5   CBC7CC	C
C	CC"Cc            	         d} d}t          j        | |          t           j                            d          }t	          j        dt	          j                    fg          } G fddt           j                  } |            5 }t          d|j	        f          5 }|
                    ||          \  }fd	}t          j        |d
          }	|	                                 t          j        t           j                  5 }
	 |                    t	          j        dgg|                     ,# 1 swxY w Y   |
j        j        |k    sJ t          j        t           j                  5 }
|                                 ddd           n# 1 swxY w Y   |
j        j        |k    sJ |	                                 |                    |          \  }fd}t          j        |d
          }	|	                                 t          j        t           j                  5 }
	 |                    d           # 1 swxY w Y   |
j        j        |k    sJ t          j        t           j                  5 }
|                                 ddd           n# 1 swxY w Y   |
j        j        |k    sJ |	                                 ddd           n# 1 swxY w Y   ddd           dS # 1 swxY w Y   dS )z
    Ensure that exceptions during writing preserve error context.

    See https://issues.apache.org/jira/browse/ARROW-16592.
    rC   rF  )r  r   r  c                   $    e Zd Z fdZ fdZdS )0test_write_error_propagation.<locals>.FailServerc                     r   r   rc   ro   r   r   r   excs        r   r   z7test_write_error_propagation.<locals>.FailServer.do_putG	      Ir   c                     r   r   r  s        r   r   z<test_write_error_propagation.<locals>.FailServer.do_exchangeJ	  r  r   N)ry   rz   r{   r   r   )r  s   r   
FailServerr  F	  sG        	 	 	 	 		 	 	 	 	 	 	r   r  r   c                  ^    	 	                                    # t          j        $ r Y d S w xY wr   )r$   r   FlightErrorr   s   r   _readerz-test_write_error_propagation.<locals>._readerT	  sD    "KKMMM"%       ,,Tr  rH   r   Nc                  ^    	 	                                    # t          j        $ r Y d S w xY wr   )rH  r   r  r  s   r   r  z-test_write_error_propagation.<locals>._readerk	  sI    (%%'''(%   r  r  )r   r  rl   r.  r<   rk   r  r
   r	   r  r   r  r  r  r1  r2  r?  r  rL  r  r  rl  r   r9  )expected_messageexpected_infor   rk   r  rz  r  r   r  r  r  r  r   s              @@r   test_write_error_propagationr  8	  sQ    M

%]4 4 4C(44S99JY"(**-.//F      V,    
 /+v{344/8>z6::	 	 	 	 	 !>>>]6677 	J8J""2?QC5#H#H#HIIIJ	J 	J 	J 	J 	J 	J 	J 	J ~(M9999]6677 	8LLNNN	 	 	 	 	 	 	 	 	 	 	 	 	 	 	~(M9999  ++J77	 	 	 	 	 !>>>]6677 	,8,%%d+++,	, 	, 	, 	, 	, 	, 	, 	, ~(M9999]6677 	8LLNNN	 	 	 	 	 	 	 	 	 	 	 	 	 	 	~(M9999_/ / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / /s   K/A'K.D44D88K;D8<3K/FKFKFBK&H>>IKI3K9JKJK!J")KK/K	K/K	K//K36K3c                  .    t          j        d           dS )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dS )TracingFlightServerz/A server that echoes back trace context values.c                 r    |                     d          j        }d |                                D             S )Ntracingc              3   P   K   | ]!\  }}| d |                      d          V  "dS )z: r   N)r   )r  r/   rL  s      r   	<genexpr>z0TracingFlightServer.do_action.<locals>.<genexpr>	  sV       ; ; S% ""5""**733 ; ; ; ; ; ;r   )r  trace_contextrj  )rc   ro   r   r  s       r   r   zTracingFlightServer.do_action	  sE    ..y99G; ;$1$7$7$9$9; ; ; 	;r   Nr  r   r   r   r  r  	  s)        99; ; ; ; ;r   r  c                  >   t          dt          j                    i          5 } t          d| j        f          5 }t          j        ddg          }|                    d|          D ]}	 d d d            n# 1 swxY w Y   d d d            d S # 1 swxY w Y   d S )	Nr  r  r   )s   traceparents7   00-000ff00f00f0ff000f0f00ff0f00fff0-000f0000f0f00000-00)s
   tracestater   r  )r   r   rs   )r  r   TracingServerMiddlewareFactoryr	   r  r  r   )rz  r  rb   rL  s       r   test_tracingr  	  sH   	v<>>) 
 
 
 
+v{344 9? *5 	4
    %%j'%BB 	 	E	                                s4   B2A:.B:A>	>BA>	BBBc                      t          dd          } d}t          j        t          |          5  |                     t
          j                            d          d            d d d            d S # 1 swxY w Y   d S )Nzgrpc+tls://localhost:9643Tr9  zRArgument 'schema' has incorrect type \(expected pyarrow.lib.Schema, got NoneType\)r  rC   r   )r	   r1  r2  r3  r   r   rl   r.  )r  msgs     r   .test_do_put_does_not_crash_when_schema_is_noner  	  s    56:< < <F<C	y	,	,	, # #f-99%@@! 	 	# 	# 	## # # # # # # # # # # # # # # # # #s   5A11A58A5c                      G d dt                     }  G fddt                    } G d dt                     |            } |             5 }t          d|j        f|g          5 }|                    t          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           n# 1 swxY w Y   ddd           dS # 1 swxY w Y   dS )z9Ensure that server-sent headers/trailers make it through.c                       e Zd Zd ZdS ):test_headers_trailers.<locals>.HeadersTrailersFlightServerc                    |                     dd           |                     dd           |                    dd           |                    dd           t          j        t	          j        g           |g           S )	Nx-headerheader-valuex-header-binzheadervalue	x-trailertrailer-valuex-trailer-binztrailervalue)
add_headeradd_trailerr   rj   r<   rk   r   s      r   r   zJtest_headers_trailers.<locals>.HeadersTrailersFlightServer.get_flight_info	  s    z>:::~/@AAA_===1CDDD$	"  r   N)ry   rz   r{   r   r   r   r   HeadersTrailersFlightServerr
  	  s#        		 		 		 		 		r   r  c                        e Zd Zd Z fdZdS )?test_headers_trailers.<locals>.HeadersTrailersMiddlewareFactoryc                     g | _         d S r   r  rn  s    r   r`   zHtest_headers_trailers.<locals>.HeadersTrailersMiddlewareFactory.__init__	  s    DLLLr   c                      |           S r   r   )rc   r   HeadersTrailersMiddlewares     r   r  zJtest_headers_trailers.<locals>.HeadersTrailersMiddlewareFactory.start_call	  s    ,,T222r   N)ry   rz   r{   r`   r  )r  s   r    HeadersTrailersMiddlewareFactoryr  	  s=        	 	 		3 	3 	3 	3 	3 	3 	3r   r  c                       e Zd Zd Zd ZdS )8test_headers_trailers.<locals>.HeadersTrailersMiddlewarec                     || _         d S r   r  r  s     r   r`   zAtest_headers_trailers.<locals>.HeadersTrailersMiddleware.__init__	  s    "DLLLr   c                     |                                 D ]+\  }}|D ]#}| j        j                            ||f           $,d S r   )rj  r  r  r  )rc   r  r/   r  rL  s        r   r  zItest_headers_trailers.<locals>.HeadersTrailersMiddleware.received_headers	  s[    &}} > >V# > >EL(//e====>> >r   N)ry   rz   r{   r`   r  r   r   r   r  r  	  s2        	# 	# 	#	> 	> 	> 	> 	>r   r  r   r  r   )r  r  )r  s   headervalue)r  r  )r  s   trailervalueN)
r
   r   r   r	   r  r   r   rl   rm   r  )r  r  r  rz  r  r  s        @r   test_headers_trailersr  	  s   
 
 
 
 
&6 
 
 
3 3 3 3 3 3 3+B 3 3 3> > > > >$4 > > > /.00G	$	$	&	& I&+v{3	JJJINTv6??CCDDD+w>>>>3wFFFF-@@@@5HHHHHI I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I Is7   C/+ACC/C	C/C	C//C36C3)r  rx  r   r   r   r  r   r  r  r  r'   r  r   numpyrU  ImportErrorr1  r   r<   pyarrow.libr   r   pyarrow.utilr   pyarrow.testsr   r   r   r	   r
   r   r   r   r   r   r   r4  mark
pytestmarkr   r    r,   r3   rA   rO   rX   rZ   r   r   r   r   r   r   r   r   r   r  r  r$  rO  rf  rs  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r@  rp  ru  r{  r~  slowr  r  r  r  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_datar3  r7  r<  r@  rF  rL  rN  rQ  r^  r`  rn  rp  rx  r~  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  large_memoryr  r  r  r  r  r  r  r  r  r  r   r   r   <module>r-     s  $ 


      				                       	BBB      / / / / / / / / ' ' ' ' ' '      ?                      ? ? ?F%+V"L"+16((06--06----? [
  
B B BK K K  "; ; ;< < <2 2 2E E E E E+ E E ED# # # # #+ # # #L    '   *" " " " "- " " ""0 0 0 0 0* 0 0 06+ + + + +. + + +    #3   . . . . .. . . ."E E E E E 0 E E E F F F F F!1 F F F&7 7 7 7 7' 7 7 7*.A .A .A .A .A( .A .A .AbC# C# C# C# C#+ C# C# C#L    !2   0    !2   "    .   .    .   $    '   $ $ $
/ 
/ 
/ 
/ 
/(? 
/ 
/ 
/- - - - -!1 - - -41 1 1 1 1(? 1 1 189 9 9 9 9!1 9 9 9/ / / / /- / / /9 9 9 9 9.E 9 9 9    '7   F F F F F#3 F F F*+ + + + +- + + +5 5 5 5 5$; 5 5 5    )       .   - - - - -+B - - -&/ / / / /+B / / /

 
 
 
 
$4 
 
 
	 	 	 	 	'> 	 	 		 	 	 	 	'> 	 	 		1 	1 	1 	1 	1)@ 	1 	1 	12 2 2 2 2"2 2 2 2.4 4 4 4 4)@ 4 4 44 4 4 4 4"2 4 4 4. . . . . 0 . . ."9@ 9@ 9@x` ` `F! ! !$8 8 8      (' ' '( ( (D D D6 F F F" " "" " "< < <.= = =7 7 7$    (   2! ! !6 6 6   BGtOD  F F& &F F&* # # #*# # # 9 9 9< < <J J J4 4 4" 0/[7     ,+[3    
 + + + BGtOI  K K
5 
5K K
5+ + +5 5 5I I I )J(I(K(K %$_&& 4 4 4E E E; ; ;  @8 8 8." " "+ + + "= = #" = "	" 	" #"	" "  #"  "	2 	2 #"	2" " "*     @
" 
" 
") ) ), " " "8       4 4  4@  8O 8O 8Ov# # #L$( $( $(N	' 	' 	'9 9 9,)5 )5 )5X	5 	5 	5 "" " #""$! ! !6 6 6,#1 #1 #1L2 2 20! ! !.B B B, "  #".    )   " ) ) )X# # # 1 1  1  " "  "@
" 
" 
" 
" 
"- 
" 
" 
"
? 
? 
? C C CL) ) )	; 	; 	; 	; 	;* 	; 	; 	;  $# # #&I &I &I &I &Is!   = AA'B B B 