
    d                     Z   d dl Z d dlZd dlZd dlZd dlZd dlZd dlmZ d dlm	Z	 d dl
mZ d dl
mZ d dlZd dl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 m!Z!m"Z"m#Z#m$Z$m%Z%m&Z&m'Z' dd
l(m)Z) ddl*m+Z+m,Z, ddl-m.Z.m/Z/m0Z0 ddl1m2Z2m3Z3 ddl4m5Z5m6Z6 ddl7m8Z8m9Z9m:Z:  G d de           Z; G d d          Z< G d de          Z= G d de          Z> G d de          Z? G d d          Z@ G d de          ZA G d d e          ZB G d! d"e          ZC G d# d$e          ZD G d% d&e          ZE G d' d(e          ZF G d) d*e          ZG G d+ d,e          ZH G d- d.e          ZI G d/ d0e          ZJ G d1 d2e          ZK G d3 d4e          ZL G d5 d6e          ZMdS )7    N)BytesIO)patch)quote)urlparse)client)TestCaseskipIf   )FetchPackResultGitProtocolErrorHangupExceptionHttpGitClientInvalidWantsLocalGitClientPLinkSSHVendorReportStatusParserSendPackErrorSSHGitClientStrangeHostnameSubprocessSSHVendorTCPGitClientTraditionalGitClient_remote_error_from_stderrcheck_wantsdefault_urllib3_managerget_credentials_from_storeget_transport_and_pathget_transport_and_path_from_urlparse_rsync_url)
ConfigDict)CommitTree)pack_objects_to_datawrite_pack_datawrite_pack_objects)TCP_GIT_PORTProtocol)
MemoryRepoRepo   )	open_reposetup_warning_catchertear_down_repoc                       e Zd Zd Zd ZdS )DummyClientc                 X    || _         || _        || _        t          j        |            d S N)can_readreadwriter   __init__)selfr2   r3   r4   s       ]/home/feoh/.local/pipx/venvs/poetry/lib/python3.11/site-packages/dulwich/tests/test_client.pyr5   zDummyClient.__init__6   s.     	
%d+++++    c                 F    t          | j        | j                  | j        d fS r1   )r'   r3   r4   r2   )r6   servicepaths      r7   _connectzDummyClient._connect<   s    	4:..tCCr8   N)__name__
__module____qualname__r5   r<    r8   r7   r/   r/   5   s7        , , ,D D D D Dr8   r/   c                        e Zd Zd Zd Zd ZdS )
DummyPopenc                     t          d          | _        t          d          | _        t          d          | _        d| _        || _        || _        d S )Ns   stdins   stdouts   stderrr   )r   stdinstdoutstderr
returncodeargskwargsr6   rH   kwardss      r7   r5   zDummyPopen.__init__A   sH    X&&
i((i((	r8   c                     dS )N)Running r@   rJ   s      r7   communicatezDummyPopen.communicateI   s    r8   c                     dS )NFr@   rJ   s      r7   waitzDummyPopen.waitL   s    ur8   N)r=   r>   r?   r5   rO   rQ   r@   r8   r7   rB   rB   @   sA                r8   rB   c                   h     e Zd Z fdZd Zd Zd Zd Zd Zdd	Z	d
 Z
d Zd Zd Zd Zd Z xZS )GitClientTestsc                     t                                                       t                      | _        t                      | _        t          d | j        j        | j        j                  | _        d S )Nc                     dS )NTr@   )xs    r7   <lambda>z&GitClientTests.setUp.<locals>.<lambda>V       D r8   )	supersetUpr   routrinr/   r3   r4   r   r6   	__class__s    r7   rZ   zGitClientTests.setUpR   sK    II	99!..$(-QQr8   c           	         dt           j        z                      d          }|                     dddddd|ht	          | j        j                             |                     d	dd
d|ht	          | j        j                             d S )Nzagent=dulwich/%d.%d.%dasciis	   multi_acks   side-band-64ks	   ofs-deltas	   thin-packs   multi_ack_detaileds   shallows   delete-refss   report-status)dulwich__version__encodeassertEqualsetr   _fetch_capabilities_send_capabilities)r6   	agent_caps     r7   	test_capszGitClientTests.test_capsX   s    -0CCKKGTT	 % /00	
 	
 	
 	   .//		
 		
 		
 		
 		
r8   c                    | j                             d           | j                             d           | j                            ddd d            |                     | j                                        d           d S )Ns   0009NACK
0000r      bla   HEADs   0011argument HEAD0000)r\   r4   seekr   archiverd   r[   getvaluer6   s    r7   test_archive_ackzGitClientTests.test_archive_ackq   sr    ,---aFGT4888++--/GHHHHHr8   c                       j                             d            j                             d            fd} j                            d|d d           }                     i |j                                        i |j                   d S )N   0000r   c                 4                         | i            g S r1   rd   headsrI   r6   s     r7   check_headsz4GitClientTests.test_fetch_empty.<locals>.check_heads{   s    UB'''Ir8      /)r\   r4   rm   r   
fetch_packrd   refssymrefsr6   rx   rets   `  r7   test_fetch_emptyzGitClientTests.test_fetch_emptyw   s    wa	 	 	 	 	 k$$T;dCCSX&&&S[)))))r8   c                 |     j                             d            j                             d            fd} j                            d|d d d           }                     i |j                                        i |j                                         j        	                                d           d S )Ns   00000000000000000000000000000000000000000000 capabilities^{}  multi_ack thin-pack side-band side-band-64k ofs-delta shallow no-progress include-tag
0000r   c                 4                         i |            g S r1   ru   rv   s     r7   rx   zEGitClientTests.test_fetch_pack_ignores_magic_ref.<locals>.check_heads   s    R'''Ir8   rk   rs   
r\   r4   rm   r   rz   rd   r{   r|   r[   ro   r}   s   `  r7   !test_fetch_pack_ignores_magic_refz0GitClientTests.test_fetch_pack_ignores_magic_ref   s    	
 	
 	
 	a	 	 	 	 	 k$$V[$dKKSX&&&S[)))++--w77777r8   c                 v   | j                             d           | j                             d           | j                            dd d d d           }|                     ddi|j                   |                     i |j                   |                     | j        	                                d           d S )Ns   008855dcc6bf963f922e1ed5c4bbaaefcfacef57b1d7 HEAD multi_ack thin-pack side-band side-band-64k ofs-delta shallow no-progress include-tag
0000r   rk   c                     g S r1   r@   rw   rI   s     r7   rW   z5GitClientTests.test_fetch_pack_none.<locals>.<lambda>   s    R r8   rl   s(   55dcc6bf963f922e1ed5c4bbaaefcfacef57b1d7rs   r   )r6   r~   s     r7   test_fetch_pack_nonez#GitClientTests.test_fetch_pack_none   s    	
 	
 	
 	ak$$V-G-GtUYZZABCH	
 	
 	
 	S[)))++--w77777r8   returnNc                    g d}|D ]f}|dk    r| j                             d           #| j                             dt          |          dz   z                      d          |z              g| j                             d           t                      t                      _        g _        dx_	        _
        d	x_        _        dx_        _        d
_        d_        fd}dfd	}| j                            d||          }|                     ddi|j                   |                     dj        i|j                   d S )N)s^   55dcc6bf963f922e1ed5c4bbaaefcfacef57b1d7 capabilities^{}  report-status delete-refs ofs-delta
r8   	   unpack oks)   ng refs/foo/bar pre-receive hook declinedr8   r8   rs   %04x   r`   r   	   test userןF   UTF-8   test messagec                     dj         iS )N   refs/foo/baridr{   commits    r7   update_refszWGitClientTests.test_send_pack_no_sideband64k_with_update_ref_error.<locals>.update_refs   s     r8   Fc                 .    t          d fdfg          S Nr8   r#   havewant	ofs_deltaprogressr   trees       r7   generate_pack_dataz^GitClientTests.test_send_pack_no_sideband64k_with_update_ref_error.<locals>.generate_pack_data   (    'TN3K  r8   blahr   zpre-receive hook declinedFN)r\   r4   lenrc   rm   r"   r!   r   parentsauthor	committercommit_timeauthor_timecommit_timezoneauthor_timezoneencodingmessager   	send_packrd   
ref_statusr   r{   )r6   pktspktr   r   resultr   r   s         @@r7   3test_send_pack_no_sideband64k_with_update_ref_errorzBGitClientTests.test_send_pack_no_sideband64k_with_update_ref_error   s   
 
 
  	P 	PCczzw''''#c((Q, 7??HH3NOOOOavv+77(2<<V/:;;!7"(	 	 	 	 	
	 	 	 	 	 	 	 &&v{<NOO9:F<M	
 	
 	
 	/695v{CCCCCr8   c                    | j                             d           | j                             d           d }dd}| j                            d||           |                     | j                                        d           d S )	Ns|   0078310ca9477129b8586fa2afc779c1f57cf64bba6c refs/heads/master  report-status delete-refs side-band-64k quiet ofs-delta
0000r   c                 
    ddiS )N   refs/heads/master(   310ca9477129b8586fa2afc779c1f57cf64bba6cr@   r{   s    r7   r   z7GitClientTests.test_send_pack_none.<locals>.update_refs   s    (*UVVr8   Fc                 
    dg fS Nr   r@   r   r   r   r   s       r7   r   z>GitClientTests.test_send_pack_none.<locals>.generate_pack_data       b5Lr8   ry   rs   r   r\   r4   rm   r   r   rd   r[   ro   r6   r   r   s      r7   test_send_pack_nonez"GitClientTests.test_send_pack_none   s    	
 	
 	
 	a	W 	W 	W	 	 	 	 	dK1CDDD++--w77777r8   c                    | j                             d           | j                             d           d }dd}| j                            d||           |                     | j                                        d           d S )	Ns   0063310ca9477129b8586fa2afc779c1f57cf64bba6c refs/heads/master report-status delete-refs ofs-delta
003f310ca9477129b8586fa2afc779c1f57cf64bba6c refs/heads/keepme
0000000eunpack ok
0019ok refs/heads/master
0000r   c                 
    ddiS Nr   s(   0000000000000000000000000000000000000000r@   r   s    r7   r   zBGitClientTests.test_send_pack_keep_and_delete.<locals>.update_refs       ()44r8   Fc                 
    dg fS r   r@   r   s       r7   r   zIGitClientTests.test_send_pack_keep_and_delete.<locals>.generate_pack_data   r   r8   ry      008b310ca9477129b8586fa2afc779c1f57cf64bba6c 0000000000000000000000000000000000000000 refs/heads/master delete-refs ofs-delta report-status0000r   r   r   s      r7   test_send_pack_keep_and_deletez-GitClientTests.test_send_pack_keep_and_delete   s    	
 	
 	
 	a	5 	5 	5	 	 	 	 	dK1CDDDI  L	
 	
 	
 	
 	
r8   c                    | j                             d           | j                             d           d }dd}| j                            d||           |                     | j                                        d           d S )	Ns   0063310ca9477129b8586fa2afc779c1f57cf64bba6c refs/heads/master report-status delete-refs ofs-delta
0000000eunpack ok
0019ok refs/heads/master
0000r   c                 
    ddiS r   r@   r   s    r7   r   z>GitClientTests.test_send_pack_delete_only.<locals>.update_refs
  r   r8   Fc                 
    dg fS r   r@   r   s       r7   r   zEGitClientTests.test_send_pack_delete_only.<locals>.generate_pack_data  r   r8   ry   r   r   r   r   s      r7   test_send_pack_delete_onlyz)GitClientTests.test_send_pack_delete_only   s    	
 	
 	
 	a	5 	5 	5	 	 	 	 	dK1CDDDI  L	
 	
 	
 	
 	
r8   c                 ~   | j                             d           | j                             d           d }dd}t                      }t	          |j        g            | j                            d||           |                     | j        	                                d|	                                z              d S )	Ns   0063310ca9477129b8586fa2afc779c1f57cf64bba6c refs/heads/master report-status delete-refs ofs-delta
0000000eunpack ok
0019ok refs/heads/blah12
0000r   c                     dddS Nr   )s   refs/heads/blah12r   r@   r   s    r7   r   z?GitClientTests.test_send_pack_new_ref_only.<locals>.update_refs"  s    &Q&Q  r8   Fc                 
    dg fS r   r@   r   s       r7   r   zFGitClientTests.test_send_pack_new_ref_only.<locals>.generate_pack_data(  r   r8   /s   008b0000000000000000000000000000000000000000 310ca9477129b8586fa2afc779c1f57cf64bba6c refs/heads/blah12 delete-refs ofs-delta report-status0000r   )
r\   r4   rm   r   r%   r   r   rd   r[   ro   )r6   r   r   fs       r7   test_send_pack_new_ref_onlyz*GitClientTests.test_send_pack_new_ref_only  s    	
 	
 	
 	a	 	 		 	 	 	 II17B'''c;0BCCCI  L jjll	
 	
 	
 	
 	
r8   c                    | j                             d           | j                             d           t                      t	                      _        g _        dx_        _        dx_	        _
        dx_        _        d_        d_        fd}dfd		}t                      } |d d           \  }}t!          |j        ||
           | j                            d||           |                     | j                                        dj        z   dz   |                                z              d S )Ns   0064310ca9477129b8586fa2afc779c1f57cf64bba6c refs/heads/master  report-status delete-refs ofs-delta
