o
    5h&                     @   s   d Z ddlmZ ddlmZ ddlZddlmZmZ ddl	m
Z
mZmZmZmZmZmZ ddlmZmZmZ G dd	 d	eZG d
d deZG dd deZG dd deZddlmZmZ G dd deZG dd deZdS )ztests for passlib.util    )with_statement)partialN)is_ascii_safeto_bytes)irangePY2PY3uunicode
join_bytesPYPY)TestCasehbrun_with_fixed_seedsc                   @   s   e Zd ZdZdd Zdd Zdd Zdd	 Zd
d Ze	dddd Z
dd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zd S )!MiscTestz#tests various parts of utils modulec                 C   sL   ddl m} | t|d t| | dt|v  | dt|v  dS )ztest compat's lazymoduler   )compatz,^<module 'passlib.utils.compat' from '.*?'>$	UnicodeIOr   N)passlib.utilsr   assertRegexreprdir
assertTrue)selfr    r   l/var/www/html/construction_image-detection-poc/venv/lib/python3.10/site-packages/passlib/tests/test_utils.pytest_compat   s   
zMiscTest.test_compatc                    sL   ddl m  G  fdddt}| |jd |jd }| |j|j d S )Nr   classpropertyc                          e Zd ZdZ dd ZdS )z)MiscTest.test_classproperty.<locals>.test   c                 S   s   | j S N)xvar)clsr   r   r   xprop)   s   z/MiscTest.test_classproperty.<locals>.test.xpropN)__name__
__module____qualname__r!   r#   r   r   r   r   test'   s    r'   r   r#   )	passlib.utils.decorr   objectassertEqualr#   __dict__assertIsim_func__func__)r   r'   propr   r   r   test_classproperty$   s
   
zMiscTest.test_classpropertyc                 C   sz   ddl m} |ddddd }| d|jv  | ttd	d
 | |ddd W d    d S 1 s6w   Y  d S )Nr   )deprecated_functionz1.6z1.8)
deprecatedremovedc                  W   s   | S )ztest docstringr   )argsr   r   r   	test_func5   s   z4MiscTest.test_deprecated_function.<locals>.test_funcz.. deprecated::zvthe function passlib.tests.test_utils.test_func() is deprecated as of Passlib 1.6, and will be removed in Passlib 1.8.)categorymessager      )r   r8   )r(   r1   r   __doc__assertWarningListdictDeprecationWarningr*   )r   r1   r5   r   r   r   test_deprecated_function1   s   


"z!MiscTest.test_deprecated_functionc                    sr   ddl m  G  fdddt}| }| |jd | |jd | |jd |j}ts7| |j|j	 d S d S )Nr   memoized_propertyc                       r   )z.MiscTest.test_memoized_property.<locals>.dummyr   c                 S   s   | j }|d | _ |S )Nr   )counter)r   valuer   r   r   rA   I   s   
z4MiscTest.test_memoized_property.<locals>.dummy.valueN)r$   r%   r&   r@   rA   r   r>   r   r   dummyF   s    rB   r   )
r(   r?   r)   r*   rA   r@   r   r,   r-   r.   )r   rB   dr/   r   r>   r   test_memoized_propertyC   s   	zMiscTest.test_memoized_propertyc                 C   sz   ddl m} t||  }| t|dd |d}|d}| |t | t|d | t|d | || dS )zgetrandbytes()r   )getrandbytes
   N)	r   rE   r   	getRandomr*   lenassertIsInstancebytesassertNotEqual)r   rE   wrapperabr   r   r   test_getrandbytesX   s   zMiscTest.test_getrandbytesi   )countc                 C   s  ddl m} t|| j|d}| |ddd | t|dd | t|dd | |ddd	 |tdd
}|tdd
}| |t	 | 
|| | tt|tdtdtdg |dd
}|dd
}| |t | 
|| | tt|dtdtdtdg dS )zgetrandstr()r   
getrandstr)seedabc rM      aaaaa    rN   c   abcasciiN)r   rR   r   rG   r*   assertRaises
ValueErrorr	   rI   r
   rK   sortedsetrJ   decode)r   rS   rR   rL   xyr   r   r   test_getrandstrd   s    
&

