
    d                        d Z 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 ddl	m
Z
mZmZmZ ddlmZ ddlmZ dd	lmZmZ dd
lmZ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#m$Z$m%Z%m&Z& ddl'm(Z(m)Z) dZ*dZ+dZ,dZ-dZ.dZ/ G d d          Z0 G d de          Z1 G d de          Z2 G d de          Z3 G d de          Z4 G d de!          Z5 G d  d!e          Z6 G d" d#e          Z7 G d$ d%e          Z8 G d& d'          Z9 G d( d)e          Z: G d* d+e:          Z; G d, d-e:          Z< G d. d/e:          Z= G d0 d1e          Z> G d2 d3e          Z? G d4 d5e          Z@ G d6 d7e          ZAdS )8z$Tests for the smart protocol server.    N)BytesIO)TestCase   )GitProtocolErrorHangupExceptionNotGitRepositoryUnexpectedCommandError)MemoryObjectStore)Tree)ZERO_SHAformat_capability_line)
MemoryRepoRepo)BackendDictBackendFileSystemBackendMultiAckDetailedGraphWalkerImplMultiAckGraphWalkerImplPackHandlerReceivePackHandlerSingleAckGraphWalkerImplUploadPackHandler_find_shallow_ProtocolGraphWalker_split_proto_lineserve_commandupdate_server_info   )make_commitmake_tags(   1111111111111111111111111111111111111111s(   2222222222222222222222222222222222222222s(   3333333333333333333333333333333333333333s(   4444444444444444444444444444444444444444s(   5555555555555555555555555555555555555555s(   6666666666666666666666666666666666666666c                   4    e Zd Zd Zd Zd Zd Zd Zd	dZdS )
	TestProtoc                 ,    g | _         g g g g d| _        d S )N)r   r   r      )_output	_receivedselfs    ]/home/feoh/.local/pipx/venvs/poetry/lib/python3.11/site-packages/dulwich/tests/test_server.py__init__zTestProto.__init__6   s     B2"55    c                     || _         d S N)r%   )r(   output_liness     r)   
set_outputzTestProto.set_output:   s    #r+   c                     | j         r5| j                             d          }||                                dz   S d S t                      )Nr      
)r%   poprstripr   r(   datas     r)   read_pkt_linezTestProto.read_pkt_line=   sM    < 	$<##A&&D{{}}u,, t!###r+   c                 F    | j         |                             |           d S r-   r&   append)r(   bandr5   s      r)   write_sidebandzTestProto.write_sidebandH   s#    t##D)))))r+   c                 F    | j         d                             |           d S Nr   r8   r4   s     r)   write_pkt_linezTestProto.write_pkt_lineK   s#    q  &&&&&r+   r   c                 F    | j         |         }|                    d          S r=   )r&   r2   )r(   r:   liness      r)   get_received_linezTestProto.get_received_lineN   s    t$yy||r+   N)r   )	__name__
__module____qualname__r*   r/   r6   r;   r>   rA    r+   r)   r"   r"   5   ss        6 6 6$ $ $	$ 	$ 	$* * *' ' '     r+   r"   c                   @    e Zd Zd Zed             Zed             ZdS )TestGenericPackHandlerc                 J    t          j        | t                      d            d S r-   )r   r*   r   r'   s    r)   r*   zTestGenericPackHandler.__init__T   s!    T799d33333r+   c                 
    g dS )N   cap1   cap2   cap3rE   clss    r)   capabilitiesz#TestGenericPackHandler.capabilitiesW   s    ****r+   c                     dgS )NrL   rE   rN   s    r)   required_capabilitiesz,TestGenericPackHandler.required_capabilities[   s
    yr+   N)rB   rC   rD   r*   classmethodrP   rR   rE   r+   r)   rG   rG   S   sY        4 4 4 + + [+   [  r+   rG   c                   6     e Zd Z fdZd Zd Zd Zd Z xZS )HandlerTestCasec                 n    t                                                       t                      | _        d S r-   )supersetUprG   _handlerr(   	__class__s    r)   rX   zHandlerTestCase.setUpa   s%    .00r+   c                 r    	  ||i | d S # t           $ r }|                     |           Y d }~d S d }~ww xY wr-   )r   fail)r(   funcargskwargses        r)   assertSucceedszHandlerTestCase.assertSucceedse   s\    	D$!&!!!!! 	 	 	IIaLLLLLLLLL	s    
616c                 P    |                      dt          g d                     d S )Ns    cap1 cap2 cap3rJ   )assertEqualr   r'   s    r)   test_capability_linez$HandlerTestCase.test_capability_linek   s9    "#>#>#>??	
 	
 	
 	
 	
r+   c                    | j         j        }|                     |dg           |                     |ddg           |                     |g d           |                     t          |ddg           |                     t          |ddg           |                     t          |ddg           |                     d| j                                                    d | j         _        |                     |ddg           d S )NrL   rK   )rM   rK   rL      capxxxrM      ignoremec                      dS )N)rh   rE   rE   r+   r)   <lambda>z>HandlerTestCase.test_set_client_capabilities.<locals>.<lambda>   s    ~ r+   )rY   set_client_capabilitiesrb   assertRaisesr   assertNotInrP   innocuous_capabilities)r(   set_capss     r)   test_set_client_capabilitiesz,HandlerTestCase.test_set_client_capabilitiesq   s   =8Hwi000Hw&8999 	H&A&A&ABBB 	*Hy'6JKKK*Hw6HIII 	*Hw6LMMMdm&@&@&B&BCCC/E/E,Hw&<=====r+   c                 v   |                      t          | j        j        d           | j                                        }| j                            |           |D ]/}|                     | j                            |                     0|                     | j                            d                     d S )Ns   caprg   )rl   r   rY   has_capabilityrP   rk   
assertTrueassertFalse)r(   capscaps      r)   test_has_capabilityz#HandlerTestCase.test_has_capability   s    *DM,H&QQQ}))++--d333 	? 	?COODM88==>>>>55i@@AAAAAr+   )	rB   rC   rD   rX   rb   re   rp   rw   __classcell__r[   s   @r)   rU   rU   `   s{        1 1 1 1 1  
 
 
> > >$B B B B B B Br+   rU   c                   <     e Zd Z fdZd Zd Zd Zd Zd Z xZ	S )UploadPackHandlerTestCasec                    t                                                       t          j                    | _        |                     t          j        | j                   t          j	        | j                  | _
        t          j        | j                  | _        t          d| j        i          }t          |ddgt                                | _        d S N   /s   host=lolcathost)rW   rX   tempfilemkdtemppath
