a
    äze1!  ã                   @   s¢   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mZ eddgdZeddgdZ	G dd	„ d	ƒZ
G d
d„ de
e jƒZG dd„ de
e jƒZedkrže  ¡  dS )é    N)Úsocket_helper)ÚTESTFNÚimport_fresh_moduleÚstatÚ_stat)Zfresh)Zblockedc                   @   sF  e Zd ZdZh d£Zh d£Zh d£Zddddd	d
dddddœ
Zddddddddddddddddd	dddœZddddddddddddddd	dd d!œZ	d"d#„ Z
e
Zed$fd%d&„Zd'd(„ Zd)d*„ Zd+d,„ Ze eed-ƒd.¡d/d0„ ƒZe eed1ƒd2¡d3d4„ ƒZe ejd5kd6¡d7d8„ ƒZejd9d:„ ƒZd;d<„ Ze ejd=kd>¡d?d@„ ƒZdS )AÚTestFilemodeN>   ÚSF_SNAPSHOTÚ	UF_APPENDÚUF_NOUNLINKÚ	UF_HIDDENÚSF_IMMUTABLEÚSF_NOUNLINKÚ	SF_APPENDÚSF_ARCHIVEDÚUF_COMPRESSEDÚ	UF_OPAQUEÚUF_IMMUTABLEÚ	UF_NODUMP>
   ÚS_IFREGÚS_IFLNKÚS_IFWHTÚS_IFPORTÚS_IFBLKÚS_IFDOORÚS_IFSOCKÚS_IFIFOÚS_IFDIRÚS_IFCHR>
   ÚS_ISDIRÚS_ISREGÚS_ISLNKÚS_ISDOORÚS_ISBLKÚS_ISFIFOÚS_ISSOCKÚS_ISPORTÚS_ISWHTÚS_ISCHRr   é   é   é   é   é   é   é   é   é	   )
ÚST_MODEÚST_INOÚST_DEVÚST_NLINKÚST_UIDÚST_GIDÚST_SIZEÚST_ATIMEÚST_MTIMEÚST_CTIMEi   i   i   éÀ  é   é€   é@   é8   é    é   )ÚS_ISUIDÚS_ISGIDÚS_ENFMTÚS_ISVTXÚS_IRWXUÚS_IRUSRÚS_IREADÚS_IWUSRÚS_IWRITEÚS_IXUSRÚS_IEXECÚS_IRWXGÚS_IRGRPÚS_IWGRPÚS_IXGRPÚS_IRWXOÚS_IROTHÚS_IWOTHÚS_IXOTHi @  i €  i    i   i   i   )ÚFILE_ATTRIBUTE_ARCHIVEÚFILE_ATTRIBUTE_COMPRESSEDÚFILE_ATTRIBUTE_DEVICEÚFILE_ATTRIBUTE_DIRECTORYÚFILE_ATTRIBUTE_ENCRYPTEDÚFILE_ATTRIBUTE_HIDDENÚFILE_ATTRIBUTE_INTEGRITY_STREAMÚFILE_ATTRIBUTE_NORMALÚ"FILE_ATTRIBUTE_NOT_CONTENT_INDEXEDÚFILE_ATTRIBUTE_NO_SCRUB_DATAÚFILE_ATTRIBUTE_OFFLINEÚFILE_ATTRIBUTE_READONLYÚFILE_ATTRIBUTE_REPARSE_POINTÚFILE_ATTRIBUTE_SPARSE_FILEÚFILE_ATTRIBUTE_SYSTEMÚFILE_ATTRIBUTE_TEMPORARYÚFILE_ATTRIBUTE_VIRTUALc                 C   sH   zt  t¡ W n4 tyB   zt  t¡ W n ty<   Y n0 Y n0 d S ©N)ÚosÚremover   ÚOSErrorÚrmdir)Úself© rl   ú$/usr/lib/python3.9/test/test_stat.pyÚsetUpN   s    zTestFilemode.setUpTc                 C   s2   |rt  |¡j}nt  |¡j}| j |¡}||fS rf   )rg   ÚlstatÚst_moder   ÚstatmodÚfilemode)rk   Zfnamero   rp   Úmodestrrl   rl   rm   Úget_modeX   s
    zTestFilemode.get_modec                 C   s   t | jd| d¡ ƒ}|  | j |¡|¡ d| }| jD ]R}t | j|d ƒ}|d u rd||kr8t|ƒ‚q8||kr||  ||ƒ¡ q8|  ||ƒ¡ q8d S )NZS_IFÚFZS_IS)	Úgetattrrq   ÚlstripÚassertEqualÚS_IFMTÚformat_funcsÚ
