a
    äzeÙ  ã                   @   sb   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 G dd„ dejƒZ	e
dkr^e ¡  dS )é    N)Úsupportc                   @   s°   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ Zdd„ Zdd„ Z	d)dd„Z
dd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Ze ejdkd¡d d!„ ƒZd"d#„ Zd$d%„ Zd&d'„ Zd(S )*ÚNetrcTestCasec                 C   s|   t  |¡}d}tjdkr |d7 }t ¡ \}}tj||d}| |¡ W d   ƒ n1 sZ0    Y  |  	tj
|¡ t |¡S )NÚwÚcygwinÚt)Úmode)ÚtextwrapÚdedentÚsysÚplatformÚtempfileÚmkstempÚosÚfdopenÚwriteÚ
addCleanupÚunlinkÚnetrc)ÚselfZ	test_datar   Ztemp_fdZtemp_filenameÚfp© r   ú%/usr/lib/python3.9/test/test_netrc.pyÚmake_nrc   s    

(zNetrcTestCase.make_nrcc                 C   sP   |   d¡}|  |jd d¡ |  |jd d¡ |   | ¡ ¡}|  |j|j¡ d S )Nz‡            machine host1.domain.com login log1 password pass1 account acct1
            default login log2 password pass2
            zhost1.domain.com)Zlog1Zacct1Zpass1Údefault)Úlog2NZpass2)r   ÚassertEqualÚhostsÚ__repr__)r   ÚnrcZnrc2r   r   r   Útest_default   s    
ÿzNetrcTestCase.test_defaultc                 C   s*   |   d¡}|  |jddgddgdœ¡ d S )Nz‰            macdef macro1
            line1
            line2

            macdef macro2
            line3
            line4
            zline1
zline2
zline3
zline4
)Zmacro1Zmacro2)r   r   Zmacros)r   r   r   r   r   Útest_macros   s    
	ÿzNetrcTestCase.test_macrosc                 C   s&   |   |¡}|  |jd dd|f¡ d S )Nzhost.domain.comÚlogZacct©r   r   r   ©r   r   Úpasswdr   r   r   Ú_test_passwords+   s    
zNetrcTestCase._test_passwordsc                 C   s   |   dd¡ d S )NzV            machine host.domain.com login log password #pass account acct
            ú#pass©r%   ©r   r   r   r   Útest_password_with_leading_hash/   s    þz-NetrcTestCase.test_password_with_leading_hashc                 C   s   |   dd¡ d S )NzV            machine host.domain.com login log password pass# account acct
            zpass#r'   r(   r   r   r   Ú test_password_with_trailing_hash4   s    þz.NetrcTestCase.test_password_with_trailing_hashc                 C   s   |   dd¡ d S )NzV            machine host.domain.com login log password pa#ss account acct
            zpa#ssr'   r(   r   r   r   Ú test_password_with_internal_hash9   s    þz.NetrcTestCase.test_password_with_internal_hashÚpassc                 C   s8   |   |¡}|  |jd dd |f¡ |  |jd d¡ d S )Núfoo.domain.comÚbarzbar.domain.com)ZfooNr,   r"   r#   r   r   r   Ú_test_comment>   s    