addCleanupshutilrmtreer   initrepo	init_bare_repor   r   r"   rY   r(   backendr[   s     r)   rX   zUploadPackHandlerTestCase.setUp   s    $&&	ty111Idi((	^DI..
tTZ011)d./
 
r+   c                 (   | j                                         }| j                             |           | j                                          | j                             d           | j                             d           |                     d| j         j                            d                     |                     d| j         j                            d                     |                     t          | j         j        j        d           d S )N   first message   second messager   )
rY   rR   rk   _start_pack_send_phaseprogressrd   protorA   rl   
IndexErrorr(   ru   s     r)   test_progressz'UploadPackHandlerTestCase.test_progress   s    }2244--d333,,.../0000111)4=+>+P+PQR+S+STTT*DM,?,Q,QRS,T,TUUU*dm&9&KQOOOOOr+   c                 L   t          | j                                                  dgz   }| j                            |           | j                            d           | j                            d           |                     t          | j        j        j        d           d S )Ns   no-progressr   r   r   )	listrY   rR   rk   r   rl   r   r   rA   r   s     r)   test_no_progressz*UploadPackHandlerTestCase.test_no_progress   s    DM7799::n=MM--d333/0000111*dm&9&KQOOOOOr+   c                 ,   t           t          t          d}| j        j                            t          t                               |                                D ]\  }}|| j        j        |<   ddd}|| j        j        _	        | j        j        
                    |           t          | j                                                  dgz   }| j                            |           |                     t           t          d| j                            || j                             | j                                        }| j                            |           |                     i | j                            || j                             d S )	N)   refs/tags/tag1   refs/tags/tag2   refs/heads/master)id(   1234123412341234123412341234123412341234(   5678567856785678567856785678567856785678)r   r   s   include-tag)r   r   )r   )ONETWOFOURr   object_store