0000000eunpack ok
0019ok refs/heads/blah12
0000r   r   r   r   r   c                     j         ddS r   r   r   s    r7   r   z:GitClientTests.test_send_pack_new_ref.<locals>.update_refsJ  s    &,i&Q  r8   Fc                 .    t          d fdfg          S r   r   r   s       r7   r   zAGitClientTests.test_send_pack_new_ref.<locals>.generate_pack_dataP  r   r8   )num_recordsry   s-   008b0000000000000000000000000000000000000000 s:    refs/heads/blah12 delete-refs ofs-delta report-status0000r   )r\   r4   rm   r"   r!   r   r   r   r   r   r   r   r   r   r   r   r$   r   r   rd   r[   ro   r   )r6   r   r   r   countrecordsr   r   s         @@r7   test_send_pack_new_refz%GitClientTests.test_send_pack_new_ref6  s~   	
 	
 	
 	avv+77(2<<V/:;;!7"(	 	 	 	 		 	 	 	 	 	 	 II++D$77we<<<<dK1CDDDI  <iNO jjll	
 	
 	
 	
 	
r8   c                 (   g d}|D ]f}|dk    r| j                             d           #| j                             dt          |          dz   z                      d          |z              g| j                             d           d }dd
}| j                            d||          }|                     |j        ddi           |                     |j	        ddi           |                     | j
                                        d           d S )N)sT   310ca9477129b8586fa2afc779c1f57cf64bba6c refs/heads/master  report-status ofs-delta
