
    <ed3                     R   d dl Z d dlZd dlZd dlZd dlmZ d dlmZmZ d dl	Z	 ej
        d            ej        d          Z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ej        d             ZdefdZ G d de	j                  Z G d de          Z G d de          ZeZ G d de	j                  Z G d de	j                  Z G d de          Z e!dk    r e	j"                     dS dS )     N)support)socket_helperwarnings_helperT)module	telnetlibc                 *   |                                  |                                  	 |                                \  }}|                                 n# t          $ r Y nw xY w|                                 d S # |                                 w xY wN)listensetacceptcloseTimeoutError)evtservconnaddrs       */usr/lib/python3.11/test/test_telnetlib.pyserverr      s    KKMMMGGIII[[]]
d

    	



s)   +A A< 
A# A< "A##A< <Bc                   D    e Zd Zd Zd Zd Zd Zd Zd Zd Z	d Z
d	 Zd
S )GeneralTestsc                    t          j                    | _        t          j        t          j        t          j                  | _        | j                            d           t          j	        | j                  | _
        t          j        t          | j        | j        f          | _        d| j        _        | j                                         | j                                         d S )N<   )targetargsT)	threadingEventr   socketAF_INETSOCK_STREAMsock
settimeoutr   	bind_portportThreadr   threaddaemonstartwaitselfs    r   setUpzGeneralTests.setUp   s    ?$$M&.&2DEE		R   !+DI66	&fDHTY;OPPP!    c                 <    | j                                          | ` d S r	   )r%   joinr)   s    r   tearDownzGeneralTests.tearDown'   s    KKKr,   c                     t                               t          | j                  }|j                                         d S r	   )r   TelnetHOSTr#   r    r   r*   telnets     r   	testBasiczGeneralTests.testBasic+   s3    !!$	22r,   c                    t                               t          | j                  5 }|                     |                                           d d d            n# 1 swxY w Y   |                     |                                           d S r	   )r   r1   r2   r#   assertIsNotNone
get_socketassertIsNone)r*   tns     r   testContextManagerzGeneralTests.testContextManager0   s    dDI.. 	2"  111	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2"--//*****s   (AA!Ac                    |                      t          j                    d u            t          j        d           	 t                              t          | j                  }t          j        d            n# t          j        d            w xY w|                     |j	        
                                d           |j	                                         d S )N   )
assertTruer   getdefaulttimeoutsetdefaulttimeoutr   r1   r2   r#   assertEqualr    
gettimeoutr   r3   s     r   testTimeoutDefaultzGeneralTests.testTimeoutDefault5   s    022d:;;; $$$	+%%dDI66F$T****F$T****//112666s   %A8 8Bc                    |                      t          j                    d u            t          j        d           	 t                              t          | j        d           }t          j        d            n# t          j        d            w xY w|                      |j        	                                d u            |j        
                                 d S Nr=   )timeout)r>   r   r?   r@   r   r1   r2   r#   r    rB   r   r3   s     r   testTimeoutNonezGeneralTests.testTimeoutNone?   s    022d:;;; $$$	+%%dDIt%DDF$T****F$T****..00D8999s   'A: :Bc                     t                               t          | j        d          }|                     |j                                        d           |j                                         d S rE   )r   r1   r2   r#   rA   r    rB   r   r3   s     r   testTimeoutValuezGeneralTests.testTimeoutValueJ   s\    !!$	2!>>//112666r,   c                    t                                           }|                    t          | j        d           |                     |j                                        d           |j                                         d S rE   )	r   r1   openr2   r#   rA   r    rB   r   r3   s     r   testTimeoutOpenzGeneralTests.testTimeoutOpenO   sk    !!##D$)R000//112666r,   c                 X   t                               t          | j        d          }|j        }|                     |                                |           |                     |                                |                                           |j                                         d S rE   )	r   r1   r2   r#   r    rA   r8   filenor   )r*   r4   t_socks      r   testGetterszGeneralTests.testGettersU   s    !!$	2!>>**,,f555&--//:::r,   N)__name__
__module____qualname__r+   r/   r5   r;   rC   rG   rI   rL   rP    r,   r   r   r      s              
+ + +
  	 	 	  
      r,   r   c                   $    e Zd Z	 ddZd Zd ZdS )
SocketStubrT   c                 J    t          |          | _        g | _        d| _        d S )NF)listreadswritesblock)r*   rY   s     r   __init__zSocketStub.__init___   s!    %[[



r,   c                 :    | j                             |           d S r	   )rZ   append)r*   datas     r   sendallzSocketStub.sendallc   s    4     r,   c                 ,   d}| j         rJt          |          |k     r7|| j                             d          z  }| j         rt          |          |k     7t          |          |k    r-| j                             d||d                     |d |         }|S )Nr,   r   )rY   lenpopinsert)r*   sizeouts      r   recvzSocketStub.recve   s    j 	%SXX__4:>>!$$$C j 	%SXX__s88d??JaTUU,,,ete*C
r,   N)rT   )rQ   rR   rS   r\   r`   rg   rT   r,   r   rV   rV   ]   sI        4   ! ! !    r,   rV   c                   &    e Zd Zd Zd Zd Zd ZdS )TelnetAlikec                     t                      r	   )NotImplementedErrorr)   s    r   rN   zTelnetAlike.filenoo   s    !###r,   c                     d S r	   rT   r)   s    r   r   zTelnetAlike.closeq   s      r,   c                     | j         j         S r	   )r    r[   r)   s    r   
sock_availzTelnetAlike.sock_availr   s    IO#$r,   c                     t          j                    5 }t          j        j        | |g|R   d d d            n# 1 swxY w Y   | xj        |                                z  c_        d S r	   )r   captured_stdoutr   r1   msg	_messagesgetvalue)r*   rq   r   rf   s       r   rq   zTelnetAlike.msgt   s    $&& 	3# s2T2222	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3#,,..(s   9= =N)rQ   rR   rS   rN   r   rn   rq   rT   r,   r   ri   ri   n   sJ        $ $ $% % %    r,   ri   c                   F    e Zd Zd Zed             ZddZd ZddZd Z	dS )	MockSelectorc                     i | _         d S r	   keysr)   s    r   r\   zMockSelector.__init__|   s    			r,   c                     dS )NgMbP?rT   r)   s    r   
resolutionzMockSelector.resolution   s    tr,   Nc                 H    t          j        |d||          }|| j        |<   |S )Nr   )	selectorsSelectorKeyrx   )r*   fileobjeventsr_   keys        r   registerzMockSelector.register   s)    #GQ== 	'
r,   c                 6    | j                             |          S r	   )rx   rc   )r*   r~   s     r   
unregisterzMockSelector.unregister   s    y}}W%%%r,   c                     d}| j         D ]%}t          |t                    r|j        j        } n&|rg S d | j                                         D             S )NFc                      g | ]}||j         fS rT   )r   ).0r   s     r   
<listcomp>z'MockSelector.select.<locals>.<listcomp>   s    DDD#S#*%DDDr,   )rx   
isinstanceri   r    r[   values)r*   rF   r[   r~   s       r   selectzMockSelector.select   sp    y 	 	G';// *  	EIDD1A1A1C1CDDDDr,   c                     | j         S r	   rw   r)   s    r   get_mapzMockSelector.get_map   s
    yr,   r	   )
