a
    åzeÝ7  ã                   @   s¨  d Z ddlZddlZddlZddlZddlmZ ddlZddlm	Z	 ddl
mZmZmZmZmZ ddlmZmZ ddlmZ ddlmZmZmZmZ zddlZddlZd	ZW n eyÂ   d
ZY n0 zddlZd	ZW n eyî   edƒZY n0 zddl Z d	Z!W n ey   d
Z!Y n0 zddl"Z"W n ey>   dZ"Y n0 zddl#Z#W n eyd   dZ#Y n0 dd„ Z$G dd„ dej%ej&ej'ƒZ(dd„ Z)e*dkr¤ee)ƒ ƒ dS )z!Tests for distutils.archive_util.é    N)Ú
splitdrive)Úarchive_util)Úcheck_archive_formatsÚmake_tarballÚmake_zipfileÚmake_archiveÚARCHIVE_FORMATS)Úfind_executableÚspawn)Úsupport)Úcheck_warningsÚrun_unittestÚpatchÚ
change_cwdTFÚzipc                 C   s8   t jjrdS z|  t ¡ ¡ W n ty2   Y dS 0 dS )zF
    Return True if the filename can be saved in the file system.
    TF)ÚosÚpathÚsupports_unicode_filenamesÚencodeÚsysÚgetfilesystemencodingÚUnicodeEncodeError)Úfilename© r   ú7/usr/lib/python3.9/distutils/tests/test_archive_util.pyÚcan_fs_encode/   s    r   c                   @   sª  e Zd Ze ed¡dBdd„ƒZe ed¡dd„ ƒZe ed¡dd	„ ƒZ	e e
d
¡dd„ ƒZe edƒd¡dd„ ƒZe edƒd¡dd„ ƒZdd„ Zdd„ Zg d¢Zdd„ eD ƒZdd„ Ze edƒoÎedƒoÎed¡d d!„ ƒZe ed"ƒd#¡d$d%„ ƒZe eo ed&¡d'd(„ ƒZe ed)¡d*d+„ ƒZd,d-„ Zd.d/„ Zd0d1„ Zd2d3„ Ze ed¡d4d5„ ƒZe ed¡d6d7„ ƒZe e
d8¡d9d:„ ƒZ d;d<„ Z!e ed=¡e e"d>¡d?d@„ ƒƒZ#dAS )CÚArchiveUtilTestCasezNeed zlib support to runÚarchivec                 C   s,   |   ¡ }|  ||d¡ | j||dd d d S )Nú.tar.gzú.tar©Úcompress©Ú_create_filesÚ_make_tarball)ÚselfÚnameÚtmpdirr   r   r   Útest_make_tarball@   s    z%ArchiveUtilTestCase.test_make_tarballc                 C   s   |   ¡ }| j|dddd d S )Nr   r   Úgzipr    r"   ©r%   r'   r   r   r   Útest_make_tarball_gzipH   s    z*ArchiveUtilTestCase.test_make_tarball_gzipzNeed bz2 support to runc                 C   s   |   ¡ }| j|dddd d S )Nr   z.tar.bz2Úbzip2r    r"   r*   r   r   r   Útest_make_tarball_bzip2M   s    z+ArchiveUtilTestCase.test_make_tarball_bzip2zNeed lzma support to runc                 C   s   |   ¡ }| j|dddd d S )Nr   z.tar.xzÚxzr    r"   r*   r   r   r   Útest_make_tarball_xzR   s    z(ArchiveUtilTestCase.test_make_tarball_xzõ   Ã¥rchivz'File system cannot handle this filenamec                 C   s   |   d¡ dS )zV
        Mirror test_make_tarball, except filename contains latin characters.
        r0   N©r(   ©r%   r   r   r   Útest_make_tarball_latin1W   s    z,ArchiveUtilTestCase.test_make_tarball_latin1õ   ã®ã‚¢ãƒ¼ã‚«ã‚¤ãƒ–c                 C   s   |   d¡ dS )z{
        Mirror test_make_tarball, except filename contains extended
        characters outside the latin charset.
        r4   Nr1   r2   r   r   r   Útest_make_tarball_extended_   s    z.ArchiveUtilTestCase.test_make_tarball_extendedc                 K   sª   |   ¡ }t t|ƒd t|ƒd kd¡ tj ||¡}t|ƒ* tt|ƒd dfi |¤Ž W d   ƒ n1 sn0    Y  || }|  	tj 