r8   r8   r8   rs   r   r   r`   r   c                 
    ddiS r   r@   r   s    r7   r   zKGitClientTests.test_send_pack_no_deleteref_delete_only.<locals>.update_refsr  r   r8   Fc                 
    dg fS r   r@   r   s       r7   r   zRGitClientTests.test_send_pack_no_deleteref_delete_only.<locals>.generate_pack_datau  r   r8   ry   r   z%remote does not support deleting refsr   r   )r\   r4   r   rc   rm   r   r   rd   r   r{   r[   ro   )r6   r   r   r   r   r   s         r7   'test_send_pack_no_deleteref_delete_onlyz6GitClientTests.test_send_pack_no_deleteref_delete_onlyd  sM   
 
 
  	P 	PCczzw''''#c((Q, 7??HH3NOOOOa	5 	5 	5	 	 	 	 &&t[:LMM!#JK	
 	
 	
 	K!#NO	
 	
 	
 	++--w77777r8   )r   N)r=   r>   r?   rZ   ri   rq   r   r   r   r   r   r   r   r   r   r   __classcell__r^   s   @r7   rS   rS   Q   s        R R R R R
 
 
2I I I
* 
* 
*8 8 8&8 8 8-D -D -D -D^8 8 8&
 
 
2
 
 
0
 
 
<,
 ,
 ,
\8 8 8 8 8 8 8r8   rS   c                       e Zd Zd Zd Zd Zd Zd Zd Zd Z	d Z
d	 Zd
 Zd Zd Zd Zd Zd Zd Z eej        dk    d          d             Zd Zd Zd Zd Zd Zd ZdS )TestGetTransportAndPathc                    t          d          \  }}|                     |t                     |                     d|j                   |                     t
          |j                   |                     d|           d S Nzgit://foo.com/bar/bazfoo.com/bar/baz)r   assertIsInstancer   rd   _hostr&   _portr6   cr;   s      r7   test_tcpz TestGetTransportAndPath.test_tcp  sv    ()@AA4a...AG,,,qw///T*****r8   c                     t          d          \  }}|                     |t                     |                     d|j                   |                     d|j                   |                     d|           d S Nzgit://foo.com:1234/bar/bazr     r   )r   r   r   rd   r   r   r   s      r7   test_tcp_portz%TestGetTransportAndPath.test_tcp_port  sv    ()EFF4a...AG,,,qw'''T*****r8   c                 .   t          d          \  }}|                     |t                     |                     d|j                   |                     d |j                   |                     d |j                   |                     d|           d S Nzgit+ssh://foo.com/bar/bazr   r   r   r   r   rd   hostportusernamer   s      r7   test_git_ssh_explicitz-TestGetTransportAndPath.test_git_ssh_explicit  s    ()DEE4a...AF+++qv&&&qz***T*****r8   c                 .   t          d          \  }}|                     |t                     |                     d|j                   |                     d |j                   |                     d |j                   |                     d|           d S )Nzssh://foo.com/bar/bazr   r   r   r   s      r7   test_ssh_explicitz)TestGetTransportAndPath.test_ssh_explicit  s    ()@AA4a...AF+++qv&&&qz***T*****r8   c                     t          d          \  }}|                     |t                     |                     d|j                   |                     d|j                   |                     d|           d S Nzgit+ssh://foo.com:1234/bar/bazr   r   r   r   r   r   rd   r   r   r   s      r7   test_ssh_port_explicitz.TestGetTransportAndPath.test_ssh_port_explicit  v    ()IJJ4a...AF+++qv&&&T*****r8   c                     t          d          \  }}|                     |t                     |                     d|j                   |                     d|           d S )Nz(unknown://git@server:7999/dply/stuff.gitunknownz //git@server:7999/dply/stuff.git)r   r   r   rd   r   r   s      r7   .test_username_and_port_explicit_unknown_schemezFTestGetTransportAndPath.test_username_and_port_explicit_unknown_scheme  s_    ()STT4a...AF+++;TBBBBBr8   c                 .   t          d          \  }}|                     |t                     |                     d|j                   |                     d|j                   |                     d|j                   |                     d|           d S )Nz$ssh://git@server:7999/dply/stuff.gitgitserveri?  z/dply/stuff.git)r   r   r   rd   r   r   r   r   s      r7   test_username_and_port_explicitz7TestGetTransportAndPath.test_username_and_port_explicit  s    ()OPP4a...
+++16***qv&&&*D11111r8   c                 .   t          d          \  }}|                     |t                     |                     d|j                   |                     d |j                   |                     d |j                   |                     d|           d S )Nzgit+ssh://foo.com//bar/bazr   z	//bar/bazr   r   s      r7   test_ssh_abspath_doubleslashz4TestGetTransportAndPath.test_ssh_abspath_doubleslash  s    ()EFF4a...AF+++qv&&&qz***d+++++r8   c                     t          d          \  }}|                     |t                     |                     d|j                   |                     d|j                   |                     d|           d S r   r   r   s      r7   test_ssh_portz%TestGetTransportAndPath.test_ssh_port  r   r8   c                 .   t          d          \  }}|                     |t                     |                     d|j                   |                     d |j                   |                     d |j                   |                     d|           d S )Nzfoo:/bar/bazfoor   r   r   s      r7   test_ssh_implicitz)TestGetTransportAndPath.test_ssh_implicit  s    (884a...'''qv&&&qz***T*****r8   c                 .   t          d          \  }}|                     |t                     |                     d|j                   |                     d |j                   |                     d |j                   |                     d|           d S )Nzfoo.com:/bar/bazr   r   r   r   s      r7   test_ssh_hostz%TestGetTransportAndPath.test_ssh_host  s    ();<<4a...AF+++qv&&&qz***T*****r8   c                 .   t          d          \  }}|                     |t                     |                     d|j                   |                     d |j                   |                     d|j                   |                     d|           d S )Nzuser@foo.com:/bar/bazr   userr   r   r   s      r7   test_ssh_user_hostz*TestGetTransportAndPath.test_ssh_user_host  s    ()@AA4a...AF+++qv&&&,,,T*****r8   c                 .   t          d          \  }}|                     |t                     |                     d|j                   |                     d |j                   |                     d |j                   |                     d|           d S )Nzfoo:bar/bazr
  bar/bazr   r   s      r7   test_ssh_relpathz(TestGetTransportAndPath.test_ssh_relpath  s    (774a...'''qv&&&qz***D)))))r8   c                 .   t          d          \  }}|                     |t                     |                     d|j                   |                     d |j                   |                     d |j                   |                     d|           d S )Nfoo.com:bar/bazr   r  r   r   s      r7   test_ssh_host_relpathz-TestGetTransportAndPath.test_ssh_host_relpath  s    ():;;4a...AF+++qv&&&qz***D)))))r8   c                 .   t          d          \  }}|                     |t                     |                     d|j                   |                     d |j                   |                     d|j                   |                     d|           d S )Nuser@foo.com:bar/bazr   r  r  r   r   s      r7   test_ssh_user_host_relpathz2TestGetTransportAndPath.test_ssh_user_host_relpath  s    ()?@@4a...AF+++qv&&&,,,D)))))r8   c                     t          d          \  }}|                     |t                     |                     d|           d S Nzfoo.bar/bazr   r   r   rd   r   s      r7   
test_localz"TestGetTransportAndPath.test_local  sE    (774a000-----r8   win32z"Behaviour only happens on windows.c                     t          d          \  }}|                     |t                     |                     d|           d S )NC:\foo.bar\bazr  r   s      r7   test_local_abs_windows_pathz3TestGetTransportAndPath.test_local_abs_windows_path  sG    ();<<4a000+T22222r8   c                 `    t          d          \  }}|                     |t                     d S Nzprospero://bar/baz)r   r   r   r   s      r7   
test_errorz"TestGetTransportAndPath.test_error  s2     ))=>>4a.....r8   c                     d}t          |          \  }}|                     |t                     |                     d|           d S N!https://github.com/jelmer/dulwich/jelmer/dulwich)r   r   r   rd   r6   urlr   r;   s       r7   	test_httpz!TestGetTransportAndPath.test_http  sK    1(--4a///*D11111r8   c                     d}t          |          \  }}|                     |t                     |                     d|           |                     d|j                   |                     d|j                   d S )N-https://user:passwd@github.com/jelmer/dulwichr(  r  passwdr   r   r   rd   	_username	_passwordr)  s       r7   test_http_authz&TestGetTransportAndPath.test_http_auth  s{    =(--4a///*D111---1;/////r8   c                    d}t          |dd          \  }}|                     |t                     |                     d|           |                     d|j                   |                     d|j                   d S )Nr'  user2r   r   passwordr(  r/  r)  s       r7   test_http_auth_with_usernamez4TestGetTransportAndPath.test_http_auth_with_username  s    1(wPPP4a///*D111!+...-----r8   c                    d}t          |dd          \  }}|                     |t                     |                     d|           |                     d|j                   |                     d|j                   d S )Nr-  r4  r   r5  r(  r  r.  r/  r)  s       r7   'test_http_auth_with_username_and_in_urlz?TestGetTransportAndPath.test_http_auth_with_username_and_in_url"  s    =(wPPP4a///*D111---1;/////r8   c                     d}t          |          \  }}|                     |t                     |                     d|           |                     d |j                   |                     d |j                   d S r&  )r   r   r   rd   assertIsr0  r1  r)  s       r7   test_http_no_authz)TestGetTransportAndPath.test_http_no_auth,  sw    1(--4a///*D111dAK(((dAK(((((r8   N)r=   r>   r?   r   r   r   r   r   r   r  r  r  r  r  r  r  r  r  r  r	   sysplatformr!  r$  r+  r2  r7  r9  r<  r@   r8   r7   r   r     s       + + ++ + ++ + ++ + ++ + +C C C2 2 2, , ,+ + ++ + ++ + ++ + +* * ** * ** * *. . .
 VCLG#%IJJ3 3 KJ3
/ / /2 2 20 0 0. . .0 0 0) ) ) ) )r8   r   c                       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 edd           edd          d                         Z edd           edd          d                         ZdS )TestGetTransportAndPathFromUrlc                    t          d          \  }}|                     |t                     |                     d|j                   |                     t
          |j                   |                     d|           d S r   )r   r   r   rd   r   r&   r   r   s      r7   r   z'TestGetTransportAndPathFromUrl.test_tcp8  sv    12IJJ4a...AG,,,qw///T*****r8   c                     t          d          \  }}|                     |t                     |                     d|j                   |                     d|j                   |                     d|           d S r   )r   r   r   rd   r   r   r   s      r7   r   z,TestGetTransportAndPathFromUrl.test_tcp_port?  sv    12NOO4a...AG,,,qw'''T*****r8   c                 .   t          d          \  }}|                     |t                     |                     d|j                   |                     d |j                   |                     d |j                   |                     d|           d S r   r   r   r   rd   r   r   r   r   s      r7   r   z0TestGetTransportAndPathFromUrl.test_ssh_explicitF  s    12MNN4a...AF+++qv&&&qz***T*****r8   c                     t          d          \  }}|                     |t                     |                     d|j                   |                     d|j                   |                     d|           d S r   r   r   r   rd   r   r   r   s      r7   r   z5TestGetTransportAndPathFromUrl.test_ssh_port_explicitN  sv    12RSS4a...AF+++qv&&&T*****r8   c                 .   t          d          \  }}|                     |t                     |                     d|j                   |                     d |j                   |                     d |j                   |                     d|           d S )Nzgit+ssh://foo.com/~/bar/bazr   
/~/bar/bazrD  r   s      r7   test_ssh_homepathz0TestGetTransportAndPathFromUrl.test_ssh_homepathU  s    12OPP4a...AF+++qv&&&qz***t,,,,,r8   c                     t          d          \  }}|                     |t                     |                     d|j                   |                     d|j                   |                     d|           d S )Nz git+ssh://foo.com:1234/~/bar/bazr   r   rH  rF  r   s      r7   test_ssh_port_homepathz5TestGetTransportAndPathFromUrl.test_ssh_port_homepath]  sv    12TUU4a...AF+++qv&&&t,,,,,r8   c                 H    |                      t          t          d           d S )Nr  assertRaises
ValueErrorr   rp   s    r7   r  z4TestGetTransportAndPathFromUrl.test_ssh_host_relpathd  s-    79J	
 	
 	
 	
 	
r8   c                 H    |                      t          t          d           d S )Nr  rM  rp   s    r7   r  z9TestGetTransportAndPathFromUrl.test_ssh_user_host_relpathi  s-    79O	
 	
 	
 	
 	
r8   c                 H    |                      t          t          d           d S r  rM  rp   s    r7   test_local_pathz.TestGetTransportAndPathFromUrl.test_local_pathn  s!    *&E}UUUUUr8   c                 H    |                      t          t          d           d S r#  rM  rp   s    r7   r$  z)TestGetTransportAndPathFromUrl.test_errorq  s/     	79M	
 	
 	
 	
 	
r8   c                     d}t          |          \  }}|                     |t                     |                     d|                    d                     |                     d|           d S )Nr'  zhttps://github.comry   r(  )r   r   r   rd   get_urlr)  s       r7   r+  z(TestGetTransportAndPathFromUrl.test_httpx  sl    11#664a///-qyy???*D11111r8   c                     d}t          |          \  }}|                     d|                    d                     |                     |t                     |                     d|           d S )Nz&https://github.com:9090/jelmer/dulwichzhttps://github.com:9090ry   r(  )r   rd   rU  r   r   r)  s       r7   test_http_portz-TestGetTransportAndPathFromUrl.test_http_port  sl    61#6642AIIdOODDDa///*D11111r8   zos.nameposixzsys.platformlinuxc                     t          d          \  }}|                     |t                     |                     d|           d S )Nzfile:///home/jelmer/fooz/home/jelmer/foo)r   r   r   rd   r   s      r7   	test_filez(TestGetTransportAndPathFromUrl.test_file  sI     22KLL4a000+T22222r8   ntr  c                    ddl m} t          d|          5  d}dD ]E}t          |          \  }}|                     |t
                     |                     ||           FdD ]F}|                     t                    5  t          |          \  }}d d d            n# 1 swxY w Y   G	 d d d            d S # 1 swxY w Y   d S )Nr   )url2pathnamezdulwich.client.url2pathnamer   )zfile:C:/foo.bar/bazzfile:/C:/foo.bar/bazzfile://C:/foo.bar/bazzfile://C://foo.bar//bazzfile:///C:/foo.bar/baz)zmfile://host.example.com/C:/foo.bar/bazfile://host.example.com/C:/foo.bar/bazfile:////host.example/foo.bar/baz)	
