
    Pi                       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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$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$e&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          Z0 G d de          Z1 G d de          Z2 G d de2          Z3 G d de2          Z4 G d de2          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+ d,e          Z> G d- d.e          Z? G d/ d0e           Z@ G d1 d2e          ZA G d3 d4e           ZB G d5 d6e          ZCd7 ZD G d8 d9e$          ZE G d: d;e#          ZF G d< d=e"          ZG G d> d?e!          ZH G d@ dAe          ZI G dB dCe"          ZJ G dD dEe!          ZK G dF dGe          ZL G dH dIe!          ZM G dJ dKe"          ZN G dL dMe          ZO G dN dOe          ZP G dP dQe"          ZQ G dR dSe$          ZR G dT dUe#          ZS G dV dWe"          ZT G dX dYe$          ZU G dZ d[e$          ZV G d\ d]e#          ZW G d^ d_e"          ZX G d` dae!          ZY G db dce          ZZdd Z[de Z\df Z]dg Z^dh Z_ej'        j        ej'        j`        di                         Zadj Zbdk Zcdl Zdej'        je        dm             Zfdn Zgdo Zhdp Zidq Zjdr Zk G ds dte          Zldu Zmdv Zndw Zoej'        p                    ejq        dxk    dyz          d{             Zrej'        j`        d|             Zsd} Ztd~ Zud Zvd Zwd Zxd Zyd Zzd Z{d Z|d Z} e?ddi          Z~ eAddi          Zej'        j`        d             Zej'        p                    ejq        dxk    dz          d             Zd Zd Zd Z eG            Z eC            Zd Zd Zd 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 de2          Zd Zej'        j`        d             Zd Z G d de          Zd Zd Zd Zd Zej        dÄ             Zej'                            dddgdǬȦ          dɄ             ZdS )    N)datetime)IpcReadOptions	ReadStatstobytes)find_free_port)util)flight)	FlightClientFlightServerBaseServerAuthHandlerClientAuthHandlerServerMiddlewareServerMiddlewareFactoryClientMiddlewareClientMiddlewareFactoryFlightCallOptionsc                      dd l } d S )Nr   )pyarrow.flight)pyarrows    m/home/jaya/work/projects/VOICE-AGENT/VIET/agent-env/lib/python3.11/site-packages/pyarrow/tests/test_flight.pytest_importr   A   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"   F   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          $ r* t	          d|| z   dt          j                               w xY w)z)Get the contents of a test resource file.NrbzTest resource z< not found; did you initialize the test resource submodule?
)r"   openreadFileNotFoundErrorr   	traceback
format_exc)pathrootfs      r   read_flight_resourcer-   N   s    ??D t
Tk%% 	6688	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 
 
 
BTD[ B B)2)=)?)?B B
 
 	

s.   A A A AA AA 4B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_certsr4   ]   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_tablerB   n   s<    
$$$%%D 8[M:::r   c                     t          j        g dt          j                              } t          j        g dt          j                              }t          j        t           j                            g d|           t           j                            ddg|           t           j                            ddg|          g          g}t           j                            |d	g
          S )N)foobazquuxtype)rD   rE   rF   new)   r   N   rJ   r      
some_dictsr;   )r=   r>   utf8chunked_arrayDictionaryArrayr@   r?   )dict_valuesnew_dict_valuesrA   s      r   simple_dicts_tablerS   u   s    (111		BBBKh<<<2799MMMO
**<<<EE**Aq6;??**Aq6?CC
 	 	D 8\N;;;r   c                      t           j                            t          j        g d          t          j        g d          gddg          S )N)rD   barrE   quxrJ   rK   rL      abr;   )r=   r?   r@   r>   r!   r   r   multiple_column_tabler[      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__rB   rS   r[   table_factoriesoptions)selflocationre   kwargs	__class__s       r   rc   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rf   contextcriterias      r   list_flightsz!ConstantFlightServer.list_flights   sf      t}$$#	"'0088       %$r   c                 l     | j         |j                             }t          j        || j                  S )Nre   )rd   ticketr	   RecordBatchStreamre   )rf   rr   rw   tables       r   do_getzConstantFlightServer.do_get   s3     4$V]355't|DDDDr   NN)	__name__