|¡¡ |  |  |¡| j¡ d S )Nr   z)source and target should be on same driveé   Údist)ÚmkdtempÚunittestÚ
skipUnlessr   r   r   Újoinr   r   Ú
assertTrueÚexistsÚassertEqualÚ_tarinfoÚ_created_files)r%   r'   Ztarget_nameÚsuffixÚkwargsÚtmpdir2Ú	base_nameÚtarballr   r   r   r$   h   s    ÿ
8z!ArchiveUtilTestCase._make_tarballc                 C   s8   t  |¡}z| ¡ }| ¡  |W | ¡  S | ¡  0 d S ©N)ÚtarfileÚopenZgetnamesÚsortÚclose)r%   r   ÚtarÚnamesr   r   r   r?   x   s    
þzArchiveUtilTestCase._tarinfo)zdist/z
dist/file1z
dist/file2z	dist/sub/zdist/sub/file3z
dist/sub2/c                 C   s   g | ]}|  d ¡‘qS )ú/)Úrstrip)Ú.0Úpr   r   r   Ú
<listcomp>ƒ   ó    zArchiveUtilTestCase.<listcomp>c                 C   s~   |   ¡ }tj |d¡}t |¡ |  |dgd¡ |  |dgd¡ t tj |d¡¡ |  |ddgd¡ t tj |d¡¡ |S )Nr7   Zfile1ÚxxxZfile2ÚsubZfile3Zsub2)r8   r   r   r;   ÚmkdirZ
write_file)r%   r'   r7   r   r   r   r#   …   s    
z!ArchiveUtilTestCase._create_filesrK   r)   z*Need the tar, gzip and zlib command to runc           	   	   C   sÔ  |   ¡ }|  ¡ }tj |d¡}t ¡ }t |¡ zt|dƒ W t |¡ nt |¡ 0 |d }|  tj 	|¡¡ tj |d¡}g d¢}g d¢}t ¡ }t |¡ zt
|ƒ t
|ƒ W t |¡ nt |¡ 0 |  tj 	|¡¡ |  |  |¡| j¡ |  |  |¡| j¡ tj |d¡}t ¡ }t |¡ zt|dd d W t |¡ nt |¡ 0 |d }|  tj 	|¡¡ tj |d¡}t ¡ }t |¡ zt|dd d	d
 W t |¡ nt |¡ 0 |d }|  tj 	|¡¡ d S )Nr   r7   r   zarchive2.tar.gz)rK   z-cfúarchive2.tarr7   )r)   z-fz-9rV   r    r   T©r!   Údry_run)r#   r8   r   r   r;   ÚgetcwdÚchdirr   r<   r=   r
   r>   r?   r@   )	r%   r'   rC   rD   Úold_dirrE   Ztarball2Ztar_cmdZgzip_cmdr   r   r   Útest_tarfile_vs_tar‘   sL    




z'ArchiveUtilTestCase.test_tarfile_vs_tarr!   z The compress program is requiredc              	   C   sT  |   ¡ }tj |  ¡ d¡}t ¡ }t |¡ zLtƒ (}t 	d¡ t
|ddd W d   ƒ n1 sb0    Y  W t |¡ nt |¡ 0 |d }|  tj |¡¡ |  t|jƒd¡ t |¡ t ¡ }t |¡ zPtƒ *}t 	d¡ t
|dddd	 W d   ƒ n1 s0    Y  W t |¡ nt |¡ 0 |  tj |¡¡ |  t|jƒd¡ d S )
Nr   Úalwaysr7   r!   r    z.tar.Zr6   TrW   )r#   r   r   r;   r8   rY   rZ   r   ÚwarningsÚsimplefilterr   r<   r=   r>   ÚlenÚremoveZassertFalse)r%   r'   rD   r[   ÚwrE   r   r   r   Útest_compress_deprecatedÊ   s0    