nturl2pathr^  r   r   r   r   rd   rN  NotImplementedError)r6   r^  expectedfile_urlr   r;   
remote_urls          r7   test_file_winz,TestGetTransportAndPathFromUrl.test_file_win  s   
 	,+++++0,?? 	A 	A)H 	1 	1 1::4%%a888  x0000 A A

 &&':;; A A4Z@@GAtA A A A A A A A A A A A A A AA	A 	A 	A 	A 	A 	A 	A 	A 	A 	A 	A 	A 	A 	A 	A 	A 	A 	As6   A)B9 BB9B##B9&B#'B99B= B=N)r=   r>   r?   r   r   r   r   rI  rK  r  r  rR  r$  r+  rW  r   r[  rd  r@   r8   r7   r@  r@  7  sN       + + ++ + ++ + ++ + +- - -- - -
 
 


 
 

V V V
 
 
2 2 22 2 2 U9g
U>7##3 3 $# 3
 U9d
U>7##A A $# A A Ar8   r@  c                   &    e Zd Zd Z	 	 	 	 	 ddZdS )TestSSHVendorc                 Z    d | _         d| _        d | _        d | _        d | _        d | _        d S )NrN   )r   commandr   r   r6  key_filenamerp   s    r7   r5   zTestSSHVendor.__init__  s3    		 r8   Nc                 "   || _         || _        || _        || _        || _        || _        || _         G d d          }t          |dd            t          |dd            t          |dd            t          |d	d
             |            S )Nc                       e Zd ZdS )-TestSSHVendor.run_command.<locals>.SubprocessNr=   r>   r?   r@   r8   r7   
Subprocessrl            Dr8   rn  r3   c                      d S r1   r@   r@   r8   r7   rW   z+TestSSHVendor.run_command.<locals>.<lambda>  rX   r8   r4   c                      d S r1   r@   r@   r8   r7   rW   z+TestSSHVendor.run_command.<locals>.<lambda>      T r8   closec                      d S r1   r@   r@   r8   r7   rW   z+TestSSHVendor.run_command.<locals>.<lambda>  rr  r8   r2   c                      d S r1   r@   r@   r8   r7   rW   z+TestSSHVendor.run_command.<locals>.<lambda>  s     r8   )r   rh  r   r   r6  ri  ssh_commandsetattr)	r6   r   rh  r   r   r6  ri  rv  rn  s	            r7   run_commandzTestSSHVendor.run_command  s     	 	 (&	 	 	 	 	 	 	 	 	
FLL111
G\\222
G\\222
J555z||r8   )NNNNN)r=   r>   r?   r5   rx  r@   r8   r7   rf  rf    sH        ! ! !      r8   rf  c                   R     e Zd Z fdZ fdZd Zd Zd Zd Zd Z	d Z
d	 Z xZS )
SSHGitClientTestsc                      t                                                       t                       _        t          j         _         fdt          _        t          d           _        d S )Nc                       j         S r1   )r  rp   s   r7   rW   z)SSHGitClientTests.setUp.<locals>.<lambda>  s	     r8   git.samba.org)rY   rZ   rf  r  r   get_ssh_vendorreal_vendorr   r]   s   `r7   rZ   zSSHGitClientTests.setUp  sO    #oo!0 3 3 3 3"?33r8   c                 j    t                                                       | j        t          _        d S r1   )rY   tearDownr  r   r~  r]   s    r7   r  zSSHGitClientTests.tearDown  s*     $ 0r8   c                 ~    d}t          d          }|                    |          }|                     d|           d S )N/tmp/repo.gitr}  z ssh://git.samba.org/tmp/repo.gitr   rU  rd   r6   r;   r   r*  s       r7   test_get_urlzSSHGitClientTests.test_get_url  s@    ))iioo;SAAAAAr8   c                     d}t          ddd          }|                    |          }|                     d|           d S )Nr  r}  i  r  )r   r   z*ssh://user@git.samba.org:2222/tmp/repo.gitr  r  s       r7   #test_get_url_with_username_and_portz5SSHGitClientTests.test_get_url_with_username_and_port  sG    tfEEEiiooEsKKKKKr8   c                 b    |                      d| j                            d                     d S )N   git-upload-pack   upload-pack)rd   r   _get_cmd_pathrp   s    r7   test_default_commandz&SSHGitClientTests.test_default_command  s/    +T[-F-F~-V-VWWWWWr8   c                     d| j         j        d<   |                     d| j                             d                     d S )Ns   /usr/lib/git/git-upload-packr  r   alternative_pathsrd   r  rp   s    r7   test_alternative_command_pathz/SSHGitClientTests.test_alternative_command_path  sI    8W%n5+K%%n55	
 	
 	
 	
 	
r8   c                     d| j         j        d<   |                     d| j                             d                     d S )Ns"   /usr/lib/git/git-upload-pack -iblar  r  rp   s    r7   $test_alternative_command_path_spacesz6SSHGitClientTests.test_alternative_command_path_spaces  sS     2 	%	
 	1K%%n55	
 	
 	
 	
 	
r8   c                 Z   | j         }| j        }d|_        d|_         |j        dd           |                     d|j                   |                     d|j                   |                     d|j                    |j        dd           |                     d|j                   d S )	Ns   usernamei9  s   commands   /path/to/repozgit-command '/path/to/repo's   relative-commands   /~/path/to/repoz%git-relative-command '~/path/to/repo')r  r   r   r   r<   rd   rh  )r6   r  r   s      r7   test_connectzSSHGitClientTests.test_connect  s    %
$4555fo666v{+++6GGG+-?@@@@&.QQQQQr8   c                 ^   |                      dd           t          d          }|                     |j        d           |                      dd           t          d          }|                     |j        d           t          dd          }|                     |j        d           d S )NGIT_SSH/path/to/sshr}  GIT_SSH_COMMAND/path/to/ssh -o Option=Valuezssh -o Option1=Value1rv  )overrideEnvr   rd   rv  )r6   test_clients     r7   test_ssh_command_precedencez-SSHGitClientTests.test_ssh_command_precedence  s    N333"?330.AAA*,JKKK"?3302PQQQ"?@WXXX02IJJJJJr8   )r=   r>   r?   rZ   r  r  r  r  r  r  r  r  r   r   s   @r7   rz  rz    s        4 4 4 4 41 1 1 1 1B B BL L LX X X
 
 

 
 
R R R
K 
K 
K 
K 
K 
K 
Kr8   rz  c                        e Zd Zd Zd Zd ZdS )ReportStatusParserTestsc                    t                      }|                    d           |                    d           |                    d            |                     t          t          |                                           d S )Ns   unpack error - foo bar   ok refs/foo/bar)r   handle_packetrN  r   listcheckr6   parsers     r7   test_invalid_packz)ReportStatusParserTests.test_invalid_pack  sq    #%%6777/000T"""-v||~~>>>>>r8   c                    t                      }|                    d           |                    d           |                    d            |                     dgt          |                                                     d S )Nr   s   ng refs/foo/bar need to pull)r   zneed to pullr   r  rd   r  r  r  s     r7   test_update_refs_errorz.ReportStatusParserTests.test_update_refs_error"  sz    #%%\***<===T""";<d6<<>>>R>RSSSSSr8   c                    t                      }|                    d           |                    d           |                    d            |                     dgt          |                                                     d S )Nr   r  )r   Nr  r  s     r7   test_okzReportStatusParserTests.test_ok)  sz    #%%\***/000T"""12D4H4HIIIIIr8   N)r=   r>   r?   r  r  r  r@   r8   r7   r  r    sI        ? ? ?T T TJ J J J Jr8   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 )LocalGitClientTestsc                 |    d}t                      }|                    |          }|                     d|           d S )Nr  zfile:///tmp/repo.git)r   rU  rd   r  s       r7   r  z LocalGitClientTests.test_get_url2  s>    iioo/55555r8   c                    t                      }t          j                    }|                     t          j        |           t          j        |          }|                     |j                   t          d          }|                     t          |           |                     |                                |                    |j        |          j                   d S )Na.git)r   tempfilemkdtemp
addCleanupshutilrmtreer)   	init_barers  r+   r-   rd   get_refsfetchr;   r{   )r6   r   targettss        r7   test_fetch_into_emptyz)LocalGitClientTests.test_fetch_into_empty9  s    !##v...N6""   g***qwwqvq'9'9'>?????r8   c                    t                      }t          d          }|                     t          |           t	          j                    }|                     t          j        |           |                    |j	        |d          }|                     |j
                   t          |                                          }|d         |d<   |d         |d<   |                     ||                                           d S )Nr  F)mkdirrl   s   refs/remotes/origin/HEADr   s   refs/remotes/origin/master)r   r+   r  r-   r  r  r  r  cloner;   rs  dictr  rd   )r6   r   r  r  result_repora  s         r7   
test_clonezLocalGitClientTests.test_cloneC  s    g***!##v...ggaffEg::)***

%%080A,-2:;O2P./;#7#7#9#9:::::r8   c                    t                      }t          d          }|                     t          |           t	                      }i }|                    |j        d ||j                  }|                     ddddd|j	                   |                     dd	i|j
                   |                     d
|                                           d S )Nr  c                     g S r1   r@   r   s     r7   rW   z6LocalGitClientTests.test_fetch_empty.<locals>.<lambda>W  s    B r8   graph_walker	pack_data(   a90fa2d900a17e99b433217e988c4eb4a2e9a097(   28237f4dc30d0d462658d6b937b08a0f0b6ef55a(   b0931cadc54336e78a1d980420e3268903b57a50rl   r   s   refs/tags/mytags   refs/tags/mytag-packedrl   r   s    PACK       ;بj\<>)r   r+   r  r-   r   rz   r;   r4   rd   r{   r|   ro   r6   r   r  outwalkerr~   s         r7   r   z$LocalGitClientTests.test_fetch_emptyP  s    g***iillF..Vsy  
 
 	D&Q$O+V	  H	
 	
 	
 	'#78#+FFFFLLNN	
 	
 	
 	
 	
r8   c                    t                      }t          d          }|                     t          |           t	                      }t                                                      }|                    |j        d ||j	                  }| 
                    ddi|j                   | 
                    ddddd	|j                   |                     |                                                    d
                     d S )Nr  c                     dgS )Nr  r@   r   s     r7   rW   z:LocalGitClientTests.test_fetch_pack_none.<locals>.<lambda>q  s
    %P$Q r8   r  rl   r   r  r  r  r  s   PACK      )r   r+   r  r-   r   r(   get_graph_walkerrz   r;   r4   rd   r|   r{   
assertTruero   
startswithr  s         r7   r   z(LocalGitClientTests.test_fetch_pack_nonei  s   g***ii..00llFQQi	  
 
 	'#78#+FFFD&Q$O+V	  H	
 	
 	
 	LLNN%%&MNN	
 	
 	
 	
 	
r8   c                     t          d          }|                     t          |           t          d          }|                     t          |           |                     d||           d S Nr  s   master)r+   r  r-   send_and_verify)r6   localr  s      r7   test_send_pack_without_changesz2LocalGitClientTests.test_send_pack_without_changes  sb    '""...7##///Yv66666r8   c                 H   t          d          }|                     t          |           t          j                    }|                     t
          j        |           t          j        |          5 }| 	                    d||           d d d            d S # 1 swxY w Y   d S r  )
r+   r  r-   r  r  r  r  r)   r  r  )r6   r  target_pathr  s       r7   test_send_pack_with_changesz/LocalGitClientTests.test_send_pack_with_changes  s    '""...&(({333^K(( 	;F  E6:::	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	;s   2BBBc                     t          d          }|                     t          |           t                      } |j        |j                  }|                     |j                                        |           d S )Nzrefs.git)	r+   r  r-   r   r  r;   assertDictEqualr{   as_dict)r6   r  r   r{   s       r7   test_get_refsz!LocalGitClientTests.test_get_refs  sk    *%%...!!vuz**UZ//11488888r8   c                    t                      }d|z    |j        |j        fdj                  }|                     j                 |j                            |                     d|j                   |                     i |j                   	                    |j                           }|	                    |j                           }|                     ||           dS )zASend branch from local to remote repository and verify it worked.s   refs/heads/c                 "    j                  iS r1   r   )_r  ref_names    r7   rW   z5LocalGitClientTests.send_and_verify.<locals>.<lambda>  s    xH!56 r8   N)
r   r   r;   r   rd   r{   r;  agentr   
get_object)	r6   branchr  r  r   r   	obj_local
obj_targetr  s	     `     @r7   r  z#LocalGitClientTests.send_and_verify  s    !!!F*!!K66666$
 
 	H-v{8/DEEEdFL)))V.///$$V[%:;;	&&v{8'<==
