a fŸWc&´ã@sàdZddlmZddlmZddlZddlmZmZddl m Z m Z m Z m Z mZmZmZddlmZmZmZGdd „d eƒZGd d „d eƒZGd d „d eƒZGdd„deƒZddlmZmZGdd„deƒZGdd„deƒZdS)ztests 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ŠeZdZdZdd„Zdd„Zdd„Zdd „Zd d „Ze d d �dd„ƒZ dd„Z dd„Z dd„Z dd„Zdd„Zdd„Zdd„Zdd„Zd S)!ÚMiscTestz#tests various parts of utils modulecCsLddlm}| t|ƒd¡t|ƒ| dt|ƒv¡| dt|ƒv¡dS)ztest compat's lazymoduler)Úcompatz,^$Z UnicodeIOrN)Ú passlib.utilsrZ assertRegexÚreprÚdirÚ assertTrue)Úselfr©rú.testécSs|jS©N)Úxvar)ÚclsrrrÚxprop)sz/MiscTest.test_classproperty..test.xpropN)Ú__name__Ú __module__Ú __qualname__rr rrrrÚtest'sr$rr ) Úpasslib.utils.decorrÚobjectÚ assertEqualr Ú__dict__ÚassertIsÚim_funcÚ__func__)rr$ÚproprrrÚtest_classproperty$s   zMiscTest.test_classpropertycCsxddlm}|ddd�dd„ƒ}| d|jv¡| ttd d �¡�"| |d d ƒd ¡Wdƒn1sj0YdS)Nr)Údeprecated_functionz1.6z1.8)Z deprecatedZremovedcWs|S)ztest docstringr)ÚargsrrrÚ test_func5sz4MiscTest.test_deprecated_function..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é)rr3)r%r.rÚ__doc__ZassertWarningListÚdictÚDeprecationWarningr')rr.r0rrrÚtest_deprecated_function1s   ÿ z!MiscTest.test_deprecated_functioncsnddlm‰G‡fdd„dtƒ}|ƒ}| |jd¡| |jd¡| |jd¡|j}tsj| |j|j ¡dS)Nr©Úmemoized_propertycseZdZdZ”dd„ƒZdS)z.MiscTest.test_memoized_property..dummyrcSs|j}|d|_|S)Nr)Úcounter)rÚvaluerrrr;Is z4MiscTest.test_memoized_property..dummy.valueN)r!r"r#r:r;rr8rrÚdummyFsr<r) r%r9r&r'r;r:rr)r*r+)rr<Údr,rr8rÚtest_memoized_propertyCs  zMiscTest.test_memoized_propertycCszddlm}t|| ¡ƒ}| t|dƒƒd¡|dƒ}|dƒ}| |t¡| t|ƒd¡| t|ƒd¡| ||¡dS)zgetrandbytes()r)Ú getrandbytesé N) rr?rÚ getRandomr'ÚlenÚassertIsInstanceÚbytesÚassertNotEqual)rr?ÚwrapperÚaÚbrrrÚtest_getrandbytesXs  zMiscTest.test_getrandbytesi)ÚcountcCsddlm}t||j|d�ƒ}| |ddƒd¡| t|dd¡| t|dd¡| |ddƒd ¡|tdƒd ƒ}|tdƒd ƒ}| |t ¡|  ||¡| t t |ƒƒtdƒtd ƒtd ƒg¡|d d ƒ}|d d ƒ}| |t ¡|  ||¡| t t | d¡ƒƒtdƒtd ƒtd ƒg¡dS)z getrandstr()r©Ú getrandstr)ÚseedÚabcÚéÿÿÿÿrGéZaaaaaé rHÚcóabcÚasciiN)rrLrrAr'Ú assertRaisesÚ ValueErrorr rCr rEÚsortedÚsetrDÚdecode)rrMrLrFÚxÚyrrrÚtest_getrandstrds     &    zMiscTest.test_getrandstrcCs0ddlm}t dd¡| t|dƒƒd¡dS)zgenerate_password()r)Úgenerate_passwordÚignorez1The function.*generate_password\(\) is deprecatedéN)rr^ÚwarningsÚfilterwarningsr'rB)rr^rrrÚtest_generate_password�s  zMiscTest.test_generate_passwordcCsDddlm}ddlm}|dgƒ}| ||ƒ¡| ||ƒ ¡dS)ztest is_crypt_context()r)Úis_crypt_context)Ú CryptContextZ des_cryptN)rrdZpasslib.contextrerÚ assertFalse)rrdreZccrrrÚtest_is_crypt_context“s    zMiscTest.test_is_crypt_contextcCsbddl}ddlm}| |ƒ¡}| dd¡}| |ƒ¡}| dd¡}| ||¡| ||ƒ¡dS)ztest genseed()rN)Úgenseedld( )ÚrandomrrhZRandomÚrandintrErM)rrirhÚrngrGrHrrrÚ test_genseed›s      zMiscTest.test_genseedcs*ddlm}m}m}ddlm}m}|ƒ}|sf| |d¡| |ddƒd¡| |ddƒ¡|  d ¡‚|st|  d ¡‚d D]}||vrxq’qx|d }||ƒ‰t ˆd dƒr´ˆj ˆj d�‰‡fdd„}tdƒ} || ƒ} || | ƒ} | | t¡| | | ¡| |t| ƒt| ƒƒ| ¡| dd…d} | || | ƒ| ¡tdƒ} || ƒ}| || |ƒ|¡| |t| ƒt|ƒƒ|¡| t|d| ¡| |d| ƒ¡| |d| ƒ¡ddlm}|j}zpd‰‡fdd„|_dD](‰| |d| ƒd¡| |d| ƒ¡�qÄd‰| |d| ƒd¡| |d| ƒ¡W||_n||_0dS)ztest crypt.crypt() wrappersr)Ú has_cryptÚ safe_cryptÚ test_crypt)Úget_supported_os_crypt_schemesÚget_crypt_handlerrr$ZaaNz aaqPiZY5xR5l.zcrypt.crypt() not availablez0crypt() present, but no supported schemes found!)Z md5_cryptZ sha256_cryptrPÚ min_rounds)Úroundscs"ˆ |¡}t|tƒr| d¡}|S)Núutf-8)ÚhashÚ isinstancerDrZ©Zsecretru)ÚhasherrrÚget_hashÊs   z%MiscTest.test_crypt..get_hashéþÿÿÿÚxxutestሴúcsˆSrrrw)ÚretvalrrÚòóz%MiscTest.test_crypt..)NrOú:z:0z*0Zxxx)rrmrnroZpasslib.registryrprqr'rfZskipTestZfailÚgetattrZusingrrr rCr rrVrWrZutilsZ_crypt)rrmrnrorprqZ supportedÚschemeryÚs1Zh1ÚresultZh1xÚs2Zh2ÚmodZorigr)rxr}rro©sZ         zMiscTest.test_cryptc sôddlm‰m‰| tˆtdƒd¡| tˆtdƒd¡| tˆtdƒd¡| tˆdtdƒ¡| tˆdd¡| tˆdd¡| tˆdtdƒ¡| tˆdd¡| tˆdtdƒ¡| tˆdd¡‡‡fdd„}td ƒtd ƒtd ƒd fD]r}||ƒ�r| ˆ||ƒd |f¡n| tˆ||¡| ˆ||ƒd |f¡| d¡}| ˆ||ƒd |f¡qðtd ƒtdƒftdƒtdƒftdƒtdƒftdƒtdƒftd ƒd dd…tdƒtd ƒd ftdƒtd ƒftd ƒtdƒftd ƒtdƒftdƒtd ƒff D]ð\}}||ƒ�rP||ƒ�rP| ˆ||ƒd||f¡| ˆ||ƒd||f¡n | tˆ||¡| tˆ||¡| ˆ||ƒd||f¡| ˆ||ƒd||f¡| d¡}| d¡}| ˆ||ƒd||f¡| ˆ||ƒd||f¡�qþdS)ztest consteq()r©ÚconsteqÚ str_consteqrOrrNcsˆˆuptpt|ƒSr)rr)r;r‡rrÚconsteq_supports_stringsz6MiscTest.test_consteq..consteq_supports_stringrGrNuÿ¢r@z value %r:úlatin-1rSZabcabcZzbaabcZabzabcZabcabzrPúZabcdefZdefabcZqwertyuiopasdfghjklzxcvbnmz values %r %r:) rrˆr‰rVÚ TypeErrorr rÚencoderf)rrŠr;ÚlÚrrr‡rÚ test_consteqÿsZ ý   ÿó   zMiscTest.test_consteqcCs*| ¡ddlm}| t|d¡| t|d¡| t|d¡| |tdƒƒtdƒ¡| |tdƒƒtdƒ¡| |tdƒƒtd ƒ¡| |td ƒƒtd ƒ¡| |td ƒƒtd ƒ¡| |td ƒƒtd ƒ¡| t|tdƒ¡| t|tdƒ¡| t|tdƒ¡| t|tdƒ¡| t|tdƒ¡| t|tdƒ¡| t|tdƒ¡| t|tdƒ¡| t|tdƒ¡| t|tdƒ¡| t|tdƒ¡| t|tdƒ¡| t|tdƒ¡| t|tdƒ¡| t|tdƒ¡| |tdƒƒtdƒ¡| |tdƒƒtdƒ¡| |tdƒƒtdƒ¡| t|td ƒ¡| t|td!ƒ¡| |td"ƒƒtd"ƒ¡| |td#ƒƒtd$ƒ¡| |td%ƒƒtd%ƒ¡| |td&ƒƒtd&ƒ¡| |td'ƒƒtd(ƒ¡| |td)ƒƒtd$ƒ¡| t|td*ƒ¡| t|tdƒ¡| t|tdƒ¡| |tdƒƒtdƒ¡dS)+z"test saslprep() unicode normalizerr)ÚsaslprepNrrrOõ­u$­$â€�$z$$$u $ $ $ $z$ $ $ $uaÌ€õàr|úuá Žuuuï·�uí €u�uâ¿°u‎uâ�¯uऀu￸uó €�uا1uاuابuا1بuاAبuxاzZxAzuI­XZIXÚuserZUSERõªrGuâ…¨ú)Zrequire_stringpreprr’rVr�r'r rW)rÚsprrrÚ test_saslprepesR zMiscTest.test_saslprepcCs|ddlm}| |dƒg¡| |dƒg¡| |dƒdg¡| |dƒdg¡| |dƒddg¡| |d ƒddg¡dS) Nr)Ú splitcommarOú,rGz a , z a , brHz a, b, )rr›r')rr›rrrÚtest_splitcomma´s zMiscTest.test_splitcommacCsRddlm}dD]´}| d¡t|ƒ}t|dƒD]�}d||f}|||ƒ}| d¡|jt|ƒ||d�|jt|ƒt||ƒ|d�|jt|ƒt|d|d ƒ|d�|j ||d t|ƒ…|d�q2qd D]L}t|ƒ}t|dƒD]2}d||f}|||ƒ}|j ||d |…|d�qâqÊd D]T}t|ƒ}t|dƒD]8}d||f}|||ƒ}|j ||d |d …|d��q4�qd}|  ||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ó1s123ós ós sa þþs&abcdefghjusdfaoiu þþdsfioauweoiruerrtézsource=%r index=%r: )ÚmsgérN)óÊs ÊÊÊÊÊÊÊÊÊÊós )óªs ªªªªªªªªªªés MNÿ ¡¢ªOP«róMr3sMNsMNÿ ¡¢sMNÿ ¡¢ªrQééésMNÿ ¡¢ªOé r@é ) rržrZrBÚrangeZassertLessEqualÚassertGreaterEqualÚminÚ assertLessr')rržÚsourceÚendÚidxÚprefixr„rrrÚtest_utf8_truncate½sn     "     $  ÿ ÿ ÿ ÿ ÿ ÿ ÿ ÿ ÿzMiscTest.test_utf8_truncateN)r!r"r#r4rr-r7r>rIrr]rcrgrlror‘ršr�r·rrrrrs     (VfO rc@s@eZdZdZdd„Zdd„Zdd„Zdd „Zd d „Zd d „Z dS)Ú CodecTestz,tests bytes/unicode helpers in passlib.utilscCsrtrddl}| t|j¡nddl}| t|j¡| dt¡| dt¡trb| d d¡d¡n | dd¡dS)z*test b() helper, bytes and native str typerNróÿr‹õÿ) rÚbuiltinsr)rDZ __builtin__ÚstrrCr'rZ)rr»rrrÚ test_bytes:s  zCodecTest.test_bytescCsØddlm}| |tdƒƒd¡| |tdƒƒd¡| |tdƒdƒd¡| t|tdƒd ¡| |dƒd¡| |dƒd¡| |dƒd¡| |ddƒd¡| |ddd d ƒd¡| t|dd ¡| t|d ¡d S) ztest to_bytes()r)rrNrTrºóÿr‹r¹rUrOrtN)rrr'r rVrWÚAssertionErrorr�)rrrrrÚ test_to_bytesJs   ÿÿzCodecTest.test_to_bytescCsÄddlm}| |tdƒƒtdƒ¡| |tdƒƒtdƒ¡| |tdƒdƒtdƒ¡| |dƒtdƒ¡| |dƒtdƒ¡| |dd ƒtdƒ¡| t|d¡| t|dd ¡| t|d ¡d S) ztest to_unicode()r)Ú to_unicoderNrºrUrTr¾r¹r‹N)rrÁr'r rVrWr¿r�)rrÁrrrÚtest_to_unicodegs  ÿzCodecTest.test_to_unicodecCsúddlm}| |tdƒdƒd¡| |ddƒd¡tr`| |tdƒdƒd¡| t|dd¡n&| t|tdƒd¡| |ddƒd¡| |tdƒd ƒd¡| |d d ƒd¡| |tdƒd ƒtrÆdnd¡| |dd ƒtràdnd¡| t|d d¡d S) ztest to_native_str()r)Ú to_native_strrNrUrTr”sàuàr‹óàrtN) rrÃr'r rrVÚUnicodeDecodeErrorÚUnicodeEncodeErrorr�)rrÃrrrÚtest_to_native_str}s*  ÿÿ ÿ  ÿzCodecTest.test_to_native_strcCsPddlm}| |dƒ¡| |tdƒƒ¡| |dƒ¡| |tdƒƒ¡dS)ztest is_ascii_safe()r)rsabczabcsabc€uabc€N)rrrr rf)rrrrrÚtest_is_ascii_safeœs  zCodecTest.test_is_ascii_safecCs�ddlm}| |ddƒ¡| |ddƒ¡| |ddƒ¡| |ddƒ¡| |ddƒ¡| |ddƒ¡| |ddƒ¡| |ddƒ¡dS) ztest is_same_codec()r)Ú is_same_codecNrUÚASCIIrtÚutf8ZUTF_8)rrÉrrf)rrÉrrrÚtest_is_same_codec¤s zCodecTest.test_is_same_codecN) r!r"r#r4r½rÀrÂrÇrÈrÌrrrrr¸7sr¸c@s8eZdZdZdd„Zdd„Zdd„Zdd „Zd d „Zd S) ÚBase64EngineTestz%test standalone parts of Base64EnginecCsRddlm}m}| t|d¡| t||dd…¡| t||dd…d¡dS)Nr)Ú Base64EngineÚ AB64_CHARSrrPÚA)Úpasslib.utils.binaryrÎrÏrVr�rW)rrÎrÏrrrÚtest_constructor»sz!Base64EngineTest.test_constructorcCsddlm}| |dƒtdƒ¡| |tdƒƒtdƒ¡| t|tdƒ¡| t|d¡| t|d¡| t|td ƒ¡| |d ƒtd ƒ¡| t|d ¡| |d ƒtdƒ¡| |dƒtdƒ¡| |dƒtdƒ¡| |dƒtdƒ¡| |dƒtdƒ¡dS)z ab64_decode()r)Ú ab64_decoderTÚ69b7rNõabÿóabÿóab!úab!óabcdÚ69b71dóabcdeóabcdefÚ69b71d79óabcdeQóabcdefgÚ 69b71d79f8óab+/Ú69bfbfóab./N)rÑrÓr'rr rVrWr�)rrÓrrrÚtest_ab64_decodeÇs z!Base64EngineTest.test_ab64_decodecCs”ddlm}| |tdƒƒd¡| tr,tnt|tdƒ d¡¡| |tdƒƒd¡| |tdƒƒd ¡| |td ƒƒd ¡| |td ƒƒd ¡dS)z ab64_encode()r)Ú ab64_encoderÔrTr‹rÚrÙrÝrÞràrßrârãN) rÑrår'rrVrr�rÆrZ)rrårrrÚtest_ab64_encodeãs ÿz!Base64EngineTest.test_ab64_encodecCsÚddlm}| |dƒtdƒ¡| |tdƒƒtdƒ¡| t|tdƒ¡| t|d¡| t|d¡| t|td ƒ¡| |d ƒtd ƒ¡| t|d ¡| |d ƒtdƒ¡| |dƒtdƒ¡| |dƒtdƒ¡dS)z b64s_decode()r)Ú b64s_decoderTrÔrNrÕrÖr×rØrÙrÚrÛrÜrÝrÞrßràN)rÑrçr'rr rVrWr�)rrçrrrÚtest_b64s_decodeös z!Base64EngineTest.test_b64s_decodecCs”ddlm}| |tdƒƒd¡| tr,tnt|tdƒ d¡¡| |tdƒƒd¡| |tdƒƒd ¡| |td ƒƒd ¡| |td ƒƒd ¡dS)z b64s_encode()r)Ú b64s_encoderÔrTr‹rÚrÙrÝrÞràrßrâráN) rÑrér'rrVrr�rÆrZ)rrérrrÚtest_b64s_encode s ÿz!Base64EngineTest.test_b64s_encodeN) r!r"r#r4rÒrärærèrêrrrrrÍ·s  rÍc@sÔeZdZdZdZdZdZdZdd„Zdd„Z dd „Z d d „Z d d „Z dd„Z dd„Zdd„Zddgd¢fddgd¢fgZddgd¢fgZdd„Zdd„Zdd „Zd!d"„Zd#d$„Zd%d&„Zd'd(„Zd)d*„Zd+d,„ZdS)-Ú _Base64Testz+common tests for all Base64Engine instancesNó?cst‡fdd„|DƒƒS)z!generate byte string from offsetsc3s"|]}ˆjj||d…VqdS)rN)ÚengineÚbytemap)Ú.0Úo©rrrÚ 5rz _Base64Test.m..)r )rÚoffsetsrrñrÚm3sz _Base64Test.mcCs<|j}|j}|jD]$\}}||ƒ}| ||d|f¡qdS)z,test encode_bytes() against reference inputsz encode %r:N)ríÚ encode_bytesÚ encoded_datar')rrírŽÚrawÚencodedr„rrrÚtest_encode_bytes:s z_Base64Test.test_encode_bytescCs0|j}|j}| t|tdƒ¡| t|d¡dS)z"test encode_bytes() with bad inputr|N)rírõrVr�r )rrírŽrrrÚtest_encode_bytes_badBsz!_Base64Test.test_encode_bytes_badcCs<|j}|j}|jD]$\}}||ƒ}| ||d|f¡qdS)z,test decode_bytes() against reference inputsz decode %r:N)ríÚ decode_bytesrör')rrírZr÷rør„rrrÚtest_decode_bytesLs z_Base64Test.test_decode_bytesc CsDtr dd„nt}|j}|j}|j}d}| ||ddƒƒ|¡tddƒD]d}|jrn|dkr\|n|d|d>ƒ}n|dkr†|d|d>ƒn|}| ||dd|>ƒƒ|d |¡qF| ||dddƒƒ|d¡tddƒD]l}|jrú|dkrè|n|d|d>ƒ}n|dk�r|d|d>ƒn|}| ||ddd|>ƒƒ||d |¡qÒd S) z(test decode_bytes() ignores padding bitscSs t|gƒSr)rD)Úvrrrr~Vrz7_Base64Test.test_decode_bytes_padding..r¦rrªr¤rr3z %d/4 bits:z %d/2 bits:N)rÚchrrírôrûr'r¯Úbig)rZbchrrírôrZZBNULLÚiZcorrectrrrÚtest_decode_bytes_paddingTs&"ÿz%_Base64Test.test_decode_bytes_paddingcCst|j}|j}| t||jdd…¡| |j|jv¡| t||jd¡| t||jdd…¡| t|d¡dS)z"test decode_bytes() with bad inputNrQr¤) rírûrVrWrîrÚbad_byter�Úcharmap)rrírZrrrÚtest_decode_bytes_badosz!_Base64Test.test_decode_bytes_badc Cs2|j}ddlm}m}| ¡}d}tdƒD�]}| |r|j}|jD],\}}}| |¡}| ||¡}| ||¡q dS)ztest decode_transposed_bytes()N)rír rõÚdecode_transposed_bytesr')rrírr„rórrrrrÚtest_decode_transposed_bytesìs   z(_Base64Test.test_decode_transposed_bytescCs8|j}|jD]&\}}}| |¡}| t|j||¡q dS)z8test decode_transposed_bytes() fails if map is a one-wayN)rírrõrVr�r)rrírÚ_rórrrrÚ test_decode_transposed_bytes_badôs   ÿz,_Base64Test.test_decode_transposed_bytes_badcCsò| ¡}|j}t|d|ƒ}t|d|ƒ}| d}||d}d|>} |D](\} } || ƒ} | | t¡| | | ¡qL| t|d¡| t|| ¡|D] \} } | || ƒ| d| f¡q–|j} | t|| dƒ|d¡| t|| dƒ|d¡| t||j |¡| t ||j d¡| t |d¡dd l m }td ƒD]°}| d| d¡} || ƒ} | t| ƒ|¡| || ƒ| ¡|||j|ƒ} || ƒ} | | dd | ¡| | | d | ¡|| ƒ} |�rÞ| | dd …| dd …¡n | | | ¡�qs(  $(i?