.


ÿ(z,ArchiveUtilTestCase.test_compress_deprecatedz Need zip and zlib support to runc                 C   sª   |   ¡ }tj |  ¡ d¡}t|ƒ t|dƒ W d   ƒ n1 sB0    Y  |d }|  tj |¡¡ t	 
|¡&}|  t| ¡ ƒ| j¡ W d   ƒ n1 sœ0    Y  d S )Nr   r7   ú.zip)r#   r   r   r;   r8   r   r   r<   r=   ÚzipfileÚZipFiler>   ÚsortedÚnamelistÚ_zip_created_files)r%   r'   rD   rE   Úzfr   r   r   Útest_make_zipfileë   s    
(z%ArchiveUtilTestCase.test_make_zipfilezNeed zip support to runc                    sþ   t | tjdd ƒ g ‰ tj‰‡ ‡fdd„}t | tjd|ƒ |  ¡ }tj |  ¡ d¡}t	|ƒ t
|dƒ W d   ƒ n1 sz0    Y  |d }|  ˆ |dfd	tjifg¡ |  tj |¡¡ t |¡&}|  t| ¡ ƒ| j¡ W d   ƒ n1 sð0    Y  d S )
NÚzlibc                     s.   |  dd ¡tjkr ˆ  | |f¡ ˆ| i |¤ŽS )NÚcompression)Úgetre   Ú
ZIP_STOREDÚappend)ÚaÚkw©ZcalledZzipfile_classr   r   Úfake_zipfile   s    zCArchiveUtilTestCase.test_make_zipfile_no_zlib.<locals>.fake_zipfilerf   r   r7   rd   rb   rm   )r   r   re   rf   r#   r   r   r;   r8   r   r   r>   ro   r<   r=   rg   rh   ri   )r%   rt   r'   rD   rE   rj   r   rs   r   Útest_make_zipfile_no_zlibú   s     
(ÿz-ArchiveUtilTestCase.test_make_zipfile_no_zlibc                 C   s*   |   tg d¢ƒd¡ |  tg d¢ƒ¡ d S )N)ÚgztarrS   r   rS   )rv   ÚbztarÚxztarZztarrK   r   )r>   r   ZassertIsNoner2   r   r   r   Útest_check_archive_formats  s    ÿz.ArchiveUtilTestCase.test_check_archive_formatsc                 C   s*   |   ¡ }tj |d¡}|  tt|d¡ d S )Nr   rS   )r8   r   r   r;   ZassertRaisesÚ
ValueErrorr   )r%   r'   rD   r   r   r   Útest_make_archive  s    z%ArchiveUtilTestCase.test_make_archivec                 C   sj   t  ¡ }dd„ }|g dftd< z>ztdd|  ¡ d W n   Y n0 |  t  ¡ |¡ W td= ntd= 0 d S )Nc                  _   s
   t ƒ ‚d S rF   )ÚRuntimeError)Úargsrr   r   r   r   Ú_breaks!  s    z:ArchiveUtilTestCase.test_make_archive_cwd.<locals>._breakszxxx filerS   )Úroot_dir)r   rY   r   r   r8   r>   )r%   Zcurrent_dirr~   r   r   r   Útest_make_archive_cwd  s    z)ArchiveUtilTestCase.test_make_archive_cwdc                 C   sf   |   ¡ }tj |  ¡ d¡}t|d|dƒ}|  tj |¡¡ |  tj 	|¡d¡ |  |  