__module____qualname____doc__rl   rc   rt   rz   __classcell__ri   s   @r   r]   r]      ss          (H       E E E E E E Er   r]   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!   rb   rc   re   rf   re   rh   ri   s      r   rc   zMetadataFlightServer.__init__   +    ""6"""r   c                     t          j        g d          g}t           j                            |dg          }t	          j        |j        |                     |          | j                  S )Nr6   rY   r;   rv   )	r=   r>   r?   r@   r	   GeneratorStreamrn   number_batchesre   )rf   rr   rw   rA   ry   s        r   rz   zMetadataFlightServer.do_get   sp    H((())
 $$T#$77%L&&L" " " 	"r   c           	         d}g d}|j         j        dk    sJ |D ]\  }}|                    t          j                            t          j        ||         g          gdg                    sJ |J t          j        d|	                                          \  }	||	k    sJ |
                    t          j        d|                     |dz  }|j         j        dk    sJ |j         j        dk    sJ d S )Nr   r6   rJ   rY   <i   r8   )statsnum_messagesequalsr=   RecordBatchr@   r>   structunpack
to_pybyteswritepacknum_record_batches)
rf   rr   
descriptorreaderwritercounterexpected_databatchbufclient_counters
             r   do_putzMetadataFlightServer.do_put   s    +++|(A----  		 		JE3<< : :=12334! !      ???$mD#..2B2BCCONn,,,,LLT733444qLGG|(A----|.!333333r   c              #      K   t          |                                           D ] \  }}t          j        d|          }||fV  !d S )Nr   )	enumerate
to_batchesr   r   )ry   idxr   r   s       r   r   z#MetadataFlightServer.number_batches   s[      #E$4$4$6$677 	 	JC+dC((C*	 	r   N)
r|   r}   r~   r   rc   rz   r   staticmethodr   r   r   s   @r   r   r      s|        >>     " " "4 4 4"   \    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   )rb   rc   last_messageexpected_schema)rf   rg   r   rh   ri   s       r   rc   zEchoFlightServer.__init__   s8    ,,V,,, .r   c                 4    t          j        | j                  S r   )r	   rx   r   rf   rr   rw   s      r   rz   zEchoFlightServer.do_get   s    '(9:::r   c                 j    | j         r| j         |j        k    sJ |                                | _        d S r   )r   rn   read_allr   rf   rr   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!   )rf   rr   r   r   r   chunks         r   do_exchangezEchoFlightServer.do_exchange   s     	 	E	 	r   r{   )	r|   r}   r~   r   rc   rz   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   rn   r   r   s      r   rz   zEchoStreamFlightServer.do_get   s7    %$((t(<<> > 	>r   c                     g S r   r!   rf   rr   s     r   list_actionsz#EchoStreamFlightServer.list_actions       	r   c                     |j         dk    r;|                                |                                                    d          gS t          Nwho-am-iutf-8rH   peer_identitypeerencodeNotImplementedErrorrf   rr   actions      r   	do_actionz EchoStreamFlightServer.do_action   B    ;*$$))++W\\^^-B-B7-K-KLL!!r   Nr|   r}   r~   r   rz   r   r   r!   r   r   r   r      sG        @@> > >
  " " " " "r   r   c                   $    e Zd ZdZd Zd Zd ZdS )EchoTableStreamFlightServerz,An echo server that streams the whole table.c                 L    t          j        | j        j        | j        g          S r   )r	   r   r   rn   r   s      r   rz   z"EchoTableStreamFlightServer.do_get   s)    %$! ! 	!r   c                     g S r   r!   r   s     r   r   z(EchoTableStreamFlightServer.list_actions  r   r   c                     |j         dk    r;|                                |                                                    d          gS t          r   r   r   s      r   r   z%EchoTableStreamFlightServer.do_action  r   r   Nr   r!   r   r   r   r      sG        66! ! !
  " " " " "r   r   c                   $    e Zd ZdZd Zd Zd ZdS )'EchoRecordBatchReaderStreamFlightServerzCAn echo server that streams the whole table as a RecordBatchReader.c                 p    t          j        | j        j        | j                                        g          S r   )r	   r   r   rn   	to_readerr   s      r   rz   z.EchoRecordBatchReaderStreamFlightServer.do_get  s5    %$((**+- - 	-r   c                     g S r   r!   r   s     r   r   z4EchoRecordBatchReaderStreamFlightServer.list_actions  r   r   c                     |j         dk    r;|                                |                                                    d          gS t          r   r   r   s      r   r   z1EchoRecordBatchReaderStreamFlightServer.do_action  r   r   Nr   r!   r   r   r   r   
  sG        MM- - -
  " " " " "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 )NrY   r   grpc://test	localhost  2023-04-05T12:34:56.789012345nszendpoint app metadatarJ   *   Tzinfo app metadata)r	   rm   r=   rn   int32FlightEndpointLocationfor_grpc_tcpscalarcast	timestamprf   rr   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	   SchemaResultrn   )rf   rr   r   infos       r   
get_schemazGetInfoFlightServer.get_schema1  s*    ##GZ88"4;///r   N)r|   r}   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_actions9  s$     (j-88
 	
r   c              #   >   K   |                                  E d {V  d S r   )r   r   s     r   r   z$ListActionsFlightServer.list_actionsA  s0      ((***********r   N)r|   r}   r~   r   classmethodr   r   r!   r   r   r   r   6  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   rD   r!   r   s     r   r   z)ListActionsErrorFlightServer.list_actionsH  s      r   N)r|   r}   r~   r   r   r!   r   r   r   r   E  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   )rb   rc   expected_ticket)rf   r  rg   rh   ri   s       r   rc   z CheckTicketFlightServer.__init__P  s0    ,,V,,,.r   c                     | j         |j        k    sJ t          j        g dt          j                              g}t          j                            |dg          }t          j        |          S )Nr6   rG   rY   r;   )	r  rw   r=   r>   r   r?   r@   r	   rx   )rf   rr   rw   data1ry   s        r   rz   zCheckTicketFlightServer.do_getT  si    #v}4444---BHJJ???@$$U3%$88'...r   c                 8    |                                 | _        d S r   )r   r   )rf   rr   r   r   s       r   r   zCheckTicketFlightServer.do_putZ  s    "OO--r   r   )r|   r}   r~   r   rc   rz   r   r   r   s   @r   r   r   M  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.rY   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 )Nr6   rG   )g      $g      g              @g      $@rY   r;   )
r=   r>   r   float64rH   r?   r@   rn   r	   r   )rf   rr   rw   r  data2table1table2s          r   rz   z InvalidStreamFlightServer.do_getc  s    ---BHJJ???@777bjllKKKLzUZ''''%%eC5%99%%eC5%99}++++%dkFF3CDDDr   Nr|   r}   r~   r   r=   rn   r   rz   r!   r   r   r  r  ^  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.rY   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_datar8   rn   )rw   rn   empty_tabler=   r   r@   ranger	   r   	itertoolsrepeat)rf   rr   rw   rA   s       r   rz   z!NeverSendsDataFlightServer.do_gets  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  n  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 )NrY   )r	   r   r=   rn   r   slow_streamr   s      r   rz   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 )Nr6   rG   rY   r;   r9   )r=   r>   r   r?   r@   r  r  )r  s    r   r  zSlowFlightServer.slow_stream  s      ---BHJJ???@h""5"66666 	
2h""5"6666666r   N)r|   r}   r~   r   rz   r   r   r  r!   r   r   r  r    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invalidr0   )
r	   FlightInternalErrorFlightTimedOutErrorFlightCancelledErrorFlightUnauthenticatedErrorFlightUnauthorizedErrorr   r=   ArrowInvalidKeyErrorr!   r   r   error_caseszErrorFlightServer.error_cases  s<     221%@":1	
 	
 		
r   c                     t                                           }|j        |v r ||j                 d          |j        dk    rd}t          j        d|          t
          )NrD   protobuf   this is an error message)r"  r2  rH   r	   r/  r   )rf   rr   r   r2  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          )Nrk   rD   )r	   rm   r=   rn   ro   rp   r+  rq   s      r   rt   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   internalrD   s   timedouts   cancels   unauthenticateds   unauthorizeds   protobufr5  )commandr	   r+  r,  r-  r.  r/  )rf   rr   r   r   r   r6  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)	r|   r}   r~   r   r   r2  r   rt   r   r!   r   r   r"  r"    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   rc   zExchangeFlightServer.__init__  r   r   c                    |j         j        dk    sJ |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                   )Nr   z!Must provide a command descriptor   echo   get   put	   transformzUnknown command: )r   r   descriptor_typer	   DescriptorTypeCMDr=   r0  r9  exchange_echoexchange_do_getexchange_do_putexchange_transformr   s        r   r   z ExchangeFlightServer.do_exchange  s    |(A----%)>)BBB/"EFFF7**%%gvv>>>6))''@@@6))''@@@<//**7FFCCC/8J$688: : :r   c                     t           j                            t          j        t	          dd                    gdg          }|                    |j                   |                    |           dS )Emulate DoGet with DoExchange.r    (  rY   r;   N)r=   r?   r@   r>   r  beginrn   write_table)rf   rr   r   r   rA   s        r   rF  z$ExchangeFlightServer.exchange_do_get  so    x##HU1i(())%
 $   	T[!!!4     r   c                    d}|D ]4}|j         st          j        d          |j        j        dk    sJ |dz  }5|j        j        |k    sJ |                    t          |                              d                     dS )Emulate DoPut with DoExchange.r   zAll chunks must have data.rJ   r   N)	rA   r=   r0  r   r   r   write_metadatastrr   )rf   rr   r   r   num_batchesr   s         r   rG  z$ExchangeFlightServer.exchange_do_put  s     	 	E: Do&BCCC<,11111KK|.+====c+..55g>>?????r   c                    |j         j        dk    sJ d}|D ]}|s/|j        r(|                    |j        j        | j                   d}|j        r(|j        r!|                    |j        |j                   b|j        r|                    |j                   |j        r-|j         j        dk    sJ |	                    |j                   J d            dS )zRun a simple echo server.r   Frv   TzShould not happenN)
r   r   rA   rL  rn   re   app_metadatawrite_with_metadatarP  write_batch)rf   rr   r   r   startedr   s         r   rE  z"ExchangeFlightServer.exchange_echo  s   |(A---- 	2 	2E uz UZ.EEE! 2ej 2**5:u7IJJJJ# 2%%e&89999 2|0A5555""5:....1111u	2 	2r   c                 p   |j         j        dk    sJ |j        D ]J}t          j                            |j                  s$t          j        dt          |          z             K|	                                }|j         j        dk    sJ 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.r   zInvalid field: sumr;   N)r   r   rn   r=   types
is_integerrH   r0  reprr   num_rowsr   as_pyr?   r@   r>   rL  rM  )rf   rr   r   r   fieldry   sumscolumnrowvalueresults              r   rH  z'ExchangeFlightServer.exchange_transform  s?   |(A----] 	G 	GE8&&uz22 Go&7$u++&EFFFG!!|(A----sU^# 	+ 	+F'// + +
US			U[[]]*				+%%rx~~&6ug%FFV]###6"""""r   r   )r|   r}   r~   r   rc   r   rF  rG  rE  rH  r   r   s   @r   r;  r;    s        **     : : : ! ! !	@ 	@ 	@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   rb   rc   credsrf   rj  ri   s     r   rc   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usernamerj  r.  passwordr   r   )rf   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 providedrn  )r	   r.  rj  rf   tokens     r   is_validz#HttpBasicServerAuthHandler.is_valid$  s@     	J34HIII
""3NCCCr   r|   r}   r~   r   rc   rv  rz  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 )HttpBasicClientAuthHandlerrg  c                     t                                                       t          j        ||          | _        d | _        d S r   )rb   rc   r	   ro  
basic_authry  rf   rq  rr  ri   s      r   rc   z#HttpBasicClientAuthHandler.__init__/  s8     *8X>>


