
    ;e%                        d dl mZ d dlmZ d dlmZ d dlm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 ej        d          Z ej        d          Z ej        d	           ej        Zd
Z G d de	j                  Z G d dej                  Zd Z G d dej                  Z G d de          Z G d dej                  Z G d dej                  Z G d dej                  Zedk    r ej                     dS dS )    )support)socket_helper)threading_helper)warnings_helperNasynchatasyncoreT)modules   QUIT
c                       e Zd ZdZd Zd ZdS )echo_server   c                     t           j                            |            || _        t	          j        t          j        t          j                  | _        t          j	        | j                  | _
        d | _        d S N)	threadingThread__init__eventsocketAF_INETSOCK_STREAMsockr   	bind_portportstart_resend_event)selfr   s     )/usr/lib/python3.11/test/test_asynchat.pyr   zecho_server.__init__   s\    !!$'''
M&.&2DEE	!+DI66	 #'    c                    | j                                          | j                                         | j                                         \  }}d| _        t          | j        vr5|                    d          }|sn| j        |z   | _        t          | j        v5| j                            t          d          | _        | j	        r| j	        
                                 	 | j        rV|                    | j        d | j                           }t          j        d           | j        |d          | _        | j        Vn#  Y nxY w|                                 | j                                          d S )Nr   r   gMbP?)r   listenr   setacceptbufferSERVER_QUITrecvreplacer   waitsend
chunk_sizetimesleepclose)r   connclientdatans        r   runzecho_server.run(   sW   	
y''))f,,99Q<<D +,DK	 ,, k))+s;;" 	+#((***	 + .IIdk*:4?*:;<<
5!!!"k!""o + .	D

	s   AD= =EN)__name__
__module____qualname__r'   r   r/    r   r   r   r      s9         J' ' '    r   r   c                   B    e Zd Zd Zd Zej        dk    rd Zd Zd Z	dS )echo_clientc                    t           j                            |            g | _        |                     t
          j        t
          j                   |                     t          |f           | 
                    |           d| _        d S Nr   )r   
async_chatr   contentscreate_socketr   r   r   connectHOSTset_terminatorr!   )r   
terminatorserver_ports      r   r   zecho_client.__init__J   sq    $$T***6>6+=>>>dK()))J'''r   c                     d S r   r3   r   s    r   handle_connectzecho_client.handle_connectR   s    r   darwinc                     d S r   r3   rA   s    r   handle_exptzecho_client.handle_exptX   s    Dr   c                 &    | xj         |z  c_         d S r   )r!   )r   r-   s     r   collect_incoming_dataz!echo_client.collect_incoming_data[   s    tr   c                 R    | j                             | j                   d| _        d S r7   )r9   appendr!   rA   s    r   found_terminatorzecho_client.found_terminator^   s%    T[)))r   N)
r0   r1   r2   r   rB   sysplatformrE   rG   rJ   r3   r   r   r5   r5   H   sn             |x	 	 	      r   r5   c                      t          j                    } t          |           }|                                 |                                  |                                  t          j        d           || fS )N{Gz?)r   Eventr   startr%   clearr(   r)   )r   ss     r   start_echo_serverrS   b   s\    OEEAGGIII	JJLLL	KKMMMJte8Or   c                   l    e Zd ZdZd Zd Zd Zd Zd Zd Z	d Z
d	 Zd
 Zd Zd Zd Zd Zd Zd ZdS )TestAsynchatFc                 6    t          j                    | _        d S r   )r   threading_setup_threadsrA   s    r   setUpzTestAsynchat.setUpo   s    (8::r   c                 ,    t          j        | j          d S r   )r   threading_cleanuprX   rA   s    r   tearDownzTestAsynchat.tearDownr   s    *DM::::r   c                    t          j                    }t          |          }||_        |                                 |                                 |                                 t          j        d           t          ||j
                  }|                    d           |                    d|z              |                    d|z              |                    t                     t                              | j        dd           t!          j        |           |                     |j        ddg           d S )NrN   s   hello s   world   I'm not dead yet!,  use_pollcounttimeout   hello world)r   rO   r   r'   rP   r%   rQ   r(   r)   r5   r   pushr"   r   loopusepollr   join_threadassertEqualr9   )r   termserver_chunkr   rR   cs         r   line_terminator_checkz"TestAsynchat.line_terminator_checku   s   !!#				


