
    d;+                     (   d Z ddlmZ ddlmZ ddlmZ ddlmZm	Z	m
Z
mZmZmZmZmZmZmZmZ  G d d          Z G d	 d
ee          Z G d de          Z G d dee          Z G d de          Z G d de          Z G d de          ZdS )z/Tests for the smart protocol utility functions.    )BytesIO)TestCase   )HangupException)	MULTI_ACKMULTI_ACK_DETAILED
SINGLE_ACKBufferedPktLineWriterGitProtocolErrorPktLineParserProtocolReceivableProtocolack_typeextract_capabilitiesextract_want_line_capabilitiesc                   V    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S )BaseProtocolTestsc                     | j                             d            |                     | j                                        d           d S )N   0000protowrite_pkt_lineassertEqualroutgetvalueselfs    _/home/feoh/.local/pipx/venvs/poetry/lib/python3.11/site-packages/dulwich/tests/test_protocol.pytest_write_pkt_line_nonez*BaseProtocolTests.test_write_pkt_line_none$   sB    
!!$'''++--w77777    c                     | j                             d           |                     | j                                        d           d S )N   blas   0007blar   r   s    r   test_write_pkt_linez%BaseProtocolTests.test_write_pkt_line(   sB    
!!&)))++--z:::::r    c                     | j                             d           | j                             d           |                     d| j                                                   d S )Ns   0008cmd r      cmd rinwriteseekr   r   read_pkt_liner   s    r   test_read_pkt_linez$BaseProtocolTests.test_read_pkt_line,   sT    {###a$*":":"<"<=====r    c                    | j                             d           | j                             d           |                     | j                                                   |                     d | j                                                   |                     | j                                                   | 	                    t          | j        j                   d S Nr   r   )r'   r(   r)   assertFalser   eofr   r*   
assertTrueassertRaisesr   r   s    r   test_eofzBaseProtocolTests.test_eof1   s    wa))***tz7799:::
(()))/4:+CDDDDDr    c                 0   | j                             d           | j                             d           |                     d| j                                                   | j                            d           |                     d| j                                                   |                     d | j                                                   | j                            d           |                     t          | j        j        d           d S )Ns   0007foo0000r      foo   bars   baz1s   baz2)	r'   r(   r)   r   r   r*   unread_pkt_liner1   
ValueErrorr   s    r   test_unread_pkt_linez&BaseProtocolTests.test_unread_pkt_line9   s    ~&&&a!9!9!;!;<<<
""6***!9!9!;!;<<<tz7799:::
""7+++*dj&@'JJJJJr    c                     | j                             d           | j                             d           |                     ddgt	          | j                                                             d S )Ns   0008cmd 0005l0000r   r%      l)r'   r(   r)   r   listr   read_pkt_seqr   s    r   test_read_pkt_seqz#BaseProtocolTests.test_read_pkt_seqC   sa    +,,,a'4$tz/F/F/H/H*I*IJJJJJr    c                     | j                             d           | j                             d           |                     d | j                                                   d S r-   r&   r   s    r   test_read_pkt_line_nonez)BaseProtocolTests.test_read_pkt_line_noneH   sT    watz7799:::::r    c                     | j                             d           | j                             d           |                     t          | j        j                   d S )Ns   0100too shortr   )r'   r(   r)   r1   r   r   r*   r   s    r   test_read_pkt_line_wrong_sizez/BaseProtocolTests.test_read_pkt_line_wrong_sizeM   sM    '(((a*DJ,DEEEEEr    c                     | j                             dd           |                     | j                                        d           d S )N   s   bloes	   0009bloe)r   write_sidebandr   r   r   r   s    r   test_write_sidebandz%BaseProtocolTests.test_write_sidebandR   sD    
!!!W---++--?????r    c                     | j                             ddd           |                     | j                                        d           d S )Ns   fetch   a   bs   000efetch a b )r   send_cmdr   r   r   r   s    r   test_send_cmdzBaseProtocolTests.test_send_cmdV   sG    
HdD111++--/FGGGGGr    c                     | j                             d           | j                             d           |                     dddgf| j                                                   d S )Ns   0012cmd arg1 arg2 r   s   cmds   arg1s   arg2)r'   r(   r)   r   r   read_cmdr   s    r   test_read_cmdzBaseProtocolTests.test_read_cmdZ   s_    2333a&7G"45tz7J7J7L7LMMMMMr    c                     | j                             d           | j                             d           |                     t          | j        j                   d S )Ns   0011cmd arg1 arg2r   )r'   r(   r)   r1   AssertionErrorr   rL   r   s    r   test_read_cmd_noend0z&BaseProtocolTests.test_read_cmd_noend0_   sL    .///a.$**=>>>>>r    N)__name__
__module____qualname__r   r#   r+   r2   r8   r=   r?   rA   rE   rJ   rM   rP    r    r   r   r   #   s        8 8 8; ; ;> > >
E E EK K KK K K
; ; ;
F F F
@ @ @H H HN N N
? ? ? ? ?r    r   c                       e Zd Zd ZdS )ProtocolTestsc                     t          j        |            t                      | _        t                      | _        t          | j        j        | j        j                  | _        d S N)	r   setUpr   r   r'   r   readr(   r   r   s    r   rY   zProtocolTests.setUpf   sE    tII	99dhmTY_==


r    N)rQ   rR   rS   rY   rT   r    r   rV   rV   e   s#        > > > > >r    rV   c                       e Zd ZdZd Zd ZdS )ReceivableBytesIOz4BytesIO with socket-like recv semantics for testing.c                 <    t          j        |            d| _        d S )NF)r   __init__allow_read_past_eofr   s    r   r^   zReceivableBytesIO.__init__p   s!    #(   r    c                    |                                  t          |                                           k    r| j        st	          d          |dk    r|                     d          S |                     |dz
            S )Nz Blocking read past end of socket   )telllenr   r_   r   rZ   )r   sizes     r   recvzReceivableBytesIO.recvt   sm     99;;#dmmoo....t7O."#EFFF19999Q<<yy"""r    N)rQ   rR   rS   __doc__r^   re   rT   r    r   r\   r\   m   s8        >>) ) )# # # # #r    r\   c                   2    e Zd Zd Zd Zd Zd Zd Zd ZdS )ReceivableProtocolTestsc                     t          j        |            t                      | _        t	                      | _        t          | j        j        | j        j                  | _	        d| j	        _
        d S )N   )r   rY   r   r   r\   r'   r   re   r(   r   	_rbufsizer   s    r   rY   zReceivableProtocolTests.setUp   sS    tII	$&&'tyGG
 
r    c                 R    d| j         _        t                              |            d S )NT)r'   r_   r   r2   r   s    r   r2   z ReceivableProtocolTests.test_eof   s(     (,$""4(((((r    c                 L   d}| j                             |           | j                             d           d}t          d          D ]}|| j                            d          z  } |                     t          | j        j        d           |                     ||           d S )NsF   1234567123456712345671234567123456712345671234567123456712345671234567r   r    
   )	r'   r(   r)   ranger   re   r1   r   r   )r   all_datadata_s       r   	test_recvz!ReceivableProtocolTests.test_recv   s    "x   a r 	( 	(ADJOOB'''DD*DJOR@@@4(((((r    c                 v   d}| j                             |           | j                             d           |                     d| j                            d                     |                     d| j                            d                     |                     t          | j        j        d           d S )Ns   1234567r      1234   s   567rC   rn   )	r'   r(   r)   r   r   re   rZ   r1   r   r   rp   s     r   test_recv_readz&ReceivableProtocolTests.test_recv_read   s    x   a$*//!"4"4555!3!3444*DJOR@@@@@r    c                    d}| j                             |           | j                             d           |                     d| j                            d                     |                     d| j                            d                     |                     d| j                            d                     |                     t          | j        j        d           d S )	Ns   12345678abcdefgr   ru   rv   s   5678abcrj   s   defgrn   )	r'   r(   r)   r   r   rZ   re   r1   r   rw   s     r   test_read_recvz&ReceivableProtocolTests.test_read_recv   s    %x   a$*//!"4"4555TZ__Q%7%7888$*//!"4"4555*DJOR@@@@@r    c                 v   d                     d t          d          D                       }| j                            |           | j                            d           d}t          dd          D ]}|| j                            |          z  }t          |          |z   t          |          k    r<|| j                            |          z  }|| j                            d          z  } n2|| j                            |          z  }| 	                                 | 
                    ||           d S )N   ,c              3   Z   K   | ]&}t          |                              d           V  'dS )asciiN)strencode).0is     r   	<genexpr>z5ReceivableProtocolTests.test_mixed.<locals>.<genexpr>   s4      HHSVV]]733HHHHHHr    d   r   r    ra   )joinro   r'   r(   r)   r   re   rc   rZ   failr   )r   rp   rq   r   s       r   
