5Xc@s0dZddlmZddlmZddlZddlmZddlm Z m Z m Z m Z m Z mZmZddlmZmZmZdefd YZd efd YZd efd YZdefdYZddlmZmZdefdYZdefdYZdS(stests for passlib.utili(twith_statement(tpartialN(t is_ascii_safe(tirangetPY2tPY3tutunicodet join_bytestPYPY(tTestCasethbtrun_with_fixed_seedstMiscTestcBseZdZdZdZdZdZdZedddZ d Z d Z d Z d Z d ZdZdZRS(s#tests various parts of utils modulecCsfddlm}|jt|dt||jdt|k|jdt|kdS(stest compat's lazymodulei(tcompats,^$t UnicodeIORN(t passlib.utilsRt assertRegextreprtdirt assertTrue(tselfR((s</usr/lib/python2.7/site-packages/passlib/tests/test_utils.pyt test_compats  csfddlmdtffdY}|j|jd|jd}|j|j|jdS(Ni(t classpropertyttestcseZdZdZRS(icSs|jS(N(txvar(tcls((s</usr/lib/python2.7/site-packages/passlib/tests/test_utils.pytxprop)s(t__name__t __module__RR((R(s</usr/lib/python2.7/site-packages/passlib/tests/test_utils.pyR'siR( tpasslib.utils.decorRtobjectt assertEqualRt__dict__tassertIstim_funct__func__(RRtprop((Rs</usr/lib/python2.7/site-packages/passlib/tests/test_utils.pyttest_classproperty$s  cCsddlm}|ddddd}|jd|jk|jtd td d |j|d d dWdQXdS(Ni(tdeprecated_functiont deprecateds1.6tremoveds1.8cWs|S(stest docstring((targs((s</usr/lib/python2.7/site-packages/passlib/tests/test_utils.pyt test_func5ss.. deprecated::tcategorytmessagesvthe function passlib.tests.test_utils.test_func() is deprecated as of Passlib 1.6, and will be removed in Passlib 1.8.ii(ii(RR'Rt__doc__tassertWarningListtdicttDeprecationWarningR (RR'R+((s</usr/lib/python2.7/site-packages/passlib/tests/test_utils.pyttest_deprecated_function1s  csddlmdtffdY}|}|j|jd|j|jd|j|jd|j}ts|j|j|j ndS(Ni(tmemoized_propertytdummycseZdZdZRS(icSs|j}|d|_|S(Ni(tcounter(Rtvalue((s</usr/lib/python2.7/site-packages/passlib/tests/test_utils.pyR6Is  (RRR5R6((R3(s</usr/lib/python2.7/site-packages/passlib/tests/test_utils.pyR4Fsii( RR3RR R6R5RR"R#R$(RR4tdR%((R3s</usr/lib/python2.7/site-packages/passlib/tests/test_utils.pyttest_memoized_propertyCs  cCsddlm}t||j}|jt|dd|d}|d}|j|t|jt|d|jt|d|j||dS(sgetrandbytes()i(t getrandbytesii N( RR9Rt getRandomR tlentassertIsInstancetbytestassertNotEqual(RR9twrappertatb((s</usr/lib/python2.7/site-packages/passlib/tests/test_utils.pyttest_getrandbytesXs  tcounticCsddlm}t||jd|}|j|ddd|jt|dd|jt|dd|j|ddd |tdd }|tdd }|j|t |j |||jt t |tdtd td g|dd }|dd }|j|t |j |||jt t |jd tdtd td gdS(s getrandstr()i(t getrandstrtseedtabcitR@itaaaaai RAtctasciiN(RRDRR:R t assertRaisest ValueErrorRR<RR>tsortedtsetR=tdecode(RRERDR?txty((s</usr/lib/python2.7/site-packages/passlib/tests/test_utils.pyttest_getrandstrds  7cCs@ddlm}tjdd|jt|dddS(sgenerate_password()i(tgenerate_passwordtignores1The function.*generate_password\(\) is deprecatediN(RRStwarningstfilterwarningsR R;(RRS((s</usr/lib/python2.7/site-packages/passlib/tests/test_utils.pyttest_generate_passwordscCsZddlm}ddlm}|dg}|j|||j|| dS(stest is_crypt_context()i(tis_crypt_context(t CryptContextt des_cryptN(RRXtpasslib.contextRYRt assertFalse(RRXRYtcc((s</usr/lib/python2.7/site-packages/passlib/tests/test_utils.pyttest_is_crypt_contexts cCsddl}ddlm}|j|}|jdd}|j|}|jdd}|j|||j||dS(stest genseed()iN(tgenseedii I TI T(trandomRR_tRandomtrandintR>RE(RR`R_trngR@RA((s</usr/lib/python2.7/site-packages/passlib/tests/test_utils.pyt test_genseeds c sWddlm}m}m}|sc|j|ddd|j|dd|jdn|j|t dt dt t d}|j|t dt d||j|dd|t d}|j|t dd||j|d d||d d}t r>|j|dn|j|t d |j t |d d|d d }|j|d||j|d|ddlj}|j} zdfd|_xLdddddgD]5|j|ddd|j|d|qWd|j|dddWd| |_XdS(stest crypt.crypt() wrappersi(t has_cryptt safe_cryptt test_cryptRtaas aaqPiZY5xR5l.scrypt.crypt() not availables aahWwbrUsKZk.s test\u1234stestሴstests aaOx.5nbTU/.MtRPNcsS(N((tsecretthash(tfake(s</usr/lib/python2.7/site-packages/passlib/tests/test_utils.pytsRGt:s:0s*0txxx(RReRfRgR tNoneR\tskipTestR<RRRRKRLRtutilst_crypt( RReRfRgth1th2Rkth1xtmodtorig((Rls</usr/lib/python2.7/site-packages/passlib/tests/test_utils.pyRgs>% %  c sddlmm|jttdd|jttdd|jttdd|jtdtd|jtdd|jtdd|jtdtd|jtdd|jtdtd|jtddfd}xtdtdtdd gD]}||r|j||d |fn|jt|||j||d |f|jd }|j||d |fqNWxtdtd ftd tdftd tdftd tdftdd d tdtdd ftdtdftdtdftdtdftdtdfg D]C\}}||r3||r3|j ||d||f|j ||d||fn,|jt|||jt|||j ||d||f|j ||d||f|jd }|jd }|j ||d||f|j ||d||fqWdS(stest consteq()i(tconsteqt str_consteqRGicskptpt|S(N(RR(R6(RyRz(s</usr/lib/python2.7/site-packages/passlib/tests/test_utils.pytconsteq_supports_stringsR@RFsi s value %r:slatin-1RItabcabctzbaabctabzabctabcabzstabcdeftdefabctqwertyuiopasdfghjklzxcvbnms values %r %r:N( RRyRzRKt TypeErrorRRpRtencodeR\(RR{R6tltr((RyRzs</usr/lib/python2.7/site-packages/passlib/tests/test_utils.pyt test_consteqsX   # $%#&###cCsk|jddlm}|jt|d)|jt|d|jt|d|j|tdtd|j|tdtd|j|tdtd|j|tdtd |j|td td |j|td td |jt|td |jt|td |jt|td|jt|td|jt|td|jt|td|jt|td|jt|td|jt|td|jt|td|jt|td|jt|td|jt|td|jt|td|jt|td|j|tdtd|j|tdtd|j|tdtd|jt|td|jt|td|j|td td |j|td!td"|j|td#td#|j|td$td$|j|td%td&|j|td'td"|jt|td(|jt|td|jt|td|j|tdtdd)S(*s"test saslprep() unicode normalizeri(tsaslprepiRGs\u00ADs$\u00AD$\u200D$s$$$s$ $\u00A0$\u3000$s$ $ $ $sa\u0300s\u00E0s\u0000s\u007Fs\u180Es\uFFF9s\uE000s\uFDD0s\uD800s\uFFFDs\u2FF0s\u200Es\u206Fs\u0900s\uFFF8s \U000e0001s \u0627\u0031s\u0627s \u0627\u0628s\u0627\u0031\u0628s\u0627\u0041\u0628sx\u0627zsx\u0041zsI\u00ADXtIXtusertUSERs\u00AAR@s\u2168s\u0007N( trequire_stringprepRRRKRRpR RRL(Rtsp((s</usr/lib/python2.7/site-packages/passlib/tests/test_utils.pyt test_saslprepHsR """""""""""""""cCsddlm}|j|dg|j|dg|j|ddg|j|ddg|j|dddg|j|d ddgdS( Ni(t splitcommaRGt,R@s a , s a , bRAs a, b, (RRR (RR((s</usr/lib/python2.7/site-packages/passlib/tests/test_utils.pyttest_splitcommas(RRR.RR&R2R8RBR RRRWR^RdRgRRR(((s</usr/lib/python2.7/site-packages/passlib/tests/test_utils.pyR s   )    9 f Ot CodecTestcBsDeZdZdZdZdZdZdZdZRS(s,tests bytes/unicode helpers in passlib.utilscCstr(ddl}|jt|jnddl}|jt|j|jdt|jdttr|jdjddn|jdddS(s*test b() helper, bytes and native str typeiNRGtslatin-1( RtbuiltinsR"R=t __builtin__tstrR<R RO(RR((s</usr/lib/python2.7/site-packages/passlib/tests/test_utils.pyt test_bytess  cCs*ddlm}|j|tdd|j|tdd|j|tddd|jt|tdd|j|dd|j|dd|j|dd|j|ddd|j|dddd d|jt|dd |jt|d d S( stest to_bytes()i(tto_bytesRFRtÿslatin-1RJRGsutf-8N( RRR RRKRLtAssertionErrorRpR(RR((s</usr/lib/python2.7/site-packages/passlib/tests/test_utils.pyt test_to_bytesscCsddlm}|j|tdtd|j|tdtd|j|tddtd|j|dtd|j|dtd|j|ddtd|jt|d|jt|dd|jt|ddS( stest to_unicode()i(t to_unicodeRFRRJRslatin-1N( RRR RRKRLRRpR(RR((s</usr/lib/python2.7/site-packages/passlib/tests/test_utils.pyttest_to_unicodes""% cCs]ddlm}|j|tddd|j|dddtr|j|tddd|jt|ddn5|jt|tdd|j|ddd|j|tddd|j|ddd|j|tddtrdnd|j|ddtr<dnd|jt|d dd S( stest to_native_str()i(t to_native_strRFRJssàslatin-1sutf-8N( RRR RRRKtUnicodeDecodeErrortUnicodeEncodeErrorRRp(RR((s</usr/lib/python2.7/site-packages/passlib/tests/test_utils.pyttest_to_native_strs" cCslddlm}|j|d|j|td|j|d|j|tddS(stest is_ascii_safe()i(RtabctabcN(RRRRR\(RR((s</usr/lib/python2.7/site-packages/passlib/tests/test_utils.pyttest_is_ascii_safes cCsddlm}|j|dd|j|dd|j|dd|j|dd|j|dd|j|dd|j|dd|j|dddS( stest is_same_codec()i(t is_same_codecRJtASCIIsutf-8tutf8tUTF_8N(RRRRpR\(RR((s</usr/lib/python2.7/site-packages/passlib/tests/test_utils.pyttest_is_same_codecs( RRR.RRRRRR(((s</usr/lib/python2.7/site-packages/passlib/tests/test_utils.pyRs     tBase64EngineTestcBs;eZdZdZdZdZdZdZRS(s%test standalone parts of Base64EnginecCs_ddlm}m}|jt|d|jt||d |jt||d ddS(Ni(t Base64Enginet AB64_CHARSitA(tpasslib.utils.binaryRRRKRRL(RRR((s</usr/lib/python2.7/site-packages/passlib/tests/test_utils.pyttest_constructor'scCseddlm}|j|dtd|j|tdtd|jt|td|jt|d|jt|d|jt|td|j|dtd|jt|d |j|d td |j|d td |j|d td|j|dtd|j|dtddS(s ab64_decode()i(t ab64_decodeRFt69b7sabsab!tabcdt69b71dtabcdeRt69b71d79tabcdeQtabcdefgt 69b71d79f8sab+/t69bfbfsab./N(RRR R RRKRLR(RR((s</usr/lib/python2.7/site-packages/passlib/tests/test_utils.pyttest_ab64_decode3s"cCsddlm}|j|tdd|jtr>tnt|tdjd|j|tdd|j|tdd |j|td d |j|td d dS(s ab64_encode()i(t ab64_encodeRRFslatin-1RRRRRRRsab./N( RRR R RKRRRRO(RR((s</usr/lib/python2.7/site-packages/passlib/tests/test_utils.pyttest_ab64_encodeOscCs-ddlm}|j|dtd|j|tdtd|jt|td|jt|d|jt|d|jt|td|j|dtd|jt|d |j|d td |j|d td |j|d tddS(s b64s_decode()i(t b64s_decodeRFRsabsab!RRRRRRRRN(RRR R RRKRLR(RR((s</usr/lib/python2.7/site-packages/passlib/tests/test_utils.pyttest_b64s_decodebs"cCsddlm}|j|tdd|jtr>tnt|tdjd|j|tdd|j|tdd |j|td d |j|td d dS(s b64s_encode()i(t b64s_encodeRRFslatin-1RRRRRRRsab+/N( RRR R RKRRRRO(RR((s</usr/lib/python2.7/site-packages/passlib/tests/test_utils.pyttest_b64s_encodeys(RRR.RRRRR(((s</usr/lib/python2.7/site-packages/passlib/tests/test_utils.pyR#s    t _Base64TestcBs eZdZdZdZdZdZdZdZ dZ dZ dZ dZ dZd Zd d d d dgfdd d d dgfgZdd ddd gfgZdZdZdZdZdZdZdZdZdZRS(s+common tests for all Base64Engine instancest?cstfd|DS(s!generate byte string from offsetsc3s&|]}jj||d!VqdS(iN(tenginetbytemap(t.0to(R(s</usr/lib/python2.7/site-packages/passlib/tests/test_utils.pys s(R(Rtoffsets((Rs</usr/lib/python2.7/site-packages/passlib/tests/test_utils.pytmscCsV|j}|j}x=|jD]2\}}||}|j||d|fqWdS(s,test encode_bytes() against reference inputss encode %r:N(Rt encode_bytest encoded_dataR (RRRtrawtencodedtresult((s</usr/lib/python2.7/site-packages/passlib/tests/test_utils.pyttest_encode_bytess    cCsB|j}|j}|jt|td|jt|ddS(s"test encode_bytes() with bad inputRiN(RRRKRRRp(RRR((s</usr/lib/python2.7/site-packages/passlib/tests/test_utils.pyttest_encode_bytes_bads  cCsV|j}|j}x=|jD]2\}}||}|j||d|fqWdS(s,test decode_bytes() against reference inputss decode %r:N(Rt decode_bytesRR (RRRORRR((s</usr/lib/python2.7/site-packages/passlib/tests/test_utils.pyttest_decode_bytess    cCstrdnt}|j}|j}|j}d}|j||dd|xtddD]}|jr|dkr|n|d|d>}n&|dkr|d|d>n|}|j||dd|>|d|qeW|j||ddd|dxtddD]}|jr_|dkrH|n|d|d>}n&|dkr|d|d>n|}|j||ddd|>||d |q'Wd S( s(test decode_bytes() ignores padding bitscSs t|gS(N(R=(tv((s</usr/lib/python2.7/site-packages/passlib/tests/test_utils.pyRmsRiiiiiis %d/4 bits:s %d/2 bits:N(RtchrRRRR trangetbig(RtbchrRRROtBNULLtitcorrect((s</usr/lib/python2.7/site-packages/passlib/tests/test_utils.pyttest_decode_bytes_paddings$    )&.& )&&cCs|j}|j}|jt||jd |j|j|jk|jt||jd|jt||jd |jt|ddS(s"test decode_bytes() with bad inputiiN( RRRKRLRRtbad_byteRtcharmapRp(RRRO((s</usr/lib/python2.7/site-packages/passlib/tests/test_utils.pyttest_decode_bytes_bads  c Cs|j}ddlm}m}|j}t}xhtdD]Z}|j|rVdndd}|sqt}nd|dd }|||} |j | } |j t | ||j | } |j | | |ddkr||j dddg7}nd |d} |||j|} |j | } |j t | | d ||j | } |dr|j | d | d q>|j | | q>Wd S( s2test encode_bytes/decode_bytes against random datai(R9RDiiii iiis encoded %d:N(RRR9RDR:tFalseRRbtTrueRR R;RtchoiceR( RRR9RDRctsaw_zeroRtsizetenc_sizeRRRtraw_size((s</usr/lib/python2.7/site-packages/passlib/tests/test_utils.pyt test_codecs0    c Cs}ddlm}|j}|j}|jj}d}x?|dkrx|jdd}|||j|jd}|d@dkr|jt ||q:n|j |j |}|j d kr|j d}|j d}n||kr(||\} } |j| |j| |nC|j|d d||\} } |j| |j| ||d7}q:Wd S( stest repair_unused()i(RDii,iRJiig?iN(RRDR:Rtcheck_repair_unusedRbRRRKRLRRR`ROR\R R>R( RRDRcRRRRtcdatatrdatatokR((s</usr/lib/python2.7/site-packages/passlib/tests/test_utils.pyttest_repair_unuseds0      s3"s"3iiis"3s"cCs|j}xR|j|jD]@\}}}|j||}|j|}|j||qW|jt|jtdgdS(stest encode_transposed_bytes()R@N( Rt transposedttransposed_dupstencode_transposed_bytesRR RKRR(RRRtinputRttmptout((s</usr/lib/python2.7/site-packages/passlib/tests/test_utils.pyttest_encode_transposed_bytesNs   cCs[|j}xK|jD]@\}}}|j|}|j||}|j||qWdS(stest decode_transposed_bytes()N(RRRtdecode_transposed_bytesR (RRRRRRR((s</usr/lib/python2.7/site-packages/passlib/tests/test_utils.pyttest_decode_transposed_bytesXs  cCsR|j}xB|jD]7\}}}|j|}|jt|j||qWdS(s8test decode_transposed_bytes() fails if map is a one-wayN(RRRRKRR(RRRt_RR((s</usr/lib/python2.7/site-packages/passlib/tests/test_utils.pyt test_decode_transposed_bytes_bad`s  cCs|j}|j}t|d|}t|d|}| d}||d}d|>} x@|D]8\} } || } |j| t|j| | qeW|jt|d|jt|| x4|D],\} } |j|| | d| fqW|j} |jt|| d|d|jt|| d|d|jt||j ||jt ||j d|jt |d ddl m}xtd D]}|jd| d} || } |jt| ||j|| | |||j|} || } |j| dd | |j| | d | || } |r}|j| d | d q|j| | qWd S( s5helper to check encode_intXX & decode_intXX functionss encode_int%ss decode_int%siiis encoded %r:i(RDidsdecode %r out of bounds:iN(R:RtgetattrR<R=R RKRLRRRRRpRRDRRbR;RtassertGreaterEqualt assertLess(Rtbitst encoded_pairsRcRRROtpadtcharstupperR6RRRRDR((s</usr/lib/python2.7/site-packages/passlib/tests/test_utils.pytcheck_int_pairksF     $ !!   cCsD|j}|j}|jdd|dfd|dfgdS(Niii?(RRR(RRR((s</usr/lib/python2.7/site-packages/passlib/tests/test_utils.pyt test_int6s  cCst|j}|j}|jdd|ddfd|jrH|ddn |ddfd|ddfgdS(Ni ii?i(RRRR(RRR((s</usr/lib/python2.7/site-packages/passlib/tests/test_utils.pyt test_int12s  c Cs|j}|j}|jdd|ddddfd|jrT|ddddn|ddddfd|ddddfgdS(Niii?i(RRRR(RRR((s</usr/lib/python2.7/site-packages/passlib/tests/test_utils.pyt test_int24s   !6cCs|j}|j}|jdd|ddddddddddd fd|jr~|ddddddddddd n'|ddddddddddd fd |jr|ddddddddddd n'|ddddddddddd fgdS( Ni@ii?ii<iill(RRRR(RRR((s</usr/lib/python2.7/site-packages/passlib/tests/test_utils.pyt test_int64s  66*6cCs|js|jdn|j}xl|jD]a\}}}t|d|}t|d|}|j||||j|||q.WdS(s(test against reference integer encodingssnone defined for classs encode_int%ds decode_int%dN(t encoded_intst skipTestsRRR (RRtdataR6RRRO((s</usr/lib/python2.7/site-packages/passlib/tests/test_utils.pyttest_encoded_intss  N(RRR.RpRRRRRRRRRRRRRRRRRRRRRRR(((s</usr/lib/python2.7/site-packages/passlib/tests/test_utils.pyRs2      / (  0    (th64th64bigtH64_Testc BsGeZdZeZdZddddddddd g Zd!d"gZRS(#stest H64 codec functionss h64 codecRGtUsJ/sUtJd8sUUtJdOJsUUtJdOJe0sUUUtJdOJeK3sUUUtJdOJeKZesUUtJdOJj0sUU_tJdOJey3sz.i?i s.zi(RGRG(sUsJ/(sUR (sUUR (sUUR (sUUUR(sUUUR(sUUR(sUU_R(sz.i?i (s.zii (RRR.RRtdescriptionPrefixRR(((s</usr/lib/python2.7/site-packages/passlib/tests/test_utils.pyR s t H64Big_Testc BsGeZdZeZdZddddddddd g Zd!d"gZRS(#stest H64Big codec functionss h64big codecRGR tJEsUtJOcsUUtJOdJsUUtJOdJeUsUUUtJOdJeZIsUUUtJOdJeZKesUUtJOdJfksUU_tJOdJeZws.zi?i sz.i(RGRG(sUR(sUR(sUUR(sUUR(sUUUR(sUUUR(sUUR(sUU_R(s.zi?i (sz.ii (RRR.RRRRR(((s</usr/lib/python2.7/site-packages/passlib/tests/test_utils.pyRs (R.t __future__Rt functoolsRRURRtpasslib.utils.compatRRRRRRR tpasslib.tests.utilsR R R R RRRRRRR R(((s</usr/lib/python2.7/site-packages/passlib/tests/test_utils.pyts 4i>