rQ   rR   rS   r\   propertyrz   r   r   r   r   rT   r,   r   ru   ru   z   s             X   
& & &	E 	E 	E 	E    r,   ru   c              #       K    fd}	 t           j        }|t           _        d V  |t           _        n# |t           _        w xY wd S )Nc                  "    t                    S r	   )rV   )ignoredrY   s    r   new_connztest_socket.<locals>.new_conn   s    %   r,   )r   create_connection)rY   r   old_conns   `  r   test_socketr      sb      ! ! ! ! !,+#+ 


#+  8 ++++
Fs	   3 ArT   c                     	 | D ]}t          |           5   |dd          }d|_        d d d            n# 1 swxY w Y   |S )Ndummyr    )r   rr   )rY   clsxr4   s       r   test_telnetr      s    ' # #	U		  Wa               Ms   6::c                       e Zd Zd Zd ZdS )ExpectAndReadTestCasec                 J    t           j        | _        t          t           _        d S r	   )r   _TelnetSelectorold_selectorru   r)   s    r   r+   zExpectAndReadTestCase.setUp   s    %5$0	!!!r,   c                 (    | j         t          _        d S r	   )r   r   r   r)   s    r   r/   zExpectAndReadTestCase.tearDown   s    $($5	!!!r,   N)rQ   rR   rS   r+   r/   rT   r,   r   r   r      s2        1 1 16 6 6 6 6r,   r   c                   8    e Zd Zd Zd Zd Zd Zd Zd Zd Z	dS )		ReadTestsc                 j   	 dg}t          |          }|                    d          }|                     |d|j        |j        |j        j        f           g d}d                    |d d                   }t          |          }|                    d          }|                     ||           d S )Ns   xxxmatchyyy   matchs   xxxmatch)rq   )s2   xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxr   s2   yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyr,   )r   
read_untilrA   cookedqrawqr    rY   r.   )r*   wantr4   r_   rY   expects         r   test_read_untilzReadTests.test_read_until   s    	 T""  **{fkN_0`aaa000%*%%U##  **v&&&&&r,   c                     	 g d}d                     |          }t          |          }|                                }|                     ||           d S )N)  xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxs  yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyys  zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzr,   )r.   r   read_allrA   )r*   rY   r   r4   r_   s        r   test_read_allzReadTests.test_read_all   sZ    	 544%U##  v&&&r,   c                    	 t          dg          }|                                }|                     t          |          dk               t                      }|                                }|                     d|           d S )Nr      r,   )r   	read_somer>   rb   rA   )r*   r4   r_   s      r   test_read_somezReadTests.test_read_some   s{    	
 j\**!!D		Q'''!!d#####r,   c                 *   	 d}t          |g          }t          ||          }d|j        _        |                     d |                       d|j        _        d}	 	 | |            z  }n# t
          $ r Y nw xY w |                     ||           d S )Nd   xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxTr,   F)r   getattrr    r[   rA   EOFError)r*   	func_namer   r4   funcr_   s         r   _read_eagerzReadTests._read_eager   s    	
 dV$$vy)) ddff%%%!	   	
 	t$$$$$s   A, ,
A98A9c                 Z    |                      d           |                      d           d S )N
read_eagerread_very_eager)r   r)   s    r   test_read_eagerzReadTests.test_read_eager   s3     	&&&*+++++r,   c                 f   d}t          |g          }|                     d|                                           |j        j        r |                                 |j        j         |                                }|                     ||           |                     t          |j                   d S Nr   r,   )r   rA   read_very_lazyr    rY   	fill_rawqassertRaisesr   )r*   r   r4   r_   s       r   r   zReadTests.read_very_lazy   s    dV$$f3355666k 	 k 	$$&&t$$$(F$9:::::r,   c                    d}t          |g          }|                     d|                                           d}	 	 |                                }||z  }|s|                                 n# t          $ r Y n-w xY w|                     |                    |                     j|                     ||           d S r   )r   rA   	read_lazyr   r   r>   
startswith)r*   r   r4   r_   	read_datas        r   test_read_lazyzReadTests.test_read_lazy	  s    dV$$f..00111	3",,..		!  '$$&&&   OODOOD11222	3 	t$$$$$s   /A/ /
A<;A<N)
rQ   rR   rS   r   r   r   r   r   r   r   rT   r,   r   r   r      s}        ' ' '"
 
 
$ $ $% % %(, , ,; ; ;% % % % %r,   r   c                       e Zd ZddZd ZdS )nego_collectorNc                 0    d| _         || _        d| _        d S )Nr,   )seen	sb_gettersb_seen)r*   r   s     r   r\   znego_collector.__init__  s    	"r,   c                     | xj         ||z   z  c_         |t          j        k    r-| j        r(|                                 }| xj        |z  c_        d S d S d S r	   )r   tlSEr   r   )r*   r    cmdoptsb_datas        r   do_negoznego_collector.do_nego  sU    		S3Y		"%<<DN<nn&&GLLG#LLLL <<<r,   r	   )rQ   rR   rS   r\   r   rT   r,   r   r   r     s7           
$ $ $ $ $r,   r   c                       e Zd Z	 d ZdS )
WriteTestsc                    ddt           j        z   dz   dt           j        z   t           j        z   dz   t           j        z   t           j        dg}|D ]}t                      }|                    |           d                    |j        j                  }|                     |                    t           j        t           j        t           j        z             |           d S )Ns   data sample without IACs   data sample withs    one IACs   a fews    iacsr,   )	r   IACr   writer.   r    rZ   rA   replace)r*   data_sampler_   r4   writtens        r   
test_writezWriteTests.test_write+  s    1*RV3kA"&(261H<rvEv	
   	J 	JD ]]FLLhhv{122GT\\"&??IIII		J 	Jr,   N)rQ   rR   rS   r   rT   r,   r   r   r   '  s-        
J 
J 
J 
J 
Jr,   r   c                       e Zd Zej        ej        ej        ej        ej        ej	        ej
        ej        gZd Zd Zd Zd Zd Zd ZdS )OptionTestsc                 ,   	 t          |          }t          d                    |                    }t                      }|                    |j                   |                                }|j        }|                     t          |          dk               | 	                    |d d         | j
                   |                     |dd         t          j                   |                     |t          ||z                        d |_        d S )Nr,   r   r      )r   rb   r.   r   set_option_negotiation_callbackr   r   r   r>   assertIncmdsrA   r   NOOPTr   )r*   r_   r4   data_lennegotxtr   s          r   _test_commandzOptionTests._test_command;  s    ,T""sxx~~&&..t|<<<ooiC1%%%c"1"gty)))QqS28,,,3sSy>>222r,   c                 0   | j         D ]i}|                     t          j        |g           |                     dt          j        |dg           |                     dt          j        |dg           j|                     d | j         D                        d S )Nr   sd   yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy
   xxxxxxxxxx
   yyyyyyyyyyc                 ,    g | ]}t           j        |z   S rT   )r   r   )r   r   s     r   r   z1OptionTests.test_IAC_commands.<locals>.<listcomp>O  s    @@@cBFSL@@@r,   )r   r   r   r   )r*   r   s     r   test_IAC_commandszOptionTests.test_IAC_commandsI  s    9 	B 	BC}---
BFCBCCC	263@AAAA@@di@@@AAAAAr,   c                    t           j        t           j        z   t           j        z   t           j        z   t           j        t           j        z   t           j        z   t           j        z   t           j        z   t           j        z   t           j        t           j        z   t           j        z   t           j        z   dz   t           j        z   t           j        z   t           j        t           j        z   dz   t           j        z   t           j        z   t           j        z   t           j        z   t           j        t           j        z   dz   t           j        z   t           j        z   dz   t           j        z   t           j        z   g}t	          |          }t          |j                  }|                    |j                   |	                                }| 
                    |d           t           j        t           j        z   dz   t           j        z   dz   t           j        z   dz   }| 
                    |j        |           | 
                    d|                                           d |_        d S )Ns   aas   bbs   ccs   ddr,   s   aabb)r   r   SBr   r   r   read_sb_datar   r   r   rA   r   r   )r*   sendr4   r   r   want_sb_datas         r   test_SB_commandszOptionTests.test_SB_commandsQ  s   '"%/'"&0269BEA'"&05826ABEI&/"&826ABEI&/"&85@26IBEQ	 T""f122..t|<<<ooc"""v0269EABFJUR|444f1133444r,   c           	      X   dt           j        t          dg          z   dft           j        t           j        z   t          dg          z   dft           j        t           j        z   t          dg          z   dft           j        t           j        z   t          dg          z   dft           j        t           j        z   t          dg          z   dfg}|D ]Y\  }}t          |g          }|                    d           |	                                }| 
                    ||j                   Zd S )	N)   az: recv b''
X   z: IAC 88 not recognized
r   z: IAC DO 1
z: IAC DONT 1
z: IAC WILL 1
z: IAC WONT 1
)r   r   bytesDODONTWILLWONTr   set_debuglevelr   r   rr   )r*   given_a_expect_babr4   r   s         r   test_debuglevel_readsz!OptionTests.test_debuglevel_readsc  s    #VeRDkk!#>?Vbe^eQCjj(.9Vbgqc

*,<=Vbgqc

*,<=Vbgqc

*,<=	 % 	/ 	/DAq !%%F!!!$$$//##CMM!V-....r,   c                     t                      }|                    d           |                    d           d}|                     ||j                   d S )Nr   s   xxxzsend b'xxx'
)r   r   r   r   rr   )r*   r4   expecteds      r   test_debuglevel_writez!OptionTests.test_debuglevel_writev  sS    a   V"h 011111r,   c                    t          g           5  t          dd          }d|_        d d d            n# 1 swxY w Y   |                    d           |                    d           |                     |j        d           d S )Nr   0r   r   testz0.*test)r   ri   rr   r   rq   assertRegexr3   s     r   test_debug_accepts_str_portz'OptionTests.test_debug_accepts_str_port}  s    __ 	" 	" #..F!F	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	a   

6):66666s   488N)rQ   rR   rS   r   AOAYTBRKECELGAIPNOPr   r   r   r   r  r  r
  rT   r,   r   r   r   7  s        E262625"%rvFD  B B B  $  &2 2 27 7 7 7 7r,   r   c                       e Zd Zd ZdS )ExpectTestsc                     	 g d}t          |          }|                    dg          \  }}}|                     |d                    |d d                              d S )N)r   r   r   r   r,   r   )r   r   rA   r.   )r*   r   r4   _r_   s        r   test_expectzExpectTests.test_expect  sj    	
 0//T""]]H:..
1TsxxSbS	2233333r,   N)rQ   rR   rS   r  rT   r,   r   r  r    s#        	4 	4 	4 	4 	4r,   r  __main__)#r   r|   r   
contextlibr  r   test.supportr   r   unittestrequires_working_socketimport_deprecatedr   r2   r   TestCaser   objectrV   r1   ri   BaseSelectorru   contextmanagerr   r   r   r   r   r   r   r   r  rQ   mainrT   r,   r   <module>r#     s                      7 7 7 7 7 7 7 7   t , , , ,-O-k::		 	 	@ @ @ @ @8$ @ @ @D       "
 
 
 
 
)" 
 
 
    9)   @ 	 	 	 k    6 6 6 6 6H- 6 6 6`% `% `% `% `%% `% `% `%D
$ 
$ 
$ 
$ 
$V 
$ 
$ 
$ J J J J J" J J J M7 M7 M7 M7 M7(# M7 M7 M7`
4 
4 
4 
4 
4' 
4 
4 
4 zHMOOOOO r,   