J/////r8   N)r=   r>   r?   r  r  r  r   r   r  r  r  r  r@   r8   r7   r  r  1  s        6 6 6@ @ @; ; ;
 
 
2
 
 
67 7 7; ; ;9 9 90 0 0 0 0r8   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 )HttpGitClientTestsc                     d}d}t          |          }|                    |          }|                     d|           d S r&  r   rU  rd   r6   base_urlr;   r   r*  s        r7   r  zHttpGitClientTests.test_get_url  sE    6 (##iioo<cBBBBBr8   c                     d}d}t          |          }|                    |          }|                     d|           d S )Nr'  s   /jelmer/dulwichr  )r6   r  
path_bytesr   r*  s        r7   test_get_url_bytes_pathz*HttpGitClientTests.test_get_url_bytes_path  sG    6'
(##ii
##<cBBBBBr8   c                     d}d}t          |dd          }|                    |          }|                     d|           d S )Nr'  r(  USERNAMEPASSWDr5  r  r  s        r7   %test_get_url_with_username_and_passwdz8HttpGitClientTests.test_get_url_with_username_and_passwd  sL    6 (Z(KKKiioo<cBBBBBr8   c                    d}t          |d dd          }|                     d|j                   |                     d|j                   |j        j        d         }d                    dd          }t          j        |	                    d                    }d|
                    d          z  }|                     ||           d S )	Nr'  r  r.  )configr   r6  authorization{}:{}latin1Basic %s)r   rd   r0  r1  pool_managerheadersformatbase64	b64encoderc   decoder6   r*  r   
basic_authauth_stringb64_credentialsexpected_basic_auths          r7   test_init_username_passwd_setz0HttpGitClientTests.test_init_username_passwd_set  s    1#dVhOOO---1;///^+O<
nnVX66 *;+=+=h+G+GHH(?+A+A(+K+KK%899999r8   c                 D   d}t          |d d          }|                     d|j                   |                     |j                   |j        j        d         }d}t          j        |          }d|	                    d           }|                     ||           d S )Nr'  r  )r  r   r  s   user:Basic r`   )
r   rd   r0  assertIsNoner1  r  r  r  r  r  r  s          r7   "test_init_username_set_no_passwordz5HttpGitClientTests.test_init_username_set_no_password  s    1#dV<<<---!+&&&^+O<
 *;77H'='=g'F'FHH%899999r8   c                     d}t          |d           }|                     d |j                   |                     d |j                   |                     d|j        j                   d S )Nr'  r  r  )r   r;  r0  r1  assertNotInr  r  )r6   r*  r   s      r7   test_init_no_username_passwdz/HttpGitClientTests.test_init_no_username_passwd  sf    1#d+++dAK(((dAK(((!.*@AAAAAr8   c                    d}d| d}t          j        t          |                    }|                     |j        |           |                     |j        d            |j        j        d         }|                    d          dz   }t          j
        |          }d|                    d           }|                     ||           d S )Nr  zhttps://z@github.com/jelmer/dulwichr  r`      :r  )r   from_parsedurlr   rd   r0  r1  r  r  rc   r  r  r  )r6   r   r*  r   r  r  r  r  s           r7   !test_from_parsedurl_username_onlyz4HttpGitClientTests.test_from_parsedurl_username_only  s    ====(#77h///d+++^+O<
oog..5 *;77H'='=g'F'FHH%899999r8   c                     d}t          |          }d}t          |          }d                    ||          }t          j        t	          |                    }|                     ||j                   |                     ||j                   |j        j	        d         }d                    ||          }t          j        |                    d                    }	d|	                    d          z  }
|                     ||
           d S )	Nzjohn|the|firstzYa#1$2%3z7https://{username}:{password}@github.com/jelmer/dulwichr5  r  r  r  r  )urlquoter   r   r  r   rd   r0  r1  r  r  r  r  rc   r  )r6   original_usernamequoted_usernameoriginal_passwordquoted_passwordr*  r   r  r  r  r  s              r7   2test_from_parsedurl_on_url_with_quoted_credentialszEHttpGitClientTests.test_from_parsedurl_on_url_with_quoted_credentials  s   ,"#455&"#455GNN$ O 
 
 (#77*AK888*AK888^+O<
nn%68IJJ *;+=+=h+G+GHH(?+A+A(+K+KK%899999r8   c                   	
 ddl m	 dddddddddd	d
ddd
 G 	
fdd          } |            }                                D ]}t          ||d           }|                    d|          \  }}}|j                            d|
z   d          }|                                }|j        dk    r| 	                    |           |r#| 
                    ||         d                    | 
                    ||           d S )Nr   )HTTPResponsez)https://gitlab.com/inkscape/inkscape.git/sX   001e# service=git-upload-pack