r   c                     | j                                         }|                    |           |                                | _        d S r   )r  	serializer   r&   ry  )rf   rs  rt  ru  s       r   rv  z'HttpBasicClientAuthHandler.authenticate4  s:    ((**t]]__


r   c                     | j         S r   ry  rf   s    r   	get_tokenz$HttpBasicClientAuthHandler.get_token9  
    zr   r|   r}   r~   r   rc   rv  r  r   r   s   @r   r}  r}  ,  s\        AA    
% % %
      r   r}  c                   .     e Zd ZdZ fdZd Zd Z xZS )TokenServerAuthHandler:An example implementation of authentication via handshake.c                 V    t                                                       || _        d S r   ri  rk  s     r   rc   zTokenServerAuthHandler.__init__@  rl  r   c                    |                                 }|                                 }|| j        v r=| j        |         |k    r,|                    t          j        d|z                        d S t          j        d          )N   secret:zinvalid username/password)r&   rj  r   base64	b64encoder	   r.  )rf   rs  rt  rq  rr  s        r   rv  z#TokenServerAuthHandler.authenticateD  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 )Nr  zinvalid token   )r  	b64decode
startswithr	   r.  rx  s     r   rz  zTokenServerAuthHandler.is_validM  sH     ''
++ 	E3ODDDQRRyr   r{  r   s   @r   r  r  =  s\        DD    - - -      r   r  c                   .     e Zd ZdZ fdZd Zd Z xZS )TokenClientAuthHandlerr  c                 r    t                                                       || _        || _        d| _        d S )Nr   )rb   rc   rq  rr  ry  r  s      r   rc   zTokenClientAuthHandler.__init__W  s2      


r   c                     |                     | j                   |                     | j                   |                                | _        d S r   )r   rq  rr  r&   ry  rf   rs  rt  s      r   rv  z#TokenClientAuthHandler.authenticate]  s=    t}%%%t}%%%]]__


r   c                     | j         S r   r  r  s    r   r  z TokenClientAuthHandler.get_tokenb  r  r   r  r   s   @r   r  r  T  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   rv  zNoopAuthHandler.authenticatei  s      r   c                     dS )zV
        Returning an empty string.
        Returning None causes Type error.
        r   r!   rx  s     r   rz  zNoopAuthHandler.is_validl  s	    
 rr   N)r|   r}   r~   r   rv  rz  r!   r   r   r  r  f  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_keyr0   s      r   case_insensitive_header_lookupr  t  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_credentialr  s    r   rc   z*ClientHeaderAuthMiddlewareFactory.__init__  s    !r   c                      t          |           S r   )ClientHeaderAuthMiddlewarerf   r   s     r   
start_callz,ClientHeaderAuthMiddlewareFactory.start_call  s    )$///r   c                     || _         d S r   r  )rf   r  s     r   set_call_credentialz5ClientHeaderAuthMiddlewareFactory.set_call_credential  s    .r   N)r|   r}   r~   r   rc   r  r  r!   r   r   r  r  }  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rf   r  s     r   rc   z#ClientHeaderAuthMiddleware.__init__      r   c                     t          |d          }|r7| j                            d|d                             d          g           d S d S )NAuthorization   authorizationr   r   )r  r  r  r   )rf   r  auth_headers      r   received_headersz+ClientHeaderAuthMiddleware.received_headers  sd    4WoNN 	1L,, A%%g...0 1 1 1 1 1	1 	1r   N)r|   r}   r~   r   rc   r  r!   r   r   r  r    s<           1 1 1 1 1r   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BasicrJ   r   :testrr  	token1234Bearer)r  splitr  r  decoder	   r.  HeaderAuthServerMiddleware)	rf   r   r  r  valuesry  error_messagedecodedpairs	            r   r  z,HeaderAuthServerMiddlewareFactory.start_call  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r|   r}   r~   r   r  r!   r   r   r  r    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   r  rx  s     r   rc   z#HeaderAuthServerMiddleware.__init__  s    


r   c                     dd| j         z   iS )NauthorizationzBearer r  r  s    r   sending_headersz*HeaderAuthServerMiddleware.sending_headers  s    TZ!788r   Nr|   r}   r~   r   rc   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          )Nru  r  r  rJ   r   zNo token auth middleware found.)get_middlewarer  r  r  r   r	   r.  )rf   rr   r   
middlewarer  r  s         r   r   z HeaderAuthFlightServer.do_action  s    ++F33
 	/8**,,o? ?K &&s++F1I$$W--../-/ / 	/r   Nr|   r}   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rf   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   rt  )rf   rt  s     r   rc   z)ArbitraryHeadersServerMiddleware.__init__  s     r   c                     | j         S r   r  r  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)	rf   rr   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)rf   r  s     r   rc   zHeaderServerMiddleware.__init__  s    *r   N)r|   r}   r~   r   rc   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   )rf   rr   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  r\  client_headersr   )rf   rr   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   rr  zInvalid token)methodr	   FlightMethodLIST_ACTIONSr   r.  r  )rf   r   r  ry  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_call4  s    ,...r   N)r|   r}   r~   r  r!   r   r   r  r  3  s#        / / / / /r   r  c                       e Zd Zd ZdS )r  c                 
    ddiS )Nr  rr  r!   r  s    r   r  z-SelectiveAuthClientMiddleware.sending_headers9  s    J
 	