add_objectr   itemsrefs_peeled_refsadd_packed_refsr   rY   rR   rk   rd   
get_tagged)r(   r   nameshapeeledru   s         r)   test_get_taggedz)UploadPackHandlerTestCase.test_get_tagged   su   """&
 
 	
**;$+?+?+?@@@ 	( 	(ID#$'DJOD!!++
 
 (.
$
''---DM7799::n=MM--d333c22M$$T
$;;	
 	
 	
 }2244--d333T]55d5LLMMMMMr+   c                 T   dt           i}t                      }| j        j                            |           | j        j                            t          t           |                     |                                D ]\  }}|| j        j        |<   | j        j	        
                    dt           z   dz   d dt           z   dd g           | j                                         |                     | j        j	                            d                              d                     d S )	Nr   r   tree   want s"    side-band-64k thin-pack ofs-delta   have    doner   s   PACK)r   r   r   r   r   r   r   r   rY   r   r/   handlers   rA   
startswith)r(   r   r   r   r   s        r)   test_nothing_to_do_but_wantsz6UploadPackHandlerTestCase.test_nothing_to_do_but_wants   s    "3'vv
**4000
**;#D+I+I+IJJJ 	( 	(ID#$'DJOD!!&&3!FF3	
 	
 	
 	+==a@@KKGTTUUUUUr+   c                    dt           i}t                      }| j        j                            |           | j        j                            t          t           |                     |                                D ]\  }}|| j        j        |<   | j        j	        
                    d g           | j                                         |                     g | j        j	        j        d                    d S )Nr   r   r   )r   r   r   r   r   r   r   r   rY   r   r/   r   rd   r&   )r(   r   r   refr   s        r)   test_nothing_to_do_no_wantsz5UploadPackHandlerTestCase.test_nothing_to_do_no_wants   s    !3'vv
**4000
**;#D+I+I+IJJJ

 	' 	'HC#&DJOC  &&v... 	T]0:1=>>>>>r+   )
rB   rC   rD   rX   r   r   r   r   r   rx   ry   s   @r)   r{   r{      s        	
 	
 	
 	
 	
P P PP P PN N N:V V V,? ? ? ? ? ? ?r+   r{   c                   P     e Zd Z fdZd ZddZd Zd Zd Zd Z	d	 Z
d
 Z xZS )FindShallowTestsc                 n    t                                                       t                      | _        d S r-   )rW   rX   r
   _storerZ   s    r)   rX   zFindShallowTests.setUp   s%    '))r+   c                 R    t          di |}| j                            |           |S )NrE   )r   r   r   )r(   attrscommits      r)   r   zFindShallowTests.make_commit   s0    %%u%%v&&&r+   r+   c                     g }g }t          |          D ]:}|                    |                     ||                     |d         j        g};|S )N)parentsmessage)ranger9   r   r   )r(   nr   commitsr   _s         r)   make_linear_commitsz$FindShallowTests.make_linear_commits   s[    q 	' 	'ANN4++GW+MMNNNr{~&GGr+   c                 f    |                      t          |          t          |                     d S r-   )rd   set)r(   expectedactuals      r)   assertSameElementsz#FindShallowTests.assertSameElements   s*    XF44444r+   c                 d   |                      d          \  }}}|                     |j        ht                      ft	          | j        |j        gd                     |                     |j        h|j        hft	          | j        |j        gd                     |                     |j        h|j        |j        hft	          | j        |j        gd                     |                     t                      |j        |j        |j        hft	          | j        |j        gd                     d S )Nr$   r   r      )r   rd   r   r   r   r   r(   c1c2c3s       r)   test_linearzFindShallowTests.test_linear   s+   --a00
BeWceemDK"%!DD	
 	
 	
 	eWrug$+w22	
 	
 	
 	eWruben%$+w22	
 	
 	
 	UURUBE25)*$+w22	
 	
 	
 	
 	
r+   c                    |                      dd          }|                      dd          }|                      dd          }|d         j        |d         j        |d         j        g}|                     |d         j        |d         j        |d         j        ht          |          ft	          | j        |d                     d S )Nr      a)r      b   cr   r   )r   r   rd   r   r   r   )r(   abcheadss        r)   test_multiple_independentz*FindShallowTests.test_multiple_independent  s    $$Q$55$$Q$55$$Q$551!A$'1Q47+dgqtw!(#e**5$+ua00	
 	
 	
 	
 	
r+   c                 R   |                      d          \  }}|                     |j        g          }|                     |j        g          }|                     |j        h|j        |j        |j        |j        hft	          | j        |j        |j        gd                     d S )Nr   r   r$   )r   r   r   rd   r   r   )r(   r   r   r   c4s        r)   test_multiple_overlappingz*FindShallowTests.test_multiple_overlapping  s    
 ))!,,Brug..rug.. 	eWrubeRUBE23$+ru~q99	
 	
 	
 	
 	
r+   c                 "   |                                  }|                                  }|                      |j        |j        g          }|                     |j        |j        h|j        hft          | j        |j        gd                     d S )Nr   r   )r   r   rd   r   r   r   s       r)   
test_mergezFindShallowTests.test_merge-  s    ruben55eRU^beW%$+w22	
 	
 	
 	
 	
r+   c                    |                      d          \  }}t          |d          }| j                            |           |                     |j        h|j        hft          | j        |j        gd                     d S )Nr   s   tag)r   )r   r    r   r   rd   r   r   )r(   r   r   tags       r)   test_tagzFindShallowTests.test_tag7  s    ))!,,Br'''s###eWrug$+x33	
 	
 	
 	
 	
r+   r+   )rB   rC   rD   rX   r   r   r   r   r   r   r   r   rx   ry   s   @r)   r   r      s        * * * * *  
   5 5 5
 
 
&	
 	
 	

 
 

 
 

 
 
 
 
 
 
r+   r   c                   $    e Zd Zed             ZdS )TestUploadPackHandlerc                     g S r-   rE   r'   s    r)   rR   z+TestUploadPackHandler.required_capabilitiesC  s    	r+   N)rB   rC   rD   rS   rR   rE   r+   r)   r   r   B  s-          [  r+   r   c                   $     e Zd Z fdZd Z xZS )ReceivePackHandlerTestCasec                     t                                                       t          j        g i           | _        t          d| j        i          }t          |ddgt                                | _        d S r}   )	rW   rX   r   r   r   r   r   r"   rY   r   s     r)   rX   z ReceivePackHandlerTestCase.setUpI  sb    )"b11
tTZ011*d./
 
r+   c                    t           t          d}| j        j                            |           t          t
          dgg}| j                            dg           | j                            |          }| 	                    |d         d         d           | 	                    |d         d         d           | 	                    |d         d         d           | 	                    |d         d         d           d S )N)r      refs/heads/fake-branchr   s   delete-refsr   s   unpackr   s   ok)
r   r   r   r   _updater   rY   rk   _apply_packrd   )r(   r   update_refsstatuss       r)   test_apply_pack_del_refz2ReceivePackHandlerTestCase.test_apply_pack_del_refQ  s    &)cJJ
%%%(56
 	--~.>???**;771y1111u---1'@AAA1u-----r+   )rB   rC   rD   rX   r   rx   ry   s   @r)   r   r   H  sG        
 
 
 
 
. . . . . . .r+   r   c                   $     e Zd Z fdZd Z xZS ) ProtocolGraphWalkerEmptyTestCasec                 V   t                                                       t          j        g i           | _        t          d| j        i          }t          t          |ddgt                                | j        j	        | j        j
        | j        j        j                  | _        d S )Nr~      host=lolcats)rW   rX   r   r   r   r   r   r   r"   r   
get_peeledr   get_symrefs_walkerr   s     r)   rX   z&ProtocolGraphWalkerEmptyTestCase.setUp`  s    )"b11
tTZ011+!'D/+BIKKPPJ#J!JO'	
 
r+   c                    | j         j                            g            |                     t          | j         j        i            |                     d | j         j                                                   | j         j                            d g           |                     g | j                             i                      |                     d | j         j                                                   d S r-   )r   r   r/   rl   r   determine_wantsrd   rA   r'   s    r)   test_empty_repositoryz6ProtocolGraphWalkerEmptyTestCase.test_empty_repositoryk  s    %%b)))/4<+GLLLt|1CCEEFFF%%tf---T\99"==>>>t|1CCEEFFFFFr+   )rB   rC   rD   rX   r   rx   ry   s   @r)   r   r   _  sN        	
 	
 	
 	
 	
G G G G G G Gr+   r   c                   f     e Zd Z f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 xZS )ProtocolGraphWalkerTestCasec           	      f   t                                                       t          t          g d          t          t          t          gd          t          t
          t          gd          t          t          t          gd          t          t          t
          gd          g}t          j	        |i           | _
        t          d| j
        i          }t          t          |ddgt                                | j
        j        | j
        j        | j
        j        j                  | _        d S )	No   r   r   commit_time   iM  i  i+  r~   r   )rW   rX   r   r   r   THREEr   FIVEr   r   r   r   r   r   r"   r   r   r   r   r   )r(   r   r   r[   s      r)   rX   z!ProtocolGraphWalkerTestCase.setUpw  s     3<<<33???53%SAAA4#C@@@4%cBBB
  )'266
tTZ011+!'D/+BIKKPPJ#J!JO'	
 
r+   c                    | j                             t          g           |                     | j                             g                      | j                             t
          g           |                     | j                             g                      | j                             t          g           |                     | j                             g                      d S r-   )r   	set_wantsr   rt   all_wants_satisfiedr   r  r'   s    r)   !test_all_wants_satisfied_no_havesz=ProtocolGraphWalkerTestCase.test_all_wants_satisfied_no_haves  s    u%%%99"==>>>u%%%99"==>>>w'''99"==>>>>>r+   c                    | j                             t          g           |                     | j                             t          g                     | j                             t
          g           |                     | j                             t          g                     | j                             t          g           |                     | j                             t          g                     d S r-   )r   r  r   rs   r	  r   r  r'   s    r)   "test_all_wants_satisfied_have_rootz>ProtocolGraphWalkerTestCase.test_all_wants_satisfied_have_root  s    u%%%88#??@@@u%%%88#??@@@w'''88#??@@@@@r+   c                 R   | j                             t          g           |                     | j                             t          g                     | j                             t
          g           |                     | j                             t          g                     d S r-   )r   r  r   rs   r	  r  rt   r'   s    r)   $test_all_wants_satisfied_have_branchz@ProtocolGraphWalkerTestCase.test_all_wants_satisfied_have_branch  s    u%%%88#??@@@w'''993%@@AAAAAr+   c                 h   | j                             t          t          g           |                     | j                             t          t          g                     |                     | j                             t          g                     |                     | j                             t          g                     |                     | j                             t          g                     |                     | j                             t          t          g                     d S r-   )
r   r  r   r  rs   r	  r   rt   r   r  r'   s    r)   test_all_wants_satisfiedz4ProtocolGraphWalkerTestCase.test_all_wants_satisfied  s    d|,,,88$FFGGG88#??@@@993%@@AAA995'BBCCC88#uFFGGGGGr+   c                    d}|                      dt          ft          dt          z   dz   |                     |                      dt          ft          dt          z   dz   |                     |                     t
          t          d|           |                     t          t          dt          z   dz   |           |                     t
          t          dt          z   dz   |           |                     t
          t          d|           |                      d	t          d
|                     |                      dt          d|                     d S )N)   wantr   Nr  r   r1   s
   want xxxx
r   s   foo s   barr   Ns   done
NNr+   )	rd   r   r   r   rl   r   r	   r  r   )r(   alloweds     r)   test_split_proto_linez1ProtocolGraphWalkerTestCase.test_split_proto_line  sT   *cN-hnu.DgNN	
 	
 	
 	cN-hnu.DgNN	
 	
 	
 	*,=~wWWW"uu$		
 	
 	
 	dNU"		
 	
 	
 	*,=vwOOO*;Iw*O*OPPP'8g'F'FGGGGGr+   c                 b   | j         j                            d g           |                     g | j                             i                      |                     d | j         j                                                   | j         j                            dt          z   dz   dt          z   d g           t          t          t          d}| j	        j
                            |           |                     t          t          g| j                             |                     d| j         _        |                     g | j                             |                     d| j         _        | j         j                            dt          z   dz   d g           |                     t          | j         j        |           | j         j                            d g           |                     g | j                             |                     | j         j                            dt          z   dz   dd g           |                     t          | j         j        |           | j         j                            dt          z   dz   d g           |                     t          | j         j        |           d S )Nr   s
    multi_ack)s   refs/heads/ref1s   refs/heads/ref2s   refs/heads/ref3TF   foo)r   r   r/   rd   r   rA   r   r   r  r   r   r   advertise_refsr   rl   r   )r(   r   s     r)   test_determine_wantsz0ProtocolGraphWalkerTestCase.test_determine_wants  sO   %%tf---T\99"==>>>t|1CCEEFFF%%3.3	
 	
 	
 !$ # %
 

 	
&&&#sT\%A%A%%H%HIII&*#T\99%@@AAA&+#%%x$'F&MNNN*DL,H%PPP%%tf---T\99%@@AAA%%x#~'Evt&TUUU*DL,H%PPP%%x$'F&MNNN*DL,H%PPPPPr+   c                 v   | j         j                            d g           t          t          t
          d}| j        j                            |           | j        j        	                    |           | j        j        	                    dt          i           | j         
                    |           g }	 | j         j                                        }|nId|v r|d |                    d                   }|                    |                                           j|                     t          dz   t          dz   t          dz   t
          dz   gt!          |                     t#          |          D ]A\  }}|                    d          r'|                     t          dz   ||d	z                       Bd S )
N)s   refs/heads/ref4s   refs/heads/ref5   refs/heads/tag6r  T    s    refs/heads/ref4s    refs/heads/ref5s    refs/heads/tag6^{}s    refs/heads/tag6r   )r   r   r/   r   r  SIXr   r   r   _update_peeledr   rA   indexr9   r3   rd   sorted	enumerateendswith)r(   r   r@   lineis        r)   "test_determine_wants_advertisementz>ProtocolGraphWalkerTestCase.test_determine_wants_advertisement  s   %%tf--- !% $ #
 

 	
&&&
&&u---
&&(:D'ABBB$$U+++	(<%7799D|$1djj1112LL'''	( 	****--))	 5MM	
 	
 	
 !'' 	N 	NGAt}}011 N  (>!>a!eMMM	N 	Nr+   c                     | j         j                            |d gz              | j                             |           d S r-   )r   r   r/   _handle_shallow_request)r(   r@   r   s      r)   r(  z3ProtocolGraphWalkerTestCase._handle_shallow_request  s=    %%etfn555,,U33333r+   c           	          |                      |t          t          | j        j        j        d                                d S r-   )rd   r   iterr   r   rA   )r(   r   s     r)   assertReceivedz*ProtocolGraphWalkerTestCase.assertReceived  sC    d4 2 DdKKLL	
 	
 	
 	
 	
r+   c                     |                      dgt          t          g           |                     t          t
          h| j        j                   |                     dt          z   dt
          z   g           d S )N	   deepen 2
   shallow )	r(  r   r  rd   r   r  r   shallowr+  r'   s    r)   .test_handle_shallow_request_no_client_shallowszJProtocolGraphWalkerTestCase.test_handle_shallow_request_no_client_shallows  st    $$m_tTlCCC#ut|';<<<c!e#	
 	
 	
 	
 	
r+   c                    dt           z   dz   dt          z   dz   dg}|                     |t          t          g           |                     t           t          h| j        j                   |                     g            d S )Nr.  r1   r-  )	r   r  r(  r   r  rd   r   r/  r+  r(   r@   s     r)   +test_handle_shallow_request_no_new_shallowszGProtocolGraphWalkerTestCase.test_handle_shallow_request_no_new_shallows%  s{    #%%%'

 	$$UT4L999#ut|';<<<Br+   c                    dt           z   dz   dg}|                     |t          t          g           |                     t
          h| j        j                   |                     dt
          z   dt           z   g           d S )Nr.  r1   s	   deepen 3
s
   unshallow )	r   r(  r   r  rd   r   r   r/  r+  r2  s     r)   &test_handle_shallow_request_unshallowszBProtocolGraphWalkerTestCase.test_handle_shallow_request_unshallows/  s    #%
 	$$UT4L999# 4555c!#	
 	
 	
 	
 	
r+   )rB   rC   rD   rX   r
  r  r  r  r  r  r&  r(  r+  r0  r3  r5  rx   ry   s   @r)   r   r   v  s        
 
 
 
 
,? ? ?A A AB B BH H HH H H2"Q "Q "QH#N #N #NN4 4 4
 
 


 
 
     
 
 
 
 
 
 
r+   r   c                   @    e Zd Zd Zd ZddZd Zd Zd Zd Z	d	 Z
d
S )TestProtocolGraphWalkerc                     g | _         g | _        d| _        d | _        d| _        d | _        d| _        d| _        d| _        d| _	        d S )NFT)
acksr@   wants_satisifiedstateless_rpcr  _impldone_requireddone_received_empty	pack_sentr'   s    r)   r*   z TestProtocolGraphWalker.__init__@  sQ    	
 %!#
!"r+   c                 T    | j                             d          \  }}|||v sJ ||fS r=   )r@   r2   )r(   r  commandr   s       r)   read_proto_linez'TestProtocolGraphWalker.read_proto_lineL  s:    z~~a((g%%%%|r+   r+   c                 >    | j                             ||f           d S r-   r9  r9   r(   r   ack_types      r)   send_ackz TestProtocolGraphWalker.send_ackR  s"    	#x)))))r+   c                 :    | j                             d           d S )NNs   nakrE  r'   s    r)   send_nakz TestProtocolGraphWalker.send_nakU  s    	(((((r+   c                     |r| j         S d S r-   )r:  )r(   havess     r)   r	  z+TestProtocolGraphWalker.all_wants_satisfiedX  s     	)((	) 	)r+   c                 H    | j         sd S | j                             d          S r=   )r9  r2   r'   s    r)   pop_ackzTestProtocolGraphWalker.pop_ack\  s%    y 	4y}}Qr+   c                 v    | j         sd S | j                             | j        | j                  | _        | j        S r-   )r<  handle_doner=  r>  r@  r'   s    r)   rQ  z#TestProtocolGraphWalker.handle_donea  s:    z 	F //0BDDVWW~r+   c                     d| _         d S )NT)r>  r'   s    r)   notify_donez#TestProtocolGraphWalker.notify_donei  s    !r+   Nr   )rB   rC   rD   r*   rC  rH  rK  r	  rO  rQ  rS  rE   r+   r)   r7  r7  ?  s        
 
 
  * * * *) ) )) ) )     
  " " " " "r+   r7  c                   H     e Zd ZdZ fdZd Zd Zd
dZd Zd Z	d	 Z
 xZS )AckGraphWalkerImplTestCasez0Base setup and asserts for AckGraphWalker tests.c                    t                                                       t                      | _        dt          fdt
          fdt          fdg| j        _        |                     | j                  | _	        | j	        | j        _	        d S )N   haver  )
rW   rX   r7  r   r   r   r  r@   impl_clsr<  rZ   s    r)   rX   z AckGraphWalkerImplTestCase.setUpp  so    .00cNcNe	
 ]]4<00
!Zr+   c                 `    |                      d | j                                                   d S r-   )rd   r   rO  r'   s    r)   assertNoAckz&AckGraphWalkerImplTestCase.assertNoAck|  s,    t|335566666r+   c                     |D ]4\  }}|                      ||f| j                                                   5|                                  d S r-   )rd   r   rO  rZ  )r(   r9  r   rG  s       r)   
assertAcksz%AckGraphWalkerImplTestCase.assertAcks  sZ    ! 	F 	FMCc8_dl.B.B.D.DEEEEr+   r+   c                 6    |                      ||fg           d S r-   )r\  rF  s      r)   	assertAckz$AckGraphWalkerImplTestCase.assertAck  s!    #x)*****r+   c                 2    |                      d d           d S rJ  )r^  r'   s    r)   	assertNakz$AckGraphWalkerImplTestCase.assertNak  s    tV$$$$$r+   c                 V    |                      |t          | j                             d S r-   )rd   nextr<  )r(   r   s     r)   assertNextEqualsz+AckGraphWalkerImplTestCase.assertNextEquals  s(    d4:../////r+   c                     |                      t          t          | j                   | j                                         d S r-   )rl   r   rb  r<  r   rQ  r'   s    r)   assertNextEmptyz*AckGraphWalkerImplTestCase.assertNextEmpty  s8     	*dDJ777  """""r+   r   )rB   rC   rD   __doc__rX   rZ  r\  r^  r`  rc  re  rx   ry   s   @r)   rU  rU  m  s        ::
( 
( 
( 
( 
(7 7 7  
+ + + +% % %0 0 0# # # # # # #r+   rU  c                   *    e Zd ZeZd Zd Zd Zd ZdS ) SingleAckGraphWalkerImplTestCasec                    |                      t                     |                                  |                      t                     | j                            t                     |                     t                     |                      t                     | j                            t                     |                                  |                      d            |                                  d S r-   )rc  r   rZ  r   r<  ackr^  r  r'   s    r)   test_single_ackz0SingleAckGraphWalkerImplTestCase.test_single_ack  s    c"""c"""
sse$$$
ud###r+   c                    d| j         j        d<   |                     t                     |                                  |                     t
                     | j                            t
                     |                     t
                     |                     t                     |                                  |                     d            |                                  d S Nr  r   )
r   r@   rc  r   rZ  r   r<  rj  r^  r  r'   s    r)   test_single_ack_flushz6SingleAckGraphWalkerImplTestCase.test_single_ack_flush  s    !-2c"""c"""
sse$$$d###r+   c                    |                      t                     |                                  |                      t                     |                                  |                      t                     |                                  |                      d            |                                  |                                  d S r-   rc  r   rZ  r   r  re  r`  r'   s    r)   test_single_ack_nakz4SingleAckGraphWalkerImplTestCase.test_single_ack_nak      c"""c"""e$$$d###r+   c                    d| j         j        d<   |                     t                     |                                  |                     t
                     |                                  |                     t                     |                                  |                     d            |                                  |                                  d S rm  )	r   r@   rc  r   rZ  r   r  re  r`  r'   s    r)   test_single_ack_nak_flushz:SingleAckGraphWalkerImplTestCase.test_single_ack_nak_flush  s    !-2c"""c"""e$$$d###r+   N)	rB   rC   rD   r   rX  rk  rn  rq  rt  rE   r+   r)   rh  rh    sU        'H    "      r+   rh  c                   *    e Zd ZeZd Zd Zd Zd ZdS )MultiAckGraphWalkerImplTestCasec                 8   |                      t                     |                                  |                      t                     | j                            t                     |                     t          d           |                      t                     | j                            t                     |                     t          d           |                      d            |                                  |                     t                     d S N   continue	rc  r   rZ  r   r<  rj  r^  r  re  r'   s    r)   test_multi_ackz.MultiAckGraphWalkerImplTestCase.test_multi_ack  s    c"""c"""
ssK(((e$$$
uuk***d###ur+   c                    |                      t                     |                                  |                      t                     | j                            t                     |                     t          d           |                      t                     |                                  |                      d            |                                  |                     t                     d S rx  rz  r'   s    r)   test_multi_ack_partialz6MultiAckGraphWalkerImplTestCase.test_multi_ack_partial  s    c"""c"""
ssK(((e$$$d###sr+   c                    dt           fddt          fdt          fdg| j        _        |                     t                      |                                  |                     t                     |                                  | j        	                    t                     | 
                    t          d           |                     t                     | j        	                    t                     | 
                    t          d           |                     d            |                                  | 
                    t                     d S )NrW  r  r  ry  )r   r   r  r   r@   rc  rZ  r`  r<  rj  r^  re  r'   s    r)   test_multi_ack_flushz4MultiAckGraphWalkerImplTestCase.test_multi_ack_flush  s   cNcNe
 	c"""c"""