test_mixedz"ReceivableProtocolTests.test_mixed   s   99HHU3ZZHHHHHx   aq# 	 	ADJOOA&&&D4yy1}s8}},,
*** 
***
*** IIKKK4(((((r    N)	rQ   rR   rS   rY   r2   rs   rx   rz   r   rT   r    r   rh   rh      st        ! ! !) ) )) ) )A A AA A A) ) ) ) )r    rh   c                   ,    e Zd Zd Zd Zd Zd Zd ZdS )CapabilitiesTestCasec                 P    |                      dg ft          d                     d S )Nr"   r   r   r   s    r   
test_plainzCapabilitiesTestCase.test_plain   s+    &"';F'C'CDDDDDr    c                     |                      ddgft          d                     |                      ddgft          d                     |                      dddgft          d                     d S )Nr"      las   bla las   bla la
s	   bla la lar   r   s    r   	test_capszCapabilitiesTestCase.test_caps   s|    &5'*,@,L,LMMM&5'*,@,N,NOOO&5%.13G3V3VWWWWWr    c                 P    |                      dg ft          d                     d S )N   want blar   r   r   s    r   test_plain_want_linez)CapabilitiesTestCase.test_plain_want_line   s,    +r*,J;,W,WXXXXXr    c                     |                      ddgft          d                     |                      ddgft          d                     |                      dddgft          d                     d S )Nr   r   s   want bla las   want bla la
s   want bla la lar   r   s    r   test_caps_want_linez(CapabilitiesTestCase.test_caps_want_line   s    5'"*>::	
 	
 	
 	5'"*+;<<	
 	
 	
 	5%.)*+<==	
 	
 	
 	
 	
