B
    u9aÖ
  ã               @   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   s4   t  ¡ }|  |t¡ x|D ]}|  |t j¡ qW d S )N)r   ÚgetspallÚassertIsInstanceÚlistÚstruct_spwd)ÚselfÚentriesÚentry© r   ú/usr/lib/python3.7/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 Q R X |  t
|jƒd¡ |  tt j¡ |  tt jd¡ |  tt j|d¡ yt |¡}W n tk
rþ   Y nX |  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ÚKeyErrorZ	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   sb   d}y$|   t¡}t |¡ W d Q R X W n4 tk
r\ } z|  d||f ¡ W d d }~X Y nX 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unittestZtestr   Úimport_moduler   Z
skipUnlessÚhasattrr   ZTestCaser   r&   r#   Úmainr   r   r   r   Ú<module>   s   

1