00000032fb2bebf4919a011f0fd7cec085443d0031228e76 HEAD
0000)locationredirect_url	refs_data"https://github.com/jelmer/dulwich/sX   001e# service=git-upload-pack
000000323ff25e09724aa4d86ea5bca7d5dd0399a3c8bfcf HEAD
0000z/ashwinvis/radicale-auth-sh/z0https://codeberg.org/ashwinvis/radicale-auth-sh/sX   001e# service=git-upload-pack
00000032470f8603768b608fc988675de2fae8f963c21158 HEAD
0000)z%https://gitlab.com/inkscape/inkscape/r"  z/https://codeberg.org/ashwinvis/radicale-sh.git/z!info/refs?service=git-upload-packc                   &    e Zd Zd Zd fd	ZdS )FHttpGitClientTests.test_url_redirect_location.<locals>.PoolManagerMockc                     i | _         d S r1   )r  rp   s    r7   r5   zOHttpGitClientTests.test_url_redirect_location.<locals>.PoolManagerMock.__init__6  s    !r8   NTc                    |d t                              }|         d         }|z   }	ddi}|         d         }
d}|	}|du r|}||k    rd}
|         d         |d<   d} t          |
          |||||	          S )
Nr  zContent-Typez+application/x-git-upload-pack-advertisementr!     Fr8   i-  )bodyr  request_methodrequest_urlpreload_contentstatus)r   r   )r6   methodr*  fieldsr  redirectr+  r  redirect_base_urlr   r(  r,  r*  r  tail	test_datas                r7   requestzNHttpGitClientTests.test_url_redirect_location.<locals>.PoolManagerMock.request9  s    |#d))|,$-h$7
$C!047"$Q !*;7*u$$"%K(H44".7.A*.M
+!$#| ##) +$3!   r8   )NNTT)r=   r>   r?   r5   r3  )r  r1  r2  s   r7   PoolManagerMockr$  5  sL        " " "         r8   r4  )r  r  r  GETF)r/  r'  r   )urllib3.responser  keysr   _discover_referencesr  r3  get_redirect_locationr,  assertFalserd   )r6   r4  r  r  r   r  processed_urlrespredirect_locationr  r1  r2  s            @@@r7   test_url_redirect_locationz-HttpGitClientTests.test_url_redirect_location  s   111111 H K"	6 6 A D"	3 3 ; R"	@ @)
 
	> 3	 	 	 	 	 	 	 	 	 	 	 	@ '((!(( 	: 	:Hh\$OOOA"#"8"89KX"V"VAq- >))%D5)QQD !% : : < <{c!!  !2333  :  	(0CN0STTTT   9999)	: 	:r8   N)r=   r>   r?   r  r  r  r	  r  r  r  r  r>  r@   r8   r7   r  r    s        C C CC C CC C C: : :: : :B B B: : :: : :*\: \: \: \: \:r8   r  c                       e Zd Zd Zd ZdS )TCPGitClientTestsc                     d}d}t          |          }|                    |          }|                     d|           d S )N
github.comr(  zgit://github.com/jelmer/dulwichr   rU  rd   )r6   r   r;   r   r*  s        r7   r  zTCPGitClientTests.test_get_urlo  sE     iioo:C@@@@@r8   c                     d}d}d}t          ||          }|                    |          }|                     d|           d S )NrB  r(  i#  )r   z$git://github.com:9090/jelmer/dulwichrC  )r6   r   r;   r   r   r*  s         r7   test_get_url_with_portz(TCPGitClientTests.test_get_url_with_portw  sO     D)))iioo?EEEEEr8   N)r=   r>   r?   r  rE  r@   r8   r7   r@  r@  n  s:        A A AF F F F Fr8   r@  c                       e Zd Zd Zd Zd Zd Zd Zd Zd Z	d Z
d	 Zd
 Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd ZdS )DefaultUrllib3ManagerTestc                 h    t          d           }|                     |j        d         d           d S )Nr  	cert_reqsCERT_REQUIREDr   rd   connection_pool_kwr6   managers     r7   test_no_configz(DefaultUrllib3ManagerTest.test_no_config  s6    )6663K@/RRRRRr8   c                     dd l }t          t                                }|                     ||j                   |                     ||j                   d S )Nr   r  )urllib3r   r    assertNotIsInstanceProxyManagerr   PoolManager)r6   rQ  rN  s      r7   test_config_no_proxyz.DefaultUrllib3ManagerTest.test_config_no_proxy  sW    )>>>  '*>???gw':;;;;;r8   c                     dd l } G d d|j                  }t          t                      |          }|                     ||           d S )Nr   c                       e Zd ZdS )TDefaultUrllib3ManagerTest.test_config_no_proxy_custom_cls.<locals>.CustomPoolManagerNrm  r@   r8   r7   CustomPoolManagerrX    ro  r8   rY  )r  pool_manager_cls)rQ  rT  r   r    r   )r6   rQ  rY  rN  s       r7   test_config_no_proxy_custom_clsz9DefaultUrllib3ManagerTest.test_config_no_proxy_custom_cls  sw    	 	 	 	 	 3 	 	 	 *<<2C
 
 
 	g'899999r8   c                     t                      }|                    ddd           t          |          }|                     |j        d         d           d S )N   http	   sslVerifys   truer  rI  rJ  r    re   r   rd   rL  r6   r  rN  s      r7   test_config_sslz)DefaultUrllib3ManagerTest.test_config_ssl  sU    

7L'222)8883K@/RRRRRr8   c                     t                      }|                    ddd           t          |          }|                     |j        d         d           d S )Nr]  r^  s   falser  rI  	CERT_NONEr_  r`  s      r7   test_config_no_sslz,DefaultUrllib3ManagerTest.test_config_no_ssl  sU    

7L(333)8883K@+NNNNNr8   c                    dd l }t                      }|                    ddd           t          |          }|                     ||j                   |                     t          |d                     |                     |j	        j
        d           |                     |j	        j        d           |                     |j	        j        d	           d S )
Nr   r]     proxy   http://localhost:3128/r  proxyhttp	localhosti8  )rQ  r    re   r   r   rS  r  hasattrrd   rh  schemer   r   r6   rQ  r  rN  s       r7   test_config_proxyz+DefaultUrllib3ManagerTest.test_config_proxy  s    

7H&?@@@)888gw';<<<11222-v666+[999+T22222r8   c                    dd l }t                      }|                     dd           t          |          }|                     ||j                   |                     t          |d                     |                     |j	        j
        d           |                     |j	        j        d           |                     |j	        j        d           d S )	Nr   
