a
    äzeÖ
  ã                   @   sš   d dl Z d dlZd dlmZ e d¡Ze ee dƒo>e  ¡ d kd¡G dd„ dej	ƒƒZ
e ee dƒone  ¡ d kd¡G d	d
„ d
ej	ƒƒZedkr–e ¡  dS )é    N)ÚsupportÚspwdÚgeteuidzroot privileges requiredc                   @   s   e Zd Zdd„ Zdd„ ZdS )ÚTestSpwdRootc                 C   s0   t  ¡ }|  |t¡ |D ]}|  |t j¡ qd S )N)r   ÚgetspallÚassertIsInstanceÚlistÚstruct_spwd)ÚselfÚentriesÚentry© r   ú$/usr/lib/python3.9/test/test_spwd.pyÚtest_getspall   s    zTestSpwdRoot.test_getspallc                 C   s(  t  ¡ }|s|  d¡ |d j}t  |¡}|  |t j¡ |  |j|¡ |  |j|d ¡ |  |j|j¡ |  |j	t
¡ |  |j	|d ¡ |  |j	|j¡ |  |jt¡ |  |j|d ¡ |  |jt¡ |  |j|d ¡ |  |jt¡ |  |j|d ¡ |  |jt¡ |  |j|d ¡ |  |jt¡ |  |j|d ¡ |  |jt¡ |  |j|d	 ¡ |  |jt¡ |  |j|d
 ¡ |  t¡}t  d¡ W d   ƒ n1 s¤0    Y  |  t
|jƒd¡ |  tt j¡ |  tt jd¡ |  tt j|d¡ zt |¡}W n ty   Y n0 |  tt j|¡ d S )Nzempty shadow password databaser   é   é   é   é   é   é   é   é   zinvalid user namez'getspnam(): name not found')r   r   ÚskipTestZsp_nampÚgetspnamr   r	   ZassertEqualZsp_namZsp_pwdpÚstrZsp_pwdZ	sp_lstchgÚintZsp_minZsp_maxZsp_warnZsp_inactZ	sp_expireZsp_flagÚassertRaisesÚKeyErrorÚ	exceptionÚ	TypeErrorÚosÚfsencodeÚUnicodeEncodeError)r
   r   Zrandom_namer   ZcxZ
bytes_namer   r   r   Útest_getspnam   sJ    


*zTestSpwdRoot.test_getspnamN)Ú__name__Ú
__module__Ú__qualname__r   r#   r   r   r   r   r      s   r   znon-root user requiredc                   @   s   e Zd Zdd„ ZdS )ÚTestSpwdNonRootc              
   C   sx   d}z8|   t¡}t |¡ W d   ƒ n1 s00    Y  W n6 tyr } z|  d||f ¡ W Y d }~n
d }~0 0 d S )NÚbinzspwd entry %r doesn't exist: %s)r   ÚPermissionErrorr   r   r   r   )r
   ÚnameÚcmÚexcr   r   r   Útest_getspnam_exception?   s    ,z'TestSpwdNonRoot.test_getspnam_exceptionN)r$   r%   r&   r-   r   r   r   r   r'   ;   s   r'   Ú__main__)r    ZunittestÚtestr   Úimport_moduler   Z
skipUnlessÚhasattrr   ZTestCaser   r'   r$   Úmainr   r   r   r   Ú<module>   s   
ÿ1ÿ