
    xi                    P   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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% ejN                  j6                  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jN                  j                  ejN                  j                  di               Zadj Zbdk Zcdl ZdejN                  j                  dm        Zfdn Zgdo Zhdp Zidq Zjdr Zk G ds dte      Zldu Zmdv Zndw ZoejN                  j                  ej                  dxk(  dyz      d{        ZrejN                  j                  d|        Zsd} Ztd~ Zud Zvd Zwd Zxd Zyd Zzd Z{d Z|d Z} e?ddi      Z~ eAddi      ZejN                  j                  d        ZejN                  j                  ej                  dxk(  dz      d        Zd Zd Zd Z eG       Z eC       Zd Zd Zd Zd Zd Zd Zd ZejN                  j                  ejN                  j                  d               ZejN                  j                  d        ZejN                  j                  d        ZejN                  j                  d        Zd Zd Zd Zd ZejN                  j                  d        ZejN                  j                  d        ZejN                  j                  ejN                  j                  d               Zd Zd Zd Zd Zd Zd Zd Zd ZejN                  j                  d        Zd Zd Zd Zd Zd Zd ZejN                  j                  d        Z G d de      ZejN                  j                  d        Zd ZejN                  jZ                  ejN                  j                  d               ZejN                  jZ                  ejN                  j                  d               Z G d de2      Zd ZejN                  j                  d        Zd Z G d de      Zd Zd Zd Zd Zejr                  dÄ        ZejN                  jw                  dddgdǬȫ      dɄ        Zy# e$ r dZY Dw xY w# e$ r dZe&e&cZZe&e&cZZ e&e&cZ!Z"e&e&cZ#Z$e&Z%Y -w xY w)    N)datetime)IpcReadOptions	ReadStatstobytes)find_free_port)util)flight)	FlightClientFlightServerBaseServerAuthHandlerClientAuthHandlerServerMiddlewareServerMiddlewareFactoryClientMiddlewareClientMiddlewareFactoryFlightCallOptionsc                      dd l } y )Nr   )pyarrow.flight)pyarrows    e/var/www/html/chatbot/card-advisor-bot/venv/lib/python3.12/site-packages/pyarrow/tests/test_flight.pytest_importr   A   s        c                      t         j                  j                  d      st        d      t	        j
                  t         j                  d         dz  S )z-Get the path to the test resources directory.ARROW_TEST_DATAzITest resources not found; set ARROW_TEST_DATA to <repo root>/testing/datar	   )osenvirongetRuntimeErrorpathlibPath r   r   resource_rootr"   F   sF    ::>>+, I J 	J<<

#456AAr   c                     t               }|sy	 || z  j                  d      5 }|j                         cddd       S # 1 sw Y   yxY w# t        $ 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
Tk% 	668	 	 	 
TD[M *))2)=)=)?(@B
 	

s%   A	 =	A	 AA	 A	 	0A9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   ]   sY     *-8)+6(5 )+6(5	
 r   c                  v    t        j                  g d      g} t         j                  j                  | dg      S )Nir      
   	some_intsnames)paarrayTablefrom_arrays)datas    r   simple_ints_tablerB   n   s4    
$%D 88[M::r   c                     t        j                  g dt        j                               } t        j                  g dt        j                               }t        j                  t         j                  j                  g d|       t         j                  j                  ddg|       t         j                  j                  ddg|      g      g}t         j                  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	BKhh<2779MO
**<E**Aq6;?**Aq6?C
 	D 88\N;;r   c                      t         j                  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[      sB    88*F!G!#,!7!9'*Cj   2 2r   c                   4     e Zd ZdZdZd fd	Zd Zd Z xZS )ConstantFlightServerzA Flight server that always returns the same data.

    See ARROW-4796: this server implementation will segfault if Flight
    does not properly hold a reference to the Table object.
    s   the expected criteriac                 b    t        |   |fi | t        t        t        d| _        || _        y )N)   ints   dicts   multi)super__init__rB   rS   r[   table_factoriesoptions)selflocationre   kwargs	__class__s       r   rc   zConstantFlightServer.__init__   s3    ,V, '(+ 

 r   c              #      K   || j                   k(  rJt        j                  t        j                  g       t        j
                  j                  d      g        y y w)N/foo)CRITERIAr	   
FlightInfor=   schemaFlightDescriptorfor_pathrf   contextcriterias      r   list_flightsz!ConstantFlightServer.list_flights   sL     t}}$##		"''008  %s   AAc                      | j                   |j                            }t        j                  || j                        S )Nre   )rd   ticketr	   RecordBatchStreamre   )rf   rr   rw   tables       r   do_getzConstantFlightServer.do_get   s4     4$$V]]35''t||DDr   NN)	__name__
__module____qualname____doc__rl   rc   rt   rz   __classcell__ri   s   @r   r]   r]      s     (HEr   r]   c                   @     e Zd ZdZd fd	Zd Zd Zed        Z xZ	S )MetadataFlightServerz4A Flight server that numbers incoming/outgoing data.c                 2    t        |   di | || _        y Nr!   rb   rc   re   rf   re   rh   ri   s      r   rc   zMetadataFlightServer.__init__       "6"r   c                     t        j                  g d      g}t         j                  j                  |dg      }t	        j
                  |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   sb    HH()
 $$T#$7%%LL&LL" 	"r   c           	         d}g d}|j                   j                  dk(  sJ |D ]  \  }}|j                  t        j                  j                  t        j                  ||   g      gdg            sJ |J t        j                  d|j                               \  }	||	k(  sJ |j                  t        j                  d|             |dz  } |j                   j                  dk(  sJ |j                   j                  dk(  sJ y )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4!    ?"?$mmD#..2BCONn,,,LLT734qLG		 ||((A---||..!333r   c              #      K   t        | j                               D ]!  \  }}t        j                  d|      }||f # y w)Nr   )	enumerate