r   N)r|   r}   r~   r  r!   r   r   r  r  8  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   rb   rc   methodsrf   ri   s    r   rc   z)RecordingServerMiddlewareFactory.__init__B  $    r   c                 D    | j                             |j                   d S r   r  appendr  r  s      r   r  z+RecordingServerMiddlewareFactory.start_callF      DK(((tr   r|   r}   r~   r   rc   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   rc   z)RecordingClientMiddlewareFactory.__init__N  r  r   c                 D    | j                             |j                   d S r   r  r  s     r   r  z+RecordingClientMiddlewareFactory.start_callR  r  r   r  r   s   @r   r  r  K  r  r   r  c                       e Zd ZdZd Zd ZdS )"MultiHeaderClientMiddlewareFactoryr  c                     i | _         d S r   )last_headersr  s    r   rc   z+MultiHeaderClientMiddlewareFactory.__init__Z  s     r   c                      t          |           S r   )MultiHeaderClientMiddlewarer  s     r   r  z-MultiHeaderClientMiddlewareFactory.start_call_  s    *4000r   N)r|   r}   r~   r   rc   r  r!   r   r   r  r  W  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  rD   rU          rE   )zx-textzx-binary-binzx-MIXED-cases   x-other-MIXED-casec                     || _         d S r   r  r  s     r   rc   z$MultiHeaderClientMiddleware.__init__n  r  r   c                     | j         S r   )EXPECTEDr  s    r   r  z+MultiHeaderClientMiddleware.sending_headersq  r  r   c                 D    | j         j                            |           d S r   )r  r  update)rf   r  s     r   r  z,MultiHeaderClientMiddleware.received_headerst  s#     	!((11111r   N)r|   r}   r~   r   r#  rc   r  r  r!   r   r   r  r  c  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_call}  s    *7333r   Nr  r!   r   r   r'  r'  z  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  )rf   r  s     r   rc   z$MultiHeaderServerMiddleware.__init__  s    ,r   c                     t           j        S r   )r  r#  r  s    r   r  z+MultiHeaderServerMiddleware.sending_headers  s    *33r   Nr  r!   r   r   r)  r)    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           )rb   rc   	_metadata)rf   argsrh   ri   s      r   rc   z"LargeMetadataFlightServer.__init__  s/    $)&)))-r   c                     t          j        dt          j                    fg          }t          j        |t          j        dgg|          | j        fg          S )NrY   rJ   r  )r=   rn   int64r	   r   record_batchr2  )rf   rr   rw   rn   s       r   rz   z LargeMetadataFlightServer.do_get  sX    S"(**-.//%f_qcU6222DNC/
   	r   c                 :    |                     | j                   d S r   )rP  r2  r   s        r   r   z%LargeMetadataFlightServer.do_exchange  s    dn-----r   )r|   r}   r~   r   rc   rz   r   r   r   s   @r   r.  r.    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 |j        t          j        g           k    sJ t          j        d t          j                                        g dddd          }d}t          |          |k    sJ |j        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'>rD   r   rU   userpass   foo2023-04-05T12:34:56s   endpoint app metadatarJ   r   T   test app metadatagrpc+tcp://localhost:1234)intr5  z1<pyarrow.flight.SchemaResult schema=(int: int64)>z<pyarrow.flight.FlightInfo schema=None descriptor=<pyarrow.flight.FlightDescriptor path=[]> endpoints=[] total_records=1 total_bytes=42 ordered=True app_metadata=b'test app metadata'>r   s   grpc://testz2023-04-05T01:02:03)expiration_timei  rX   r8   rK   rL   rT  )r\  r	   Actionr   ro  ro   for_commandr   r=   r   r   r   rm   rn   rp   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_reprrW    s5   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;")B--''''f%..00"	2t) D
	-  ::"""";	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   5LLL;"M))M-0M-%N>>OO"PP
P
**Q  Q$'Q$$R55R9<R9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 )NrD   r   rU   r	   rD  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 )NrD   r      barrZ  r!   r   r   r[  ztest_eq.<locals>.<lambda>  s#    uc**FM%,H,HI r   c                  V    t          j        dd          t          j        dd          fS )NrD   rU   rE   r   r!   r   r   r[  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 )Nr9  r:  user2r	   ro  r!   r   r   r[  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 )Nr9  r:  pass2ra  r!   r   r   r[  ztest_eq.<locals>.<lambda>  s(    !&&11!&'224 r   c                  ~    t           j                            d          t           j                            d          fS )NrD   )r	   ro   rE  rp   r!   r   r   r[  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;  r]  r	   r   r!   r   r   r[  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   r[  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   r[  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   rC     metarg  r!   r   r   r[  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	   rm   r=   rn   ro   rp   r5  r!   r   r   r[  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	   rm   r=   rn   ro   rp   rE  r!   r   r   r[  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 rf  )r	   rm   r=   rn   ro   rp   r   r!   r   r   r[  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_recordsrJ   r	   rm   r=   rn   ro   rp   r!   r   r   r[  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 )Nru  )total_bytesr   rw  r!   r   r   r[  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)orderedTrw  r!   r   r   r[  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   rC  rm  rw  r!   r   r   r[  ztest_eq.<locals>.<lambda>1  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@  ri  )r	   r   r!   r   r   r[  ztest_eq.<locals>.<lambda>8  s$    !<==!<==? r   c                  R    t          j        d          t          j        d          fS rf  )r	   rF  r!   r   r   r[  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 ro  )r	   r   r=   rn   r5  r!   r   r   r[  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	   rG  r!   r   r   r[  ztest_eq.<locals>.<lambda>=  s    s##V]6%:%:; r   r!   )itemsgenlhs1rhs1lhs2rhs2s         r   test_eqr    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 )Nru  )rv  ry  )r	   rm   r=   rn   ro   rp   rv  ry  )fi1fi2fi3s      r   test_flight_info_defaultsr  L  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)	locationsrg   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   )rH  rI  
ValueErrorr   r!   r   r   #test_server_exit_reraises_exceptionr  i  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   r  serverg   s   r   r  z-test_client_wait_for_available.<locals>.serveu  s.    
3!(++r   Ttargetdaemonr8   timeoutr  )r   r
   	threadingThreadstartr  wait_for_available)r  r  clientthreadrW  elapsedrg   s         @r   test_client_wait_for_availabler  o  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   rJ   N)r]   r	   connectportlistrt   rl   len)r  r  flightss      r   test_flight_list_flightsr    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   )r]   r	   r  r  r  rt   closerH  rI  r=   r0  r  r  s     r   test_flight_client_closer    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_versionrv   z+expected IpcWriteOptions, got <class 'int'>matchr   )rB   r]   r	   r  r  rz   rG  r   r   r=   ipcIpcWriteOptionsMetadataVersionV4r   rH  rI  r  )ry   r  r  rA   re   s        r   test_flight_do_get_intsr    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_   r:   r   N)rB   r]   r	   r  r  rz   rG  read_pandasr  ra  	to_pylist)ry   r  r  rA   s       r   test_do_get_ints_pandasr    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            
         t                      } t                      5 }t          j        d|j        f          5 }|                    t          j        d                    }|j        j        dk    sJ |	                                }|
                    |           sJ |j        t          ddd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 )	Nr   r`   rJ   r   rL   rK   r   r   r   num_dictionary_batchesnum_dictionary_deltasnum_replaced_dictionaries)rS   r]   r	   r  r  rz   rG  r   r   r   r   r   )ry   r  r  r   rA   s        r   test_flight_do_get_dictsr    sz     E			 
6NK566
:@v}X6677|(A----  {{5!!!!!|y #$"#&' 
  
  
 
 
 
 
 

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
s5   C"BC
>C"
C	C"C	C""C&)C&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.r6   rG   rY   r;   s
   the-ticket)r  r   N)r=   r>   r   r?   r@   r   r	   r  r  rz   rG  r   r   )r  ry   r  r  rA   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   rJ   r   s   info app metadatarY   rK   r   Nr   z#2023-04-05T12:34:56.789012345+00:00r   UTCr>  r   )r   r
   r  r   r	   ro   rE  rv  ry  r{  rT  rn   r=   r   r  	endpointsr  rB  r   r   r   r   r   r  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   rY   N)
r   r
   r  r   r	   ro   rE  rn   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  rH  rI  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;  r]  s   bazr!   r  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-actionrD   arrow-exceptionforeverc               3   h   K                                     sdV                                    d S d S rr  )is_cancelled)rr   s   r   r  z(ConvenienceServer.do_action.<locals>.gen  sN      !..00 ! LLL "..00 ! ! ! ! !r   )rH   r  bodyr=   ArrowMemoryError)rf   rr   r   r  s    `  r   r   zConvenienceServer.do_action  s    ;/))--[F""K= [L((7N[---%'''[I%%! ! ! ! ! 355L	 &%r   N)r|   r}   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  )r  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  rH  rI  r	   r  r  r   r  s     r   test_nicer_server_exceptionsr  2  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.r  r   N)r   r  shutdown)r  s    r   test_get_portr  A  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namer]   r
   rz   rG  rB   rn   r   r   rS   )sockrg   r  r   ry   rA   s         r   test_flight_domain_socketr  J  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   rY   r;   )r   r   r  r   N)r=   r?   r@   r>   r  r   rn   r
   r  r   r	   ro   rp   rM  r  rz   rG  r   r   rA   r  r  r   _rd  s         r   test_flight_large_messager  a  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   rK  rY   r;   r   r  r   N)r=   r?   r@   r>   r  r   r
   r  r   r	   ro   rp   rn   rM  r  rz   rG  r   r   r  s         r   'test_flight_generator_stream_of_batchesr  w  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""""""# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #7   E)B5D+E+D/	/E2D/	3EE
