
    z%i                         d Z ddlZddlZddlZ G d dej                        Z G d dej                        Z G d dej                        Zed	k(  r ej                          yy)
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                   (    e Zd ZdZd Zd Zd Zd Zy)Compare_Digest_Testsz%Test secrets.compare_digest function.c           	          dD ]t  }|dz  }|dz  }| j                  t        j                  ||             | j                  t        j                  |j                  d      |j                  d                   v y )N)abcdxyz123d   utf-8)
assertTruesecretscompare_digestencodeselfsr   bs       E/home/uftp/.pyenv/versions/3.12.0/lib/python3.12/test/test_secrets.py
test_equalzCompare_Digest_Tests.test_equal   si    ' 	ZA#A#AOOG221a89OOG22188G3DahhwFWXY		Z    c           	         | j                  t        j                  dd             | j                  t        j                  dd             dD ]z  }|dz  dz   }|dz  dz   }| j                  t        j                  ||             | j                  t        j                  |j                  d	      |j                  d	                   | y )
Nabcabcds   abcs   abcd)xmna1b2c3r	   qkr
   )assertFalser   r   r   r   s       r   test_unequalz!Compare_Digest_Tests.test_unequal   s    //v>?//@A& 	[A#A#AW33Aq9:W33AHHW4EqxxPWGXYZ		[r   c                     d}|j                  d      }| j                  t        t        j                  ||       | j                  t        t        j                  ||       y )Nabcder
   )r   assertRaises	TypeErrorr   r   )r   r   r   s      r   test_bad_typesz#Compare_Digest_Tests.test_bad_types$   sK    HHW 	)W%;%;QB)W%;%;QBr   c                     | j                  t        j                  dd      t               | j                  t        j                  dd      t               y )Nr   xyz)assertIsInstancer   r   bool)r   s    r   	test_boolzCompare_Digest_Tests.test_bool-   s<    g44UEBDIg44UEBDIr   N)__name__
__module____qualname____doc__r   r   r$   r)    r   r   r   r      s    /Z[CJr   r   c                   "    e Zd ZdZd Zd Zd Zy)Random_Testsz*Test wrappers around SystemRandom methods.c                     d}dD ]O  }t        d      D ]?  }t        j                  |      }| j                  d|cxk  xr d|z  k  nc |||fz         A Q y )Nzrandbits(%d) returned %d)            r      )ranger   randbitsr   )r   errmsgnumbitsins        r   test_randbitszRandom_Tests.test_randbits6   sb    +" 	LG1X L$$W-Q 3G 3Vwl5JKL	Lr   c                 x    g d}t        d      D ](  }| j                  t        j                  |      |v        * y )N)   r6                @   
   )r7   r   r   choice)r   itemsr;   s      r   test_choicezRandom_Tests.test_choice>   s4    (r 	<AOOGNN51U:;	<r   c                    t        dd      D ]0  }| j                  t        j                  |      t        |             2 | j	                  t
        t        j                  d       | j	                  t
        t        j                  d       y )Nr6   rE   r   )r7   assertInr   	randbelowr"   
ValueError)r   r;   s     r   test_randbelowzRandom_Tests.test_randbelowD   sd    q" 	:AMM'++A.a9	:*g&7&7;*g&7&7<r   N)r*   r+   r,   r-   r=   rH   rN   r.   r   r   r0   r0   3   s    4L<=r   r0   c                   (    e Zd ZdZd Zd Zd Zd Zy)Token_TestszTest token functions.c                 ^   t         j                  t         j                  t         j                  fD ]:  }| j	                  |      5  |j
                  }	  |        	  |d        d d d        < t         j                  }| j                  t        t        j                  d             |       | j                  t        t        j                  d             d|z         y # t        $ r | j                  d|z         Y w xY w# t        $ r | j                  d|z         Y w xY w# 1 sw Y   xY w)N)funcz$%s cannot be called with no argumentz%s cannot be called with Noner6   )r   token_bytes	token_hextoken_urlsafesubTestr*   r#   failDEFAULT_ENTROPYassertEquallen)r   rR   namesizes       r   test_token_defaultszToken_Tests.test_token_defaultsO   s   (('*;*;**, 	FD4( 	F}}MFFJ	F 	F	F &&W0067>W..t45qv> ! MIIDtKLM ! FII=DEF	F 	FsH   D#CD C=:D#<C==D# D D#D  D##D,	c           	         dD ]t  }| j                  |      5  | j                  t        j                  |      t               | j                  t        t        j                  |            |       d d d        v y # 1 sw Y   xY w)N)r?   rA      r	   r<   )rV   r'   r   rS   bytesrY   rZ   )r   r<   s     r   test_token_byteszToken_Tests.test_token_bytesa   s{      	AA" A%%g&9&9!&<eD  W%8%8%;!<a@A A	AA As   AA;;B	c                 4   dD ]  }| j                  |      5  t        j                  |      }| j                  |t               | j                  t        |      d|z         | j                  t        d |D                     d d d         y # 1 sw Y   xY w)N)r?   r3      Z   r`   r6   c              3   @   K   | ]  }|t         j                  v   y wN)string	hexdigits).0cs     r   	<genexpr>z-Token_Tests.test_token_hex.<locals>.<genexpr>o   s     #EaA)9)9$9#Es   )	rV   r   rT   r'   strrY   rZ   r   all)r   r<   r   s      r   test_token_hexzToken_Tests.test_token_hexh   s      	GA" G%%a(%%a-  Q1-#E1#E EF	G G	GG Gs   A+BB	c                 F   t         j                  t         j                  z   dz   dD ]k  }| j                  |      5  t	        j
                  |      }| j                  |t               | j                  t        fd|D                     d d d        m y # 1 sw Y   xxY w)Nz-_)r?         L   r`   c              3   &   K   | ]  }|v  
 y wrg   r.   )rj   rk   legals     r   rl   z1Token_Tests.test_token_urlsafe.<locals>.<genexpr>x   s     #:1AJ#:s   )
rh   ascii_lettersdigitsrV   r   rU   r'   rm   r   rn   )r   r<   r   ru   s      @r   test_token_urlsafezToken_Tests.test_token_urlsafeq   s    $$v}}4t;  	<A" <))!,%%a-#:#: :;< <	<< <s   ABB 	N)r*   r+   r,   r-   r]   rb   ro   rx   r.   r   r   rP   rP   L   s    ?$AG<r   rP   __main__)
r-   r   unittestrh   TestCaser   r0   rP   r*   mainr.   r   r   <module>r}      si      
!J8,, !JH=8$$ =2,<(## ,<^ zHMMO r   