to_batchesr   r   )ry   idxr   r   s       r   r   z#MetadataFlightServer.number_batches   sA     #E$4$4$67 	JC++dC(C*	s   ?AN)
r|   r}   r~   r   rc   rz   r   staticmethodr   r   r   s   @r   r   r      s)    >"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.c                 B    t        |   |fi | d | _        || _        y r   )rb   rc   last_messageexpected_schema)rf   rg   r   rh   ri   s       r   rc   zEchoFlightServer.__init__   s%    ,V, .r   c                 @    t        j                  | j                        S r   )r	   rx   r   rf   rr   rw   s      r   rz   zEchoFlightServer.do_get   s    ''(9(9::r   c                 |    | j                   r| j                   |j                  k(  sJ |j                         | _        y r   )r   rn   read_allr   rf   rr   r   r   r   s        r   r   zEchoFlightServer.do_put   s2    ''6==888"OO-r   c                     |D ]  } y 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      s    >/
;.
r   r   c                   "    e Zd ZdZd Zd Zd Zy)EchoStreamFlightServerz6An echo server that streams individual record batches.c                     t        j                  | j                  j                  | j                  j	                  d            S )N   max_chunksize)r	   r   r   rn   r   r   s      r   rz   zEchoStreamFlightServer.do_get   s;    %%$$((t(<> 	>r   c                     g S r   r!   rf   rr   s     r   list_actionsz#EchoStreamFlightServer.list_actions       	r   c                     |j                   dk(  r/|j                         |j                         j                  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   9    ;;*$))+W\\^-B-B7-KLL!!r   Nr|   r}   r~   r   rz   r   r   r!   r   r   r   r      s    @>
"r   r   c                   "    e Zd ZdZd Zd Zd Zy)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   s0    %%$$! 	!r   c                     g S r   r!   r   s     r   r   z(EchoTableStreamFlightServer.list_actions  r   r   c                     |j                   dk(  r/|j                         |j                         j                  d      gS t        r   r   r   s      r   r   z%EchoTableStreamFlightServer.do_action  r   r   Nr   r!   r   r   r   r      s    6!
"r   r   c                   "    e Zd ZdZd Zd Zd Zy)'EchoRecordBatchReaderStreamFlightServerzCAn echo server that streams the whole table as a RecordBatchReader.c                     t        j                  | j                  j                  | j                  j	                         g      S r   )r	   r   r   rn   	to_readerr   s      r   rz   z.EchoRecordBatchReaderStreamFlightServer.do_get  s9    %%$$((*+- 	-r   c                     g S r   r!   r   s     r   r   z4EchoRecordBatchReaderStreamFlightServer.list_actions  r   r   c                     |j                   dk(  r/|j                         |j                         j                  d      gS t        r   r   r   s      r   r   z1EchoRecordBatchReaderStreamFlightServer.do_action  r   r   Nr   r!   r   r   r   r   
  s    M-
"r   r   c                       e Zd ZdZd Zd Zy)GetInfoFlightServerz)A Flight server that tests GetFlightInfo.c                    t        j                  t        j                  dt        j                         fg      |t        j
                  ddg      t        j
                  dt         j                  j                  dd      gt        j                  d      j                  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      IIRXXZ()*%%cM?;%%__11+tDEII=>CCBLLQUDVW+	 
 	
r   c                 d    | j                  ||      }t        j                  |j                        S r   )r   r	   SchemaResultrn   )rf   rr   r   infos       r   
get_schemazGetInfoFlightServer.get_schema1  s)    ##GZ8""4;;//r   N)r|   r}   r~   r   r   r   r!   r   r   r   r     s    3
&0r   r   c                   &    e Zd ZdZed        Zd Zy)ListActionsFlightServer'A Flight server that tests ListActions.c                 4    ddt        j                  dd      gS )N)action-1description)zaction-2 zaction-3zmore detailr	   
ActionType)clss    r   expected_actionsz(ListActionsFlightServer.expected_actions9  s$     (j-8
 	
r   c              #   @   K   | j                         E d {    y 7 wr   )r   r   s     r   r   z$ListActionsFlightServer.list_actionsA  s     ((***s   N)r|   r}   r~   r   classmethodr   r   r!   r   r   r   r   6  s    1
 
+r   r   c                       e Zd ZdZd Zy)ListActionsErrorFlightServerr   c              #      K   d d y w)N)r   r   rD   r!   r   s     r   r   z)ListActionsErrorFlightServer.list_actionsH  s     s   
N)r|   r}   r~   r   r   r!   r   r   r   r   E  s
    1r   r   c                   0     e Zd ZdZd fd	Zd Zd Z xZS )CheckTicketFlightServerzDA Flight server that compares the given ticket to an expected value.c                 4    t        |   |fi | || _        y r   )rb   rc   expected_ticket)rf   r  rg   rh   ri   s       r   rc   z CheckTicketFlightServer.__init__P  s    ,V,.r   c                     | j                   |j                  k(  sJ t        j                  g dt        j                               g}t        j
                  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  s`    ##v}}444-BHHJ?@$$U3%$8''..r   c                 .    |j                         | _        y 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  s    N//.r   r   c                   ^    e Zd ZdZ ej
                  d ej                         fg      Zd Zy)InvalidStreamFlightServerzEA Flight server that tries to return messages with differing schemas.rY   c                    t        j                  g dt        j                               g}t        j                  g dt        j                               g}|j                  |j                  k7  sJ t         j
                  j                  |dg      }t         j
                  j                  |dg      }|j                  | j                  k(  sJ t        j                  | j                  ||g      S )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    -BHHJ?@7bjjlKLzzUZZ'''%%eC5%9%%eC5%9}}+++%%dkkFF3CDDr   Nr|   r}   r~   r   r=   rn   r   rz   r!   r   r   r  r  ^  s+    ORYYhbhhj)*+FEr   r  c                   ^    e Zd ZdZ ej
                  d ej                         fg      Zd Zy)NeverSendsDataFlightServerz0A Flight server that never actually yields data.rY   c                    |j                   dk(  r| j                  j                         | j                  j                         t        j                  j                  t        d      g| j                        g}t        j                  | j                  |      S t        j                  | j                  t        j                  | j                  j                                     S )N
   yield_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!H:dkk*JD
 ))$++t<<%%KK))$++*A*A*CDF 	Fr   Nr  r!   r   r   r  r  n  s+    :RYYhbhhj)*+FFr   r  c                   ,    e Zd ZdZd Zd Zed        Zy)SlowFlightServerz;A Flight server that delays its responses to test timeouts.c                     t        j                  t        j                  dt        j                         fg      | j                               S )NrY   )r	   r   r=   rn   r   slow_streamr   s      r   rz   zSlowFlightServer.do_get  s:    %%bii#rxxz1B0C&D&*&6&6&8: 	:r   c                 0    t        j                  d       g S N      ?)timesleepr   s      r   r   zSlowFlightServer.do_action  s    

3	r   c               #     K   t        j                  g dt        j                               g} t         j                  j	                  | dg       t        j                  d       t         j                  j	                  | dg       y w)Nr6   rG   rY   r;   r9   )r=   r>   r   r?   r@   r  r  )r  s    r   r  zSlowFlightServer.slow_stream  se     -BHHJ?@hh""5"66 	

2hh""5"66s   BBN)r|   r}   r~   r   rz   r   r   r  r!   r   r   r  r    s#    E: 7 7r   r  c                   2    e Zd ZdZed        Zd Zd Zd Zy)ErrorFlightServerz9A Flight server that uses all the Flight-specific errors.c            	          t         j                  t         j                  t         j                  t         j                  t         j
                  t        t        j                  t        dS )N)internaltimedoutcancelunauthenticatedunauthorizednotimplementedinvalidr0   )
r	   FlightInternalErrorFlightTimedOutErrorFlightCancelledErrorFlightUnauthenticatedErrorFlightUnauthorizedErrorr   r=   ArrowInvalidKeyErrorr!   r   r   error_caseszErrorFlightServer.error_cases  sH     222211%@@"::1	
 		
r   c                     t         j                         }|j                  |v r ||j                     d      |j                  dk(  rd}t        j                  d|      t
        )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  s\    '335;;+%*+fkk*511[[J&1G00@@!!r   c              #      K   t        j                  t        j                  g       t         j                  j                  d      g        t        j                  d      w)Nrk   rD   )r	   rm   r=   rn   ro   rp   r+  rq   s      r   rt   zErrorFlightServer.list_flights  sN     IIbM##,,V4
 	

 ((//s   AA!c                    |j                   dk(  rt        j                  d      |j                   dk(  rt        j                  d      |j                   dk(  rt        j                  d      |j                   dk(  rt        j
                  d      |j                   dk(  rt        j                  d      |j                   dk(  rd}t        j                  d|      y )	Ns   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;.,,U339,--e44#5533E::?20077;.1G00@@ /r   N)	r|   r}   r~   r   r   r2  r   rt   r   r!   r   r   r"  r"    s'    C

 

"0Ar   r"  c                   B     e Zd ZdZd fd	Zd Zd Zd Zd Zd Z	 xZ
S )	ExchangeFlightServerz A server for testing DoExchange.c                 2    t        |   di | || _        y r   r   r   s      r   rc   zExchangeFlightServer.__init__  r   r   c                    |j                   j                  dk(  sJ |j                  t        j                  j
                  k7  rt        j                  d      |j                  dk(  r| j                  |||      S |j                  dk(  r| j                  |||      S |j                  dk(  r| j                  |||      S |j                  dk(  r| j                  |||      S t        j                  d|j                         )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7*%%gvv>>6)''@@6)''@@</**7FFCC//#J$6$6#78: :r   c                     t         j                  j                  t        j                  t	        dd            gdg      }|j                  |j                         |j                  |       y)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  sX    xx##HHU1i()%
 $  	T[[!4 r   c                     d}|D ]C  }|j                   st        j                  d      |j                  j                  dk7  sJ |dz  }E |j                  j
                  |k(  sJ |j                  t        |      j                  d             y)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::oo&BCC<<,,1111K		
 ||..+===c+.55g>?r   c                 .   |j                   j                  dk(  sJ d}|D ]  }|s?|j                  r3|j                  |j                  j                  | j
                         d}|j                  r3|j                  r'|j                  |j                  |j                         |j                  r|j                  |j                         |j                  r7|j                   j                  dk7  sJ |j                  |j                         J d        y)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--- 	2EuzzUZZ..E!!ejj**5::u7I7IJ##%%e&8&89||00A555""5::.111u	2r   c                    |j                   j                  dk(  sJ |j                  D ]L  }t        j                  j                  |j                        r-t        j                  dt        |      z          |j                         }|j                   j                  dk7  sJ dg|j                  z  }|D ]0  }t        |      D ]   \  }}	||xx   |	j                         z  cc<   " 2 t        j                  j                  t        j                  |      gdg      }
|j!                  |
j                         |j#                  |
       y)zSum rows in an uploaded table.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E88&&uzz2oo&7$u+&EFF	G !||((A---sU^^# 	+F'/ +
US	U[[]*	+	+ %%rxx~&6ug%FV]]#6"r   r   )r|   r}   r~   r   rc   r   rF  rG  rE  rH  r   r   s   @r   r;  r;    s%    *: !	@2$#r   r;  c                   .     e Zd ZdZ fdZd Zd Z xZS )HttpBasicServerAuthHandler7An example implementation of HTTP basic authentication.c                 0    t         |           || _        y r   rb   rc   credsrf   rj  ri   s     r   rc   z#HttpBasicServerAuthHandler.__init__      
r   c                 z   |j                         }t        j                  j                  |      }|j                  | j
                  vrt        j                  d      | j
                  |j                     |j                  k7  rt        j                  d      |j                  t        |j                               y )Nunknown userzwrong password)
r&   r	   	BasicAuthdeserializeusernamerj  r.  passwordr   r   )rf   outgoingincomingr   auths        r   authenticatez'HttpBasicServerAuthHandler.authenticate  s    mmo++C0==

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

"33NCCr   r|   r}   r~   r   rc   rv  rz  r   r   s   @r   rf  rf    s    A/r   rf  c                   .     e Zd ZdZ fdZd Zd Z xZS )HttpBasicClientAuthHandlerrg  c                 f    t         |           t        j                  ||      | _        d | _        y r   )rb   rc   r	   ro  
basic_authry  rf   rq  rr  ri   s      r   rc   z#HttpBasicClientAuthHandler.__init__/  s)     **8X>
r   c                     | j                   j                         }|j                  |       |j                         | _        y 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      zzr   r|   r}   r~   r   rc   rv  r  r   r   s   @r   r}  r}  ,  s    A
%
r   r}  c                   .     e Zd ZdZ fdZd Zd Z xZS )TokenServerAuthHandler:An example implementation of authentication via handshake.c                 0    t         |           || _        y r   ri  rk  s     r   rc   zTokenServerAuthHandler.__init__@  rl  r   c                     |j                         }|j                         }|| j                  v r:| j                  |   |k(  r(|j                  t        j                  d|z                y t        j                  d      )N   secret:zinvalid username/password)r&   rj  r   base64	b64encoder	   r.  )rf   rs  rt  rq  rr  s        r   rv  z#TokenServerAuthHandler.authenticateD  sf    ==?==?tzz!djj&:h&FNN6++J,ABC33+- -r   c                     t        j                  |      }|j                  d      st        j                  d      |dd  S )Nr  zinvalid token   )r  	b64decode
startswithr	   r.  rx  s     r   rz  zTokenServerAuthHandler.is_validM  s=      '
+33ODDQRyr   r{  r   s   @r   r  r  =  s    D-r   r  c                   .     e Zd ZdZ fdZd Zd Z xZS )TokenClientAuthHandlerr  c                 L    t         |           || _        || _        d| _        y )Nr   )rb   rc   rq  rr  ry  r  s      r   rc   zTokenClientAuthHandler.__init__W  s#      
r   c                     |j                  | j                         |j                  | j                         |j                         | _        y 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%
r   r  c                       e Zd ZdZd Zd Zy)NoopAuthHandlerzA no-op auth handler.c                      y)zDo nothing.Nr!   r  s      r   rv  zNoopAuthHandler.authenticatei  s    r   c                      y)zV
        Returning an empty string.
        Returning None causes Type error.
        r   r!   rx  s     r   rz  zNoopAuthHandler.is_validl  s    
 r   N)r|   r}   r~   r   rv  rz  r!   r   r   r  r  f  s    r   r  c                 z    | D ]6  }|j                         |j                         k(  s%| j                  |      c S  y)zcLookup the value of given key in the given headers.
       The key lookup is case-insensitive.
    N)lowerr   )headers
lookup_keyr0   s      r   case_insensitive_header_lookupr  t  s9      $99;***,,;;s##$r   c                   "    e Zd ZdZd Zd Zd Zy)!ClientHeaderAuthMiddlewareFactoryz@ClientMiddlewareFactory that creates ClientAuthHeaderMiddleware.c                     g | _         y r   call_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                     || _         y 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  }  s    J"0/r   r  c                       e Zd ZdZd Zd Zy)r  a  
    ClientMiddleware that extracts the authorization header
    from the server.

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

    Parameters
    ----------
    factory : ClientHeaderAuthMiddlewareFactory
        This factory is used to set call credentials if an
        authorization header is found in the headers from the server.
    c                     || _         y r   factoryrf   r  s     r   rc   z#ClientHeaderAuthMiddleware.__init__  	    r   c                     t        |d      }|r0| j                  j                  d|d   j                  d      g       y y )NAuthorization   authorizationr   r   )r  r  r  r   )rf   r  auth_headers      r   received_headersz+ClientHeaderAuthMiddleware.received_headers  sB    4WoNLL,, A%%g..0 1 r   N)r|   r}   r~   r   rc   r  r!   r   r   r  r    s    1r   r  c                       e Zd ZdZd Zy)!HeaderAuthServerMiddlewareFactoryz)Validates incoming username and password.c                    t        |d      }|d   j                  d      }d}d}|d   dk(  rjt        j                  |d         }|j	                  d      j                  d	      }|d   d
k(  r|d   dk(  st        j                  |      d}t        |      S |d   dk(  r|d   }|dk(  s*t        j                  |      t        j                  |      t        |      S )Nr  r    r   zInvalid credentials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1G>>'*005DGv%$q'Z*?77FFE *%00 AY("1IEK'77FF33MBB)%00r   Nr|   r}   r~   r   r  r!   r   r   r  r    s
    31r   r  c                       e Zd ZdZd Zd Zy)r  zBA ServerMiddleware that transports incoming username and password.c                     || _         y r   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    TZZ!788r   Nr|   r}   r~   r   rc   r  r!   r   r   r  r    s    L9r   r  c                       e Zd ZdZd Zy)HeaderAuthFlightServerz<A Flight server that tests with basic token authentication. c                     |j                  d      }|r@t        |j                         d      }|j                  d      }|d   j	                  d      gS t        j                  d      )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  sk    ++F3
8**,o?K &&s+F1I$$W-..//-/ 	/r   Nr|   r}   r~   r   r   r!   r   r   r  r    s
    F/r   r  c                       e Zd ZdZd Zy)'ArbitraryHeadersServerMiddlewareFactoryz<A ServerMiddlewareFactory that transports arbitrary headers.c                     t        |      S r   ) ArbitraryHeadersServerMiddlewarerf   r   r  s      r   r  z2ArbitraryHeadersServerMiddlewareFactory.start_call  s    /88r   Nr  r!   r   r   r  r    s
    F9r   r  c                       e Zd ZdZd Zd Zy)r  z5A ServerMiddleware that transports arbitrary headers.c                     || _         y r   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    s    ?!r   r  c                       e Zd ZdZd Zy)ArbitraryHeadersFlightServerz6A Flight server that tests multiple arbitrary headers.c                     |j                  d      }|rT|j                         }t        |d      }t        |d      }|d   j                  d      }|d   j                  d      }||gS t	        j
                  d      )Narbitrary-headersztest-header-1ztest-header-2r   r   zNo headers middleware found)r  r  r  r   r	   FlightServerError)	rf   rr   r   r  r  header_1header_2value1value2s	            r   r   z&ArbitraryHeadersFlightServer.do_action  s    ++,?@
 002G5H 6H a[''0Fa[''0FF##&&'DEEr   Nr  r!   r   r   r  r    s    @Fr   r  c                       e Zd ZdZd Zy)HeaderServerMiddlewarez/Expose a per-call value to the RPC method body.c                     || _         y r   )special_value)rf   r  s     r   rc   zHeaderServerMiddleware.__init__  s
    *r   N)r|   r}   r~   r   rc   r!   r   r   r  r    s
    9+r   r  c                       e Zd ZdZd Zy)HeaderServerMiddlewareFactoryz:Expose a per-call hard-coded value to the RPC method body.c                     t        d      S )Nzright value)r  r  s      r   r  z(HeaderServerMiddlewareFactory.start_call	  s    %m44r   Nr  r!   r   r   r  r    s
    D5r   r  c                       e Zd ZdZd Zy)HeaderFlightServerz(Echo back the per-call hard-coded value.c                 d    |j                  d      }|r|j                  j                         gS dgS )Nr  r   )r  r  r   )rf   rr   r   r  s       r   r   zHeaderFlightServer.do_action  s4    ++F3
,,33566ur   Nr  r!   r   r   r  r    s
    2r   r  c                       e Zd ZdZd Zy)MultiHeaderFlightServer8Test sending/receiving multiple (binary-valued) headers.c                 r    |j                  d      }t        |j                        j                  d      }|gS )Nr  r   )r  r\  client_headersr   )rf   rr   r   r  r  s        r   r   z!MultiHeaderFlightServer.do_action  s5    ++F3
z00188Ayr   Nr  r!   r   r   r  r    s
    Br   r  c                       e Zd ZdZd Zy)$SelectiveAuthServerMiddlewareFactoryz1Deny access to certain methods based on a header.c                     |j                   t        j                  j                  k(  ry |j	                  d      }|st        j
                  d      |d   }|dk7  rt        j
                  d      t        |      S )Nx-auth-tokenzNo tokenr   rr  zInvalid token)methodr	   FlightMethodLIST_ACTIONSr   r.  r  )rf   r   r  ry  s       r   r  z/SelectiveAuthServerMiddlewareFactory.start_call#  sl    ;;&--:::N+33J??aJ33ODD%e,,r   Nr  r!   r   r   r  r     s
    ;-r   r  c                       e Zd Zd Zy)$SelectiveAuthClientMiddlewareFactoryc                     t               S r   )SelectiveAuthClientMiddlewarer  s     r   r  z/SelectiveAuthClientMiddlewareFactory.start_call4  s    ,..r   N)r|   r}   r~   r  r!   r   r   r  r  3  s    /r   r  c                       e Zd Zd Zy)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                 0    t         |           g | _        y r   rb   rc   methodsrf   ri   s    r   rc   z)RecordingServerMiddlewareFactory.__init__B      r   c                 N    | j                   j                  |j                         y r   r  appendr  r  s      r   r  z+RecordingServerMiddlewareFactory.start_callF      DKK(r   r|   r}   r~   r   rc   r  r   r   s   @r   r  r  ?      *r   r  c                   (     e Zd ZdZ fdZd Z xZS ) RecordingClientMiddlewareFactoryr  c                 0    t         |           g | _        y r   r
  r  s    r   rc   z)RecordingClientMiddlewareFactory.__init__N  r  r   c                 N    | j                   j                  |j                         y 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y)"MultiHeaderClientMiddlewareFactoryr  c                     i | _         y 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0r   N)r|   r}   r~   r   rc   r  r!   r   r   r  r  W  s    B
1r   r  c                   <    e Zd ZdZddgddgdgdgdZd Zd	 Zd
 Zy)r  r  rD   rU          rE   )zx-textzx-binary-binzx-MIXED-cases   x-other-MIXED-casec                     || _         y 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                 N    | j                   j                  j                  |       y r   )r  r  update)rf   r  s     r   r  z,MultiHeaderClientMiddleware.received_headerst  s     	!!((1r   N)r|   r}   r~   r   r#  rc   r  r  r!   r   r   r  r  c  s6    B %. '* %wH2r   r  c                       e Zd ZdZd Zy)"MultiHeaderServerMiddlewareFactoryr  c                     t        |      S r   )MultiHeaderServerMiddlewarer  s      r   r  z-MultiHeaderServerMiddlewareFactory.start_call}  s    *733r   Nr  r!   r   r   r'  r'  z  s
    B4r   r'  c                       e Zd ZdZd Zd Zy)r)  r  c                     || _         y 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33r   Nr  r!   r   r   r)  r)    s    B-4r   r)  c                   .     e Zd ZdZ fdZd Zd Z xZS )LargeMetadataFlightServerz Regression test for ARROW-13253.c                 8    t        |   |i | ddz  | _        y )N           )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  sS    S"((*-./%%f__qcU62DNNC/
  	r   c                 :    |j                  | j                         y r   )rP  r2  r   s        r   r   z%LargeMetadataFlightServer.do_exchange  s    dnn-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
                  j                  d            |k(  sJ t        j                  dg t        j                  d      j                  t        j                  d            d      }
t        |
      |k(  sJ t        j                  t        j                  g       t        j
                  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
                  j                         g dddd      }d}t        |      |k(  sJ |j                  J t'        j(                  t*              5  t        j                  dd        d d d        t'        j(                  t*              5  t        j                  t-               g        d d d        t'        j(                  t*              5  t        j                  dddt-               g       d d d        t'        j(                  t*              5  t        j                  dg d       d d d        t'        j(                  t*              5  t        j                  dg t/        d d!d"dd#d$             d d d        t'        j(                  t*              5  t        j                  dg t-               %       d d d        y # 1 sw Y   RxY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   ~xY w# 1 sw Y   y xY w)&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    s   EKBWODO>M	-  MM:KB9KeS)*k999!!%/04DDDD  01_DDD''33E:;NNN$$BII3499",,s:KL H >]***
		"v..7792	2t)D :""" ;<=NNNf%&+555##BIIbM237IIII##BII/?.@$ABC;< < <f%&+555;;"))B-'''f%%..0"	2t)D
	-  :""";;	y	! #eT"# 
y	! ,fh+,	y	! Pem^VX%NOP	y	! PeR9NOP	y	! XeR$1aQRTU9VWX	y	! @eRfh?@ @# #, ,P PP PX X@ @sH   P6Q"Q
Q'Q(!Q46Q QQQ%(Q14Q=c                      d d d d d d d d d	 d
 d d d d d d d d d d d g} | D ]G  } |       \  }} |       \  }}||k(  sJ ||k(  sJ ||k(  sJ ||k(  sJ ||k(  sJ ||k(  sJ ||k7  rGJ  y )Nc                  Z    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*FMM%,EF r   c                  Z    t        j                  dd      t        j                  dd      fS )NrD   r      barrZ  r!   r   r   r[  ztest_eq.<locals>.<lambda>  s!    uc*FMM%,HI r   c                  Z    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""5%02 r   c                  Z    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!!'624 r   c                  Z    t        j                  dd      t        j                  dd      fS )Nr9  r:  pass2ra  r!   r   r   r[  ztest_eq.<locals>.<lambda>  s(    !!&&1!!&'24 r   c                  ~    t         j                  j                  d      t         j                  j                  d      fS )NrD   )r	   ro   rE  rp   r!   r   r   r[  ztest_eq.<locals>.<lambda>  s0    ((44U;((11%8: r   c                  Z    t        j                  dg       t        j                  dg       fS Nr;  r]  r	   r   r!   r   r   r[  ztest_eq.<locals>.<lambda>  s(    &&vr2&&vr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>  sK    !!)DEFH!!)DEFH
 r   c            
      2   t        j                  dg t        j                  d      j	                  t        j
                  d                  t        j                  dg t        j                  d      j	                  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>  ss    !!BII&;<AA",,sBSTV!!		3499",,t:LMOP r   c                  b    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>  s-    &&vrD&&vrHJ r   c                  D   t        j                  t        j                  g       t         j                  j                         g       t        j                  t        j                  dt        j                         fg      t         j                  j                         g       fS Nints)r	   rm   r=   rn   ro   rp   r5  r!   r   r   r[  ztest_eq.<locals>.<lambda>  st    		"''002B8 		FBHHJ/01''002B8	9 r   c                     t        j                  t        j                  g       t         j                  j                         g       t        j                  t        j                  g       t         j                  j                  d      g       fS Nr;  )r	   rm   r=   rn   ro   rp   rE  r!   r   r   r[  ztest_eq.<locals>.<lambda>  si    		"''002B8 		"''33F;RA	B r   c            	      n   t        j                  t        j                  g       t         j                  j                         t        j                  dg       g      t        j                  t        j                  g       t         j                  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&&vr235 		"''002&&vr2356 r   c                  "   t        j                  t        j                  g       t         j                  j                         g d      t        j                  t        j                  g       t         j                  j                         g d      fS )N)total_recordsrJ   r	   rm   r=   rn   ro   rp   r!   r   r   r[  ztest_eq.<locals>.<lambda>  sl    		"''002BbJ 		"''002BaI	J r   c                  "   t        j                  t        j                  g       t         j                  j                         g d      t        j                  t        j                  g       t         j                  j                         g d      fS )Nru  )total_bytesr   rw  r!   r   r   r[  ztest_eq.<locals>.<lambda>#  sl    		"''002BBH 		"''002BBH	I r   c                  "   t        j                  t        j                  g       t         j                  j                         g d      t        j                  t        j                  g       t         j                  j                         g d      fS )NF)orderedTrw  r!   r   r   r[  ztest_eq.<locals>.<lambda>*  sl    		"''002BG 		"''002BF	G r   c                  "   t        j                  t        j                  g       t         j                  j                         g d      t        j                  t        j                  g       t         j                  j                         g d      fS )Nr   rC  rm  rw  r!   r   r   r[  ztest_eq.<locals>.<lambda>1  sl    		"''002BSJ 		"''002BWN	O r   c                  V    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                  V    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>;  sD    $$RYYr]3$$RYY0D/E%FGI r   c                  V    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    s    FI	2	4	4	:	4	
	P	J	9	B	6	J	I	G	O	?>	I;gTEl  	U
dU
dt||t||t||t||t||t||t||	r   c                     t        j                  t        j                  g       t         j                  j                         g       } t        j                  t        j                  g       t         j                  j                         g dd      }t        j                  t        j                  g       t         j                  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 y )Nru  )rv  ry  )r	   rm   r=   rn   ro   rp   rv  ry  )fi1fi2fi3s      r   test_flight_info_defaultsr  L  s   


BIIbM6+B+B+K+K+Mr
RC



		"((*BbbRC 


		"((*BdPTVC """""""""??b   ??b   ??b   r   c                      d ddt               fg} | D ])  }t        |      5 }t        |t              sJ 	 d d d        + y # 1 sw Y   6xY w)Ngrpc://localhost:0r   )r   r   
isinstance)	locationsrg   servers      r   $test_flight_server_location_argumentr  ^  s`    	n&'I
  8h' 	86f&6777	8 	88	8 	8s	   ?A	c                      t        j                  t              5  t               5  t               # 1 sw Y   nxY w	 d d d        y # 1 sw Y   y xY wr   )rH  rI  