r    c                 V   |                      t          t          ddg                     |                      t          t          g d                     |                      t          t          g d                     |                      t          t          g d                     d S )Nr4   r5   )r4   r5   	   multi_ack)r4   r5      multi_ack_detailed)r4   r5   r   r   )r   r	   r   r   r   r   s    r   test_ack_typez"CapabilitiesTestCase.test_ack_type   s    Xvv.>%?%?@@@H-K-K-K$L$LMMM<<<==	
 	
 	

 	JJJKK	
 	
 	
 	
 	
r    N)rQ   rR   rS   r   r   r   r   r   rT   r    r   r   r      sh        E E EX X X
Y Y Y
 
 

 
 
 
 
r    r   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 )BufferedPktLineWriterTestsc                     t          j        |            t                      | _        t	          | j        j        d          | _        d S )N   )bufsize)r   rY   r   _outputr
   r(   _writerr   s    r   rY   z BufferedPktLineWriterTests.setUp   s:    tyy,T\-?LLLr    c                 `    |                      || j                                                   d S rX   )r   r   r   )r   expecteds     r   assertOutputEqualsz-BufferedPktLineWriterTests.assertOutputEquals   s,    4<#8#8#:#:;;;;;r    c                 l    | j                             d           | j                                          d S )Nr   )r   r)   truncater   s    r   	_truncatez$BufferedPktLineWriterTests._truncate   s2    !r    c                     | j                             d           |                     d           | j                                          |                     d           d S )Nr4   r    s   0007foor   r(   r   flushr   s    r   
test_writez%BufferedPktLineWriterTests.test_write   sZ    6"""$$$
+++++r    c                     | j                             d            |                     d           | j                                          |                     d           d S )Nr    r   r   r   s    r   test_write_nonez*BufferedPktLineWriterTests.test_write_none   sZ    4   $$$(((((r    c                 b    | j                                          |                     d           d S )Nr    )r   r   r   r   s    r   test_flush_emptyz+BufferedPktLineWriterTests.test_flush_empty  s0    $$$$$r    c                     | j                             d           | j                             d           |                     d           | j                                          |                     d           d S )Nr4   r5   r    s   0007foo0007barr   r   s    r   test_write_multiplez.BufferedPktLineWriterTests.test_write_multiple
  sq    6"""6"""$$$ 122222r    c                    | j                             d           | j                             d           |                     d           |                                  | j                                          |                     d           d S )Nr4   s   barbazs   0007foo000abarba   zr   r(   r   r   r   r   s    r   test_write_across_boundaryz5BufferedPktLineWriterTests.test_write_across_boundary  s    6"""9%%% 3444%%%%%r    c                 P   | j                             d           | j                             d           |                     d           |                                  | j                             d           | j                                          |                     d           d S )Nr4   s   barbas   0007foo0009barbar   s   0005zr   r   s    r   test_write_to_boundaryz1BufferedPktLineWriterTests.test_write_to_boundary  s    6"""8$$$ 34444   )))))r    N)rQ   rR   rS   rY   r   r   r   r   r   r   r   r   rT   r    r   r   r      s        M M M
< < <     , , ,) ) )% % %3 3 3& & &* * * * *r    r   c                        e Zd Zd Zd Zd ZdS )PktLineParserTestsc                     g }t          |j                  }|                    d           |                     |d g           |                     d|                                           d S )Nr   r    r   appendparser   get_tailr   pktlinesparsers      r   	test_nonezPktLineParserTests.test_none$  sf    x//WD6***foo//00000r    c                 0   g }t          |j                  }|                    d           |                    d           |                    d           |                     |dd g           |                     d|                                           d S )Ns   00s   05s   z0000r   r    r   r   s      r   test_small_fragmentsz'PktLineParserTests.test_small_fragments+  s    x//UUXD$<000foo//00000r    c                     g }t          |j                  }|                    d           |                     |ddg           |                     d|                                           d S )Ns   0005z0006abar   s   abrG   r   r   s      r   test_multiple_packetsz(PktLineParserTests.test_multiple_packets4  sh    x//_%%%D%=111v0011111r    N)rQ   rR   rS   r   r   r   rT   r    r   r   r   #  sA        1 1 11 1 12 2 2 2 2r    r   N)rf   ior   dulwich.testsr   errorsr   protocolr   r   r	   r
   r   r   r   r   r   r   r   r   rV   r\   rh   r   r   r   rT   r    r   <module>r      s!  * 6 5       " " " " " " $ $ $ $ $ $N N N N N N N N N N N N N N N N N N N N N N N N N N?? ?? ?? ?? ?? ?? ?? ??D> > > > >%x > > ># # # # # # # #$C) C) C) C) C)/ C) C) C)L%
 %
 %
 %
 %
8 %
 %
 %
P3* 3* 3* 3* 3* 3* 3* 3*l2 2 2 2 2 2 2 2 2 2r    