0zMiscTest.test_getrandstrc                 C   s0   ddl m} tdd | t|dd dS )zgenerate_password()r   )generate_passwordignorez1The function.*generate_password\(\) is deprecated   N)r   re   warningsfilterwarningsr*   rH   )r   re   r   r   r   test_generate_password   s   zMiscTest.test_generate_passwordc                 C   sD   ddl m} ddlm} |dg}| || | ||  dS )ztest is_crypt_context()r   )is_crypt_context)CryptContext	des_cryptN)r   rk   passlib.contextrl   r   assertFalse)r   rk   rl   ccr   r   r   test_is_crypt_context   s
   
zMiscTest.test_is_crypt_contextc                 C   sb   ddl }ddlm} || }|dd}|| }|dd}| || ||| dS )ztest genseed()r   N)genseedl    d(	 )randomr   rr   RandomrandintrK   rS   )r   rs   rr   rngrM   rN   r   r   r   test_genseed   s   zMiscTest.test_genseedc                    s&  ddl m}m}m} ddlm}m} | }|s3| |d | |ddd | |dd | 	d	|s:| 
d
dD ]}||v rD nq<|d }|| t ddrZ j jd  fdd}td}	||	}
||	|
}| |t | ||
 | |t|	t|
|
 |
dd d }| ||	||
 td}||}| |||| | |t|t|| | t|d|
 | |d|
 | |d| ddl m} |j}z8dfdd|_dD ]| |d|
d | |d|
 qd| |d|
d | |d|
 W ||_dS ||_w )ztest crypt.crypt() wrappersr   )	has_crypt
safe_crypt
test_crypt)get_supported_os_crypt_schemesget_crypt_handlerr   r'   aaNzaaqPiZY5xR5l.zcrypt.crypt() not availablez0crypt() present, but no supported schemes found!)	md5_cryptsha256_cryptrV   
min_rounds)roundsc                    s>   t | tsJ  | }t |tr|d}t |tsJ |S )Nutf-8)
isinstancer
   hashrJ   ra   secretr   )hasherr   r   get_hash   s   


z%MiscTest.test_crypt.<locals>.get_hashxxu   testሴ c                    s    S r    r   r   )retvalr   r   <lambda>   s    z%MiscTest.test_crypt.<locals>.<lambda>)NrU   :z:0z*0xxx)r   rx   ry   rz   passlib.registryr{   r|   r*   ro   skipTestfailgetattrusingr   r	   rI   r
   r   r]   r^   r   utils_crypt)r   rx   ry   rz   r{   r|   	supportedschemer   s1h1resulth1xs2h2modorigr   )r   r   r   rz      s\   

	
zMiscTest.test_cryptc                    s  ddl m m | t tdd | t tdd | t tdd | t dtd | t dd | t dd | t dtd | t dd | t dtd | t dd  fdd}td	td
tdd fD ]8}||r|  ||d|f  n| t || | ||d|f  |d}|  ||d|f  qxtd	tdftdtdftdtdftdtdftdd dd td tdd ftdtd	ftd
tdftd
tdftdtd
ff	D ]w\}}||r'||r'|  ||d||f  |  ||d||f  n| t || | t || | ||d||f  | ||d||f  |d}|d}|  ||d||f  |  ||d||f  qdS )ztest consteq()r   consteqstr_consteqrU       r   Nc                    s    u p	t p	t| S r    )r   r   )rA   r   r   r   consteq_supports_string  s   z6MiscTest.test_consteq.<locals>.consteq_supports_stringrM   rT   u   ÿ¢ rF   z	value %r:latin-1rZ   abcabczbaabcabzabcabcabzrV   abcdefdefabcqwertyuiopasdfghjklzxcvbnmzvalues %r %r:)	r   r   r   r]   	TypeErrorr	   r   encodero   )r   r   rA   lrr   r   r   test_consteq   s\   