4af%%	y	x$	#d*+++	{t|3DDD$Q'''n6J%KLLLLLr   c                 <    dD ]}|                      d|           d S )Nr            
rm   r   ls     r   test_line_terminator1z"TestAsynchat.test_line_terminator1   s4     	1 	1A&&ua0000	1 	1r   c                 <    dD ]}|                      d|           d S )Nro   s   
rs   rt   s     r   test_line_terminator2z"TestAsynchat.test_line_terminator2   s4     	3 	3A&&w2222	3 	3r   c                 <    dD ]}|                      d|           d S )Nro   s   qqqrs   rt   s     r   test_line_terminator3z"TestAsynchat.test_line_terminator3   s4     	2 	2A&&vq1111	2 	2r   c                 h   t                      \  }}t          ||j                  }d}|                    |           |                    t                     t
                              | j        dd           t          j	        |           | 
                    |j        |d |         g           d S Ns   hello world, I'm not dead yet!
r_   rN   r`   rS   r5   r   re   r"   r   rf   rg   r   rh   ri   r9   )r   termlenrR   r   rl   r-   s         r   numeric_terminator_checkz%TestAsynchat.numeric_terminator_check   s    $&&5((2	t	{t|3DDD$Q'''d8G8n%566666r   c                 0    |                      d           d S )Nr   r   rA   s    r   test_numeric_terminator1z%TestAsynchat.test_numeric_terminator1   s     	%%a(((((r   c                 0    |                      d           d S )N   r   rA   s    r   test_numeric_terminator2z%TestAsynchat.test_numeric_terminator2   s    %%a(((((r   c                    t                      \  }}t          d |j                  }d}|                    |           |                    t                     t
                              | j        dd           t          j	        |           | 
                    |j        g            | 
                    |j        |           d S r|   )rS   r5   r   re   r"   r   rf   rg   r   rh   ri   r9   r!   r   rR   r   rl   r-   s        r   test_none_terminatorz!TestAsynchat.test_none_terminator   s    $&&5af%%2	t	{t|3DDD$Q'''R(((4(((((r   c                 n   t                      \  }}t          d|j                  }d}t                              |t
          z   d          }|                    |           t                              | j	        dd           t          j        |           |                     |j        dd	g           d S )
Nrr      hello world
I'm not dead yet!
   )buffer_sizer_   rN   r`   rd   r^   )rS   r5   r   r   simple_producerr"   push_with_producerr   rf   rg   r   rh   ri   r9   )r   rR   r   rl   r-   ps         r   test_simple_producerz!TestAsynchat.test_simple_producer   s    $&&5qv&&2$$T+%51$EE	Qt|3DDD$Q'''n6J%KLLLLLr   c                 6   t                      \  }}t          d|j                  }d}|                    |t          z              t
                              | j        dd           t          j	        |           | 
                    |j        ddg           d S )Nrr   r   r_   rN   r`   rd   r^   )rS   r5   r   r   r"   r   rf   rg   r   rh   ri   r9   r   s        r   test_string_producerz!TestAsynchat.test_string_producer   s    $&&5qv&&2	T+-...t|3DDD$Q'''n6J%KLLLLLr   c                 V   t                      \  }}t          d|j                  }|                    d           |                    t                     t
                              | j        dd           t          j	        |           | 
                    |j        g d           d S )Nrr   s   hello world

I'm not dead yet!
r_   rN   r`   )rd   r   r^   r}   r   rR   r   rl   s       r   test_empty_linezTestAsynchat.test_empty_line   s    $&&5qv&&	4555	{t|3DDD$Q'''DDD	F 	F 	F 	F 	Fr   c                 ,   t                      \  }}t          j                    |_        t	          d|j                  }|                    d           |                    t                     |                                 t          
                    | j        dd           |j                                         t          j        |           |                     |j        g            |                     t%          |j                  d           d S )Nrr   r   r_   rN   r`   r   )rS   r   rO   r   r5   r   re   r"   close_when_doner   rf   rg   r   r   rh   ri   r9   assertGreaterlenr!   r   s       r   test_close_when_donez!TestAsynchat.test_close_when_done   s    $&&5(00qv&&	2333	{	t|3DDD 	
  """$Q'''R((( 	3qx==!,,,,,r   c                 f   t                      \  }}t          d|j                  }d}|                    |           |                    t	          |                     |                    t          |                     |                     t          |j        d           |                     t          |j        d           |                    t                     t          
                    | j        dd           t          j        |           |                     |j        g d           d S )	Nrr   s   bytes

   unicoder_   rN   r`   )   bytesr   r   )rS   r5   r   re   	bytearray
memoryviewassertRaises	TypeErrorr"   r   rf   rg   r   rh   ri   r9   r   s        r   	test_pushzTestAsynchat.test_push   s     %&&5qv&&	t	y	z$   )QVR000)QVY777	{t|3DDD$Q'''%C%C%CDDDDDr   N)r0   r1   r2   rg   rY   r\   rm   rv   rx   rz   r   r   r   r   r   r   r   r   r   r3   r   r   rU   rU   l   s       G; ; ;; ; ;M M M,1 1 1
3 3 3
2 2 2

7 
7 
7) ) )
) ) )) ) )	M 	M 	MM M M
F 
F 
F- - -,E E E E Er   rU   c                       e Zd ZdZdS )TestAsynchat_WithPollTN)r0   r1   r2   rg   r3   r   r   r   r     s        GGGr   r   c                       e Zd Zd ZdS )TestAsynchatMockedc                    t           j                                        }t          t          j                  |j        _        t          	                                }|
                    |           |                     |j                   t           j        j                            |d          5 }|                                 d d d            n# 1 swxY w Y   |                     |j                   d S )Nhandle_error)unittestmockMockBlockingIOErrorerrnoEAGAINr#   side_effectr   r8   
set_socket
addCleanupdel_channelpatchobjecthandle_readassertFalsecalled)r   r   
dispatchererrors       r   test_blockingioerrorz'TestAsynchatMocked.test_blockingioerror  s    }!!## / = =	((**
d###
.///] ''
NCC 	%u""$$$	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	%&&&&&s   /CCCN)r0   r1   r2   r   r3   r   r   r   r     s#        ' ' ' ' 'r   r   c                       e Zd Zd ZdS )TestHelperFunctionsc                     |                      t                              dd          d           |                      t                              dd          d           d S )Nzqwertyz
r   
qwertydkjfr   )ri   r   find_prefix_at_endrA   s    r   test_find_prefix_at_endz+TestHelperFunctions.test_find_prefix_at_end  sT    44ZHH!LLL44\6JJANNNNNr   N)r0   r1   r2   r   r3   r   r   r   r     s(        O O O O Or   r   c                       e Zd Zd ZdS )TestNotConnectedc                 z    t                                           }|                     t          |j        d           d S )N)r   r8   r   
ValueErrorr=   )r   r,   s     r   !test_disallow_negative_terminatorz2TestNotConnected.test_disallow_negative_terminator  s4    $$&&*f&;R@@@@@r   N)r0   r1   r2   r   r3   r   r   r   r     s(        A A A A Ar   r   __main__) testr   test.supportr   r   r   r   r   rK   r   r(   r   unittest.mockimport_deprecatedr   r   requires_working_socketr<   r"   r   r   r8   r5   rS   TestCaserU   r   r   r   r   r0   mainr3   r   r   <module>r      sl         & & & & & & ) ) ) ) ) ) ( ( ( ( ( (   



           -?,Z88,?,Z88  t , , , ,, , , , ,)" , , ,\    (%   4  TE TE TE TE TE8$ TE TE TEn    L   ' ' ' ' '* ' ' 'O O O O O(+ O O OA A A A Ax( A A A zHMOOOOO r   