Ec            
          t           j                            t          j        g dt          j        t          j                    t          j                                        t          j        g d          gd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 with dictionaries
    in a GeneratorStream.
    rD   rU   rE   rD   rD   {      iY  i  i7  rY   rZ   r;   r   r  r   Nr=   r?   r@   r>   
dictionaryr5  rN   r   r
   r  r   r	   ro   rp   rn   rM  r  rz   rG  r   r   r  s         r   1test_flight_generator_stream_of_batches_with_dictr       
 8
444rxzz279955	7 	7
***++! 3Z	    D 
1	2	2 #f+v{344#8>MM&"9"B"B6"J"J"&+/ /	4   v}S1122;;==}}T""""""# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #7   F)B5E+F+E/	/F2E/	3FF
F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 )	z7Try downloading a flight of Table in a GeneratorStream.r   rK  rY   r;   r   r  r   N)r=   r?   r@   r>   r  r   r
   r  r   r	   ro   rp   rn   rM  r  rz   rG  r   r   r  s         r   %test_flight_generator_stream_of_tabler    s   8
q)$$%%!U    D 
%	&	& #&+v{344#8>MM&"9"B"B6"J"J"&+/ /	4   v}S1122;;==}}T""""""# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #r  c            
          t           j                            t          j        g dt          j        t          j                    t          j                                        t          j        g d          gd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 )
zW
    Try downloading a flight of Table with dictionaries
    in a GeneratorStream.
    r  r  rY   rZ   r;   r   r  r   Nr  r  s         r   /test_flight_generator_stream_of_table_with_dictr    r  r	  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 )	zCTry downloading a flight of RecordBatchReader in a GeneratorStream.r   rK  rY   r;   r   r  r   N)r=   r?   r@   r>   r  r   r
   r  r   r	   ro   rp   rn   rM  r  rz   rG  r   r   r  s         r   3test_flight_generator_stream_of_record_batch_readerr    s   8
q)$$%%!U    D 
1	2	2 #f+v{344#8>MM&"9"B"B6"J"J"&+/ /	4   v}S1122;;==}}T""""""# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #r  c            
          t           j                            t          j        g dt          j        t          j                    t          j                                        t          j        g d          gd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 )
zc
    Try downloading a flight of RecordBatchReader with dictionaries
    in a GeneratorStream.
    r  r  rY   rZ   r;   r   r  r   Nr  r  s         r   =test_flight_generator_stream_of_record_batch_reader_with_dictr    r  r	  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  rH  rI  r=   ArrowExceptionrz   r	   rG  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  rv   N)r  r
   r  r	   rD  r   rH  rI  r,  r  r   )r  r  r   re   s       r   test_timeout_firesr    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_   rv   N)r]   r
   r  r	   r   rz   rG  r   )r  r  re   s      r   test_timeout_passesr    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.rW   rZ   r;   r   rJ   )included_fields)read_optionsra   rv   rK   N)r=   r?   r@   r>   r]   r
   r  r	   r   r   rz   rG  r   num_columnsr[   )expectedr  r  re   	response1	response2s         r   test_read_optionsr     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)rj  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	   rD  rH  rI  r.  r  r   r  r  r   s      r   test_http_basic_unauthr'    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	   rD  rv  r}  r   nextr  r   )r  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	   rD  rH  rI  r.  rv  r}  r*  r   r&  s      r   %test_http_basic_auth_invalid_passwordr0  8  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	   rD  rv  r  r*  r   r  r   )r  r  r   r+  s       r   test_token_authr4  C  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 )r2  r#  r   r  r/  N)
r   r3  r
   r  rH  rI  r	   r.  rv  r  r  s     r   test_token_auth_invalidr6  M  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.ru  r$  r  r   r!     passwordr   r  rJ      Bearer token1234N)r  no_op_auth_handlerr  r
   r  authenticate_basic_token)r  r  
