a
    äze  ã                   @   sf   d Z ddlZddlZddlZG dd„ dejƒZG dd„ dejƒZG dd„ dejƒZed	krbe 	¡  dS )
zTest the secrets module.

As most of the functions in secrets are thin wrappers around functions
defined elsewhere, we don't need to test them exhaustively.
é    Nc                   @   s0   e Zd ZdZdd„ Zdd„ Zdd„ Zdd	„ Zd
S )ÚCompare_Digest_Testsz%Test secrets.compare_digest function.c              	   C   sN   dD ]D}|d }|d }|   t ||¡¡ |   t | d¡| d¡¡¡ qd S )N)ÚaZbcdZxyz123éd   úutf-8)Ú
assertTrueÚsecretsÚcompare_digestÚencode©ÚselfÚsr   Úb© r   ú'/usr/lib/python3.9/test/test_secrets.pyÚ
test_equal   s
    zCompare_Digest_Tests.test_equalc              	   C   sz   |   t dd¡¡ |   t dd¡¡ dD ]L}|d d }|d d }|   t ||¡¡ |   t | d	¡| d	¡¡¡ q(d S )
NÚabcZabcds   abcs   abcd)ÚxZmnZa1b2c3r   ÚqÚkr   )ZassertFalser   r   r	   r
   r   r   r   Útest_unequal   s    z!Compare_Digest_Tests.test_unequalc                 C   s6   d}|  d¡}|  ttj||¡ |  ttj||¡ d S )NZabcder   )r	   ÚassertRaisesÚ	TypeErrorr   r   )r   r   r   r   r   r   Útest_bad_types$   s    
z#Compare_Digest_Tests.test_bad_typesc                 C   s,   |   t dd¡t¡ |   t dd¡t¡ d S )Nr   Zxyz)ÚassertIsInstancer   r   Úbool)r   r   r   r   Ú	test_bool-   s    zCompare_Digest_Tests.test_boolN)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r   r   r   r   r   r   r   r      s
   
	r   c                   @   s(   e Zd ZdZdd„ Zdd„ Zdd„ ZdS )	ÚRandom_Testsz*Test wrappers around SystemRandom methods.c                 C   sV   d}dD ]H}t dƒD ]:}t |¡}|  d|  ko<d| k n  |||f ¡ qqd S )Nzrandbits(%d) returned %d)é   é   é   é   r   é   )Úranger   Zrandbitsr   )r   ÚerrmsgZnumbitsÚiÚnr   r   r   Útest_randbits6   s
    
zRandom_Tests.test_randbitsc                 C   s.   g d¢}t dƒD ]}|  t |¡|v ¡ qd S )N)é   r%   é   é   é   é    é@   é
   )r&   r   r   Úchoice)r   Úitemsr(   r   r   r   Útest_choice>   s    zRandom_Tests.test_choicec                 C   sJ   t ddƒD ]}|  t |¡t |ƒ¡ q
|  ttjd¡ |  ttjd¡ d S )Nr%   r1   r   éÿÿÿÿ)r&   ZassertInr   Ú	randbelowr   Ú
ValueError)r   r(   r   r   r   Útest_randbelowD   s    zRandom_Tests.test_randbelowN)r   r   r   r   r*   r4   r8   r   r   r   r   r    3   s   r    c                   @   s0   e Zd ZdZdd„ Zdd„ Zdd„ Zdd	„ Zd
S )ÚToken_TestszTest token functions.c              
   C   sÜ   t jt jt jfD ]}| j|dp |j}z
|ƒ  W n  tyR   |  d| ¡ Y n0 z|d ƒ W n  ty€   |  d| ¡ Y n0 W d   ƒ q1 s–0    Y  qt j}|  	t
t  d ¡ƒ|¡ |  	t
t  d ¡ƒd| ¡ d S )N)Úfuncz$%s cannot be called with no argumentz%s cannot be called with Noner%   )r   Útoken_bytesÚ	token_hexÚtoken_urlsafeÚsubTestr   r   ZfailZDEFAULT_ENTROPYÚassertEqualÚlen)r   r:   ÚnameÚsizer   r   r   Útest_token_defaultsO   s     ÿ
4zToken_Tests.test_token_defaultsc              	   C   sb   dD ]X}| j |d8 |  t |¡t¡ |  tt |¡ƒ|¡ W d   ƒ q1 sR0    Y  qd S )N)r+   r-   é   r   ©r)   )r>   r   r   r;   Úbytesr?   r@   )r   r)   r   r   r   Útest_token_bytesa   s    zToken_Tests.test_token_bytesc              	   C   s|   dD ]r}| j |dR t |¡}|  |t¡ |  t|ƒd| ¡ |  tdd„ |D ƒƒ¡ W d   ƒ q1 sl0    Y  qd S )N)r+   r"   é   éZ   rE   r%   c                 s   s   | ]}|t jv V  qd S ©N)ÚstringÚ	hexdigits©Ú.0Úcr   r   r   Ú	<genexpr>o   ó    z-Token_Tests.test_token_hex.<locals>.<genexpr>)	r>   r   r<   r   Ústrr?   r@   r   Úall©r   r)   r   r   r   r   Útest_token_hexh   s    
zToken_Tests.test_token_hexc              	      s|   t jt j d ‰ dD ]b}| j|dB t |¡}|  |t¡ |  t	‡ fdd„|D ƒƒ¡ W d   ƒ q1 sl0    Y  qd S )Nz-_)r+   é   é   éL   rE   c                 3   s   | ]}|ˆ v V  qd S rJ   r   rM   ©Zlegalr   r   rP   x   rQ   z1Token_Tests.test_token_urlsafe.<locals>.<genexpr>)
rK   Úascii_lettersÚdigitsr>   r   r=   r   rR   r   rS   rT   r   rY   r   Útest_token_urlsafeq   s    
zToken_Tests.test_token_urlsafeN)r   r   r   r   rC   rG   rU   r\   r   r   r   r   r9   L   s
   	r9   Ú__main__)
r   r   ZunittestrK   ZTestCaser   r    r9   r   Úmainr   r   r   r   Ú<module>   s   $/