ValueErrorr   r!   r   r   #test_server_exit_reraises_exceptionr  i  sF    	z	"  	,	 	 	  s   A09	AAc                  D   dt               fd } fd}t              5 }t        j                  |d      }|j	                          t        j
                         }|j                  d       t        j
                         |z
  }|dk\  sJ 	 d d d        y # 1 sw Y   y xY w)Nr   c                  n    t        j                  d       t               at        j	                          y r  )r  r  r   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   A,BBc                  \   t               5 } t        j                  d| j                  f      5 }t	        |j                               g k(  sJ |j                  t         j                        }t        t	        |            dk(  sJ 	 ddd       ddd       y# 1 sw Y   xY w# 1 sw Y   yxY w)zTry a simple list_flights call.r   rJ   N)r]   r	   connectportlistrt   rl   len)r  r  flightss      r   test_flight_list_flightsr    s    		 '6NNK56':@F'')*b000%%&:&C&CD4=!Q&&&	' ' ' ' ' 's#   "B"ABB"B	B""B+c                     t               5 } t        j                  d| j                  f      5 }t	        |j                               g k(  sJ |j                          |j                          t        j                  t        j                        5  t	        |j                                d d d        d d d        d d d        y # 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   y xY w)Nr   )r]   r	   r  r  r  rt   closerH  rI  r=   r0  r  r  s     r   test_flight_client_closer    s    		 (6NNK56(:@F'')*b000]]2??+ 	($$&'	(( ( (
	( 	(( ( ( (s;   "CA"CC)C1CCCC	CC#c                  <   t               } t               5 }t        j                  d|j                  f      5 }|j                  t        j                  d            j                         }|j                  |       sJ 	 ddd       ddd       t        j                  j                  t        j                  j                  j                        }t        |      5 }t        j                  d|j                  f      5 }|j                  t        j                  d            j                         }|j                  |       sJ |j                  t        j                  d            j                         j                         }|j                  |       sJ 	 ddd       ddd       t        j                   t        j"                  d      5  t        d      5 }t        j                  d|j                  f      5 }|j                  t        j                  d            j                         }ddd       ddd       ddd       y# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   LxY w# 1 sw Y   PxY w# 1 sw Y   yxY w)	Try a simple do_get call.r   r_   Nmetadata_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    s   E		 "6NNK56":@}}V]]734==?{{5!!!" "
 ff$$//22 % 4G	g	. "&NNK56":@}}V]]734==?{{5!!! }}V]]734>>@IIK{{5!!!" " 
v//J
L D!"- 	DV[[9:	D>D==w!78AACD	D 	DD D!" " " "" " " "	D 	D 	D 	DD Ds   "IAI>I"I.>BI"I.J"J<3I:/J7JI	II"I+	'I..I7:J?JJ	JJc                     t               } t               5 }t        j                  d|j                  f      5 }|j                  t        j                  d            j                         }t        |d         | j                  d      j                         k(  sJ 	 ddd       ddd       y# 1 sw Y   xY w# 1 sw Y   yxY w)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    s     E		 F6NNK56F:@}}V]]734@@BD%&%,,q/*C*C*EEEEF F F F F Fs#   "B8A#B,B8,B5	1B88Cc            
         t               } t               5 }t        j                  d|j                  f      5 }|j                  t        j                  d            }|j                  j                  dk(  sJ |j                         }|j                  |       sJ |j                  t        ddddd      k(  sJ 	 d d d        d d d        y # 1 sw Y   xY w# 1 sw Y   y xY w)	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    s     E		 
6NNK56
:@v}}X67||((A--- {{5!!!||y #$"#&' 
 
 	
 

 
 
 
 
 
s#   "CBC:CC	CC c                     t        j                  g dt        j                               g} t         j                  j	                  | dg      }t        d      5 }t        j                  d|j                  f      5 }|j                  t        j                  d            j                         }|j                  |      sJ 	 ddd       ddd       y# 1 sw Y   xY w# 1 sw Y   yxY w)	z+Make sure Tickets get passed to the server.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    XX)
;<EHH  se 4E	 	? "6NNK56":@}}V]]=9:CCE{{5!!!" " " " " "s%   "C!=ACC!C	C!!C*c                     t               5 } t        d| j                  f      }|j                  t        j
                  j                  d            }|j                  dk(  sJ |j                  dk(  sJ |j                  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      j)                  t        j*                  dd            k(  sJ |j                  d   j                  dk(  sJ |j                  d   j                   d   t        j$                  j-                  dd      k(  sJ 	 d	d	d	       y	# 1 sw Y   y	xY w)z8Make sure FlightEndpoint accepts string and object URIs.r   r   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   		 <&{FKK89%%f&=&=&I&I#&NO!!Q&&&2%%%|||  $8888{{bii#rxxz):(;<<<<4>>"a'''4>>!$../1444~~a 00888~~a --444~~a **1-1OOOO~~a 00II;<tBLLu-./ 	/ / ~~a --1IIII~~a **1-OO((d;< 	< <#< < <s   HH44H=c                  j   t               5 } t        d| j                  f      5 }|j                  t        j
                  j                  d            }|j                  t        j                  dt        j                         fg      k(  sJ 	 ddd       ddd       y# 1 sw Y   xY w# 1 sw Y   yxY w)z+Make sure GetSchema returns correct schema.r   r   rY   N)
r   r
   r  r   r	   ro   rE  rn   r=   r   r  s      r   test_flight_get_schemar    s    		 =&+v{{34=8>  !8!8!D!DS!IJ{{bii#rxxz):(;<<<<= = = = = =s#   B)A(BB)B&	"B))B2c                  8   t               5 } t        d| j                  f      5 }t        j                  t
        j                  d      5  t        |j                                ddd       ddd       ddd       t               5 } t        d| j                  f      5 }t        |j                               t        j                         k(  sJ 	 ddd       ddd       y# 1 sw Y   ~xY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   6xY w# 1 sw Y   yxY w)z6Make sure the return type of ListActions is validated.r   z3Results of list_actions must be ActionType or tupler  N)r   r
   r  rH  rI  r	   r  r  r   r   r   r  s     r   test_list_actionsr    s    
&	' (6+v{{34(8>]]((-
 	(
 $$&'	(( ( 
!	" 7f+v{{3478>F'')*#4467 	7 77 7 7	( 	(( ( ( (7 7 7 7s^   C8&C,	C #C,+C8D1DD C)%C,,C5	1C88DD		DDc                   &    e Zd ZdZed        Zd Zy)ConvenienceServerzT
    Server for testing various implementation conveniences (auto-boxing, etc.)
    c                 
    g dS )N)r;  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 y )Nsimple-actionecho
bad-actionrD   arrow-exceptionforeverc               3   Z   K    j                         sd  j                         sy y wrr  )is_cancelled)rr   s   r   r  z(ConvenienceServer.do_action.<locals>.gen  s&     !..0 L "..0s   %++)rH   r  bodyr=   ArrowMemoryError)rf   rr   r   r  s    `  r   r   zConvenienceServer.do_action  s    ;;/)---[[F"KK= [[L(7N[[--%%''[[I%! 5L	 &r   N)r|   r}   r~   r   propertyr  r   r!   r   r   r  r    s      ( (r   r  c                     t               5 } t        d| j                  f      5 }|j                  d      D cg c]  }|j                   }}|| j
                  k(  sJ d}|j                  d|f      D cg c]  }|j                   }}||gk(  sJ 	 d d d        d d d        y c c}w c c}w # 1 sw Y   xY w# 1 sw Y   y xY w)Nr   r  s   the-bodyr  )r  r
   r  r   r  r  )r  r  xresultsr  s        r   !test_do_action_result_conveniencer  $  s    		 