token_pairs      r   test_authenticate_basic_tokenr>  Y  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.ru  r8  r   r!  s   badpasswordN)
r  r;  r  r
   r  rH  rI  r	   r.  r<  r  s     r   .test_authenticate_basic_token_invalid_passwordr@  d  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.ru  r8  r   r!  r9  r   r  rJ   r:  r  test-actionr   r   re   	   token1234N)r  r;  r  r
   r  r<  r	   r   r  r   rD  r  r   r  r  r=  re   rd  s        r   (test_authenticate_basic_token_and_actionrG  n  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.
    ru  r8  r   r  s   test:passwordr  s   Basic rB  rC  r   rD  r   rE  rJ   r:  N)r  r;  r  r  r
   r  r  r  r	   r   r  r   rD  r  r   r  r  )r  client_auth_middlewarer  encoded_credentialsre   rd  result2s          r   4test_authenticate_basic_token_with_client_middlewarerM  }  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.)ru  r  r8  r   r!  r9  r   r  rJ   r:  )s   test-header-1   value1)s   test-header-2   value2rB  rC  r   rv   rO  rP  N)r  r;  r  r  r
   r  r<  r	   r   r  r   rD  r  r   rF  s        r   -test_arbitrary_headers_in_flight_call_optionsrQ    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)rH  rI  r=   r0  r	   r  r]   r!   r   r   test_location_invalidrT    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_schemerW    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.r2   tls_certificateszgrpc+tls://localhost:r_   N)r4   r]   r
   rQ  r  rH  rI  r	   FlightUnavailableErrorrz   rG  r   certsr=  r  s      r   test_tls_failsr^    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.r2   rY  r   r1   )tls_root_certsr_   N)
rB   r4   r]   r
   r  rz   r	   rG  r   r   ry   r]  r=  r  rA   s        r   test_tls_do_getrb    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.r2   rY  r   Tdisable_server_verificationz4disable_server_verification feature is not availabler_   N)rB   r4   r]   r
   r  r   rH  skiprz   r	   rG  r   r   r  ra  s        r   $test_tls_disable_server_verificationrg    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.r2   rY  r   r1   fakehostname)r`  override_hostnamer_   N)
r4   r]   r	   r  r  rH  rI  r[  rz   rG  r\  s      r   test_tls_override_hostnamerk    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.r6   rY   r;   r   r   r   r   rJ   N)r=   r>   r?   r@   r   r
   r  rz   r	   rG  r  r   r   r   from_batchesr   )
rA   ry   batchesr  r  r   r   r   metadata
server_idxs
             r   test_flight_do_get_metadatarq    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   rJ   N)r   r
   r  rz   r	   rG  
read_chunkr  r   r   r   StopIteration)	batches1batches2r  r  r   r   r   ro  rp  s	            r   1test_flight_metadata_record_batch_reader_iteratorrw    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.r6   rY   r;   r  rv   r   r   N)r=   r?   r@   r>   r  r  r  r  r   r
   r  rz   r	   rG  r   r   )ry   re   r  r  r   rA   s         r   test_flight_do_get_metadata_v4ry  4  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.r6   rY   r;   r   r   rJ   r   r   N)r=   r>   r?   r@   r   r
   r  r   r	   ro   rp   rn   r   r   r   r   rU  r&   r   r   )rA   ry   r  r  r   metadata_readerr   r   ro  r   rp  s              r   test_flight_do_put_metadatar|  A  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   )dtyperY   r;   r   i   )write_size_limit_bytesr   zexceeded soft limitr  Nr   i  r   )r=   r   r@   r>   nponesr5  r   r
   r  r   r	   ro   rp   rn   rH  rI  FlightWriteSizeExceededErrorrV  rc  limitslicer?   rm  rz   rG  r   )
large_batchr  r  r   r{  excinfosmaller_batchesr   r  actuals
             r   test_flight_do_put_limitr  W  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)r]   r
   r  rz   r	   rG  r&  rH  rI  r-  rs  )r  r  r   s      r   test_cancel_do_getr  t  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)Nr8   r  )rs  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  r8   r  rJ   N)r  r
   r  rz   r	   rG  r  EventLockr  r  r  r&  r  joinis_set)	r  r  r  r  r  r  r   r  r  s	       @@@@@r   test_cancel_do_get_threadedr    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	   rD  r*  r  )r  r  r  s      r   test_streaming_do_actionr    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-bodyrD   s   result1	username1	password1rY   r  rZ   z
test.arrowr   r   r   r   r   r   r>  rJ   r   Tr?  r<  r=  N)r	   rD  rp  r  rG  rF  ro  r   r=   rn   r   ro   rE  rp   rm   r   r   r   r   r   r   r   ry  rv  r{  rT  r  )	r   rw   rd  r  schema_resultdescr   info2rV  s	            r   test_roundtrip_typesr    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   Nr6   rY   r;   )r$  r%  r&  r'  r(  )r"  r
   r  r2  r  rH  rI  r  r   r	   rD  r+  rt   r=   r>   r?   r@   r,  r-  r.  r/  r   ro   rE  rn   rM  r  )r  r  argexc_typerA   ry   
exceptionsr9  	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.r6   rY   r;   r   r   r   c                  |                                     & dxx         dz  cc<                                    $d S d S )Nr   rJ   )r&   )countr{  s   r   _reader_threadz:test_do_put_independent_read_write.<locals>._reader_thread  sJ    !&&((4aA "&&((44444r   r  rJ   r   r   N)r=   r>   r?   r@   r   r
   r  r   r	   ro   rp   rn   r  r  r  r   r   r   r   rU  done_writingr  r  )rA   ry   r  r  r   r  r  rn  r   r   ro  r  r{  s              @@r   "test_do_put_independent_read_writer    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  rI  r   r!  r   rJ   r   s   right valueN)r  r  r
   r  r  r   r	   rD  r  r  r   )r  r  r  rc  s       r   "test_server_middleware_same_threadr  3  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  rI  r   Nr   r9  )r  r  r
   r  rH  rI  r=   ArrowNotImplementedErrorr  r   r	   r.  r   rD  r  r*  r  r   )r  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  rI  r   r   N)#r  r  r   r
   r  r	   ro   rE  rH  rI  r   r  rt   r   r   rz   rG  r   r=   rn   r  r   rD  r   r   r  LIST_FLIGHTSGET_FLIGHT_INFO
GET_SCHEMADO_GETDO_PUT	DO_ACTIONr  DO_EXCHANGEr  )server_middlewareclient_middlewarer  r  r   r   r  r  s           r   test_middleware_mappingr  U  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   r4  r   Fr5  )	r"  r
   r  r  r   r	   rD  r/  
extra_info)r  r  eeis       r   test_extra_infor    sf   			 5+v{34458>	5!!&-
C"@"@AABBB5- 	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.r2   r   Tr1   )rZ  verify_clientroot_certificatesr   )r`  
cert_chainprivate_keyr_   N)r4   rB   r]   r
   r  r/   r0   rz   r	   rG  r   r   )r]  ry   r=  r  rA   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 )rJ  r   rK  rY   r;   r   r?  N)r=   r?   r@   r>   r  r;  r
   r  r	   ro   rE  r   r   )r  r  r  r   r   r   ry   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                  l   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 |j        j        d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 )rO  r   rK  rY   r;      r   r   r@  Nr   )r=   r?   r@   r>   r  r   r;  r
   r  r	   ro   rE  r   rL  rn   rV  r  rs  rA   rQ  r  r   rT  r   r   )