http_proxyhttp://myproxy:8080r  rh  ri  myproxy  rQ  r    r  r   r   rS  r  rk  rd   rh  rl  r   r   rm  s       r7   test_environment_proxyz0DefaultUrllib3ManagerTest.test_environment_proxy  s    '<===)888gw';<<<11222-v666+Y777+T22222r8   c                     dd l }t                      }|                     dd           t          |          }|                     ||j                   |                     ||j                   d S )Nr   rp  rN   r  rQ  r    r  r   rR  rS  r   rT  rm  s       r7   test_environment_empty_proxyz6DefaultUrllib3ManagerTest.test_environment_empty_proxy  sr    r***)888  '*>???gw':;;;;;r8   c                    dd l }t                      }|                     dd           |                     dd           d}t          ||          }|                     ||j                   |                     ||j                   d S )Nr   rp  rq  no_proxyzxyz,abc.def.gh,abc.ghz$http://xyz.abc.def.gh:8080/path/portr  r  rw  r6   rQ  r  r  rN  s        r7   test_environment_no_proxy_1z5DefaultUrllib3ManagerTest.test_environment_no_proxy_1  s    '<===%<===9)(KKK  '*>???gw':;;;;;r8   c                    dd l }t                      }|                     dd           |                     dd           d}t          ||          }|                     ||j                   |                     ||j                   d S )Nr   rp  rq  rz  xyz,abc.def.gh,abc.gh,ample.comzhttp://ample.com/path/portr{  rw  r|  s        r7   test_environment_no_proxy_2z5DefaultUrllib3ManagerTest.test_environment_no_proxy_2  s    '<===%FGGG/)(KKK  '*>???gw':;;;;;r8   c                    dd l }t                      }|                     dd           |                     dd           d}t          ||          }|                     ||j                   |                     ||j                   d S )Nr   rp  rq  rz  r  zhttp://ample.com:80/path/portr{  rw  r|  s        r7   test_environment_no_proxy_3z5DefaultUrllib3ManagerTest.test_environment_no_proxy_3  s    '<===%FGGG2)(KKK  '*>???gw':;;;;;r8   c                    dd l }t                      }|                     dd           |                     dd           d}t          ||          }|                     ||j                   |                     ||j                   d S )Nr   rp  rq  rz  r  zhttp://www.ample.com/path/portr{  rw  r|  s        r7   test_environment_no_proxy_4z5DefaultUrllib3ManagerTest.test_environment_no_proxy_4  s    '<===%FGGG3)(KKK  '*>???gw':;;;;;r8   c                    dd l }t                      }|                     dd           |                     dd           d}t          ||          }|                     ||j                   |                     t          |d                     |                     |j	        j
        d	           |                     |j	        j        d
           |                     |j	        j        d           d S )Nr   rp  rq  rz  r  z http://www.example.com/path/portr{  rh  ri  rr  rs  rt  r|  s        r7   test_environment_no_proxy_5z5DefaultUrllib3ManagerTest.test_environment_no_proxy_5  s    '<===%FGGG5)(KKKgw';<<<11222-v666+Y777+T22222r8   c                    dd l }t                      }|                     dd           |                     dd           d}t          ||          }|                     ||j                   |                     t          |d                     |                     |j	        j
        d	           |                     |j	        j        d
           |                     |j	        j        d           d S )Nr   rp  rq  rz  r  zhttp://ample.com.org/path/portr{  rh  ri  rr  rs  rt  r|  s        r7   test_environment_no_proxy_6z5DefaultUrllib3ManagerTest.test_environment_no_proxy_6   s    '<===%FGGG3)(KKKgw';<<<11222-v666+Y777+T22222r8   c                    dd l }t                      }|                     dd           |                     dd           d}t          ||          }|                     ||j                   |                     ||j                   d S )Nr   rp  rq  rz  %xyz,abc.def.gh,192.168.0.10,ample.comhttp://192.168.0.10/path/portr{  rw  r|  s        r7   (test_environment_no_proxy_ipv4_address_1zBDefaultUrllib3ManagerTest.test_environment_no_proxy_ipv4_address_1  s    '<===%LMMM2)(KKK  '*>???gw':;;;;;r8   c                    dd l }t                      }|                     dd           |                     dd           d}t          ||          }|                     ||j                   |                     ||j                   d S )Nr   rp  rq  rz  r  z"http://192.168.0.10:8888/path/portr{  rw  r|  s        r7   (test_environment_no_proxy_ipv4_address_2zBDefaultUrllib3ManagerTest.test_environment_no_proxy_ipv4_address_2  s    '<===%LMMM7)(KKK  '*>???gw':;;;;;r8   c                    dd l }t                      }|                     dd           |                     dd           d}t          ||          }|                     ||j                   |                     ||j                   d S )Nr   rp  rq  rz  z3xyz,abc.def.gh,ff80:1::/64,192.168.0.0/24,ample.comr  r{  rw  r|  s        r7   (test_environment_no_proxy_ipv4_address_3zBDefaultUrllib3ManagerTest.test_environment_no_proxy_ipv4_address_3$  s    '<===%Z[[[2)(KKK  '*>???gw':;;;;;r8   c                    dd l }t                      }|                     dd           |                     dd           d}t          ||          }|                     ||j                   |                     ||j                   d S )Nr   rp  rq  rz  %xyz,abc.def.gh,ff80:1::affe,ample.comhttp://[ff80:1::affe]/path/portr{  rw  r|  s        r7   (test_environment_no_proxy_ipv6_address_1zBDefaultUrllib3ManagerTest.test_environment_no_proxy_ipv6_address_1/  s    '<===%LMMM4)(KKK  '*>???gw':;;;;;r8   c                    dd l }t                      }|                     dd           |                     dd           d}t          ||          }|                     ||j                   |                     ||j                   d S )Nr   rp  rq  rz  r  z$http://[ff80:1::affe]:1234/path/portr{  rw  r|  s        r7   (test_environment_no_proxy_ipv6_address_2zBDefaultUrllib3ManagerTest.test_environment_no_proxy_ipv6_address_2:  s    '<===%LMMM9)(KKK  '*>???gw':;;;;;r8   c                    dd l }t                      }|                     dd           |                     dd           d}t          ||          }|                     ||j                   |                     ||j                   d S )Nr   rp  rq  rz  z3xyz,abc.def.gh,192.168.0.0/24,ff80:1::/64,ample.comr  r{  rw  r|  s        r7   (test_environment_no_proxy_ipv6_address_3zBDefaultUrllib3ManagerTest.test_environment_no_proxy_ipv6_address_3E  s    '<===%Z[[[4)(KKK  '*>???gw':;;;;;r8   c                     dd l } G d d|j                  }t                      }|                    ddd           t	          ||          }|                     ||           d S )Nr   c                       e Zd ZdS )RDefaultUrllib3ManagerTest.test_config_proxy_custom_cls.<locals>.CustomProxyManagerNrm  r@   r8   r7   CustomProxyManagerr  S  ro  r8   r  r]  rf  rg  )r  proxy_manager_cls)rQ  rS  r    re   r   r   )r6   rQ  r  r  rN  s        r7   test_config_proxy_custom_clsz6DefaultUrllib3ManagerTest.test_config_proxy_custom_clsP  s    	 	 	 	 	!5 	 	 	 

7H&?@@@)-?
 
 
 	g'9:::::r8   c                 j    t          d d          }|                     |j        d         d           d S )Nrc  )r  rI  rI  rK  rM  s     r7   test_config_no_verify_sslz3DefaultUrllib3ManagerTest.test_config_no_verify_ssl]  s8    )MMM3K@+NNNNNr8   N)r=   r>   r?   rO  rU  r[  ra  rd  rn  ru  rx  r}  r  r  r  r  r  r  r  r  r  r  r  r  r  r@   r8   r7   rG  rG    sl       S S S< < <	: 	: 	:S S SO O O3 3 3
3 
3 
3< < <	< 	< 	<	< 	< 	<	< 	< 	<	< 	< 	<3 3 33 3 3	< 	< 	<	< 	< 	<	< 	< 	<	< 	< 	<	< 	< 	<	< 	< 	<; ; ;O O O O Or8   rG  c                   8    e Zd Zd Zd Zd Zd Zd Zd Zd Z	dS )	SubprocessSSHVendorTestsc                 r    t           j        j        j        | _        t
          t           j        j        _        d S r1   ra   r   