!+v{{34
!8> $*#3#3O#DEa166EE&66666 #)#3#3VTN#CDa166DD4&   
! 
! 
! F
 E
! 
! 
! 
!s?   B9B-B#
*B-4B(
B-B9#
B--B6	2B99Cc                     t               5 } t        d| j                  f      5 }t        j                  t
        j                  d      5  t        |j                  d             d d d        t        j                  t
        j                  d      5  t        |j                  d             d d d        d d d        d d d        y # 1 sw Y   bxY w# 1 sw Y   &xY w# 1 sw Y   *xY w# 1 sw Y   y xY w)Nr   za bytes-like object is 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68>]]633!BD 	1!!,/0	1 ]]633!35 	6!!"345	66 6 6	1 	1	6 	66 6 6 6sR   C)&C	C$-CC,C4C)C
CCCC&	"C))C2c                      t        d      } 	 | j                  dkD  sJ 	 | j                          y# | j                          w xY w)zMake sure port() works.r  r   N)r   r  shutdown)r  s    r   test_get_portr  A  s7     !56F{{Qs	   0 Antz'Unix sockets can't be tested on Windows)reasonc                  ,   t        j                         5 } | j                          t        j                  j                  | j                        }t        |      5  t        |      5 }|j                  t        j                  d            }t               }|j                  j                  |j                        sJ |j                         }|j                  |      sJ |j                  t        j                  d            }t               }|j                  j                  |j                        sJ |j                         }|j                  |      sJ 	 ddd       ddd       ddd       y# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   yxY w)z3Try a simple do_get call over a Unix domain socket.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  s<    
	$	$	& &$

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

    See ARROW-4421: by default, gRPC won't allow us to send messages >
    4MiB in size.
    r   i   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    88
q*+,!U   D 
$++	6 #&+v{{34#8>MM&"9"9"B"B6"J"&++/	 	4!12v}}S12;;=}}T"""# # # # # #s%   D1/B$D%D1%D.	*D11D:c                  `   t         j                  j                  t        j                  t	        dd            gdg      } t               5 }t        d|j                  f      5 }|j                  t        j                  j                  d      | j                        \  }}|j                  |        |j                          |j                  t        j                   d            j#                         }|j%                  |       sJ 	 ddd       ddd       y# 1 sw Y   xY w# 1 sw Y   yxY w)	z?Try downloading a flight of RecordBatches in a GeneratorStream.r   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    88
q)$%!U   D 
 	! #V+v{{34#8>MM&"9"9"B"B6"J"&++/	4 v}}S12;;=}}T"""# # # # # #%   D$#B#DD$D!	D$$D-c            
         t         j                  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 }|j                  t        j                  j                  d      | j                        \  }}|j                  |        |j!                          |j#                  t        j$                  d            j'                         }|j)                  |       sJ 	 d	d	d	       d	d	d	       y	# 1 sw Y   xY w# 1 sw Y   y	xY w)
z_
    Try downloading a flight of RecordBatches 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       
 88
4rxxz27795	7
*+! 3Z	   D 
1	2 #f+v{{34#8>MM&"9"9"B"B6"J"&++/	4 v}}S12;;=}}T"""# # # # # #%   E,+B#E E, E)	%E,,E5c                  `   t         j                  j                  t        j                  t	        dd            gdg      } t               5 }t        d|j                  f      5 }|j                  t        j                  j                  d      | j                        \  }}|j                  |        |j                          |j                  t        j                   d            j#                         }|j%                  |       sJ 	 ddd       ddd       y# 1 sw Y   xY w# 1 sw Y   yxY w)	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    88
q)$%!U   D 
%	& #&+v{{34#8>MM&"9"9"B"B6"J"&++/	4 v}}S12;;=}}T"""# # # # # #r  c            
         t         j                  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 }|j                  t        j                  j                  d      | j                        \  }}|j                  |        |j!                          |j#                  t        j$                  d            j'                         }|j)                  |       sJ 	 d	d	d	       d	d	d	       y	# 1 sw Y   xY w# 1 sw Y   y	xY w)
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                  j                  t        j                  t	        dd            gdg      } t               5 }t        d|j                  f      5 }|j                  t        j                  j                  d      | j                        \  }}|j                  |        |j                          |j                  t        j                   d            j#                         }|j%                  |       sJ 	 ddd       ddd       y# 1 sw Y   xY w# 1 sw Y   yxY w)	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    88
q)$%!U   D 
1	2 #f+v{{34#8>MM&"9"9"B"B6"J"&++/	4 v}}S12;;=}}T"""# # # # # #r  c            
         t         j                  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 }|j                  t        j                  j                  d      | j                        \  }}|j                  |        |j!                          |j#                  t        j$                  d            j'                         }|j)                  |       sJ 	 d	d	d	       d	d	d	       y	# 1 sw Y   xY w# 1 sw Y   y	xY w)
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                  n   t               5 } t        d| j                  f      5 }t        j                  t
        j                        5  |j                  t        j                  d            j                          ddd       ddd       ddd       y# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   yxY w)z+Try streaming data with mismatched schemas.r   r   N)r  r
   r  rH  rI  r=   ArrowExceptionrz   r	   rG  r   r  s     r   $test_flight_invalid_generator_streamr    s    	"	$ 9+v{{3498>]]2,,- 	9MM&--,-668	99 9 9	9 	99 9 9 9s:   B+$B3B:BB+BBB(	$B++B4c            	         t               5 } t        d| j                  f      5 }t        j                  dd      }t        j
                  d      }t        j                  t        j                        5  t        |j                  ||             ddd       ddd       ddd       y# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   yxY w)z)Make sure timeouts fire on slow requests.r   r   r   g?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<8>r3'**37 ]]6556 	<!!&'!:;	<< < <	< 	<< < < <s;   CAB53B)B5C)B2.B55B>	:CC