rA   rn  r  r  r   r   r   r   r   expected_bufs
             r   test_doexchange_putr    sj   8
q)$$%%!U    D ooCo00G			 26+v{34428>,88@@
++J77 
	2 
	2LL%%%  * *""5))))!!!%%''E:%%%s7||,,33G<<L%5555<,1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 2s[   (F)?:F9B4E:.F:E>>FE>FF)F	F)F	F))F-0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}
|D ]j}|                    |           |j        | j        k    sJ |                                }	|	j        |k    sJ |	j        J |
dz  }
|j        j        |
k    sJ kt1          |          D ]\  }}t          |                              d
          }|                    ||           |                                }	|	j        |k    sJ |	j        |k    sJ |
dz  }
|j        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 )zTry a DoExchange echo server.r   rK  rY   r;   r  r   r   r>  r9   r   NrJ   )r=   r?   r@   r>   r  r   r;  r
   r  r	   ro   rE  r   rQ  r   rP  rs  rA   rT  rL  rn   rV  r   r   r   rU  )rA   rn  r  r  r   r   r   ir   r   rR  r   s               r   test_doexchange_echor    s   8
q)$$%%!U    D ooCo00G			 !F6+v{344!F8>,88AA
++J77 	F 	F2YY 1 1!ffmmG,,%%c***))++z))))S00000 LL%%%K  F F""5)))}3333))++zU****)111q |6+EEEEE &g.. F F5!ffmmG,,**5#666))++zU****)S0000q |6+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 !F !F !F !F !F !F !F !F !F !F !F !F !F !F !F !Fs[   (J?:I,9FI	I,II,II, J,I0	0J3I0	4JJJ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   rK  rY   r;   r  r   r  rv   r   r>  N)r=   r?   r@   r>   r  r   r  r  r  r  r;  r
   r  r	   ro   rE  r   rL  rn   rV  rs  rA   rT  )
