
    o                    2   U d dl mZ d dlZd dlZd dlZd dlZd dlmZmZ d dlm	Z	 d dl
Z
d dlmZmZmZmZmZmZ ej$                  eef   Zej(                  def   Ze
j.                  dd       ZeegZded	<    e       rej7                  e       e
j8                  j;                  d
e      dd       ZddZe
j8                  jA                   e!ed       d      e
j8                  j;                  d
e      dd              Z"e
j8                  jA                   e!ed       d      e
j8                  j;                  d
e      dd              Z#e
j8                  jA                   e!ed       d      e
j8                  j;                  d
e      dd              Z$y)    )annotationsN)socket
socketpair)	FrameType)_have_working_pollpoll_wait_for_socketselect_wait_for_socketwait_for_readwait_for_socketwait_for_write.c               #  r   K   t               \  } }| |f | j                          |j                          y w)N)r   close)abs     5platform/gsutil/third_party/urllib3/test/test_wait.pyspairr      s,     <DAq
Q$JGGIGGIs   57zlist[TYPE_WAIT_FOR]variantswfsc                   |\  }}t        j                  t              5   | |dd       d d d         | |dd      rJ  | |dd      sJ |j                  d        | |dd      sJ  | |dd      sJ  | |dd       sJ |j	                  d       	 	 |j                  dd	z         # 1 sw Y   xY w# t
        $ r Y nw xY w | |dd      rJ  | |ddd
      sJ |j                  d      dk(  sJ  | |ddd
      rJ |j                           | |dd      sJ t        j                  t              5   | |d       d d d        y # 1 sw Y   y xY w)NF)readwriteTr   r   timeout)r   r      x
   ?B )r   r   r      r   )	pytestraisesRuntimeErrorsendsetblockingOSErrorrecvr   	Exception)r   r   r   r   s       r   test_wait_for_socketr'   &   sm   DAq	|	$AE' 
% 14+++qa(((FF4LqtQ'''qtR(((qtT*** MM%FF4&=!  
%	$    1D!,,, qt4333 66!914tQ777 GGIqtQ'''
 
y	!AD 
"	!	!s)   B-B9 -B69	CC=EEc                *   | \  }}t        |d      rJ t        |d      sJ |j                  d       t        |d      sJ t        |d      sJ |j                  d       	 	 |j                  ddz         # t        $ r Y nw xY wt        |d      rJ y )Nr   r   Fr   )r
   r   r"   r#   r$   )r   r   r   s      r   test_wait_for_read_writer)   R   s    DAqQ"""!QFF4LA!Q MM%FF4&=!   a####s   !A7 7	BB	setitimerzneed setitimer() support)reasonc                  	 |\  }}dg	d		fd}t        j                   t         j                  |      }	  | |dd      rJ t        j                         }	 t        j                  t         j
                  dd        | |dd       t        j                  t         j
                  d       t        j                         }||z
  }d|cxk  rdk  sJ  J 	 t        j                   t         j                  |       	d   dkD  sJ y # t        j                  t         j
                  d       w xY w# t        j                   t         j                  |       w xY w)
Nr   c                J    | t         j                  k(  sJ dxx   dz  cc<   y Nr   r   signalSIGALRMsigframeinterrupt_counts     r   handlerztest_eintr.<locals>.handlero   %    fnn$$$a    Tr   皙?r   ?   r3   intr4   zFrameType | Nonereturnz
typing.Any)r0   r1   time	monotonicr*   ITIMER_REAL)
r   r   r   r   r6   old_handlerstartenddurr5   s
            @r   
test_eintrrF   i   s    DAqcO  --8K3qtQ/// 	4V//c:a( V//3nnEkS}1}}}fnnk21!!! V//3
 	fnnk2s$   !D- 0D AD- &D**D- -&Ec                   |\  }}dgdfd}t        j                   t         j                  |      }	  | |dd      rJ 	 t        j                  t         j                  dd       t	        j
                         dz   }t        d      D ]&  } | |dd       t	        j
                         |k\  s& n t        j                  t         j                  d       	 t        j                   t         j                  |       d   dkD  sJ y # t        j                  t         j                  d       w xY w# t        j                   t         j                  |       w xY w)	Nr   c                J    | t         j                  k(  sJ dxx   dz  cc<   y r.   r/   r2   s     r   r6   z(test_eintr_zero_timeout.<locals>.handler   r7   r8   Tr   gMbP?   i r<   )r0   r1   r*   rA   r?   r@   range)	r   r   r   r   r6   rB   rD   ir5   s	           @r   test_eintr_zero_timeoutrL      s    DAqcO  --8K3qtQ///	4 V//> .."Q&C6]AD!,>>#s* # V//3fnnk21!!!	 V//3fnnk2s*   D0 A,D 0D 3$D0 &D--D0 0&Ec                D  
 |\  }
dgdfd}d
fd}t        j                   t         j                  |      }	  | |dd      rJ t        j                         }	 t        j                  t         j
                  dd       t        j                  |      }|j                           | |d       t        j                  t         j
                  d       |j                          t        j                         }||z
  }	d	|	cxk  rd
k  sJ  J 	 t        j                   t         j                  |       d   dkD  sJ y # t        j                  t         j
                  d       j                          w xY w# t        j                   t         j                  |       w xY w)Nr   c                J    | t         j                  k(  sJ dxx   dz  cc<   y r.   r/   r2   s     r   r6   z,test_eintr_infinite_timeout.<locals>.handler   r7   r8   c                 R    t        j                  d        j                  d       y )Nr   r   )r?   sleepr"   )r   s   r    make_a_readable_after_one_secondzEtest_eintr_infinite_timeout.<locals>.make_a_readable_after_one_second   s    

1	tr8   Tr   r9   )targetr   r:   r;   r<   )r>   None)
r0   r1   r?   r@   r*   rA   	threadingThreadrC   join)r   r   r   r6   rQ   rB   rC   threadrD   rE   r   r5   s             @@r   test_eintr_infinite_timeoutrX      sA    DAqcO  --8K3qtQ/// 
	V//c:%%-MNFLLN V//3KKMnnEkS}1}}}fnnk21!!! V//3KKM
 	fnnk2s%   !E9 AE  3AE9  6E66E9 9&F)r>   z.typing.Generator[TYPE_SOCKET_PAIR, None, None])r   TYPE_WAIT_FORr   TYPE_SOCKET_PAIRr>   rS   )r   rZ   r>   rS   )%
__future__r   r0   rT   r?   typingr   r   typesr   r   urllib3.util.waitr   r   r	   r
   r   r   TuplerZ   CallableboolrY   fixturer   r   __annotations__appendmarkparametrizer'   r)   skipifhasattrrF   rL   rX    r8   r   <module>rj      s   "     %    <</ T	*   "12H I
 IOO() )( *(V$. 44=WX)" * Y": 44=WX)" * Y"@ 44=WX)!" * Y!"r8   