c                  .   t               5 } t        d| j                  f      5 }t        j                  d      }|j                  t        j                  d      |      j                          ddd       ddd       y# 1 sw Y   xY w# 1 sw Y   yxY w)z0Make sure timeouts do not fire on fast requests.r   r  r  r_   rv   N)r]   r
   r  r	   r   rz   rG  r   )r  r  re   s      r   test_timeout_passesr    s    		 J6+v{{34J8>**37fmmG,g>GGIJ J J J J Js#   BAA?.B?B	BBc                     t         j                  j                  t        j                  g d      gdg      } t	               5 }t        d|j                  f      5 }t        j                  t        dg            }|j                  t        j                  d      |	      j                         }|j                  t        j                  d            j                         }|j                  d
k(  sJ |j                  dk(  sJ || k(  sJ |t               k(  sJ 	 ddd       ddd       y# 1 sw Y   xY w# 1 sw Y   yxY w)z"Make sure ReadOptions can be used.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   xx##RXXl%;$<SE#JH		 46+v{{3448>**'<>MM&--#& " ((0
 	MM&--"9:CCE	$$)))$$)))H$$$133334 4 4 4 4 4s%   D9C D-D9-D6	2D99E   tests   p4ssw0rd)rj  c                  z   t        t              5 } t        d| j                  f      5 }t	        j
                  dd      }t        j                  t        j                  d      5  t        |j                  |             ddd       ddd       ddd       y# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   yxY w)z,Test that auth fails when not authenticated.auth_handlerr   r   r   z.*unauthenticated.*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+8>z3/]]6<<!68 	+!!&)*	++ + +	+ 	++ + + +s:   B1<B%%B B%B1B"B%%B.	*B11B:z,ARROW-10013: gRPC on Windows corrupts peer()c                     t        t              5 } t        d| j                  f      5 }t	        j
                  dd      }|j                  t        dd             |j                  |      }t        |      }|j                  j                         dk(  sJ t        |      }|j                  j                         dk7  sJ 	 ddd       ddd       y# 1 sw Y   xY w# 1 sw Y   yxY w)	z:Test a Python implementation of HTTP basic authentication.r  r   r   r   r  p4ssw0rdr  N)r   r  r
   r  r	   rD  rv  r}  r   nextr  r   )r  r  r   r  identitypeer_addresss         r   test_http_basic_authr'  )  s     
 -?	@ 5F+v{{3458>z3/6vzJK""6*=}}'')W444G}  ++-4445 5 5 5 5 5s#   CBCCC	CC'c            	         t        t              5 } t        d| j                  f      5 }t	        j
                  dd      }t        j                  t        j                  d      5  |j                  t        dd             t        |j                  |             d	d	d	       d	d	d	       d	d	d	       y	# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   y	xY w)
z-Test that auth fails with the wrong password.r  r   r   r   z.*wrong password.*r  r  wrongN)r   r  r
   r  r	   rD  rH  rI  r.  rv  r}  r$  r   r   s      r   %test_http_basic_auth_invalid_passwordr*  8  s    	-?	@ +F+v{{34+8>z3/]]6<<!57 	+ :67 KL!!&)*	++ + +	+ 	++ + + +s:   C<C %6B4C #C4B=9C  C		CCc                  |   t        t              5 } t        d| j                  f      5 }t	        j
                  dd      }|j                  t        dd             t        |j                  |            }|j                  j                         dk(  sJ 	 ddd       ddd       y# 1 sw Y   xY w# 1 sw Y   yxY w)	-Test an auth mechanism that uses a handshake.r  r   r   r   r  r#  r  N)r   token_auth_handlerr
   r  r	   rD  rv  r  r$  r   r  r   )r  r  r   r%  s       r   test_token_authr.  C  s    	-?	@ 5F+v{{3458>z3/26:FG((01}}'')W4445 5 5 5 5 5s#   B2A+B&B2&B/	+B22B;c            	      L   t        t              5 } t        d| j                  f      5 }t	        j
                  t        j                        5  |j                  t        dd             ddd       ddd       ddd       y# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   yxY w)r,  r  r   r  r)  N)
r   r-  r
   r  rH  rI  r	   r.  rv  r  r  s     r   test_token_auth_invalidr0  M  s    	-?	@ IF+v{{34I8>]]6<<= 	I 6vw GH	II I I	I 	II I I Is:   B$BB)B1BBBB	BB#c                  
   t        t        dt               i      5 } t        d| j                  f      5 }|j                  dd      }|d   dk(  sJ |d   d	k(  sJ 	 d
d
d
       d
d
d
       y
# 1 sw Y   xY w# 1 sw Y   y
xY w)zATest authenticate_basic_token with bearer token and auth headers.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_tokenr8  Y  s    	-?13M 
 4
+v{{344 9?44WkJ
!} 0000!} 33334 4 4 4 4 4s"   A9'A-A9-A6	2A99Bc                  P   t        t        dt               i      5 } t        d| j                  f      5 }t        j                  t        j                        5  |j                  dd       ddd       ddd       ddd       y# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   yxY w)z7Test authenticate_basic_token with an invalid password.ru  r2  r   r  s   badpasswordN)
r  r5  r  r
   r  rH  rI  r	   r.  r6  r  s     r   .test_authenticate_basic_token_invalid_passwordr:  d  s    	-?13M 
 E
+v{{34E 9?]]6<<= 	E++G^D	E	E E E	E 	E	E E E Es:   B$BB+B3BB	BB	BB%c            
         t        t        dt               i      5 } t        d| j                  f      5 }|j                  dd      }|d   dk(  sJ |d   d	k(  sJ t        j                  |g
      }t        |j                  t        j                  dd      |            }|d   j                  j                         dk(  sJ 	 ddd       ddd       y# 1 sw Y   xY w# 1 sw Y   yxY w)z@Test authenticate_basic_token and doAction after authentication.ru  r2  r   r  r3  r   r  rJ   r4  r  test-actionr   r   re   	   token1234N)r  r5  r  r
   r  r6  r	   r   r  r   rD  r  r   r  r  r7  re   rd  s        r   (test_authenticate_basic_token_and_actionrA  n  s    	-?13M 
 
;
+v{{34
; 9?44WkJ
!} 0000!} 3333**J<@f&&==4g ' G Hay~~((*l:::
; 
; 
; 
; 
; 
;s#   C"BCC"C	C""C+c            	         t        t        dt               i      5 } t               }t	        d| j
                  f|g      }t        j                  d      }t        j                  dd|z   fg      }t        |j                  t        j                  d	d
      |            }|d   j                  j                         dk(  sJ |j                  d   dk(  sJ |j                  d   dk(  sJ t        |j                  t        j                  d	d
      |            }|d   j                  j                         dk(  sJ |j                  d   dk(  sJ |j                  d   dk(  sJ |j!                          ddd       y# 1 sw Y   yxY w)zTest authenticate_basic_token with client middleware
       to intercept authorization header returned by the
       HTTP header auth enabled server.
    ru  r2  r   r  s   test:passwordr  s   Basic r<  r=  r   r>  r   r?  rJ   r4  N)r  r5  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_middlewarerG  }  s   
 
 -?13M 
 
!B!D&++&./
 %../?@**y+>>?4
  f&&==4g ' G Hay~~((*l:::%55a8<LLLL%55a8%& 	& &v''==4g ( G Hqz))+|;;;%55a8<LLLL%55a8%& 	& &1  s   EE??Fc            
      6   t        t        t               t               d      5 } t	        d| j
                  f      5 }|j                  dd      }|d   dk(  sJ |d   d	k(  sJ t        j                  |d
dg      }t        |j                  t        j                  dd      |            }|d   j                  j                         dk(  sJ |d   j                  j                         dk(  sJ 	 ddd       ddd       y# 1 sw Y   xY w# 1 sw Y   yxY w)z:Test passing multiple arbitrary headers to the middleware.)ru  r  r2  r   r  r3  r   r  rJ   r4  )s   test-header-1   value1)s   test-header-2   value2r<  r=  r   rv   rI  rJ  N)r  r5  r  r  r
   r  r6  r	   r   r  r   rD  r  r   r@  s        r   -test_arbitrary_headers_in_flight_call_optionsrK    s(   	%'57!H!J

 8
 +v{{348 9?44WkJ
!} 0000!} 3333**))4
 
 f&&v}}3( )0 ' 2 3ay~~((*i777ay~~((*i777%8 8 8 8 8 8s#   DB4D2DD	DDc                  ,   t        j                  t        j                  d      5  t	        j
                  d       ddd       t        j                  t        j                  d      5  t        d       ddd       y# 1 sw Y   CxY w# 1 sw Y   yxY w)zTest constructing invalid URIs.z.*Cannot parse URI:.*r  %N)rH  rI  r=   r0  r	   r  r]   r!   r   r   test_location_invalidrN    sm    	r.E	F s 
r.E	F "S!" " " "s   A>)B
>B
Bc                      t        j                  d      j                  dk(  sJ t        j                  d      j                  dk(  sJ y)z,Test creating locations for unknown schemes.zs3://foos   s3://foozhttps://example.com/bar.parquets   https://example.com/bar.parquetN)r	   r   urir!   r   r   test_location_unknown_schemerQ    sD    ??:&**k999??<=AA*+ + +r   c                     t               } t        | d         5 }t        dt        |j                        z         5 }t        j                  t        j                        5  |j                  t        j                  d            j                          ddd       ddd       ddd       y# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   yxY w)z>Make sure clients cannot connect when cert verification fails.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_failsrX    s     E 
u^/D	E =03qvv;>?=CI ]]6889 	=MM&--01::<	=	= = =	= 	=	= = = =s:   "C$B8 3B,B8C,B51B88C	=CCc                  b   t               } t               }t        |d         5 }t        d|j                  f|d         5 }|j                  t        j                  d            j                         }|j                  |       sJ 	 ddd       ddd       y# 1 sw Y   xY w# 1 sw Y   yxY w)z"Try a simple do_get call over TLS.r2   rS  r   r1   )tls_root_certsr_   N)
rB   r4   r]   r
   r  rz   r	   rG  r   r   ry   rW  r=  r  rA   s        r   test_tls_do_getr\    s     EE	u^/D	E "k166*$)+$6	8";A}}V]]734==?{{5!!!	" " " " " "s$   B%ABB%B"	B%%B.c                     t               } t               }t        |d         5 }	 t        d|j                  fd      }j                  t        j                  d            j                         }|j                  |       sJ |j                          ddd       y# t
        $ r t        j                  d       Y ~w xY w# 1 sw Y   yxY w)	zDTry a simple do_get call over TLS with server verification disabled.r2   rS  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  r[  s        r   $test_tls_disable_server_verificationra    s     EE	u^/D	E 	P!;"7>BDF }}V]]734==?{{5!!!  # 	PKKNO	P	 s.   CBACB>;C=B>>CC
c                     t               } t        | d         5 }t        j                  d|j                  f| d   d      5 }t        j                  t        j                        5  |j                  t        j                  d             ddd       ddd       ddd       y# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   yxY w)	z5Check that incorrectly overriding the hostname fails.r2   rS  r   r1   fakehostname)rZ  override_hostnamer_   N)
r4   r]   r	   r  r  rH  rI  rU  rz   rG  rV  s      r   test_tls_override_hostnamere    s     E	u^/D	E 2QVV,&+K&8)7	92 =C]]6889 	2MM&--01	2	2 2 2	2 	2	2 2 2 2s;   (B<$B0&%B$B0B<$B-)B00B9	5B<<Cc                  ^   t        j                  g d      g} t         j                  j                  | dg      }g }t	               5 }t        d|j                  f      5 }|j                  t        j                  d            }d}|D ]H  \  }}|j                  |       t        j                  d|j                               \  }	||	k(  sJ |dz  }J t         j                  j                  |      } | j                  |      sJ 	 d	d	d	       d	d	d	       y	# 1 sw Y   xY w# 1 sw Y   y	xY w)
z'Try a simple do_get call with metadata.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_metadatark    s    	$%D HH  cU 3EG		 
"6+v{{34
"8>v}}S12% 	OE8NN5! --h.A.A.CDKJ*$$$1HC		
 xx$$W-{{5!!!
" 
" 
" 
" 
" 
"s%   D#B&DD#D 	D##D,c                  T   g } g }t               5 }t        d|j                  f      5 }|j                  t	        j
                  d            }d}	 	 |j                         \  }}| j                  |       t        j                  d|j                               \  }||k(  sJ |dz  }X# t        $ r Y nw xY w	 ddd       n# 1 sw Y   nxY wddd       n# 1 sw Y   nxY wt               5 }t        d|j                  f      5 }|j                  t	        j
                  d            }d}|D ]H  \  }}|j                  |       t        j                  d|j                               \  }||k(  sJ |dz  }J 	 ddd       n# 1 sw Y   nxY wddd       n# 1 sw Y   nxY w| |k(  sJ y)z0Verify the iterator interface works as expected.r   r   r   r   rJ   N)r   r
   r  rz   r	   rG  