zMiscTest.test_consteqc                 C   s*  |    ddlm} | t|d | t|d | t|d | |tdtd | |tdtd | |tdtd	 | |td
td | |tdtd | |tdtd | t|td | t|td | t|td | t|td | t|td | t|td | t|td | t|td | t|td | t|td | t|td | t|td | t|td | t|td | t|td | |tdtd | |tdtd | |tdtd | t|td  | t|td! | |td"td" | |td#td$ | |td%td% | |td&td& | |td'td( | |td)td$ | t|td* | t|td | t|td | |tdtd dS )+z"test saslprep() unicode normalizerr   )saslprepNr   r   rU      ­u   $­$‍$z$$$u
   $ $ $　$z$ $ $ $u   à   àr   u   ᠎u   ￹u   u   ﷐u   u   �u   ⿰u   ‎u   ⁯u   ऀu   ￸u   󠀁u   ا1u   اu   ابu   ا1بu   اAبu   xاzxAzu   I­XIXuserUSER   ªrM   u   Ⅸ)require_stringprepr   r   r]   r   r*   r	   r^   )r   spr   r   r   test_saslprepe  sR   zMiscTest.test_saslprepc                 C   s|   ddl m} | |dg  | |dg  | |ddg | |ddg | |dddg | |d	ddg d S )
Nr   )
splitcommarU   ,rM   z a , z a , brN   z a, b, )r   r   r*   )r   r   r   r   r   test_splitcomma  s   zMiscTest.test_splitcommac                 C   sN  ddl m} dD ]Z}|d t|}t|d D ]H}d||f }|||}|d | jt|||d | jt|t|||d | jt|t|d |d	 |d | j	||d
t| |d qqdD ]&}t|}t|d D ]}d||f }|||}| j	||d
| |d qqqedD ](}t|}t|d D ]}d||f }|||}| j	||d
|d  |d qqd}| 	||dd | 	||d	d | 	||dd | 	||dd | 	||dd | 	||dd | 	||dd | 	||dd | 	||dd | 	||dd | 	||dd | 	||dd d
S )z!
        utf8_truncate()
        r   )utf8_truncate)	r      1s   123   s
      s
   s   a þþs&   abcdefghjusdfaoiu þþdsfioauweoiruerr      zsource=%r index=%r: )msg   r   N)   s
       s
             )   s
      s
   MNOPr      Mr8   s   MNs   MNs   MNrW            s   MNO	   rF      )
r   r   ra   rH   rangeassertLessEqualassertGreaterEqualmin
assertLessr*   )r   r   sourceendidxprefixr   r   r   r   test_utf8_truncate  st   


"
	
zMiscTest.test_utf8_truncateN)r$   r%   r&   r9   r   r0   r=   rD   rO   r   rd   rj   rq   rw   rz   r   r   r   r   r   r   r   r   r      s"    
(VfO	r   c                   @   s@   e Zd ZdZdd Zdd Zdd Zdd	 Zd
d Zdd Z	dS )	CodecTestz,tests bytes/unicode helpers in passlib.utilsc                 C   st   t rddl}| t|j nddl}| t|j | dt | dt t r2| ddd dS | dd dS )z*test b() helper, bytes and native str typer   Nr       r       ÿ)	r   builtinsr,   rJ   __builtin__strrI   r*   ra   )r   r   r   r   r   
test_bytes:  s   zCodecTest.test_bytesc                 C   s   ddl m} | |tdd | |tdd | |tddd | t|tdd	 | |dd | |dd | |dd | |ddd | |ddd
dd | t|dd | t|d dS )ztest to_bytes()r   )r   rT   r[   r       ÿr   r   r\   rU   r   N)r   r   r*   r	   r]   r^   AssertionErrorr   )r   r   r   r   r   test_to_bytesJ  s    zCodecTest.test_to_bytesc                 C   s   ddl m} | |tdtd | |tdtd | |tddtd | |dtd | |dtd | |dd	td | t|d | t|dd
 | t|d
 d
S )ztest to_unicode()r   )
to_unicoderT   r   r\   r[   r   r   r   N)r   r   r*   r	   r]   r^   r   r   )r   r   r   r   r   test_to_unicodeg  s   zCodecTest.test_to_unicodec                 C   s   ddl m} | |tddd | |ddd tr0| |tddd | t|dd n| t|tdd | |ddd | |tdd	d | |d
d	d | |tddtrcdnd | |ddtrpdnd | t|dd dS )ztest to_native_str()r   )to_native_strrT   r\   r[   r   s   àu   Ã r      r   N)	r   r   r*   r	   r   r]   UnicodeDecodeErrorUnicodeEncodeErrorr   )r   r   r   r   r   test_to_native_str}  s*   


