o
    4@HhL&                     @   s   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 ejdkr&dZ	n
ejdkr.dZ	ndZ	defd	d
Z
d!ddZd!ddZd!ddZejjejdkddd!ddZejjejdkddd!ddZd!ddZd!ddZd!ddZd!dd ZdS )"    N)FakeNetlinuxz<^\[Errno 107\] (Transport endpoint is|Socket) not connected$darwinz&^\[Errno 57\] Socket is not connected$z^\[Errno 10057\] Unknown error$returnc                  C   s   t  } |   | S N)r   enable)fn r	   X/home/air/sanwanet/gpt-api/venv/lib/python3.10/site-packages/trio/_tests/test_fakenet.pyr      s   r   c                     s  t   tjjtjjd} tjjtjjd}| dI d H  |  \}}|dks*J |dks0J tjtdd}| dI d H  W d    n1 sJw   Y  |j	j
t
jksXJ tjtdd}|d|fI d H  W d    n1 stw   Y  |j	j
t
jksJ |d	|  I d H  | d
I d H \}}|d	ksJ || ksJ | d| I d H  |d
I d H \}}|dksJ ||  ksJ d S )Ntype	127.0.0.1r   r   r   z^\[\w+ \d+\] Invalid argument$match)z	192.0.2.1r   z7^\[\w+ \d+\] (Address (already )?in use|Unknown error)$   xyz
      abc)r   triosocket
SOCK_DGRAMbindgetsocknamepytestraisesOSErrorvalueerrnoEINVAL
EADDRINUSEsendtorecvfrom)s1s2ipportexcdataaddrr	   r	   r
   test_basic_udp   s@   r)   c                     sf   t   tjjtjjd} tjjtjjd}| dI d H  |d|  I d H  | dI d H  d S )Nr   r   r   r   )r   r   r   r   r   r    r   r!   r"   r#   r	   r	   r
   test_msg_trunc=   s   r+   c                     sd  t   tjjtjjd} tjjtjjd}tjtdd |dI dH  W d   n1 s0w   Y  | dI dH  | 	 \}}|dksIJ |dksOJ |
d	| 	 I dH  | dI dH \}}|d	ksjJ ||	 ksrJ | 
d
|	 I dH  |dI dH }|d
ksJ | 
d|	 I dH dksJ td}tjtdd |j|ddI dH \}}W d   n1 sw   Y  ||I dH \}}|dksJ |dksJ || 	 ksJ | 
d|	 I dH dksJ td}||I dH }|dksJ |dksJ tjdkrtjjdkrtj}	nd}	tjttd}
|dI dH  W d   n	1 s6w   Y  |
jjtjksEJ tjtdd |d|	I dH  W d   n	1 saw   Y  tjtdd |
d|	| 	 I dH  W d   n	1 sw   Y  tjtdd |
d|	| 	 dI dH  W d   dS 1 sw   Y  dS )z!Test all recv methods for codecovr   zcode will most likely hangr   r   Nr   r   r   r   s   defs   ghi   z^partial recvfrom_into$   )nbytess
   ghi          jkls
   jkl       r   cpython      mnoz"^FakeNet send flags must be 0, notzwrong number of arguments$z	extra arg)r   r   r   r   r   r   NotImplementedErrorrecvr   r   r    r!   	bytearrayrecvfrom_into	recv_intosysplatformimplementationnameMSG_MOREr   ENOTCONN_MSGsendr   r   ENOTCONN	TypeError)r"   r#   r$   r%   r'   r(   bufr.   buf2flagsr&   r	   r	   r
   test_recv_methodsF   sh   $rD   win32z"functions not in socket on windows)reasonc                     s|  t jdkr<t  tjjtjjd} tjjtjjd}|dI d H  tjt	t