read_chunkr  r   r   r   StopIteration)	batches1batches2r  r  r   r   r   ri  rj  s	            r   1test_flight_metadata_record_batch_reader_iteratorrq    s   HH		 6+v{{348>v}}S12"("3"3"5x&$mmD(2E2E2GH
j(((q  !       
	 6+v{{348>v}}S12% 	OE8OOE" --h.A.A.CDKJ*$$$1HC			      xsl   C(C AB'&C '	B30C 2B33C 7	C C		CC+FA4F8	FF
	FFc                  "   t         j                  j                  t        j                  g d      gdg      } t         j                  j                  t         j                  j                  j                        }t        |      5 }t        d|j                  f      5 }|j                  t        j                  d            }|j                         }|j                  |       sJ 	 ddd       ddd       y# 1 sw Y   xY w# 1 sw Y   yxY w)	z2Try a simple do_get call with V4 metadata version.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_v4rs  4  s    HH  	%	&'u ! 6Eff$$//22 % 4G	g	. "&+v{{34"8>v}}S12 {{5!!!	" " " " " "s%   DAC9(D9D	>DDc            	         t        j                  g d      g} t         j                  j                  | dg      }t	               5 }t        d|j                  f      5 }|j                  t        j                  j                  d      |j                        \  }}|5  t        |j                  d            D ]n  \  }}t        j                  d|      }|j!                  ||       |j#                         }	|	J t        j$                  d|	j'                               \  }
||
k(  rnJ  	 d	d	d	       d	d	d	       d	d	d	       y	# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   y	xY w)
z'Try a simple do_put call with metadata.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   ri  r   rj  s              r   test_flight_do_put_metadatarv  A  sM    	$%D HH  cU 3E		 )6+v{{34)8>"(--##,,R0LL#  	)'(8(8q(8(IJ )
U!;;tS1**5(;%**,&$mmD#..2BC
j((()	)) ) )
	) 	)) ) ) )sC   E?EB	E&E*E2EEEE	EE$c            	         t         j                  j                  t        j                  t	        j
                  dt	        j                                     gdg      } t               5 }t        d|j                  fd      5 }|j                  t        j                  j                  d      | j                        \  }}|5  t        j                   t        j"                  d	
      5 }|j%                  |        ddd       j&                  j(                  dk(  sJ | j+                  dd      | j+                  d      g}|D ]  }|j%                  |        	 ddd       t         j,                  j/                  | g      }|j1                  t        j2                  d            j5                         }	||	k(  sJ 	 ddd       ddd       y# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   *xY w# 1 sw Y   yxY w)z+Try a simple do_put call with a size limit.i   )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?   rg  rz   rG  r   )
large_batchr  r  r   ru  excinfosmaller_batchesr   r  actuals
             r   test_flight_do_put_limitr  W  s    ..,,
BHHJ/0.U - K 
	 "vk6;;/,0	2"5;"(--##,,R0#   
	*vBB%:< 0?F"";/0 ==&&$...!!!S)!!#&O ) *""5)*
	* 88((+7v}}S12;;=6!!!'" " "0 0
	* 
	*" " " "sV   (G/?G#&G'G	9AGA!G#:G/GGG G##G,	(G//G8c                     t               5 } t        d| j                  f      5 }|j                  t	        j
                  d            }|j                          t        j                  t        j                  d      5  |j                          ddd       ddd       ddd       y# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   yxY w)z4Test canceling a DoGet operation on the client side.r   r_   z(?i).*cancel.*r  N)r]   r
   r  rz   r	   rG  r&  rH  rI  r-  rm  )r  r  r   s      r   test_cancel_do_getr  t  s     
	  6+v{{34 8>v}}W56]]666!13 	 	 	     	  	 	       s;   B?AB3=B'B3B?'B0,B33B<	8B??Cc                     t               5 } t        d| j                  f      5 }|j                  t	        j
                  d            t        j                         t        j                         t        j                         t        j                         fd}t        j                  |d      }|j                          j                  d       j                          j                          |j                  d       5  j                         sJ 	 d	d	d	       d	d	d	       d	d	d	       y	# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   y	xY w)
z5Test canceling a DoGet operation from another thread.r   r_   c                     j                          j                          j                  d       	 j                          y # t        j                  $ r+ 5   j                          d d d        Y y # 1 sw Y   Y y xY ww xY w)Nr8   r  )rm  setwaitr	   r-  )raised_proper_exceptionread_first_messager   result_lockstream_canceleds   r   
block_readz/test_cancel_do_get_threaded.<locals>.block_read  sv    ""$   +2!!#.. 2  2+//12 2 22s)   A BA6,B6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48>v}}W56&__.#//+nn&"+//"3	2 	2 !!DA*A 	4*11333	454 4 44	4 	454 4 4 4s;   EC+EE 'E/E E	EE	EE!c                     t               5 } t        d| j                  f      5 }|j                  t	        j
                  dd            }t        |      j                  dk(  sJ ~d d d        d d d        y # 1 sw Y   xY w# 1 sw Y   y xY w)Nr   r  r   r;  )r  r
   r  r   r	   rD  r$  r  )r  r  r  s      r   test_streaming_do_actionr    s~    		 +v{{348>""6==C#@AG}!!V+++     s#   BAA5$B5A>	:BB
c                   	   t        j                  dd      } | t         j                  j                  | j                               k(  sJ t        j                  d      }|t         j                  j                  |j                               k(  sJ t        j
                  d      }|t         j
                  j                  |j                               k(  sJ t        j                  dd      }|t         j                  j                  |j                               k(  sJ t        j                  t        j                  dt        j                         fg            }|t         j                  j                  |j                               k(  sJ t         j                  j                  d      }|t         j                  j                  |j                               k(  sJ t         j                  j                  dd	d
      }|t         j                  j                  |j                               k(  sJ t        j                  t        j                  dt        j                         fg      |t        j                  ddg      t        j                  dt         j                   j#                  dd      gt        j$                  d      j'                  t        j(                  d            d      gdddd      }t         j                  j                  |j                               }|j                  |j                  k(  sJ |j*                  |j*                  k(  sJ |j,                  |j,                  k(  sJ |j.                  |j.                  k(  sJ |j0                  |j0                  k(  sJ |j2                  |j2                  k(  sJ |j4                  |j4                  k(  sJ t        j                  |dt         j                   j#                  dd      gt        j$                  d      j'                  t        j(                  d            d      }|t         j                  j                  |j                               k(  sJ y)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6FV]]..v/?/?/ABBBB]]5!FV]]..v/?/?/ABBBB]]:&FV]]..v/?/?/ABBBB!!+{;J))55j6J6J6LMMMM''		C3D2E(FGMF//;;!# # # # ""..v6D6**66t~~7GHHHH""++ClCD6**66t~~7GHHHH
		C$%&!!#7!!--k4@A		9:??T@R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H
		'(--bll3.?@ 	H v,,889K9K9MNNNNr   c                     t               5 } t        d| j                  f      5 }t         j                         j	                         D ]S  \  }}t        j                  |d      5  t        |j                  t        j                  |d                   ddd       U t        j                  t        j                  d      5  t        |j                                ddd       t        j                  g d      g}t        j                  j!                  |dg      }t        j                  t        j"                  t        j$                  t        j&                  t        j(                  d	}|j	                         D ]  \  }}t        j                  |d      5  |j+                  t        j,                  j/                  |      |j0                        \  }	}
|	j3                  |       |	j5                          ddd       t        j                  |d      5  |j+                  t        j,                  j/                  |      |j0                        \  }	}
|	j5                          ddd        	 ddd       ddd       y# 1 sw Y   BxY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   3xY w# 1 sw Y   ExY w# 1 sw Y   yxY w)
z:Ensure that Flight errors propagate from server to client.r   z.*foo.*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    sJ   		 !+v{{34!8>.::<BBD 	@MCxy9 @V%%fmmC&=>?@ @	@ ]]655YG 	($$&'	( ,-.$$T#$7 222211%@@"::

 #-"2"2"4 	GYy	: !'++77@LL"" ""5) y	: !'++77@LL"" 	 	)! ! !@ @	( 	(   ;! ! ! !s   J=A J1#/I>	/J1JB=J1AJ	6J1AJ$	"
J1-J=>JJ1JJ1J!J1$J.)J11J:	6J==Kc                     t        j                  g d      g} t         j                  j                  | dg      }t	               5 }t        d|j                  f      5 }|j                  t        j                  j                  d      |j                        \  }dgfd}t        j                  |      }|j                          |j                  d	
      }|5  t!        |      D ]-  \  }}	t#        j$                  d|      }