rA   rn  re   r  r  r   r   r   r   r   s
             r   test_doexchange_echo_v4r    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   rJ   i  rK   i  )rY   rZ   cr;   rL   i  rY  r   rA  N)r=   r?   r@   r>   r  r;  r
   r  r	   ro   rE  r   rL  rn   rM  r  r   )rA   r  r  r  r   r   r   ry   s           r   test_doexchange_transformr  
	  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  rI  r   r   r   asciiN)r  r'  r  r
   r  r*  r   r	   rD  r  r   r  astliteral_evalr  r#  r  r  r  bytesr   r  )r  r  r  r  raw_headersr  headerr  s           r   test_middleware_multi_headerr  !	  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.r2   rY  )zgrpc.ssl_target_name_overrideri  r   r1   )r`  generic_optionsr_   N)zgrpc.max_receive_message_length    )r4   r]   r	   r  r  rH  rI  r[  rz   rG  r  r=   r0  r-  )r]  r=  re   r  s       r   test_generic_optionsr  7	  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=   rn   r   r@   r	   r   r  r  )rf   rr   rw   rn   r$   s        r   rz   zCancelFlightServer.do_getR	  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=   rn   r   r@   rL  r  rV  r  r  )rf   rr   r   r   r   rn   r$   s          r   r   zCancelFlightServer.do_exchangeW	  s    2^''6'::V&&(( 	r"""JsOOO &&(( 	 	 	 	 	r   N)r|   r}   r~   r   rz   r   r!   r   r   r  r  O	  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_threade	  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  rH  rI  r  r  KeyboardInterruptfailrc  r  r=   ArrowCancelled__context__)r   texc_infor  	exc_typesr  s       r   r  ztest_interrupt.<locals>.testk	  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_threadrH  rf  r  r=   r  r  r
   r  rz   r	   rG  r   ro   rE  r   r  r-  )r  r  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  r8   )r  r	   r  r  rH  rI  r  rz   rG  r   r]  )r  r  r  ry   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 )Nr0  r1  r   z%Failed to serialize Flight descriptorr  )r	   ro   rE  r   r  r  rH  rI  OSErrorr   r=   rn   r  r  r   )large_descriptorr  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   r0  r1  r   zapp_metadata size overflowr  )r	   ro   rE  r   r  r  rH  rI  r=   ArrowCapacityErrorr   rn   rP  r  r   r.  r  rz   rG  r   r  )r   ro  r  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)rH   jsondumpsVALUESr   r  r   r   s      r   r   z ActionNoneFlightServer.do_action	  s`    ;+%%Jt{++227;;<<[H$$Kt$$$4!!r   N)r|   r}   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	   rD  r
  loadsr*  r  r   )r  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.
    rD   r]  )r  r   r5  c                   $    e Zd Z fdZ fdZdS )0test_write_error_propagation.<locals>.FailServerc                     r   r!   rf   rr   r   r   r   excs        r   r   z7test_write_error_propagation.<locals>.FailServer.do_put	      Ir   c                     r   r!   r  s        r   r   z<test_write_error_propagation.<locals>.FailServer.do_exchange	  r  r   N)r|   r}   r~   r   r   )r  s   r   
FailServerr  	  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>._reader
  sD    "KKMMM"%       ,,Tr  rJ   r  Nc                  ^    	 	                                    # t          j        $ r Y d S w xY wr   )rs  r	   r  r  s   r   r  z-test_write_error_propagation.<locals>._reader
  sI    (%%'''(%   r  r0  )r	   r-  ro   rE  r=   rn   r5  r   r
   r  r   r  r  r  rH  rI  rV  r6  rc  r  r  r  r   rP  )expected_messageexpected_infor   rn   r  r  r  r   r  r  r  r  r   s              @@r   test_write_error_propagationr"  	  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%  0
  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  r0   rc  s      r   	<genexpr>z0TracingFlightServer.do_action.<locals>.<genexpr>A
  sV       ; ; S% ""5""**733 ; ; ; ; ; ;r   )r  trace_contextr  )rf   rr   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'  9
  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)  rI  r   )s   traceparents7   00-000ff00f00f0ff000f0f00ff0f00fff0-000f0000f0f00000-00)s
   tracestater   rB  )r   r   rv   )r'  r	   TracingServerMiddlewareFactoryr
   r  r   r   )r  r  re   rc  s       r   test_tracingr/  E
  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:9643Trd  zRArgument 'schema' has incorrect type \(expected pyarrow.lib.Schema, got NoneType\)r  rD   r  )r
   rH  rI  rJ  r   r	   ro   rE  )r  msgs     r   .test_do_put_does_not_crash_when_schema_is_noner2  W
  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	   rm   r=   rn   r   s      r   r   zJtest_headers_trailers.<locals>.HeadersTrailersFlightServer.get_flight_infoe
  s    z>:::~/@AAA_===1CDDD$	"  r   N)r|   r}   r~   r   r!   r   r   HeadersTrailersFlightServerr5  d
  s#        		 		 		 		 		r   r?  c                        e Zd Zd Z fdZdS )?test_headers_trailers.<locals>.HeadersTrailersMiddlewareFactoryc                     g | _         d S r   rB  r  s    r   rc   zHtest_headers_trailers.<locals>.HeadersTrailersMiddlewareFactory.__init__q
  s    DLLLr   c                      |           S r   r!   )rf   r   HeadersTrailersMiddlewares     r   r  zJtest_headers_trailers.<locals>.HeadersTrailersMiddlewareFactory.start_callt
  s    ,,T222r   N)r|   r}   r~   rc   r  )rD  s   r    HeadersTrailersMiddlewareFactoryrA  p
  s=        	 	 		3 	3 	3 	3 	3 	3 	3r   rE  c                       e Zd Zd Zd ZdS )8test_headers_trailers.<locals>.HeadersTrailersMiddlewarec                     || _         d S r   r  r  s     r   rc   zAtest_headers_trailers.<locals>.HeadersTrailersMiddleware.__init__x
  s    "DLLLr   c                     |                                 D ]+\  }}|D ]#}| j        j                            ||f           $,d S r   )r  r  r  r  )rf   r  r0   r  rc  s        r   r  zItest_headers_trailers.<locals>.HeadersTrailersMiddleware.received_headers{
  s[    &}} > >V# > >EL(//e====>> >r   N)r|   r}   r~   rc   r  r!   r   r   rD  rG  w
  s2        	# 	# 	#	> 	> 	> 	> 	>r   rD  r   rI  r   )r7  r8  )r9  s   headervalue)r:  r;  )r<  s   trailervalueN)
r   r   r   r
   r  r   r	   ro   rp   r  )r?  rE  r  r  r  rD  s        @r   test_headers_trailersrJ  a
  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c                    	 t          ddddd          t          ddddd          d	 G 	fdd	t                    }  |             5 }t          d
|j        f          5 }t	                      }dD ],}t
          j                            |          }|                    |t          j	        t          j                            d                              \  }}|5  |                    |j        t          j                            |dk                         |                    |           |                                 |                                }d d d            n# 1 swxY w Y   |                    |          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 )Nr   rL   rK   rJ   r   r  )dict_deltasdict_replacementc                       e Zd Z fdZdS )Dtest_flight_dictionary_deltas_do_exchange.<locals>.DeltaFlightServerc                    t                      }|                                }|                    |          sJ |j        |j                                                 k    sJ |j        dk    rQt          j                            d          }|	                    |j
        |           |                    |           |j        dk    r1|	                    |j
                   |                    |           d S d S )Ns   dict_deltasTemit_dictionary_deltasrv   s   dict_replacement)rS   r   r   r   r9  r  r=   r  r  rL  rn   rM  )	rf   rr   r   r   r   expected_tablereceived_tablere   expected_statss	           r   r   zPtest_flight_dictionary_deltas_do_exchange.<locals>.DeltaFlightServer.do_exchange
  s    /11N#__..N!((88888<>*2D2K2K2M2M#NNNNN!^33&000MM^2GDDD"">222!%888^2333"">22222 98r   N)r|   r}   r~   r   )rU  s   r   DeltaFlightServerrO  
  s.        	3 	3 	3 	3 	3 	3 	3r   rV  r   TrQ  )write_optionsrv   rL  )r   r]   r
   r  rS   r	   ro   rE  r   r   r=   r  r  rL  rn   rM  r  r   r   r   )
rV  r  r  rS  r9  r   r   r   rT  rU  s
            @r   )test_flight_dictionary_deltas_do_exchangerX  
  s     #$"#&'
 
 
 & #$"#&'
 
 
 N"3 3 3 3 3 3 30 3 3 3 
			 ;+v{344;8>+--: 	; 	;G0<<WEEJ#//0"$&"8"8/3 #9 #5 #5   0  NFF  3 3^2BF<R<R,3},D =S =G =G H H H"">222##%%%!'!2!23 3 3 3 3 3 3 3 3 3 3 3 3 3 3 "((88888<>'#::::::%	;; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ;s\   
G!B F-!A<E)	F-)E--F-0E-1/F-!G-F1	1G4F1	5GG	G	c                     | j         dk    rdd d d dS | j         dk    rYddgt          j                            d          t          j                            d	t          j        j        j        
          dS i S )NdefaultrL   )r  r  rW  r  allr  )s   abcs   defzstd)compressionF)use_threadsensure_alignment)paramr=   r  r  r   	AlignmentDataTypeSpecific)requests    r   call_options_argsrd  
  s    }	!!! 	
 
 	
 
%		()V333GGF11!!#!1!B 2  	
 
 	
 	r   rd  rZ  r[  T)indirectc                     t          di | }|                                }|                                 D ]\  }}|||v sJ | d| |v sJ d S )N=r!   )r   __repr__r  )rd  call_optionsr\  r  vals        r   test_call_options_reprrk  
  s     %99'899L  ""D%++-- & &S;$;;;;~~~~%%%%%& &r   )r  r  r  r   r   r  r   r  r  r  r(   r
  r   numpyr  ImportErrorrH  r   r=   pyarrow.libr   r   r   pyarrow.utilr   pyarrow.testsr   r	   r   r
   r   r   r   r   r   r   r   r   rK  mark
pytestmarkr   r"   r-   r4   rB   rS   r[   r]   r   r   r   r   r   r   r   r   r   r  r  r  r"  r;  rf  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)  r.  rW  r  r  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%  r3  r'  r-  r0  r4  r6  %header_auth_server_middleware_factoryr;  r>  r@  rG  rM  rQ  rT  rW  requires_testing_datar^  rb  rg  rk  rq  rw  ry  r|  r  r  r  r  r  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/  r2  rJ  rX  fixturerd  parametrizerk  r!   r   r   <module>r{     s#  $ 


      				                       	BBB      : : : : : : : : : : ' ' ' ' ' '                                F%+V"L"+16((06--06-- [
  
B B B
 
 
  "; ; ;
< 
< 
<2 2 2E E E E E+ E E ED& & & & &+ & & &R    '   *" " " " "- " " """ " " " ""2 " " """ " " " ".> " " ""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J# J# J# J# J#+ J# J# J#Z    !2   0    !2   "    .   .    .   $    '   $ $ $
/ 
/ 
/ 
/ 
/(? 
/ 
/ 
/1 1 1 1 1!1 1 1 16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 . . ."J@ J@ J@Z` ` `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 "" " #""$! ! !2 2 20(F (F (FV2 2 20! ! !.B B B, "  #".    )   " ) ) )X# # # 1 1  1  " "  "@
" 
" 
" 
" 
"- 
" 
" 
"
? 
? 
? C C CL) ) )	; 	; 	; 	; 	;* 	; 	; 	;  $# # #&I &I &IR5; 5; 5;p   , )U+d  < <
& 
&< <
& 
& 
&s!   = AA)B B&%B&