d}|dgI d H  W d    n1 s?w   Y  |jjtjksMJ | dgdd| I d H d	ks_J |d
I d H \}}}}|dksqJ |g kswJ |dks}J ||  ksJ | d| I d H dksJ td}td	}|||gI d H }	|	\}
}}}|
dksJ |dksJ |dksJ |g ksJ |dksJ ||  ksJ | d| I d H dksJ td}||gI d H }	|	\}
}}}|
dksJ |dksJ |g ksJ |tjksJ ||  ksJ tjtdd | dI d H  W d    d S 1 s5w   Y  d S d S )NrE   r   r   r   r2   r/   r	   r   r,   r   s   xyzw   r-   s   xys   zw s   xyzwv   z.^'FakeSocket' object has no attribute 'share'$)r8   r9   r   r   r   r   r   r   r   r   r=   sendmsgr   r   r?   r   recvmsgr    r5   recvmsg_into	MSG_TRUNCAttributeErrorshare)r"   r#   r&   r'   ancdata	msg_flagsr(   buf1rB   retr.   r	   r	   r
   test_nonwindows_functionality   sV   $$rS   z#windows-specific fakesocket testingc                     s>  t jdkrt  tjjtjjd} tjjtjjd}| dI d H  tjt	dd | 
dgdd| I d H  W d    n1 sCw   Y  tjt	d	d |d W d    n1 s_w   Y  tjt	d
d |g  W d    n1 s{w   Y  tt | d W d    d S 1 sw   Y  d S d S )NrE   r   r   z0^'FakeSocket' object has no attribute 'sendmsg'$r   r/   r	   r   z0^'FakeSocket' object has no attribute 'recvmsg'$z5^'FakeSocket' object has no attribute 'recvmsg_into'$)r8   r9   r   r   r   r   r   r   r   rM   rI   r   rJ   rK   r3   rN   r*   r	   r	   r
   test_windows_functionality   s8   
"rT   c                      sB   t   tt tj  W d    d S 1 sw   Y  d S r   )r   r   r   r3   r   r   r	   r	   r	   r
   test_basic_tcp   s
   "rU   c                     sj  t   tjjtjjd} tjtdd | tjtj	 W d    n1 s'w   Y  tjt
dd | tjtjd W d    n1 sGw   Y  tjtdd | tjtjd W d    n1 sgw   Y  tjtdd | tjtjd W d    n1 sw   Y  | d tjt
d	d | d W d    n1 sw   Y  |  rJ d S )
Nr   z0^FakeNet doesn't implement getsockopt\(\d, \d\)$r   z%^FakeNet always has IPV6_V6ONLY=True$Fz:^FakeNet doesn't implement setsockopt\(\d+, \d+, \.\.\.\)$Tr1   z(^FakeNet can't make inheritable sockets$)r   r   r   r   r   r   r   
getsockoptIPPROTO_TCPTCP_NODELAYr3   
setsockoptIPPROTO_IPV6IPV6_V6ONLY
SOL_SOCKETSO_REUSEADDRset_inheritableget_inheritable)r"   r	   r	   r
   test_not_implemented_functions   sF   
r`   c                     s   t   tjjtjjd} tjttd}|   W d    n1 s#w   Y  |j	j
t
jks1J | dI d H  tjtdd |   W d    d S 1 sPw   Y  d S )Nr   r   r   zI^This method seems to assume that self._binding has a remote UDPEndpoint$)r   r   r   r   r   r   r   r=   getpeernamer   r   r?   r   AssertionError)r"   r&   r	   r	   r
   test_getpeername  s   

"rc   c                     s  t   tjttdtjj d tj } W d    n1 s#w   Y  tjjtjj	d} | 
 dks9J | dI d H  | 
 \}}|dksMJ |dksSJ tjjtjtj	d}|
 dkseJ |dI d H  |
 ^}}}|d	kszJ |dksJ |ddgksJ d S )
Nz#FakeNet doesn't (yet) support type=r   r   )z0.0.0.0r   r   r   )familyr   )z::r   z::1)r   r   r   r3   reescaper   r   SOCK_STREAMr   r   r   AF_INET6)r"   r$   r%   r#   _r	   r	   r
   	test_init   s.   	rj   )r   N)r   re   r   r8   r   r   trio.testing._fake_netr   r9   r=   r   r)   r+   rD   markskipifrS   rT   rU   r`   rc   rj   r	   r	   r	   r
   <module>   s<    



#
	E5


(