|j'                  |	|
       / |j)                          |j+                          ddd       d   t-        |      k(  sJ 	 ddd       ddd       y# 1 sw Y   .xY w# 1 sw Y   xY w# 1 sw Y   yxY w)z7Ensure that separate threads can read/write on a DoPut.r6   rY   r;   r   r   r   c                  d    j                          dxx   dz  cc<   j                         y y )Nr   rJ   )r&   )countru  s   r   _reader_threadz:test_do_put_independent_read_write.<locals>._reader_thread  s0    !&&(4aA "&&(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  rh  r   r   ri  r  ru  s              @@r   "test_do_put_independent_read_writer    sj    	$%D HH  cU 3E		 (6+v{{34(8>"(--##,,R0LL# 	 !!8"""3 	'0 <
U!;;tS1**5(;< !KKM	 Qx3w<'''5( ( ( 	 	!( ( ( (s>   F B E4AE(;E4F (E1-E44E=	9F  F	c            
      x   t        dt               i      5 } t        d| j                  f      5 }t	        |j                  t        j                  dd                  }t        |      dk(  sJ |d   j                  j                         }d|k(  sJ 	 d	d	d	       d	d	d	       y	# 1 sw Y   xY w# 1 sw Y   y	xY w)
z@Ensure that server middleware run on the same thread as the RPC.r  rC  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' 9?v''gs(CDE7|q   
**,&&&' ' ' ' ' 's#   B0A#B$B0$B-	)B00B9c                      t        dt               i      5 } t        d| j                  f      5 }t	        j
                  t        j                        5  t        |j                                ddd       t	        j
                  t        j                        5  t        |j                  t        j                  dd                   ddd       t        d| j                  ft               g      }t        |j                  t        j                  dd                  }d|j                   j#                         k(  sJ 	 ddd       ddd       y# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   *xY w# 1 sw Y   yxY w)z-Test rejecting an RPC with server middleware.r  rC  r   Nr   r3  )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( 
 9
+v{{349 9?]]2667 	($$&'	( ]]6<<= 	<!!&--S"9:;	< &++&<>?
 ((sC)@ABhmm668888#9 9 9
	( 	(	< 	<9 9 9 9sS   E4$E(E-+E(/EA7E(?E4EE(E%!E((E1	-E44E=c                     t               } t               }t        d| i      5 }t        d|j                  f|g      5 }t
        j                  j                  d      }t        j                  t              5  t        |j                                ddd       t        j                  t              5  |j                  |       ddd       t        j                  t              5  |j                  |       ddd       t        j                  t              5  |j                  t        j                   d             ddd       t        j                  t              5  |j#                  |t%        j&                  g             \  }}|j)                          ddd       t        j                  t              5  t        |j+                  t        j,                  dd                   ddd       t        j                  t              5  t        |j/                                ddd       t        j                  t              5  |j1                  |      \  }}|j)                          ddd       t
        j2                  j4                  t
        j2                  j6                  t
        j2                  j8                  t
        j2                  j:                  t
        j2                  j<                  t
        j2                  j>                  t
        j2                  j@                  t
        j2                  jB                  g}| jD                  |k(  sJ |jD                  |k(  sJ 	 ddd       ddd       y# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   ZxY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   cxY w# 1 sw Y   zxY w# 1 sw Y   yxY w)z/Test that middleware records methods correctly.r  rC  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 %5V&++&)*	%5 
,,88=
]]./ 	($$&'	(]]./ 	/"":.	/]]./ 	*j)	*]]./ 	.MM&--,-	.]]./ 	j"))B-@IFALLN	 ]]./ 	<!!&--S"9:;	<]]./ 	($$&'	(]]./ 	**:6IFALLN	
 ,,//**&&&&)),,++	
 !((H444 ((H444K%5 %5 %5	( 	(	/ 	/	* 	*	. 	.	 		< 	<	( 	(	 	-%5 %5 %5 %5s   O"9O7M.!O2M;!O%N7!O%N=!O9N"!O8/N/'!ON<"!O%O	(C4OO".M83O;N ONONO"N,'O/N94O<OO	OOO	O""O+c            
         t               5 } t        d| j                  f      5 }	 t        |j	                  t        j                  dd                   J # t
        j                  $ r+}|j                  J |j                  }|dk(  sJ Y d }~nd }~ww xY w	 d d d        n# 1 sw Y   nxY wd d d        y # 1 sw Y   y xY w)Nr   r4  r   r5  )	r"  r
   r  r  r   r	   rD  r/  
extra_info)r  r  eeis       r   test_extra_infor    s    		 5+v{{3458>	5!!&--
C"@AB5-- 	5<<+++B4444	5 55 5 5 5 5 5sE   B5B 0AB(!B	B BB 	B5 B)	%B55B>c                     t               } t               }t        | d   d   gd| d         5 }t        d|j                  f| d   | d   d   j
                  | d   d   j                        5 }|j                  t        j                  d            j                         }|j                  |      sJ 	 d	d	d	       d	d	d	       y	# 1 sw Y   xY w# 1 sw Y   y	xY w)
z!Test mutual TLS (mTLS) with gRPC.r2   r   Tr1   )rT  verify_clientroot_certificatesr   )rZ  
cert_chainprivate_keyr_   N)r4   rB   r]   r
   r  r/   r0   rz   r	   rG  r   r   )rW  ry   r=  r  rA   s        r   	test_mtlsr    s     EE	#N3A67#K0
2 
" 67!&&! -^,Q/44n-a044		6	
" :@}}V]]734==?{{5!!!
" 
" 
" 
" 
" 
"s$   ?C,AC3CC		CCc                     t         j                  j                  t        j                  t	        dd            gdg      } t               5 }t        d|j                  f      5 }t        j                  j                  d      }|j                  |      \  }}|5  |j                         }ddd       | k(  sJ 	 ddd       ddd       y# 1 sw Y   "xY w# 1 sw Y   xY w# 1 sw Y   yxY w)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    xx##
q)$%%U $ H 
	 !6+v{{34!8>,,88@
++J7 	&OO%E	&5   ! ! !	& 	&	! ! ! !s<   C##6CC*C:C#CCC 	C##C,c                  4   t         j                  j                  t        j                  t	        dd            gdg      } | j                  d      }t               5 }t        d|j                  f      5 }t        j                  j                  d      }|j                  |      \  }}|5  |j                  | j                         |D ]  }|j                  |        |j!                          |j#                         }|j$                  J t'        t)        |            j+                  d
      }	|j,                  |	k(  sJ |j.                  j0                  dk(  sJ 	 d	d	d	       d	d	d	       d	d	d	       y	# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   y	xY w)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  rm  rA   rQ  r  r   rT  r   r   )
rA   rh  r  r  r   r   r   r   r   expected_bufs
             r   test_doexchange_putr    ss   88
q)$%!U   D ooCo0G		 26+v{{3428>,,88@
++J7 
	2LL%  *""5)*!%%'E::%%%s7|,33G<L%%555<<,,111
	2	2 2 2
	2 
	2	2 2 2 2s=   F56F+B1E6F%F6E?;FF	FFc                     t         j                  j                  t        j                  t	        dd            gdg      } | j                  d      }t               5 }t        d|j                  f      5 }t        j                  j                  d      }|j                  |      \  }}|5  t	        d	      D ]\  }t        |      j                  d
      }|j                  |       |j!                         }	|	j"                  J |	j$                  |k(  r\J  |j'                  | j(                         d}
|D ]}  }|j+                  |       |j(                  | j(                  k(  sJ |j!                         }	|	j"                  |k(  sJ |	j$                  J |
dz  }
|j,                  j.                  |
k(  r}J  t1        |      D ]  \  }}t        |      j                  d
      }|j3                  ||       |j!                         }	|	j"                  |k(  sJ |	j$                  |k(  sJ |
dz  }
|j,                  j.                  |
k(  rJ  	 ddd       ddd       ddd       y# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   yxY w)zTry a DoExchange echo server.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  rm  rA   rT  rL  rn   rV  r   r   r   rU  )rA   rh  r  r  r   r   r   ir   r   rR  r   s               r   test_doexchange_echor    s}   88
q)$%!U   D ooCo0G		 !F6+v{{34!F8>,,88A
++J7 	F2Y 1!fmmG,%%c*))+zz)))))S0001 LL%K  F""5)}}333))+zzU***))111q ||66+EEEF &g. F5!fmmG,**5#6))+zzU***))S000q ||66+EEEF-	F	!F !F !F	F 	F	!F !F !F !FsQ   I856I,+A'I BI 2BI I I,I8 I)%I,,I5	1I88Jc                  Z   t         j                  j                  t        j                  t	        dd            gdg      } | j                  d      }t         j                  j                  t         j                  j                  j                        }t        |      5 }t        d	|j                  f      5 }t        j                  j                  d
      }|j!                  |      \  }}|5  |j#                  | j$                  |       |D ]]  }|j'                  |       |j$                  | j$                  k(  sJ |j)                         }	|	j*                  |k(  sJ |	j,                  ]J  	 ddd       ddd       ddd       y# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   yxY w)z;Try a DoExchange echo server using the V4 metadata version.r   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  rm  rA   rT  )
rA   rh  re   r  r  r   r   r   r   r   s
             r   test_doexchange_echo_v4r    s~   88
q)$%!U   D ooCo0Gff$$//22 % 4G	g	. 2&+v{{3428>,,88A
++J7 	2LLgL6  2""5)}}333))+zzU***))1112	2	2 2 2	2 	2	2 2 2 2sC   !F!96F/A<F	,F	0F8F!	FFF	F!!F*c            
      R   t         j                  j                  t        j                  t	        dd            t        j                  t	        dd            t        j                  t	        dd            gg d      } t         j                  j                  t        j                  t	        d	d
d	            gdg      }t               5 }t        d|j                  f      5 }t        j                  j                  d      }|j                  |      \  }}|5  |j                  | j                         |j                  |        |j                          |j!                         }ddd       |k(  sJ 	 ddd       ddd       y# 1 sw Y   "xY w# 1 sw Y   xY w# 1 sw Y   yxY w)z!Transform a table with a service.r   r   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   88
q$ 
q$ 
q$ ! 	   D
 xx##
q,*+%W $ H 
	 	!6+v{{34	!8>,,88F
++J7 	&LL%t$!OO%E		&
 5   	! 	! 	!	& 	&		! 	! 	! 	!s=   	F!6FAF$F4FF
FF	FF&c            
         t        dt               i      5 } t               }t        d| j                  f|g      5 }t        |j                  t        j                  dd                  }|j                  j                         j                  d      }t        j                  |      }t        j                  j!                         D ]l  \  }}|j#                         }t%        |t&              r|j                  d      }|j)                  |      |k(  sJ |j*                  j)                  |      |k(  rlJ  	 ddd       ddd       y# 1 sw Y   xY w# 1 sw Y   yxY w)r  r  rC  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  !	  sC   	 24- 
 B
46fkk*#9& 	B)/F,,V]]3-DEFH"--224;;GDK --k:N"="F"F"L"L"N Bfe,#]]73F%))&1V;;;++//76AAAB	B	B B	B 	B	B Bs)   %EC6E3E7EE	EEc                     t               } t        | d         5 }dg}t        j                  d|j                  f| d   |      }t        j                  t        j                        5  |j                  t        j                  d             ddd       |j                          d	g}t        j                  d|j                  f| d   |      }t        j                  t        j                  t        j                  f      5  |j                  t        j                  d             ddd       |j                          ddd       y# 1 sw Y   xY w# 1 sw Y   .xY w# 1 sw Y   yxY w)
z$Test setting generic client options.r2   rS  )zgrpc.ssl_target_name_overriderc  r   r1   )rZ  generic_optionsr_   N)zgrpc.max_receive_message_length    )r4   r]   r	   r  r  rH  rI  rU  rz   rG  r  r=   r0  r-  )rW  r=  re   r  s       r   test_generic_optionsr  7	  s$    E	u^/D	E DEaff 5/4[/A079 ]]6889 	2MM&--01	2:;aff 5/4[/A079 ]]BOOV-H-HIJ 	2MM&--01	2! 	2 	2	2 	2 s=   AE (%EA5E %E'E E	E E	E  E)c                       e Zd ZdZd Zd Zy)CancelFlightServerzA server for testing StopToken.c                     t        j                  g       }t         j                  j                  g |      }t	        j
                  |t        j                  |            S )Nr  )r=   rn   r   r@   r	   r   r  r  )rf   rr   rw   rn   r$   s        r   rz   zCancelFlightServer.do_getR	  sF    2^^''6':%%fi.>.>r.BCCr   c                 "   t        j                  g       }t         j                  j                  g |      }|j	                  |       |j                         s8|j                  |       t        j                  d       |j                         s7y y )Nr  r  )	r=   rn   r   r@   rL  r  rV  r  r  )rf   rr   r   r   r   rn   r$   s          r   r   zCancelFlightServer.do_exchangeW	  sg    2^^''6':V&&(r"JJsO &&(r   N)r|   r}   r~   r   rz   r   r!   r   r   r  r  O	  s    )D
r   r  c                     t        j                         j                  t        j                         j                  k7  rt	        j
                  d       d t        t        j                  ffd} t               5 }t        d|j                  f      5 }|j                  t        j                  d            } | |j                         t        j                   j#                  d      }|j%                  |      \  }} | |j                         	 |j'                          d d d        d d d        y # t        t        j(                  f$ r Y ,w xY w# 1 sw Y   1xY w# 1 sw Y   y xY w)Nz'test only works from main Python threadc                  t    t        j                  d       t        j                  t        j                         y r  )r  r  signalraise_signalSIGINTr!   r   r   signal_from_threadz*test_interrupt.<locals>.signal_from_threade	  s    

3FMM*r   c                    	 	 t        j                        }t        j                        5 }|j	                           |         d d d        |j                          	 j                  }t        |t        j                  t        f      s-t        |j                  t        j                  t        f      sJ y y # 1 sw Y   txY w# j                          w xY w# t        $ r t        j                  d       Y w xY w)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- GGIJ  NN!b//1BCDq}}r'8'8:K&LM	N NM E    	N KKLM	Ns:   +C B:C C :C?C CC C<;C<r   r   r>  )r  current_threadidentmain_threadrH  r`  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+H+HH=>+ #B$5$56IN$ 
	 +v{{348>v}}S12V__,,88A
++J7V__	LLN   "6#>#>? 		   sC   >EA<ED4#E4EEEEE	EE(c                     d} t               5 }t        j                  d|j                  f      5 }t	        j
                  t        j                  |       5  |j                  t        j                  d            j                          d d d        |j                  t        j                  d            j                         }|j                  dk(  sJ 	 d d d        d d d        y # 1 sw Y   ^xY w# 1 sw Y   xY w# 1 sw Y   y xY w)Nz'application server implementation errorr   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	#	% #NNK56#:@]]6335A 	9MM&--,-668	9
 fmmM:;DDF~~"""# # #	9 	9# # # #s;   "C=&C13C%AC1C=%C.*C11C:	6C==Dc            	      X   t         j                  j                  ddz        } t               5 }t        j                  d|j
                  f      5 }t        j                  t        d      5  |j                  | t        j                  g             \  }}|j                          d d d        t        j                  t        j                  d      5  |j                  |        d d d        d d d        d d d        y # 1 sw Y   YxY w# 1 sw Y   &xY w# 1 sw Y   *xY w# 1 sw Y   y xY w)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NNK561:@]]7!HJ 	&6		"FIFALLN	 ]]2,,!HJ 	1/0	11 1 1	 		1 	11 1 1 1sS   "D D+9C<$-DD#D+D <DDDDD	D  D)c            	         t         j                  j                  d      } ddz  }t               5 }t        j                  d|j
                  f      5 }t        j                  t        j                  d      5  |j                  | t        j                  g             \  }}|5  |j                  |       |j                          d d d        d d d        t        j                  t        j                  d      5  |j                  |       \  }}|5  |j                  |       d d d        d d d        d d d        d d d        ~t               5 }t        j                  d|j
                  f      5 }t        j                  t         j                   d      5  |j#                  t        j$                  d            }|j'                          d d d        t        j                  t        j(                  d      5  |j                  |       \  }}|5  |j'                          d d d        d d d        d d d        d d d        y # 1 sw Y   ~xY w# 1 sw Y   xY w# 1 sw Y   :xY w# 1 sw Y   ?xY w# 1 sw Y   DxY w# 1 sw Y   IxY w# 1 sw Y   xY w# 1 sw Y   |xY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   y xY w)Nr   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   ri  r  r  r   r  r   s          r   test_large_metadata_clientr  	  sR    ((44S9J{#H		 0vNNK560:@]]200!=? 	j"))B-@IFA %%h/	 ]]200!=? 	0#//
;NFF 0%%h/0	00 0 		"	$ 
"NNK56
":@]]633!=? 	]]6==#56FOO	 ]]2,,!=? 	"#//
;NFF "!"	"
" 
" 
" 	 	0 0	0 	00 0 0 0"	 	" "	" 	"
" 
" 
" 
"s   "J&I47+I""I 	I-I49I'I	"I'*I42J"J>/&J25J
-J27J&J	J&'J2/J> I
III4I$I''I1,I44I>	9JJJJ2J#J&&J/+J22J;	7J>>Kc                       e Zd ZdZg Zd Zy)ActionNoneFlightServerz@A server that implements a side effect to a non iterable action.c                     |j                   dk(  r/t        j                  | j                        j	                  d      gS |j                   dk(  r| j                  j                  d       y t        )N	get_valuer   r  T)rH   jsondumpsVALUESr   r  r   r   s      r   r   z ActionNoneFlightServer.do_action	  sV    ;;+%JJt{{+227;<<[[H$KKt$!!r   N)r|   r}   r~   r   r  r   r!   r   r   r  r  	  s    JF"r   r  c                     t               5 } t        d| j                  f      5 }|j                  t	        j
                  dd             |j                  t	        j
                  dd            }t        j                  t        |      j                  j                               dgk(  sJ 	 ddd       ddd       y# 1 sw Y   xY w# 1 sw Y   yxY w)zEnsure that actions are executed even when we don't consume iterator.

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

    See https://issues.apache.org/jira/browse/ARROW-16592.
    rD   r]  )r  r   r5  c                   "    e Zd Z fdZ fdZy)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  	  s    		r   r  r   c                  \    	 	  j                          # t        j                  $ r Y y w xY wr   )r&   r	   FlightErrorr   s   r   _readerz-test_write_error_propagation.<locals>._reader
  s1    KKM %%     ++Tr  rJ   r  Nc                  \    	 	  j                          # t        j                  $ r Y y w xY wr   )rm  r	   r  r  s   r   r  z-test_write_error_propagation.<locals>._reader
  s4    %%' %% 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  	  s    M

%
%]4C((44S9JYY"((*-./FV,,  
 /+v{{34/8>z6:	 !!>]]6667 	J8""2??QC5#HI 	J 	J ~~((M999]]6667 	8LLN	 	 	~~((M999  ++J7	 !!>]]6667 	,8%%d+ 	, 	, ~~((M999]]6667 	8LLN	 	 	~~((M999_/ / / / / /s|   	K<!A%K'+D11D:6AK';F	K'FBK'/IIAK'J'	K''J0,2K'	K<'K0	,K<<Lc                  .    t        j                  d       y)z
    Ensure that the gRPC server is stopped at interpreter shutdown.

    See https://issues.apache.org/jira/browse/ARROW-16597.
    zarrow_16597.pyN)r   invoke_scriptr!   r   r   test_interpreter_shutdownr  0
  s     	'(r   c                       e Zd ZdZd Zy)TracingFlightServerz/A server that echoes back trace context values.c                 f    |j                  d      j                  }d |j                         D        S )Ntracingc              3   N   K   | ]  \  }}| d | j                  d        yw)z: r   N)r   ).0r0   rc  s      r   	<genexpr>z0TracingFlightServer.do_action.<locals>.<genexpr>A
  s2      ; S% 55'"**73 ;s   #%)r  trace_contextr  )rf   rr   r   r'  s       r   r   zTracingFlightServer.do_action<
  s3    ..y9GG;$1$7$7$9; 	;r   Nr  r!   r   r   r!  r!  9
  s
    9;r   r!  c                  (   t        dt        j                         i      5 } t        d| j                  f      5 }t        j
                  ddg      }|j                  d|      D ]  } 	 d d d        d d d        y # 1 sw Y   xY w# 1 sw Y   y xY w)	Nr#  rC  r   )s   traceparents7   00-000ff00f00f0ff000f0f00ff0f00fff0-000f0000f0f00000-00)s
   tracestater   r<  )r   r   rv   )r!  r	   TracingServerMiddlewareFactoryr
   r  r   r   )r  r  re   rc  s       r   test_tracingr*  E
  s    	v<<>) 
 
+v{{34 9? **5 	4
  %%j'%B 	E	     s"   B1A<+B<B	BBc                      t        dd      } d}t        j                  t        |      5  | j	                  t
        j                  j                  d      d        d d d        y # 1 sw Y   y xY w)Nzgrpc+tls://localhost:9643Tr^  zRArgument 'schema' has incorrect type \(expected pyarrow.lib.Schema, got NoneType\)r  rD   r  )r
   rH  rI  rJ  r   r	   ro   rE  )r  msgs     r   .test_do_put_does_not_crash_when_schema_is_noner-  W
  sc    56:<F<C	y	, #f--99%@! 	 	## # #s   1A%%A.c                      G d dt               }  G fddt              } G d dt               |       } |        5 }t        d|j                  f|g      5 }|j                  t        j                  j                  d	             d
|j                  v sJ d|j                  v sJ d|j                  v sJ d|j                  v sJ 	 ddd       ddd       y# 1 sw Y   xY w# 1 sw Y   yxY w)z9Ensure that server-sent headers/trailers make it through.c                       e Zd Zd Zy):test_headers_trailers.<locals>.HeadersTrailersFlightServerc                     |j                  dd       |j                  dd       |j                  dd       |j                  dd       t        j                  t	        j
                  g       |g       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
  sh    z>:~/@A_=1CD$$		" r   N)r|   r}   r~   r   r!   r   r   HeadersTrailersFlightServerr0  d
  s    		r   r:  c                       e Zd Zd Z fdZy)?test_headers_trailers.<locals>.HeadersTrailersMiddlewareFactoryc                     g | _         y r   r<  r  s    r   rc   zHtest_headers_trailers.<locals>.HeadersTrailersMiddlewareFactory.__init__q
  s	    DLr   c                      |       S r   r!   )rf   r   HeadersTrailersMiddlewares     r   r  zJtest_headers_trailers.<locals>.HeadersTrailersMiddlewareFactory.start_callt
  s    ,T22r   N)r|   r}   r~   rc   r  )r?  s   r    HeadersTrailersMiddlewareFactoryr<  p
  s    		3r   r@  c                       e Zd Zd Zd Zy)8test_headers_trailers.<locals>.HeadersTrailersMiddlewarec                     || _         y r   r  r  s     r   rc   zAtest_headers_trailers.<locals>.HeadersTrailersMiddleware.__init__x
  s	    "DLr   c                     |j                         D ]3  \  }}|D ])  }| j                  j                  j                  ||f       + 5 y r   )r  r  r  r  )rf   r  r0   r  rc  s        r   r  zItest_headers_trailers.<locals>.HeadersTrailersMiddleware.received_headers{
  sF    &}} >V# >ELL((//e=>>r   N)r|   r}   r~   rc   r  r!   r   r   r?  rB  w
  s    	#	>r   r?  r   rC  r   )r2  r3  )r4  s   headervalue)r5  r6  )r7  s   trailervalueN)
r   r   r   r
   r  r   r	   ro   rp   r  )r:  r@  r  r  r  r?  s        @r   test_headers_trailersrE  a
  s    
&6 
3+B 3>$4 > /0G	$	& I&+v{{3	JINTv66??CD+w>>>3wFFF-@@@5HHHI I I I I Is$   C'A/C
C'C$	 C''C0c                  J  	 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                  j                  |      }|j                  |t        j                  t        j                  j                  d                  \  }}|5  |j                  |j                  t        j                  j                  |dk(               |j                  |       |j!                          |j#                         }d d d        j%                  |      sJ |j&                  	|   k(  rJ  	 d d d        d d d        y # 1 sw Y   ExY w# 1 sw Y   xY w# 1 sw Y   y xY w)Nr   rL   rK   rJ   r   r  )dict_deltasdict_replacementc                       e Zd Z fdZy)Dtest_flight_dictionary_deltas_do_exchange.<locals>.DeltaFlightServerc                    t               }|j                         }|j                  |      sJ |j                  |j                  j                            k(  sJ |j                  dk(  rNt        j                  j                  d      }|j                  |j                  |       |j                  |       |j                  dk(  r-|j                  |j                         |j                  |       y y )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    /1N#__.N!((888<<>*2D2D2K2K2M#NNNN!!^3&&000M^22GD"">2!!%88^223"">2 9r   N)r|   r}   r~   r   )rP  s   r   DeltaFlightServerrJ  
  s    	3r   rQ  r   TrL  )write_optionsrv   rG  )r   r]   r
   r  rS   r	   ro   rE  r   r   r=   r  r  rL  rn   rM  r  r   r   r   )
rQ  r  r  rN  r9  r   r   r   rO  rP  s
            @r   )test_flight_dictionary_deltas_do_exchangerS  
  s     #$"#&'
 & #$"#&'
N"30 3 
	 ;+v{{34;8>+-: 	;G00<<WEJ#//00"$&&"8"8/3 #9 #5 0 NFF  3^22BFF<R<R,3},D =S =G H"">2##%!'!23 "((888<<>'#::::%	;; ; ;3 3; ; ; ;sC   FA:FA0F	=-F,F0FF
FF	FF"c                    | j                   dk(  rdd d d dS | j                   dk(  rgddgt        j                  j                  d      t        j                  j	                  d	t        j                  j
                  j                  
      dS i S )NdefaultrL   )r  r  rR  r  allr  )s   abcs   defzstd)compressionF)use_threadsensure_alignment)paramr=   r  r  r   	AlignmentDataTypeSpecific)requests    r   call_options_argsr_  
  s    }}	!! 	
 	
 
%	()VV333GFF11!!#!1!1!B!B 2 	
 	
 	r   r_  rU  rV  T)indirectc                     t        di | }|j                         }| j                         D ]  \  }}|||v sJ | d| |v rJ  y )N=r!   )r   __repr__r  )r_  call_optionsr\  r  vals        r   test_call_options_reprrf  
  sh     %9'89L  "D%++- &S;$;;au~%%%&r   )r  r  r  r   r   r  r   r  r  r  r(   r  r   numpyrz  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  r-  r!  r'  r*  r.  r0  %header_auth_server_middleware_factoryr5  r8  r:  rA  rG  rK  rN  rQ  requires_testing_datarX  r\  ra  re  rk  rq  rs  rv  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*  r-  rE  rS  fixturer_  parametrizerf  r!   r   r   <module>rv     s  $    	            : : '   " [[

B
";
<2E+ ED&+ &R' *"- """"2 """.> ""0* 06+. +#3 .. ."E 0 E F!1 F&7' 7*.A( .AbJ#+ J#Z!2 0!2 ". .. $' $
/(? 
/1!1 161(? 189!1 9/- /9.E 9'7 F#3 F*+- +5$; 5) . -+B -&/+B /

$4 
	'> 		'> 		1)@ 	12"2 2.4)@ 44"2 4. 0 ."J@Z`F!$8   ('(D6 F F
$"<.=7$( 2!6 BGGtOD  F&F&* # #*# #*# #*# #*9<J4" 0[7   ,[3  
 + + BGGtOI  K
5K
5+5I )J(K %$& 4E;@8."+ ""= # = ""	" #	" "" #  ""	2 #	2"* @
"), " "8     4  4@8Ov#L$(N	'9,)5X	5 """ #"$!20(FV20!.B, "" #.) " ) )X# 1  1  "  "@
"- 
"
? C CL)	;* 	;$#&IR5;p  , )U+d  <
&<
&sU  	B$  F%+V"L"+16((06--06--s#   Y6 Z 6Z ZZ%$Z%