|¡| j¡ d S )Nr   rK   r7   zarchive.tar©r#   r   r   r;   r8   r   r<   r=   r>   Úbasenamer?   r@   ©r%   Úbase_dirrD   Úresr   r   r   Útest_make_archive_tar-  s    z)ArchiveUtilTestCase.test_make_archive_tarc                 C   sf   |   ¡ }tj |  ¡ d¡}t|d|dƒ}|  tj |¡¡ |  tj 	|¡d¡ |  |  
|¡| j¡ d S )Nr   rv   r7   zarchive.tar.gzr   rƒ   r   r   r   Útest_make_archive_gztar5  s    z+ArchiveUtilTestCase.test_make_archive_gztarc                 C   sf   |   ¡ }tj |  ¡ d¡}t|d|dƒ}|  tj |¡¡ |  tj 	|¡d¡ |  |  
|¡| j¡ d S )Nr   rw   r7   zarchive.tar.bz2r   rƒ   r   r   r   Útest_make_archive_bztar>  s    z+ArchiveUtilTestCase.test_make_archive_bztarzNeed xz support to runc                 C   sf   |   ¡ }tj |  ¡ d¡}t|d|dƒ}|  tj |¡¡ |  tj 	|¡d¡ |  |  
|¡| j¡ d S )Nr   rx   r7   zarchive.tar.xzr   rƒ   r   r   r   Útest_make_archive_xztarG  s    z+ArchiveUtilTestCase.test_make_archive_xztarc                 C   sâ   t r"t d¡d }t d¡d }nd }}|  ¡ }|  ¡ }tj 	|  ¡ d¡}t
|d||||d}|  tj |¡¡ t
|d||ƒ}|  tj |¡¡ t
|d||||d}|  tj |¡¡ t
|d||ddd}|  tj |¡¡ d S )	Nr   Úrootr   r   )ÚownerÚgrouprK   Z	kjhkjhkjgZoihohoh)ÚUID_GID_SUPPORTÚgrpÚgetgrgidÚpwdÚgetpwuidr#   r8   r   r   r;   r   r<   r=   )r%   rŒ   r‹   r„   r   rD   r…   r   r   r   Útest_make_archive_owner_groupP  s*    ÿ
ÿ
ÿz1ArchiveUtilTestCase.test_make_archive_owner_groupzRequires zlibzRequires grp and pwd supportc           	   	   C   sØ   |   ¡ }tj |  ¡ d¡}t ¡ }t |¡ t d¡d }t	 
d¡d }z t|dd ||d}W t |¡ nt |¡ 0 |  tj |¡¡ t |¡}z6| ¡ D ] }|  |jd¡ |  |jd¡ qœW | ¡  n
| ¡  0 d S )Nr   r   r7   )r!   r‹   rŒ   )r#   r   r   r;   r8   rY   rZ   rŽ   r   r   r‘   r   r<   r=   rG   rH   Z
getmembersr>   ÚuidÚgidrJ   )	r%   r'   rD   r[   rŒ   r‹   Úarchive_namer   Úmemberr   r   r   Útest_tarfile_root_ownerk  s$    
ÿ
z+ArchiveUtilTestCase.test_tarfile_root_ownerN)r   )$Ú__name__Ú
__module__Ú__qualname__r9   r:   ÚZLIB_SUPPORTr(   r+   Úbz2r-   Úlzmar/   r   r3   r5   r$   r?   ri   r@   r#   r	   r\   rc   ÚZIP_SUPPORTrk   ru   ry   r{   r€   r†   r‡   rˆ   r‰   r’   r   r—   r   r   r   r   r   <   sd   







ÿ

ÿ
	þ
6
ÿ
ÿ










r   c                   C   s
   t  t¡S rF   )r9   Z	makeSuiter   r   r   r   r   Ú
test_suite†  s    rŸ   Ú__main__)+Ú__doc__r9   r   r   rG   Zos.pathr   r^   Z	distutilsr   Zdistutils.archive_utilr   r   r   r   r   Zdistutils.spawnr	   r
   Zdistutils.testsr   Ztest.supportr   r   r   r   rŽ   r   r   ÚImportErrorre   rž   rl   r›   rœ   r   r   ZTempdirManagerZLoggingSilencerZTestCaser   rŸ   r˜   r   r   r   r   Ú<module>   sZ   



þ  L
