a
    QIhL&                     @   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rLdZ	nejdkr\dZ	ndZ	edd	d
Z
ddddZddddZddddZejjejdkddddddZejjejdkddddddZddddZddddZddddZd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	   R/var/www/html/venv_bot_3.9/lib/python3.9/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sRJ |dks^J tjtdd }| dI d H  W d    n1 s0    Y  |j	j
t
jksJ tjtdd$}|d|fI d H  W d    n1 s0    Y  |j	j
t
jksJ |d	|  I d H  | d
I d H \}}|d	ks<J || ksNJ | 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:    .2r)   c                     sd   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                     sn  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 s^0    Y  | dI dH  | 	 \}}|dksJ |d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sJ | 
d|	 I dH dks6J td}tjtdd( |j|ddI dH \}}W d   n1 s|0    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 sx0    Y  |
jjtjksJ tjtdd" |d|	I dH  W d   n1 s0    Y  tjtdd( |
d|	| 	 I dH  W d   n1 s0    Y  tjtdd* |
d|	| 	 dI dH  W d   n1 s`0    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   sZ    . 8 028rD   win32z"functions not in socket on windows)reasonc                     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	t
d"}|dgI d H  W d    n1 s|0    Y  |jjtjksJ | dgdd| I d H d	ksJ |d
I d H \}}}}|dksJ |g ksJ |dksJ ||  ks
J | d| I d H dks*J td}td	}|||gI d H }	|	\}
}}}|
dkshJ |dksvJ |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sJ |dksJ |g ks"J |tjks2J ||  ksDJ tjtdd  | dI d H  W d    n1 sz0    Y  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'   ancdataZ	msg_flagsr(   Zbuf1rB   retr.   r	   r	   r
   test_nonwindows_functionality   sN    0$  rQ   z#windows-specific fakesocket testingc                     s:  t jdkr6t  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 s0    Y  tjt	d	d |d W d    n1 s0    Y  tjt	d
d |g  W d    n1 s0    Y  tt | d W d    n1 s,0    Y  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   s,    :((rR   c                      s>   t   tt tj  W d    n1 s00    Y  d S r   )r   r   r   r3   r   r   r	   r	   r	   r
   test_basic_tcp   s    rS   c                     sn  t   tjjtjjd} tjtdd  | tjtj	 W d    n1 sL0    Y  tjt
dd" | tjtjd W d    n1 s0    Y  tjtdd" | tjtjd W d    n1 s0    Y  tjtdd" | tjtjd W d    n1 s0    Y  | d tjt
d	d | d W d    n1 sR0    Y  |  rjJ 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   s:    .002
*r^   c                     s   t   tjjtjjd} tjttd}|   W d    n1 sD0    Y  |j	j
t
jks`J | dI d H  tjtdd |   W d    n1 s0    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    &ra   c                     s  t   tjttdtjj d tj } W d    n1 sD0    Y  tjjtjj	d} | 
 dkspJ | dI d H  | 
 \}}|dksJ |dksJ tjjtjtj	d}|
 dksJ |dI d H  |
 ^}}}|d	ksJ |dksJ |ddgksJ 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*    (rh   )r   rc   r   r8   r   r   Ztrio.testing._fake_netr   r9   r=   r   r)   r+   rD   markZskipifrQ   rR   rS   r^   ra   rh   r	   r	   r	   r
   <module>   s:   

#	E5(