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xyz123d   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   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 s0    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   $/