zCodecTest.test_to_native_strc                 C   sP   ddl m} | |d | |td | |d | |td dS )ztest is_ascii_safe()r   )r   s    abcz abcs    abcu    abcN)r   r   r   r	   ro   )r   r   r   r   r   test_is_ascii_safe  s
   zCodecTest.test_is_ascii_safec                 C   s   ddl m} | |dd | |dd | |dd | |dd | |dd | |dd | |dd | |dd dS )	ztest is_same_codec()r   )is_same_codecNr\   ASCIIr   utf8UTF_8)r   r   r   ro   )r   r   r   r   r   test_is_same_codec  s   zCodecTest.test_is_same_codecN)
r$   r%   r&   r9   r   r   r   r   r   r   r   r   r   r   r   7  s    r   c                   @   s8   e Zd ZdZdd Zdd Zdd Zdd	 Zd
d ZdS )Base64EngineTestz%test standalone parts of Base64Enginec                 C   sR   ddl m}m} | t|d | t||d d  | t||d d d  d S )Nr   )Base64Engine
AB64_CHARSr   rV   A)passlib.utils.binaryr   r   r]   r   r^   )r   r   r   r   r   r   test_constructor  s   z!Base64EngineTest.test_constructorc                 C   s  ddl m} | |dtd | |tdtd | t|td | t|d | t|d | t|td	 | |d
td | t|d | |dtd | |dtd | |dtd | |dtd | |dtd dS )zab64_decode()r   )ab64_decoder[   69b7rT      abÿ   ab   ab!ab!   abcd69b71d   abcde   abcdef69b71d79   abcdeQ   abcdefg
69b71d79f8   ab+/69bfbf   ab./N)r   r   r*   r   r	   r]   r^   r   )r   r   r   r   r   test_ab64_decode  s   z!Base64EngineTest.test_ab64_decodec                 C      ddl m} | |tdd | trtnt|tdd | |tdd | |tdd	 | |td
d | |tdd dS )zab64_encode()r   )ab64_encoder   r[   r   r  r  r  r  r	  r  r  r  N)	r   r  r*   r   r]   r   r   r   ra   )r   r  r   r   r   test_ab64_encode     z!Base64EngineTest.test_ab64_encodec                 C   s   ddl m} | |dtd | |tdtd | t|td | t|d | t|d | t|td	 | |d
td | t|d | |dtd | |dtd | |dtd dS )zb64s_decode()r   )b64s_decoder[   r   rT   r   r   r   r  r  r  r  r  r  r  r  r	  N)r   r  r*   r   r	   r]   r^   r   )r   r  r   r   r   test_b64s_decode  s   z!Base64EngineTest.test_b64s_decodec                 C   r  )zb64s_encode()r   )b64s_encoder   r[   r   r  r  r  r  r	  r  r  r
  N)	r   r  r*   r   r]   r   r   r   ra   )r   r  r   r   r   test_b64s_encode  r  z!Base64EngineTest.test_b64s_encodeN)	r$   r%   r&   r9   r   r  r  r  r  r   r   r   r   r     s    r   c                   @   s   e Zd ZdZdZdZdZdZdd Zdd Z	dd	 Z
