a
     Rîh  ã                   @   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   ú9/opt/python-3.9.24/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   sR   d}|  d¡}t|tƒsJ ‚t|tƒs*J ‚|  ttj||¡ |  ttj||¡ d S )NZabcder   )r	   Ú
isinstanceÚstrÚbytesÚ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(   r4   r   éÿÿÿÿ)r)   ZassertInr   Ú	randbelowr   Ú
ValueError)r   r+   r   r   r   Útest_randbelowD   s    zRandom_Tests.test_randbelowN)r   r    r!   r"   r-   r7   r;   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.   r0   é   r   ©r,   )rA   r   r   r>   r   rB   rC   )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   rH   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>)	rA   r   r?   r   r   rB   rC   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   rH   c                 3   s   | ]}|ˆ v V  qd S rL   r   rO   ©Zlegalr   r   rR   x   rS   z1Token_Tests.test_token_urlsafe.<locals>.<genexpr>)
rM   Úascii_lettersÚdigitsrA   r   r@   r   r   r   rT   rU   r   rZ   r   Útest_token_urlsafeq   s    
zToken_Tests.test_token_urlsafeN)r   r    r!   r"   rF   rI   rV   r]   r   r   r   r   r<   L   s
   	r<   Ú__main__)
r"   r   ZunittestrM   ZTestCaser   r#   r<   r   Úmainr   r   r   r   Ú<module>   s   $/