ssK(((e$$$
uuk***d###ur+   c                    |                      t                     |                                  |                      t                     |                                  |                      t                     |                                  |                      d            |                                  |                                  d S r-   rp  r'   s    r)   test_multi_ack_nakz2MultiAckGraphWalkerImplTestCase.test_multi_ack_nak  rr  r+   N)	rB   rC   rD   r   rX  r{  r}  r  r  rE   r+   r)   rv  rv    sU        &H       2    r+   rv  c                   T    e Zd Z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S )'MultiAckDetailedGraphWalkerImplTestCasec                    |                      t                     |                                  |                      t                     | j                            t                     |                     t          d           |                      t                     | j                            t                     |                     t          d           d| j        _	        |                      d            | j        j
                            d           |                                  |                     t          dfdt          dfg           |                     | j        j                   d S )N   commonTr     readyrJ  r+   )rc  r   rZ  r   r<  rj  r^  r  r   r:  r@   r9   re  r\  rs   r@  r'   s    r)   r{  z6MultiAckDetailedGraphWalkerImplTestCase.test_multi_ack*  s*   c"""c"""
ssI&&&e$$$
uui((( )-%d###!!,///%*NUCLIJJJ./////r+   c                    d| j         _        |                     t                     |                                  |                     t
                     | j                            t
                     |                     t
          d           |                     t                     | j                            t                     |                     t          d           d| j         _
        |                     d            | j         j                            d           |                                  |                     t          dfdt          dfg           |                     | j         j                   d S )NFr  Tr  r  rJ  r+   )r   r=  rc  r   rZ  r   r<  rj  r^  r  r:  r@   r9   re  r\  rs   r@  r'   s    r)   test_multi_ack_nodonez=MultiAckDetailedGraphWalkerImplTestCase.test_multi_ack_nodone?  s4   %*"c"""c"""
ssI&&&e$$$
uui((( )-%d###!!,///%*NUCLIJJJ./////r+   c                    d| j         j        d<   |                     t                     |                                  |                     t
                     | j                            t
                     |                     t
          d           |                     t                     | j                            t                     |                     t          d           d| j         _
        |                                  |                     t          dfdg           |                     | j         j                   d S )Nr  r   r  Tr  rJ  )r   r@   rc  r   rZ  r   r<  rj  r^  r  r:  re  r\  rt   r@  r'   s    r)   test_multi_ack_flush_endz@MultiAckDetailedGraphWalkerImplTestCase.test_multi_ack_flush_endU  s
    ".2c"""c"""
ssI&&&e$$$
uui((( )-%%*N;<<</00000r+   c                    d| j         j        d<   d| j         _        |                     t                     |                                  |                     t                     | j                            t                     | 	                    t          d           |                     t                     | j                            t                     | 	                    t          d           d| j         _        |                                  |                     t          dfdt          dfg           |                     | j         j                   d S )	Nr  r   Fr  Tr  rJ  r+   )r   r@   r=  rc  r   rZ  r   r<  rj  r^  r  r:  re  r\  rs   r@  r'   s    r)   test_multi_ack_flush_end_nodonezGMultiAckDetailedGraphWalkerImplTestCase.test_multi_ack_flush_end_nodonek  s    ".2%*"c"""c"""
ssI&&&e$$$
uui((( )-%%*NUCLIJJJ./////r+   c                    |                      t                     |                                  |                      t                     | j                            t                     |                     t          d           |                      t                     |                                  |                      d            |                                  |                     t                     d S )Nr  rz  r'   s    r)   r}  z>MultiAckDetailedGraphWalkerImplTestCase.test_multi_ack_partial  s    c"""c"""
ssI&&&e$$$d###sr+   c                    dt           fddt          fdt          fddg| j        _        |                     t                      |                                  |                     t                     |                                  | j        	                    t                     | 
                    t          d           |                     t                     | j        	                    t                     | 
                    t          d           d| j        _        |                     d            |                                  |                     t          dfdt          dfg           d S )	NrW  r  r  r  Tr  rJ  r+   )r   r   r  r   r@   rc  rZ  r`  r<  rj  r^  r:  re  r\  r'   s    r)   r  z<MultiAckDetailedGraphWalkerImplTestCase.test_multi_ack_flush  s7    cNcNe
 	c"""c"""
ssI&&&e$$$
uui((((,%d###%*NUCLIJJJJJr+   c                    |                      t                     |                                  |                      t                     |                                  |                      t                     |                                  |                      d            |                                  |                                  |                                  |                     | j        j	                   d S r-   )
rc  r   rZ  r   r  re  r`  rs   r   r@  r'   s    r)   r  z:MultiAckDetailedGraphWalkerImplTestCase.test_multi_ack_nak  s    c"""c"""e$$$ 	d###./////r+   c                 P   d| j         _        |                     t                     |                                  |                     t
                     |                                  |                     t                     |                                  |                     | j         j                   |                     d            | 	                                 | 
                    | j         j                   |                                  | 	                                 d S )NF)r   r=  rc  r   rZ  r   r  rt   r@  re  rs   r`  r'   s    r)   test_multi_ack_nak_nodonezAMultiAckDetailedGraphWalkerImplTestCase.test_multi_ack_nak_nodone  s    %*"c"""c"""e$$$ 	/000d###.///r+   c                    dt           fddt          fdt          fdg| j        _        |                     t                      |                                  |                     t                     |                                  |                     t                     |                                  |                     d            |                                  |                                  d S )NrW  r  r  )	r   r   r  r   r@   rc  rZ  r`  re  r'   s    r)   test_multi_ack_nak_flushz@MultiAckDetailedGraphWalkerImplTestCase.test_multi_ack_nak_flush  s     cNcNe
 	c"""c"""e$$$d###r+   c                 n   d| j         j        d<   d| j         _        |                     t                     |                                  |                     t                     |                                  |                     t                     |                                  |                     | j         j	                   |                     d            | 
                                 |                                  |                                  |                     | j         j	                   d S )Nr  r   T)r   r@   r;  rc  r   rZ  r   r  rt   r@  r`  re  r'   s    r)   test_multi_ack_statelessz@MultiAckDetailedGraphWalkerImplTestCase.test_multi_ack_stateless  s   !-2%)"c"""c"""e$$$/000d###/00000r+   c                    d| j         _        d| j         j        d<   d| j         _        |                     t
                     |                                  |                     t                     |                                  |                     t                     |                                  | 	                    | j         j
                   |                     d            |                                  |                                  |                                  | 	                    | j         j
                   d S )NFr  r   T)r   r=  r@   r;  rc  r   rZ  r   r  rt   r@  r`  re  r'   s    r)   test_multi_ack_stateless_nodonezGMultiAckDetailedGraphWalkerImplTestCase.test_multi_ack_stateless_nodone  s   %*"!-2%)"c"""c"""e$$$/000d###/00000r+   N)rB   rC   rD   r   rX  r{  r  r  r  r}  r  r  r  r  r  r  rE   r+   r)   r  r  &  s        .H0 0 0*0 0 0,1 1 1,0 0 0.  K K K80 0 0"  &  ,1 1 1,1 1 1 1 1r+   r  c                   :     e Zd ZdZ fdZd Zd Zd Zd Z xZ	S )FileSystemBackendTestszTests for FileSystemBackend.c                    t                                                       t          j                    | _        |                     t          j        | j                   t          j	        | j                  | _
        t          j        dk    r1t          | j        d         dz   t          j        z             | _        d S t                      | _        d S )Nwin32r   :)rW   rX   r   r   r   r   r   r   r   r   r   sysplatformr   ossepr   rZ   s    r)   rX   zFileSystemBackendTests.setUp  s    $&&	ty111Idi((	<7"",TYq\C-?"&-HIIDLLL,..DLLLr+   c                 R    |                      t          | j        j        d           d S )N/does/not/exist/unless/foo)rl   r   r   open_repositoryr'   s    r)   test_nonexistantz'FileSystemBackendTests.test_nonexistant#  s2    L((	
 	
 	
 	
 	
r+   c                 <   | j                             | j                  }|                     t          j                            t          j                            |j                  t          j                            | j        j                                       d S r-   )r   r  r   rs   r  samefileabspathr   )r(   r   s     r)   test_absolutez$FileSystemBackendTests.test_absolute*  su    |++DI66G	**BGOODIN,K,K 	
 	
 	
 	
 	
r+   c                     |                      t          | j        j        t          j                            | j        d                     d S )Nfoo)rl   r   r   r  r  r   joinr'   s    r)   
test_childz!FileSystemBackendTests.test_child2  sD    L(GLLE**	
 	
 	
 	
 	
r+   c                 `    t                      |                     t          fd           d S )Nc                  .                          d          S Nz/upsr  r   s   r)   rj   z;FileSystemBackendTests.test_bad_repo_path.<locals>.<lambda><      G4K4KF4S4S r+   )r   rl   r   )r(   r   s    @r)   test_bad_repo_pathz)FileSystemBackendTests.test_bad_repo_path9  s5    #%%*,S,S,S,STTTTTr+   )
rB   rC   rD   rf  rX   r  r  r  r  rx   ry   s   @r)   r  r    s        &&/ / / / /
 
 

 
 

 
 
U U U U U U Ur+   r  c                       e Zd ZdZd Zd ZdS )DictBackendTestszTests for DictBackend.c                     t          j        g i           }t          d|i          }|                     t          |j        d           d S )Nr~   r  )r   r   r   rl   r   r  r(   r   r   s      r)   r  z!DictBackendTests.test_nonexistantB  sS    #B++tTl++#(	
 	
 	
 	
 	
r+   c                     t          j        g i           }t          d|i          |                     t          fd           d S )Nr~   c                  .                          d          S r  r  r  s   r)   rj   z5DictBackendTests.test_bad_repo_path.<locals>.<lambda>O  r  r+   )r   r   r   rl   r   r  s     @r)   r  z#DictBackendTests.test_bad_repo_pathK  sM    #B++tTl++*,S,S,S,STTTTTr+   N)rB   rC   rD   rf  r  r  rE   r+   r)   r  r  ?  s=          
 
 
U U U U Ur+   r  c                   .     e Zd ZdZ fdZd Zd Z xZS )ServeCommandTestszTests for serve_command.c                 p    t                                                       t          i           | _        d S r-   )rW   rX   r   r   rZ   s    r)   rX   zServeCommandTests.setUpU  s%    "2r+   c                 <    t          |dg|z   | j        ||          S )Ns   test)r   infoutf)r   r   )r(   handler_clsr_   r  r  s        r)   r   zServeCommandTests.serve_commandY  s1    IL
 
 
 	
r+   c                 j   t          t          g d          }t          j        |gd|j        i          | j        j        d<   t                      }|                     t          dgt          d          |          }|
                                                                }|                     dt          |                     |                     d|d         d	d                              d
          d                    |                     d|d                    |                     d|           d S )Nr  r  r   r~   s   0000r   s:   1111111111111111111111111111111111111111 refs/heads/masterr   r   r  r   )r   r   r   r   r   r   reposr   r   r   getvalue
splitlinesrd   lensplit)r(   r   r  exitcodeoutliness        r)   test_receive_packz#ServeCommandTests.test_receive_packb  s    RSAAA#-#7H+VY7$
 $
4  yy%%(8(8$
 
 ==??--//CMM***IQKO!!'**1-	
 	
 	
 	(2,///H%%%%%r+   )rB   rC   rD   rf  rX   r   r  rx   ry   s   @r)   r  r  R  s\        ""' ' ' ' '
 
 
& & & & & & &r+   r  c                   .     e Zd ZdZ fdZd Zd Z xZS )UpdateServerInfoTestszTests for update_server_info.c                     t                                                       t          j                    | _        |                     t          j        | j                   t          j	        | j                  | _
        d S r-   )rW   rX   r   r   r   r   r   r   r   r   r   rZ   s    r)   rX   zUpdateServerInfoTests.setUpx  sS    $&&	ty111Idi((			r+   c                 
   t          | j                   t          t          j                            | j        ddd          d          5 }|                     d|                                           d d d            n# 1 swxY w Y   t          j                            | j        dddd          }t          |d          5 }|                     d|                                           d d d            d S # 1 swxY w Y   d S )N.gitinfor   rbr+   objectspacks)r   r   openr  r   r  rd   read)r(   fps      r)   
test_emptyz UpdateServerInfoTests.test_empty~  sR   49%%%"',,ty&&&AA4HH 	,AS!&&((+++	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	,GLLFIvwGG!T]] 	,aS!&&((+++	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	,s$   
)A??BB)C88C<?C<c                 J   | j                             ddd          }t          | j                    t          t          j                            | j        ddd          d          5 }|                     |                                |d	z              d d d            n# 1 swxY w Y   t          j                            | j        dd
dd          }t          |d          5 }|                     |                                d           d d d            d S # 1 swxY w Y   d S )Nr  s   Joe Example <joe@example.com>s   refs/heads/foo)r   	committerr   r  r  r   r  s   	refs/heads/foo
r  r  r+   )	r   	do_commitr   r  r  r   r  rd   r  )r(   	commit_idr  r  s       r)   test_simplez!UpdateServerInfoTests.test_simple  s   I''6! ( 
 
	
 	49%%%"',,ty&&&AA4HH 	JAQVVXXy3H'HIII	J 	J 	J 	J 	J 	J 	J 	J 	J 	J 	J 	J 	J 	J 	JGLLFIvwGG!T]] 	,aQVVXXs+++	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	,s$   ',BB#&B#")DDD)rB   rC   rD   rf  rX   r  r  rx   ry   s   @r)   r  r  u  s\        '') ) ) ) ), , ,, , , , , , ,r+   r  )Brf  r  r   r  r   ior   dulwich.testsr   errorsr   r   r   r	   r   r
   r  r   protocolr   r   r   r   r   serverr   r   r   r   r   r   r   r   r   r   r   r   r   r   utilsr   r    r   r   r  r   r  r  r"   rG   rU   r{   r   r   r   r   r   r7  rU  rh  rv  r  r  r  r  r  rE   r+   r)   <module>r     s  * + * 				  



        " " " " " ". . . . . . . . . . . . , , , , , ,       7 7 7 7 7 7 7 7 # # # # # # # #9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 ) ( ( ( ( ( ( (       <
 
 
 
 
[ 
 
 
)B )B )B )B )Bh )B )B )BX\? \? \? \? \? \? \? \?~T
 T
 T
 T
 T
x T
 T
 T
n    -   . . . . . . . ..G G G G Gx G G G.F
 F
 F
 F
 F
( F
 F
 F
R+" +" +" +" +" +" +" +"\'# '# '# '# '# '# '# '#TA A A A A'A A A AHH H H H H&@ H H HVm1 m1 m1 m1 m1.H m1 m1 m1`&U &U &U &U &UX &U &U &URU U U U Ux U U U& &  &  &  &  &  &  &  &F, , , , ,H , , , , ,r+   