zNetrcTestCase._test_commentc                 C   s   |   d¡ d S )Nz˜            # comment
            machine foo.domain.com login bar password pass
            machine bar.domain.com login foo password pass
            ©r/   r(   r   r   r   Ú test_comment_before_machine_lineC   s    z.NetrcTestCase.test_comment_before_machine_linec                 C   s   |   d¡ d S )Nz—            #comment
            machine foo.domain.com login bar password pass
            machine bar.domain.com login foo password pass
            r0   r(   r   r   r   Ú)test_comment_before_machine_line_no_spaceJ   s    z7NetrcTestCase.test_comment_before_machine_line_no_spacec                 C   s   |   d¡ d S )Nz            #
            machine foo.domain.com login bar password pass
            machine bar.domain.com login foo password pass
            r0   r(   r   r   r   Ú*test_comment_before_machine_line_hash_onlyQ   s    z8NetrcTestCase.test_comment_before_machine_line_hash_onlyc                 C   s   |   d¡ d S )NzŒ            machine foo.domain.com login bar password pass # comment
            machine bar.domain.com login foo password pass
            r0   r(   r   r   r   Ú#test_comment_at_end_of_machine_lineX   s    z1NetrcTestCase.test_comment_at_end_of_machine_linec                 C   s   |   d¡ d S )Nz‹            machine foo.domain.com login bar password pass #comment
            machine bar.domain.com login foo password pass
            r0   r(   r   r   r   Ú,test_comment_at_end_of_machine_line_no_space^   s    z:NetrcTestCase.test_comment_at_end_of_machine_line_no_spacec                 C   s   |   dd¡ d S )NzŒ            machine foo.domain.com login bar password #pass #comment
            machine bar.domain.com login foo password pass
            r&   r0   r(   r   r   r   Ú1test_comment_at_end_of_machine_line_pass_has_hashd   s    ýz?NetrcTestCase.test_comment_at_end_of_machine_line_pass_has_hashÚposixzPOSIX only testc                 C   sÚ   t j}t |¡ |  t j|¡ tj |d¡}t|dƒ}| 	d¡ W d   ƒ n1 sV0    Y  t  
¡ ^}| d|¡ t |d¡ t ¡ }|  |jd d¡ t |d¡ |  tjtj¡ W d   ƒ n1 sÌ0    Y  d S )	Nú.netrcZwtz                machine foo.domain.com login bar password pass
                default login foo password pass
                ÚHOMEé€  r-   )r.   Nr,   i’  )r   ÚTESTFNr   Úmkdirr   ÚrmtreeÚpathÚjoinÚopenr   ÚEnvironmentVarGuardÚsetÚchmodr   r   r   ÚassertRaisesZNetrcParseError)r   ÚdÚfnÚfÚenvironr   r   r   r   Útest_securityk   s    
(
ÿzNetrcTestCase.test_securityc                 C   sd   t j}t |¡ |  t j|¡ t  ¡ *}| d|¡ |  t	t
j
¡ W d   ƒ n1 sV0    Y  d S )Nr9   )r   r;   r   r<   r   r=   rA   rB   rD   ÚFileNotFoundErrorr   )r   rE   rH   r   r   r   Útest_file_not_found_in_home   s    

z)NetrcTestCase.test_file_not_found_in_homec                 C   s   | j ttjdd d S )NZunlikely_netrc)Úfile)rD   rJ   r   r(   r   r   r   Útest_file_not_found_explicit‰   s    
ÿz*NetrcTestCase.test_file_not_found_explicitc                    sê   t j‰t ˆ¡ |  t jˆ¡ tj ˆd¡}t|dƒ}| 	d¡ W d   ƒ n1 sV0    Y  t 
|d¡ tjj‰g ‰ ‡ ‡‡fdd„}t  tjd|¡4 t ¡ }| d¡\}}}|  |d	¡ W d   ƒ n1 sÒ0    Y  |  ˆ ¡ d S )
Nr8   r   z.machine foo.domain.com login bar password passr:   c                    sZ   ˆ   | ¡ t ¡ 4}| dˆ¡ | dˆ¡ ˆ| ƒ}|W  d   ƒ S 1 sL0    Y  d S )Nr9   ÚUSERPROFILE)Úappendr   rA   rB   )ÚsrH   Úresult©ZcalledZ	fake_homeZorig_expanduserr   r   Úfake_expanduser™   s    

z8NetrcTestCase.test_home_not_set.<locals>.fake_expanduserÚ
expanduserr-   r.   )r   r;   r   r<   r   r=   r>   r?   r@   r   rC   rT   Z	swap_attrr   Zauthenticatorsr   Z
assertTrue)r   Zfake_netrc_pathrG   rS   r   ZloginZaccountÚpasswordr   rR   r   Útest_home_not_set   s    
(*zNetrcTestCase.test_home_not_setN)r,   )Ú__name__Ú
__module__Ú__qualname__r   r   r    r%   r)   r*   r+   r/   r1   r2   r3   r4   r5   r6   ÚunittestZ
skipUnlessr   ÚnamerI   rK   rM   rV   r   r   r   r   r      s&   

r   Ú__main__)r   r   rZ   r
   r   r   Útestr   ZTestCaser   rW   Úmainr   r   r   r   Ú<module>   s
   0 %