ValueErrorÚ
assertTrueZassertFalse)rk   ÚnameÚmodeÚfmtZtestnameÚfuncnameÚfuncrl   rl   rm   Ú
assertS_IS`   s    
zTestFilemode.assertS_ISc                 C   s¨  t tdƒ W d   ƒ n1 s 0    Y  tjdkrTt td¡ |  ¡ \}}|  |d¡ |  d|¡ |  | j 	|¡| jj
¡ t td¡ |  ¡ \}}|  |d¡ |  d|¡ |  | j 	|¡| jj¡ t td¡ |  ¡ \}}|  |d	¡ |  d|¡ |  | j 	|¡| jj¡ t td
¡ |  ¡ \}}|  d|¡ |  |d¡ |  | j 	|¡d
¡ nPt td¡ |  ¡ \}}|  |d d… d¡ |  d|¡ |  | j |¡| jj¡ d S )NÚwÚposixr;   z
-rwx------ZREGr?   z
----rwx---r.   z
-------rwxi$  z
-r--r--r--r*   z-rw)Úopenr   rg   r}   Úchmodrt   rx   r‚   rq   ÚS_IMODErF   rM   rQ   ry   r   ©rk   rp   rs   rl   rl   rm   Ú	test_modeq   sH    ÿÿÿÿzTestFilemode.test_modec                 C   sZ   t  t¡ t  td¡ |  ¡ \}}|  d|¡ t jdkrF|  |d¡ n|  |d d¡ d S )Nr;   ÚDIRr„   z
drwx------r   Úd)rg   Úmkdirr   r†   rt   r‚   r}   rx   rˆ   rl   rl   rm   Útest_directory—   s    

zTestFilemode.test_directoryÚsymlinkzos.symlink not availablec              
   C   sx   zt  t  ¡ t¡ W n6 ttfyJ } zt t|ƒ¡‚W Y d }~n2d }~0 0 |  	¡ \}}|  
|d d¡ |  d|¡ d S )Nr   ÚlZLNK)rg   rŽ   Úgetcwdr   ri   ÚNotImplementedErrorÚunittestZSkipTestÚstrrt   rx   r‚   )rk   Úerrrp   rs   rl   rl   rm   Ú	test_link¡   s    $zTestFilemode.test_linkÚmkfifozos.mkfifo not availablec              
   C   sl   zt  td¡ W n2 tyB } z|  d| ¡ W Y d }~n
d }~0 0 |  ¡ \}}|  |d¡ |  d|¡ d S )Nr;   zos.mkfifo(): %sz
prwx------ZFIFO)rg   r–   r   ÚPermissionErrorZskipTestrt   rx   r‚   )rk   Úerp   rs   rl   rl   rm   Ú	test_fifo¬   s    $zTestFilemode.test_fifor„   zrequires Posixc                 C   sŠ   t j t j¡r>| jt jdd\}}|  |d d¡ |  d|¡ dD ]B}t j |¡rB| j|dd\}}|  |d d¡ |  d|¡  q†qBd S )	NF)ro   r   ÚcZCHR)z/dev/sdaz/dev/hdaÚbZBLK)rg   ÚpathÚexistsÚdevnullrt   rx   r‚   )rk   rp   rs   Zblockdevrl   rl   rm   Útest_devices¶   s    zTestFilemode.test_devicesc                 C   sb   t   t j¡B}| t¡ |  ¡ \}}|  |d d¡ |  d|¡ W d   ƒ n1 sT0    Y  d S )Nr   ÚsZSOCK)ÚsocketÚAF_UNIXÚbindr   rt   rx   r‚   )rk   r    rp   rs   rl   rl   rm   Útest_socketÄ   s
    
zTestFilemode.test_socketc                 C   sÞ   | j  ¡ D ]"\}}t| j|ƒ}|  |||¡ q
| j ¡ D ]"\}}t| j|ƒ}|  |||¡ q8| jD ]}t| j|ƒ}|  |t¡ qb| j	D ]}t| j|ƒ}|  |t¡ q†| j
D ].}t| j|ƒ}|  t|ƒ¡ |  |dƒd¡ qªd S )Nr   )Ústat_structÚitemsrv   rq   rx   Úpermission_bitsÚ
file_flagsZassertIsInstanceÚintÚformatsrz   r|   Úcallable)rk   ÚkeyÚvalueÚmodvaluer   rl   rl   rm   Útest_module_attributesÌ   s     


z#TestFilemode.test_module_attributesÚwin32z-FILE_ATTRIBUTE_* constants are Win32 specificc                 C   sJ   t | j ¡ ƒD ]6\}}|  t| j|ƒ|¡ t| j|ƒ}|  |||¡ qd S rf   )ÚsortedÚfile_attributesr¦   r|   Úhasattrrq   rv   rx   )rk   r¬   r­   r®   rl   rl   rm   Útest_file_attribute_constantsÞ   s    z*TestFilemode.test_file_attribute_constants) Ú__name__Ú
__module__Ú__qualname__rq   r¨   rª   rz   r¥   r§   r²   rn   ZtearDownr   rt   r‚   r‰   r   r’   Z
skipUnlessr³   rg   r•   r™   r}   rŸ   r   Zskip_unless_bind_unix_socketr¤   r¯   ÚsysÚplatformr´   rl   rl   rl   rm   r      s   öíï&



	

ÿr   c                   @   s   e Zd ZeZdS )ÚTestFilemodeCStatN)rµ   r¶   r·   Úc_statrq   rl   rl   rl   rm   rº   ç   s   rº   c                   @   s   e Zd ZeZdS )ÚTestFilemodePyStatN)rµ   r¶   r·   Úpy_statrq   rl   rl   rl   rm   r¼   ë   s   r¼   Ú__main__)r’   rg   r¡   r¸   Ztest.supportr   r   r   r»   r½   r   ZTestCaserº   r¼   rµ   Úmainrl   rl   rl   rm   Ú<module>   s    ]