d
d Zdd Zdd Zdd Zdd Zddg dfddg dfgZddg dfgZdd Zdd Zdd  Zd!d" Zd#d$ Zd%d& Zd'd( Zd)d* Zd+d, ZdS )-_Base64Testz+common tests for all Base64Engine instancesN   ?c                    s   t  fdd|D S )z!generate byte string from offsetsc                 3   s$    | ]} j j||d   V  qdS )r   N)enginebytemap).0or   r   r   	<genexpr>5  s   " z _Base64Test.m.<locals>.<genexpr>)r   )r   offsetsr   r  r   m3  s   z_Base64Test.mc                 C   s<   | j }|j}| jD ]\}}||}| ||d|f  q	dS )z,test encode_bytes() against reference inputsz
encode %r:N)r  encode_bytesencoded_datar*   )r   r  r   rawencodedr   r   r   r   test_encode_bytes:     z_Base64Test.test_encode_bytesc                 C   s0   | j }|j}| t|td | t|d dS )z"test encode_bytes() with bad inputr   N)r  r   r]   r   r	   )r   r  r   r   r   r   test_encode_bytes_badB  s   z!_Base64Test.test_encode_bytes_badc                 C   s<   | j }|j}| jD ]\}}||}| ||d|f  q	dS )z,test decode_bytes() against reference inputsz
decode %r:N)r  decode_bytesr!  r*   )r   r  ra   r"  r#  r   r   r   r   test_decode_bytesL  r%  z_Base64Test.test_decode_bytesc              	   C   sB  t rdd nt}| j}| j}|j}d}| ||dd| tddD ]2}|jr7|dk r.|n|d|d > }n|dk rC|d|d > n|}| ||dd|> |d	|  q#| ||ddd|d  tddD ]5}|jr}|dk rt|n|d|d > }n|dk r|d|d > n|}| ||ddd|> || d
|  qidS )z(test decode_bytes() ignores padding bitsc                 S   s
   t | gS r    )rJ   )vr   r   r   r   V  s   
 z7_Base64Test.test_decode_bytes_padding.<locals>.<lambda>r   r   r   r   r   r8   z
%d/4 bits:z
%d/2 bits:N)r   chrr  r  r'  r*   r   big)r   bchrr  r  ra   BNULLicorrectr   r   r   test_decode_bytes_paddingT  s(   "z%_Base64Test.test_decode_bytes_paddingc                 C   st   | j }|j}| t||jdd  | | j|jv | t|| jd  | t||jdd  | t|d dS )z"test decode_bytes() with bad inputNrW   r   )	r  r'  r]   r^   r  r   bad_byter   charmap)r   r  ra   r   r   r   test_decode_bytes_bado  s   z!_Base64Test.test_decode_bytes_badc                 C   s.  | j }ddlm}m} |  }d}tdD ]}||rdndd}|s%d}d| d	 d
 }|||}	||	}
| t	|
| |
|
}| ||	 |d dkrY||g d7 }d
| d }|||j|}
|
|
}	| t	|	|d|  ||	}|d r| |dd |
dd  q| ||
 qdS )z2test encode_bytes/decode_bytes against random datar   )rE   rR   Fi  r      Tr   r8   r   )rV   r   r8   zencoded %d:NrV   )r  r   rE   rR   rG   r   ru   r   r*   rH   r'  choicer  )r   r  rE   rR   rv   saw_zeror.  sizeenc_sizer"  r#  r   raw_sizer   r   r   
test_codec  s2   




z_Base64Test.test_codecc                 C   s  ddl m} |  }| j}| jj}d}|dk r|dd}|||j|d}|d@ dkr5| t	|| q|
||}| dk rM|d}|d}||krc||\}	}
| |	 | |
| n| |d	 d ||\}	}
| |	 | |
| |d7 }|dk sd
S d
S )ztest repair_unused()r   rQ   i,     r\   r   r   g      ?r   N)r   rR   rG   r  check_repair_unusedru   r2  r   r]   r^   r   r'  rs   ra   ro   r*   rK   r   )r   rR   rv   r  r<  r.  r7  cdatardataokr   r   r   r   test_repair_unused  s2   



z_Base64Test.test_repair_unuseds   3"s   "3)r8   r   r   s   "3)r   r8   r   s   ")r   r   r   c                 C   sZ   | j }| j| j D ]\}}}|||}||}| || q	| t|jtdg  dS )ztest encode_transposed_bytes()rM   N)	r  
transposedtransposed_dupsencode_transposed_bytesr'  r*   r]   r   r	   )r   r  r   inputr  tmpoutr   r   r   test_encode_transposed_bytes  s   
z(_Base64Test.test_encode_transposed_bytesc                 C   s>   | j }| jD ]\}}}||}|||}| || qdS )ztest decode_transposed_bytes()N)r  rA  r   decode_transposed_bytesr*   )r   r  rD  r   r  rE  rF  r   r   r   test_decode_transposed_bytes  s   
z(_Base64Test.test_decode_transposed_bytesc                 C   s8   | j }| jD ]\}}}||}| t|j|| qdS )z8test decode_transposed_bytes() fails if map is a one-wayN)r  rB  r   r]   r   rH  )r   r  rD  _r  rE  r   r   r    test_decode_transposed_bytes_bad  s   
z,_Base64Test.test_decode_transposed_bytes_badc                 C   s  |   }| j}t|d| }t|d| }| d }|| d }d|> }	|D ]\}
}||
}| |t | || q&| t|d | t||	 |D ]\}
}| |||
d|f  qK| j}| t||d|d   | t||d|d   | t|| j	|  | t
||jd  | t
|d dd	lm} td
D ]V}|d|	d }
||
}| t|| | |||
 |||j|}||}