subprocessPopen_orig_popenrB   rp   s    r7   rZ   zSubprocessSSHVendorTests.setUpc  %    ">4:*4!'''r8   c                 <    | j         t          j        j        _        d S r1   r  ra   r   r  r  rp   s    r7   r  z!SubprocessSSHVendorTests.tearDownh      *.*:!'''r8   c                 f    t                      }|                     t          |j        dd           d S Nz--weird-hostgit-clone-url)r   rN  r   rx  r6   vendors     r7   test_run_command_dashesz0SubprocessSSHVendorTests.test_run_command_dashesk  s>    $&&		
 	
 	
 	
 	
r8   c                 j    t                      }|                     t          |j        ddd           d S )Nr   r  12345r6  r   rN  r`  rx  r  s     r7   test_run_command_passwordz2SubprocessSSHVendorTests.test_run_command_passwordt  sF    $&& 	 	
 	
 	
 	
 	
r8   c                 l    t                      }|                     t          |j        dddd           d S )Nr   r  r  /tmp/id_rsar6  ri  r  r  s     r7   %test_run_command_password_and_privkeyz>SubprocessSSHVendorTests.test_run_command_password_and_privkey~  sI    $&&& 	 	
 	
 	
 	
 	
r8   c                     g d}t                      }|                    ddddd          }|j        j        }|                     ||d                    d S )	N)ssh-xz-p2200-ir  	user@hostr  r   r  r  r  r  r   r   ri  r   r   rx  procrH   assertListEqualr6   ra  r  rh  rH   s        r7   /test_run_command_with_port_username_and_privkeyzHSubprocessSSHVendorTests.test_run_command_with_port_username_and_privkey  su    	
 	
 	
 %&&$$& % 
 
 | XtAw/////r8   c                     g d}t                      }|                    ddd          }|j        j        }|                     ||d                    d S )N)r  z-ozOption=Valuer  r   r  r   r  r  r  r   r  r  s        r7   test_run_with_ssh_commandz2SubprocessSSHVendorTests.test_run_with_ssh_command  so    
 
 
 %&&$$6 % 
 
 | XtAw/////r8   N)
r=   r>   r?   rZ   r  r  r  r  r  r  r@   r8   r7   r  r  b  s}        5 5 5
; ; ;
 
 

 
 
	
 	
 	
0 0 020 0 0 0 0r8   r  c                   8    e Zd Zd Zd Zd Zd Zd Zd Zd Z	dS )	PLinkSSHVendorTestsc                 r    t           j        j        j        | _        t
          t           j        j        _        d S r1   r  rp   s    r7   rZ   zPLinkSSHVendorTests.setUp  r  r8   c                 <    | j         t          j        j        _        d S r1   r  rp   s    r7   r  zPLinkSSHVendorTests.tearDown  r  r8   c                 f    t                      }|                     t          |j        dd           d S r  )r   rN  r   rx  r  s     r7   r  z+PLinkSSHVendorTests.test_run_command_dashes  s>    !!		
 	
 	
 	
 	
r8   c                 t   t                      }t          j        dt                     |                     t          j                   t                      \  }}|                     |           |                    dddd          }t          d          }|D ]4}t          |          t          |          k    r|j	        |j	        k    r n$5t          d                    ||                    |j        j	        }t          j        d	k    rd
dg}nddg}|g dz   }	|                     |	|d                    d S )Nalwaysr   r  r  r  r  HInvoking PLink with a password exposes the password in the process list.!Expected warning {!r} not in {!r}r  	plink.exe-sshplink)-pwr  r  r  r   r  r   )r   warningssimplefilterUserWarningr  resetwarningsr,   rx  typerH   AssertionErrorr   r  r=  r>  r  )
r6   r  warnings_listrestore_warningsrh  expected_warningwrH   binaryra  s
             r7   r  z9PLinkSSHVendorTests.test_run_command_password_and_privkey  sg   !!h444.///*?*A*A''()))$$&	 % 
 
 '
 

  	 	AAww$/0000QV?O?T5T5T 3::;K][[   | <7""!6*FFv&F 
 
 
 
 	XtAw/////r8   c                 r   t           j        dk    rddg}nddg}|g dz   }t                      }t          j        dt
                     |                     t          j                   t                      \  }}|                     |           |	                    ddd	
          }t          d          }|D ]4}t          |          t          |          k    r|j        |j        k    r n$5t          d                    ||                    |j        j        }	|                     ||	d                    d S )Nr  r  r  r  )r  r  r   r  r  r   r  r  r  r  r  r   )r=  r>  r   r  r  r  r  r  r,   rx  r  rH   r  r   r  r  )
r6   r  ra  r  r  r  rh  r  r  rH   s
             r7   r  z-PLinkSSHVendorTests.test_run_command_password  sO   <7""!6*FFv&FEEEE!!h444.///*?*A*A''()))$$V_w$OO&
 

  	 	AAww$/0000QV?O?T5T5T 3::;K][[   | XtAw/////r8   c                     t           j        dk    rddg}nddg}|g dz   }t                      }|                    dddd	d
          }|j        j        }|                     ||d                    d S )Nr  r  r  r  )z-Pr  r  r  r  r  r   r  r  r  r  r  r   )r=  r>  r   rx  r  rH   r  )r6   r  ra  r  rh  rH   s         r7   r  zCPLinkSSHVendorTests.test_run_command_with_port_username_and_privkey  s    <7""!6*FFv&F 
 
 
 
  !!$$& % 
 
 | XtAw/////r8   c                     g d}t                      }|                    ddd          }|j        j        }|                     ||d                    d S )N)/path/to/plinkr  r   r  r   r  r  r  r   r  r  s        r7   r  z-PLinkSSHVendorTests.test_run_with_ssh_command1  so    
 
 
 %&&$$( % 
 
 | XtAw/////r8   N)
r=   r>   r?   rZ   r  r  r  r  r  r  r@   r8   r7   r  r    s        5 5 5
; ; ;
 
 
*0 *0 *0X0 0 0B0 0 060 0 0 0 0r8   r  c                       e Zd Zd Zd ZdS )RsyncUrlTestsc                     |                      t          d          d           |                      t          d          d           d S )Nzfoo:bar/path)Nr
  bar/pathzuser@foo:bar/path)r  r
  r  )rd   r   rp   s    r7   test_simplezRsyncUrlTests.test_simpleE  sR    88:STTT/002M	
 	
 	
 	
 	
r8   c                 H    |                      t          t          d           d S )Nz/path)rN  rO  r   rp   s    r7   	test_pathzRsyncUrlTests.test_pathK  s     *ow?????r8   N)r=   r>   r?   r  r  r@   r8   r7   r  r  D  s7        
 
 
@ @ @ @ @r8   r  c                        e Zd Zd Zd Zd ZdS )CheckWantsTestsc                 ,    t          dgddi           d S )N(   2f3dc7a53fb752a6961d3a56683df46d4d3bf262   refs/heads/blah)r   rp   s    r7   	test_finezCheckWantsTests.test_fineP  s-    89!LM	
 	
 	
 	
 	
r8   c                 P    |                      t          t          dgddi           d S )Nr  r  (   3f3dc7a53fb752a6961d3a56683df46d4d3bf262rN  r   r   rp   s    r7   test_missingzCheckWantsTests.test_missingV  s9    89!LM		
 	
 	
 	
 	
r8   c                 R    |                      t          t          dgddd           d S )Nr  r  )r  s   refs/heads/blah^{}r  rp   s    r7   test_annotatedzCheckWantsTests.test_annotated^  s@    89$O'R 		
 	
 	
 	
 	
r8   N)r=   r>   r?   r  r  r  r@   r8   r7   r  r  O  sA        
 
 

 
 
	
 	
 	
 	
 	
r8   r  c                       e Zd Zd ZdS )FetchPackResultTestsc                 v    |                      t          ddii d          t          ddii d                     d S )Nr   r  s
   user/agent)rd   r   rp   s    r7   test_eqzFetchPackResultTests.test_eqk  s^    %'RS 
 %'RS 	
 	
 	
 	
 	
r8   N)r=   r>   r?   r  r@   r8   r7   r  r  j  s#        
 
 
 
 
r8   r  c                   X    e Zd Zed             Zed             Zd Zd Zd Zd Z	d Z
dS )	GitCredentialStoreTestsc                     t          j        d          5 }|                    d           d d d            n# 1 swxY w Y   |j        | _        d S )NF)deletes   https://user:pass@example.org
)r  NamedTemporaryFiler4   namefname)clsr   s     r7   
setUpClassz"GitCredentialStoreTests.setUpClass{  s    (666 	8!GG6777	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8F			s   8<<c                 8    t          j        | j                   d S r1   )osunlinkr  )r  s    r7   tearDownClassz%GitCredentialStoreTests.tearDownClass  s    
	#)r8   c                 ^    |                      t          dd| j        g          d            d S )Nr]     example.orgfnamesrd   r   r  rp   s    r7   test_nonmatching_schemez/GitCredentialStoreTests.test_nonmatching_scheme  s=    &w
|TTT	
 	
 	
 	
 	
r8   c                 ^    |                      t          dd| j        g          d            d S )N   httpss   noentry.orgr  r  rp   s    r7   test_nonmatching_hostnamez1GitCredentialStoreTests.test_nonmatching_hostname  s=    &xUUU	
 	
 	
 	
 	
r8   c                 ^    |                      t          dd| j        g          d           d S )Nr  r
  r     users   passr  rp   s    r7   test_match_without_usernamez3GitCredentialStoreTests.test_match_without_username  s=    &xUUU	
 	
 	
 	
 	
r8   c                 `    |                      t          ddd| j        g          d           d S )Nr  r
  r  r  r  r  rp   s    r7   !test_match_with_matching_usernamez9GitCredentialStoreTests.test_match_with_matching_username  sH    &.'4:,   		
 	
 	
 	
 	
r8   c                 `    |                      t          ddd| j        g          d            d S )Nr  r
  s	   otheruserr  r  rp   s    r7   'test_no_match_with_nonmatching_usernamez?GitCredentialStoreTests.test_no_match_with_nonmatching_username  sH    &.,
|   		
 	
 	
 	
 	
r8   N)r=   r>   r?   classmethodr  r  r  r  r  r  r  r@   r8   r7   r  r  z  s          [
   [
 
 

 
 

 
 

 
 

 
 
 
 
r8   r  c                        e Zd Zd Zd Zd ZdS )RemoteErrorFromStderrTestsc                 d    |                      t          d           t                                 d S r1   )rd   r   r   rp   s    r7   test_nothingz'RemoteErrorFromStderrTests.test_nothing  s-    2488/:K:KLLLLLr8   c                     t          d          }|                     t          |          t          d                     d S )NsH   This is some random output.
ERROR: This is the actual error
with a tail
zThis is the actual error)r   rd   r   r   r6   bs     r7   test_error_linez*RemoteErrorFromStderrTests.test_error_line  sQ    
 
 	%a((788	
 	
 	
 	
 	
r8   c                     t          d          }|                     t          |          t          ddg                     d S )NsO   This is output without an error line.
And this line is just random noise, too.
s%   This is output without an error line.s(   And this line is just random noise, too.)r   rd   r   r   r   s     r7   test_no_error_linez-RemoteErrorFromStderrTests.test_no_error_line  s]    
 
 	%a((<? 	
 	
 	
 	
 	
r8   N)r=   r>   r?   r  r"  r$  r@   r8   r7   r  r    sD        M M M
 
 

 
 
 
 
r8   r  )Nr  r  r  r=  r  r  ior   unittest.mockr   urllib.parser   r  r   ra   r   dulwich.testsr   r	   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r  r    objectsr!   r"   packr#   r$   r%   protocolr&   r'   repor(   r)   utilsr+   r,   r-   r/   rB   rS   r   r@  rf  rz  r  r  r  r@  rG  r  r  r  r  r  r  r  r@   r8   r7   <module>r.     s  *  				  



               * * * * * * ! ! ! ! ! !        * * * * * * * *' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' '        " " " " " " " " L L L L L L L L L L - - - - - - - - # # # # # # # # C C C C C C C C C CD D D D D& D D D       "p8 p8 p8 p8 p8X p8 p8 p8f	p) p) p) p) p)h p) p) p)fpA pA pA pA pAX pA pA pAf" " " " " " " "JHK HK HK HK HK HK HK HKVJ J J J Jh J J J.}0 }0 }0 }0 }0( }0 }0 }0@z: z: z: z: z: z: z: z:zF F F F F F F F&^O ^O ^O ^O ^O ^O ^O ^OBR0 R0 R0 R0 R0x R0 R0 R0jJ0 J0 J0 J0 J0( J0 J0 J0Z@ @ @ @ @H @ @ @
 
 
 
 
h 
 
 
6
 
 
 
 
8 
 
 
 +
 +
 +
 +
 +
h +
 +
 +
\ 
  
  
  
  
  
  
  
  
  
r8   