o
    HXhQ"                     @   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 d dlmZ d dl	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 dS )    N)	os_helper)socket_helper)import_fresh_module)TESTFNstat_stat)Zfresh)Zblockedc                   @   s  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i dddddddddddddddddddd d!d d"d#d$d%d&d'd(dd)dd*d	ddd+Zi d,d%d-dd.d d/d'd0d1d2dd3d4d5dd6d7d8d9d:d;d<dd=dd>dd?d	d@ddAdBZ	dCdD Z
e
ZedEfdFdGZdHdI ZdJdK ZdLdM ZeeedNdOdPdQ ZeeedRdSdTdU ZeejdVkdWdXdY ZejdZd[ Zd\d] Zeejd^kd_d`da ZdS )bTestFilemodeN>   	UF_OPAQUEUF_NOUNLINK	UF_NODUMPUF_IMMUTABLE	SF_APPEND	UF_APPENDSF_ARCHIVED	UF_HIDDENSF_IMMUTABLESF_SNAPSHOTSF_NOUNLINKUF_COMPRESSED>
   S_IFREGS_IFCHRS_IFDIRS_IFWHTS_IFDOORS_IFPORTS_IFIFOS_IFSOCKS_IFBLKS_IFLNK>
   S_ISDIRS_ISDOORS_ISWHTS_ISPORTS_ISCHRS_ISREGS_ISSOCKS_ISBLKS_ISFIFOS_ISLNKr                           	   )
ST_MODEST_INOST_DEVST_NLINKST_UIDST_GIDST_SIZEST_ATIMEST_MTIMEST_CTIMES_ISUIDi   S_ISGIDi   S_ENFMTS_ISVTXi   S_IRWXU  S_IRUSR   S_IREADS_IWUSR   S_IWRITES_IXUSR@   S_IEXECS_IRWXG8   S_IRGRP    S_IWGRP   S_IXGRPS_IRWXOS_IROTH)S_IWOTHS_IXOTHFILE_ATTRIBUTE_ARCHIVEFILE_ATTRIBUTE_COMPRESSEDFILE_ATTRIBUTE_DEVICEFILE_ATTRIBUTE_DIRECTORYFILE_ATTRIBUTE_ENCRYPTEDi @  FILE_ATTRIBUTE_HIDDENFILE_ATTRIBUTE_INTEGRITY_STREAMi   FILE_ATTRIBUTE_NORMAL"FILE_ATTRIBUTE_NOT_CONTENT_INDEXEDi    FILE_ATTRIBUTE_NO_SCRUB_DATAi   FILE_ATTRIBUTE_OFFLINEi   FILE_ATTRIBUTE_READONLYFILE_ATTRIBUTE_REPARSE_POINTFILE_ATTRIBUTE_SPARSE_FILEFILE_ATTRIBUTE_SYSTEMFILE_ATTRIBUTE_TEMPORARYFILE_ATTRIBUTE_VIRTUALi   c                 C   sJ   zt t W d S  ty$   z	t t W Y d S  ty#   Y Y d S w w N)osremover   OSErrorrmdir)self rm   8/opt/python-3.10.19/usr/lib/python3.10/test/test_stat.pysetUpQ   s   zTestFilemode.setUpTc                 C   s2   |r	t |j}nt |j}| j|}||fS rg   )rh   lstatst_moder   statmodfilemode)rl   Zfnamerp   rq   modestrrm   rm   rn   get_mode[   s
   zTestFilemode.get_modec                 C   s   t | jd|d }| | j|| d| }| jD ])}t | j|d }|d u r2||kr1t|q||kr>| || q| || qd S )NZS_IFFZS_IS)	getattrrr   lstripassertEqualS_IFMTformat_funcs
ValueError
assertTrueZassertFalse)rl   namemodefmtZtestnamefuncnamefuncrm   rm   rn   
assertS_ISc   s   
zTestFilemode.assertS_ISc                 C   s  t td W d    n1 sw   Y  tjdkrt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
 d S ttd |  \}}| |d d d | d| | | j|| jj d S )NwposixrA   z
-rwx------ZREGrL   z
----rwx---r/   z
-------rwxi$  z
-r--r--r--r+   z-rw)openr   rh   r~   chmodru   ry   r   rr   S_IMODEr@   rK   rR   rz   r   rl   rq   rt   rm   rm   rn   	test_modet   sJ   
zTestFilemode.test_modec                 C   s\   t t t td |  \}}| d| t jdkr$| |d d S | |d d d S )NrA   DIRr   z
drwx------r   d)rh   mkdirr   r   ru   r   r~   ry   r   rm   rm   rn   test_directory   s   

zTestFilemode.test_directorysymlinkzos.symlink not availablec              
   C   sl   z
t t  t W n ttfy } ztt|d }~ww | 	 \}}| 
|d d | d| d S )Nr   lZLNK)rh   r   getcwdr   rj   NotImplementedErrorunittestZSkipTeststrru   ry   r   )rl   errrq   rt   rm   rm   rn   	test_link   s   zTestFilemode.test_linkmkfifozos.mkfifo not availablec              
   C   s   t jdkrtjdt}nt}| tj| zt	|d W n t
y7 } z| d|  W Y d }~nd }~ww | |\}}| |d | d| d S )Nvxworksz/fifos/rA   zos.mkfifo(): %sz
prwx------ZFIFO)sysplatformrh   pathjoinr   Z
addCleanupr   unlinkr   PermissionErrorZskipTestru   ry   r   )rl   Z	fifo_patherq   rt   rm   rm   rn   	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 ]"}t j|rC| j|dd\}}| |d d | d|  d S q!d S )	NF)rp   r   cZCHR)z/dev/sdaz/dev/hdabZBLK)rh   r   existsdevnullru   ry   r   )rl   rq   rt   Zblockdevrm   rm   rn   test_devices   s   zTestFilemode.test_devicesc                 C   sd   t  t j"}|t |  \}}| |d d | d| W d    d S 1 s+w   Y  d S )Nr   sZSOCK)socketAF_UNIXbindr   ru   ry   r   )rl   r   rq   rt   rm   rm   rn   test_socket   s   
"zTestFilemode.test_socketc                 C   s   | j  D ]\}}t| j|}| ||| q| j D ]\}}t| j|}| ||| q| jD ]}t| j|}| |t q1| j	D ]}t| j|}| |t qC| j
D ]}t| j|}| t| | |dd qUd S )Nr   )stat_structitemsrw   rr   ry   permission_bits
file_flagsZassertIsInstanceintformatsr{   r}   callable)rl   keyvaluemodvaluer   rm   rm   rn   test_module_attributes   s"   


z#TestFilemode.test_module_attributeswin32z-FILE_ATTRIBUTE_* constants are Win32 specificc                 C   sJ   t | j D ]\}}| t| j|| t| j|}| ||| qd S rg   )sortedfile_attributesr   r}   hasattrrr   rw   ry   )rl   r   r   r   rm   rm   rn   test_file_attribute_constants   s
   z*TestFilemode.test_file_attribute_constants) __name__
__module____qualname__rr   r   r   r{   r   r   r   ro   ZtearDownr   ru   r   r   r   r   Z
skipUnlessr   rh   r   r   r~   r   r   Zskip_unless_bind_unix_socketr   r   r   r   r   rm   rm   rm   rn   r      s    	
	
&





r   c                   @      e Zd ZeZdS )TestFilemodeCStatN)r   r   r   c_statrr   rm   rm   rm   rn   r          r   c                   @   r   )TestFilemodePyStatN)r   r   r   py_statrr   rm   rm   rm   rn   r      r   r   __main__)r   rh   r   r   Ztest.supportr   r   Ztest.support.import_helperr   Ztest.support.os_helperr   r   r   r   ZTestCaser   r   r   mainrm   rm   rm   rn   <module>   s"     b