| |
dd|  | |
|	d|  ||
}|r| |dd |dd  q| || qdS )z5helper to check encode_intXX & decode_intXX functionszencode_int%szdecode_int%sr   r   rV   zencoded %r:r   NrQ   d   zdecode %r out of bounds:r   )rG   r  r   rI   rJ   r*   r]   r^   r  r1  r   r2  r   rR   r   ru   rH   r  r   r   )r   bitsencoded_pairsrv   r  r   ra   padcharsupperrA   r#  r   r  rR   r.  r   r   r   check_int_pair  sH   
z_Base64Test.check_int_pairc                 C   s0   | j }| j}| dd|dfd|dfg d S )Nr   r   ?   )r  r  rR  r   r  r  r   r   r   	test_int6/  s   $z_Base64Test.test_int6c              	   C   sP   | j }| j}| dd|ddfd|jr|ddn|ddfd|ddfg d S )Nr4  r   rS  i  r  r  rR  r+  rT  r   r   r   
test_int124  s
   (
z_Base64Test.test_int12c                 C   s`   | j }| j}| dd|ddddfd|jr|ddddn|ddddfd|ddddfg d S )N   r   rS  i rV  rT  r   r   r   
test_int24:  s   $
z_Base64Test.test_int24c                 C   s   | j }| j}| dd|dddddddddddfd|jr*|dddddddddddn|dddddddddddfd|jrJ|dddddddddddn|dddddddddddfg d S )N@   r   rS  r   <   l    rg   rV  rT  r   r   r   
test_int64A  s   $$$
z_Base64Test.test_int64c                 C   sh   | j s| d| j}| j D ]#\}}}t|d| }t|d| }| ||| | ||| qdS )z(test against reference integer encodingsznone defined for classzencode_int%dzdecode_int%dN)encoded_ints	skipTestsr  r   r*   )r   r  datarA   rM  r   ra   r   r   r   test_encoded_intsL  s   
z_Base64Test.test_encoded_ints)r$   r%   r&   r9   r  r!  r]  r1  r  r$  r&  r(  r0  r3  r:  r@  rA  rB  rG  rI  rK  rR  rU  rW  rY  r\  r`  r   r   r   r   r     s8    
/(
0r  )h64h64bigc                   @   (   e Zd ZdZeZdZg dZddgZdS )H64_Testztest H64 codec functionsz	h64 codec)	r   r   )   Us   J/)   Us   Jd8)   UUs   JdOJ)   UUs   JdOJe0)   UUUs   JdOJeK3)   UUUs   JdOJeKZe)   UUs   JdOJj0)   UU_s   JdOJey3)   z.rS  r4  )   .z  r4  N)	r$   r%   r&   r9   ra  r  descriptionPrefixr!  r]  r   r   r   r   rd  _      rd  c                   @   rc  )H64Big_Testztest H64Big codec functionszh64big codec)	re  )rf  s   JE)rg  s   JOc)rh  s   JOdJ)ri  s   JOdJeU)rj  s   JOdJeZI)rk  s   JOdJeZKe)rl  s   JOdJfk)rm  s   JOdJeZw)ro  rS  r4  )rn  rp  r4  N)	r$   r%   r&   r9   rb  r  rq  r!  r]  r   r   r   r   rs  x  rr  rs  )r9   
__future__r   	functoolsr   rh   r   r   r   passlib.utils.compatr   r   r   r	   r
   r   r   passlib.tests.utilsr   r   r   r   r   r   r  r   ra  rb  rd  rs  r   r   r   r   <module>   s*    $    ( i  ?