yJc@sddkZdeifdYZdeifdYZdeifdYZdeifd YZd eifd YZd eifd YZdeifdYZdfdYZ dfdYZ dfdYZ dfdYZ dfdYZ dfdYZdfdYZdfdYZd fd!YZd"fd#YZd$fd%YZd&fd'YZd(fd)YZd*fd+YZdS(,iNtTestMiddlewarec BseZdZd)d)d)d)d)d)d)d)d)d Zd)dZdZdZdZdZ dZ dZ d Z d Z d Zd Zd ZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZ dZ!dZ"d Z#d!Z$d"Z%d#Z&d$Z'd%Z(d&Z)d'Z*d(Z+RS(*cCsddkl}|S(Ni(t!PluggableAuthenticationMiddleware(trepoze.who.middlewareR(tselfR((sD/usr/lib/python2.6/site-packages/repoze/who/tests/test_middleware.pyt_getTargetClasssc Cs|djo t}n|djo g}n|djo g}n|djo g}n|djo t}n|djo g}n|djo t}n| djoddk} | i} n|i||||||||d| i} | S(Nit log_level(tNonetDummyApptDummyRequestClassifiertDummyChallengeDecidertloggingtDEBUGR( Rtappt identifierstauthenticatorst challengerst classifiert mdproviderstchallenge_decidert log_streamRR tmw((sD/usr/lib/python2.6/site-packages/repoze/who/tests/test_middleware.pyt_makeOne s6                   cCs2h}d|d<|dj o|i|n|S(Niis wsgi.version(ii(Rtupdate(Rtkwtenviron((sD/usr/lib/python2.6/site-packages/repoze/who/tests/test_middleware.pyt _makeEnviron0s   cCsTddk}|id}|i|i|id|}|i||idS(Nit somethingR(R tLoggertsetLeveltINFORt assertEqualtlogger(RR RR((sD/usr/lib/python2.6/site-packages/repoze/who/tests/test_middleware.pyttest_accepts_logger7s  c Cs|i}hdd6dd6}t|}d|fg}|id|}|i|d}|it|d|d\}}|i|||i|dd|i|dddS(NtchristlogintpasswordtiR ii(RtDummyIdentifierRtidentifyRRtlen( RRt credentialst identifierR Rtresultstnew_identifiertidentity((sD/usr/lib/python2.6/site-packages/repoze/who/tests/test_middleware.pyttest_identify_success>s  cCs|i}th}d|fg}|id|}|i|d}|it|d|d\}}|i|||i|hdS(NR$R ii(RR%RR&RRR'(RRR)R RR*R+R,((sD/usr/lib/python2.6/site-packages/repoze/who/tests/test_middleware.pyt$test_identify_success_empty_identityKs  cCsb|i}t}d|fg}|id|}|i|d}|it|ddS(NtdummyR i(RtDummyNoResultsIdentifierRR&RRR'(RRtplugintpluginsRR*((sD/usr/lib/python2.6/site-packages/repoze/who/tests/test_middleware.pyttest_identify_failVs   c Cs|i}|i}t}hdd6dd6}t|}d|fd|fg}|id|}|i|d}|it|d|d\}} |i|||i| dd|i| dddS( NR!R"R#t identifier1t identifier2R ii(RRR0R%R&RRR'( RRRtplugin1R(tplugin2R2R*R+R,((sD/usr/lib/python2.6/site-packages/repoze/who/tests/test_middleware.pyt$test_identify_success_skip_noresults^s    c Cs2|i}|i}thdd6dd6}thdd6dd6}d|fd|fg}|id|}|i|d}|it|d|d \}}|i|||i|dd|i|dd|d \}}|i|||i|dd|i|dddS( NtfredR"R#tbobR4R5R iii(RRR%R&RRR'( RRRR6R7R2R*R+R,((sD/usr/lib/python2.6/site-packages/repoze/who/tests/test_middleware.pyt"test_identify_success_multiresultsms   c Cs |i}|i}thdd6dd6}ddkl}hdg|6|_thdd6dd6}d|fd |fg}|id |}|i|d }|it|d |d \}} |i| dd|i| dd|i||dS(NR9R"R#i(t IIdentifiertnomatchR:R4R5R tmatchii( RRR%trepoze.who.interfacesR<tclassificationsR&RR'( RRRR6R<R7R2R*R1tcreds((sD/usr/lib/python2.6/site-packages/repoze/who/tests/test_middleware.pyt&test_identify_find_implicit_classifiers  c Cs|i}ddkl}thdd6dd6}hdg|6|_thdd6dd6}hdg|6|_d |fd |fg}|id |}|i|d}|it|d |d \}} |i| dd|i| dd|i||dS(Ni(R<R9R"R#R=R:R>R4R5R ii( RR?R<R%R@RR&RR'( RRR<R6R7R2RR*R1RA((sD/usr/lib/python2.6/site-packages/repoze/who/tests/test_middleware.pyt&test_identify_find_explicit_classifiers c Cs |i}td}d|fg}|id|}dhdd6dd6fg}|i|d|}|it|d|d}|\}} } } } |i|d |i| ||i| d|i| dd|i| dd|i| ddS( NtaR4RR!R"R#ii(ii(RtDummyAuthenticatorRRt authenticateRR'( RRR6R2Rt identitiesR*tresulttrankt authenticatorR)RAtuserid((sD/usr/lib/python2.6/site-packages/repoze/who/tests/test_middleware.pyttest_authenticate_successs   cCsd|i}|i}dhdd6dd6fg}|i|d|}|it|ddS(NR!R"R#i(RRRRFRR'(RRRRGRH((sD/usr/lib/python2.6/site-packages/repoze/who/tests/test_middleware.pyttest_authenticate_fails   cCs;|i}|i}t}t}d|fd|fg}|id|}hdd6dd6}dhdd6dd6fg}|i|d|}|it|d|d} | \} } } }} |i| d |i| ||i| d|i|dd|i|dd|i| ddS( Ntdummy1tdummy2RR!R"R#ii(ii(RRtDummyFailAuthenticatorRERRFRR'(RRRR6R7R2RARGR*RHRIRJR)RK((sD/usr/lib/python2.6/site-packages/repoze/who/tests/test_middleware.pyt#test_authenticate_success_skip_fails$     cCs|i}|i}td}td}d|fd|fg}|id|}hdd6dd6}dhdd6dd6fg}|i|d|}|it|d |d } | \} } } }} |i| d |i| ||i| d|i|dd|i|dd|i| d|d } | \} } } }} |i| d |i| ||i| d|i|dd|i|dd|i| ddS(Nt chris_id1t chris_id2RNRORR!R"R#iii(ii(ii(RRRERRFRR'(RRRR6R7R2RARGR*RHRIRJR)RK((sD/usr/lib/python2.6/site-packages/repoze/who/tests/test_middleware.pyt%test_authenticate_success_multiresults4      cCsP|i}|i}td}ddkl}hdg|6|_td}d|fd|fg}|id|}dhd d 6d d 6fg}|i|d |}|it |d |d} | \} } } } }|i| d|i| ||i| d|i| d d |i| d d |i|ddS(NRRi(tIAuthenticatorR=RStauth1tauth2RR!R"R#R>ii(ii( RRRER?RUR@RRFRR'(RRRR6RUR7R2RGR*RHRIRJR)RARK((sD/usr/lib/python2.6/site-packages/repoze/who/tests/test_middleware.pyt*test_authenticate_find_implicit_classifiers&     cCsc|i}|i}ddkl}td}hdg|6|_td}hdg|6|_d|fd|fg}|id |}dhd d 6d d 6fg}|i|d|}|it |d |d} | \} } } } }|i| d|i| ||i| d|i| d d |i| d d |i|ddS(Ni(RURRR=RSR>RVRWRR!R"R#ii(ii( RRR?RURER@RRFRR'(RRRRUR6R7R2RGR*RHRIRJR)RARK((sD/usr/lib/python2.6/site-packages/repoze/who/tests/test_middleware.pyt*test_authenticate_find_explicit_classifiers(     c Cs |i}td}d|fg}|id|}dhdd6dd6fg}|i|d|}|it|d|d}|\}} } } } |i|d|i| ||i| d|i| dd|i| dd|i| ddS( NiR4RR!R"R#i(ii(RRERRRFRR'( RRR6R2RRGR*RHRIRJR)RARK((sD/usr/lib/python2.6/site-packages/repoze/who/tests/test_middleware.pyt(test_authenticate_user_null_but_not_nones   cCsZ|i}|i}thdd6}td}td}d|fd|fg}|id|}hdd 6d d 6}dhdd 6d d 6f||ifg}|i|d|} |it| d | d } | \} } } }}|i| d|i| d|i| ||i|dd|i|d| d } | \} } } }}|i| d|i| ||i| d|i|d d|i|d d |i|d| d} | \} } } }}|i| d|i| ||i| d|i|d d|i|d d |i|ddS(Ntpreauthenticatedsrepoze.who.useridRRRSRNRORR!R"R#iiii(ii(ii(ii( RRR%RERR(RFRR'(RRRtpreauthR6R7R2RARGR*RHRIRJR)RK((sD/usr/lib/python2.6/site-packages/repoze/who/tests/test_middleware.pyt:test_authenticate_success_multiresult_one_preauthenticated#sF       cCs|i}t}d|fg}|id|}hdd6dd6}|i|ddgd|}|i|d|i|d|dS( Nt challengeRR!R"R#R>s401 Unauthorizedt challenged(RtDummyChallengerRR^RR(RRt challengerR2RR,R ((sD/usr/lib/python2.6/site-packages/repoze/who/tests/test_middleware.pyt!test_challenge_noidentifier_noappHs  cCs|i}t}t|}d|fg}|id|}hdd6dd6}|i|ddgd|}|i|||i|d|dS( NR^RR!R"R#R>s401 UnauthorizedR_(RRR`RR^RR(RRR RaR2RR,RH((sD/usr/lib/python2.6/site-packages/repoze/who/tests/test_middleware.pyt#test_challenge_noidentifier_withappSs   c Cs|i}t}hdd6dd6}t|}d|fg}|id|}hdd6dd6}|i|ddg||}|i|d|i|dd|i|i|dS( NR!R"R#R^RR>s401 UnauthorizedR_(RR`R%RR^RRt forgotten( RRRaR(R)R2RR,RH((sD/usr/lib/python2.6/site-packages/repoze/who/tests/test_middleware.pyttest_challenge_identifier_noapp_s   c Cs|i}t}t|}hdd6dd6}t|}d|fg}|id|}hdd6dd6}|i|ddg||} |i| ||i|d||i|i|dS( NR!R"R#R^RR>s401 UnauthorizedR_(RRR`R%RR^RRd( RRR RaR(R)R2RR,RH((sD/usr/lib/python2.6/site-packages/repoze/who/tests/test_middleware.pyttest_challenge_identifier_appms    c Csd g}|i}t}t|}hdd6dd6}t|d|}d|fg}|id|}hdd6dd6} |i|d d g|| } dS( NsX-testing-forgetsOubliez!R!R"R#tforget_headersR^RR>s401 Unauthorized(sX-testing-forgetsOubliez!(RRR`R%RR^( RtFORGET_HEADERSRR RaR(R)R2RR,RH((sD/usr/lib/python2.6/site-packages/repoze/who/tests/test_middleware.pyt(test_challenge_identifier_forget_headers|s      c Cs|i}t}t}t|}t|}hdd6dd6}t|}d|fd|fg}|id|} hdd6dd6} | i|ddg|| } |i| ||i|d ||i|i| dS( NR!R"R#t challenge1t challenge2RR>s401 UnauthorizedR_(RRR`R%RR^RRd( RRtapp1tapp2t challenger1t challenger2R(R)R2RR,RH((sD/usr/lib/python2.6/site-packages/repoze/who/tests/test_middleware.pyttest_multi_challenge_firstwinss      c Cs |i}t}t}ddkl}t|}hdg|6|_t|}hd|6|_hdd6dd6}t|}d|fd|fg} |id | } hdd6dd6} | i |d d g|| } |i | ||i |d ||i |i | dS( Ni(t IChallengerR=R!R"R#RjRkRR>s401 UnauthorizedR_( RRR?RqR`R@RR%RR^RRd( RRRlRmRqRnRoR(R)R2RR,RH((sD/usr/lib/python2.6/site-packages/repoze/who/tests/test_middleware.pyt-test_multi_challenge_skipnomatch_findimplicits$      c Cs#|i}t}t}ddkl}t|}hdg|6|_t|}hdg|6|_hdd6dd6}t|}d|fd |fg} |id | } hdd6dd6} | i|dd g|| } |i | ||i |d ||i |i | dS( Ni(RqR=R>R!R"R#RjRkRs401 UnauthorizedR_( RRR?RqR`R@R%RR^RRd( RRRlRmRqRnRoR(R)R2RR,RH((sD/usr/lib/python2.6/site-packages/repoze/who/tests/test_middleware.pyt-test_multi_challenge_skipnomatch_findexplicits$      c Cs|i}thdd6}thdd6}d|fd|fg}|id|}d}h}|i|||}|i|dd|i|dddS( Ntbartfootbaztfuztmeta1tmeta2Rt(RtDummyMDProviderRt add_metadataR( RRR6R7R2RtclassificationR,R*((sD/usr/lib/python2.6/site-packages/repoze/who/tests/test_middleware.pyttest_add_metadatas c Cs|i}thdd6}thdd6}ddkl}hdg|6|_d|fd|fg}|id |}d }h}|i||||i|dd|i|idddS( NRtRuRvRwi(tIMetadataProviderRxRyRtmonkey( RR{R?RR@RR|RtgetR( RRR6R7RR2RR}R,((sD/usr/lib/python2.6/site-packages/repoze/who/tests/test_middleware.pyt"test_add_metadata_w_classifications cCs[|ihdd6}|i}||d}|i|ii||i|gdS(Ntadmint REMOTE_USER(RRRRR R(RRRRH((sD/usr/lib/python2.6/site-packages/repoze/who/tests/test_middleware.pyt test_call_remoteuser_already_sets  cCs|i}dg}td|}|id|}t}|||}|i|ii||i|dg|i|id|i|i|dS(NRDt1s200 OKR tbody(RDR( RtDummyWorkingAppRtDummyStartResponseRR Rtstatustheaders(RRRR Rtstart_responseRH((sD/usr/lib/python2.6/site-packages/repoze/who/tests/test_middleware.pyttest_call_200_no_pluginss   cCsY|i}dg}td|}|id|}t}|it|||dS(NRDRs401 UnauthorizedR (RDR(RRRRt assertRaisest RuntimeError(RRRR RR((sD/usr/lib/python2.6/site-packages/repoze/who/tests/test_middleware.pyttest_call_401_no_challengerss    c Cs|i}d g}td|}hdd6dd6}t|}d|fg}|id|d |}t}|||} |i|ii||i| d g|i|id|i|i |dS( NRDRs200 OKR!R"R#R)R R R(RDR( RRR%RRRR RRR( RRRR R(R)R RRRH((sD/usr/lib/python2.6/site-packages/repoze/who/tests/test_middleware.pyttest_call_200_no_challengerss    c Cs|i}d g}td|}ddkl}|}t|}d|fg}|id|d|}t} ||| } |i|d ||i| d i d dS( NRDRs401 Unauthorizedi(tHTTPUnauthorizedR^R RR_is401 Unauthorized (RDR( RRtpaste.httpexceptionsRR`RRRt failUnlesst startswith( RRRR Rt challenge_appR^RRRRH((sD/usr/lib/python2.6/site-packages/repoze/who/tests/test_middleware.pyttest_call_401_no_identifierss     cCs|i}dg}td|}ddkl}|}t|}d|fg}hdd6dd 6}t|} d | fg} |id |d |d | } t} | || } |i|d||i | di d|i| i t |i|i dddS(NRDRs401 Unauthorizedi(RR^R"tbR#R)R RR R_is401 Unauthorized R(RDR(RRRRR`R%RRRRRRdtFalseRR(RRRR RRR^RR(R)R RRRH((sD/usr/lib/python2.6/site-packages/repoze/who/tests/test_middleware.pyt8test_call_401_challenger_and_identifier_no_authenticators$       c Cs!|i}dg}td|}ddkl}|}t|}d|fg}hdd6d d 6}t|} d | fg} t} d | fg} |id |d |d| d| } t}| ||}|i |d||i |di d|i |dddS(NRDRs401 Unauthorizedi(RR^R!R"R#R)RJR RR RR_is401 Unauthorized R(RDR( RRRRR`R%RERRRRR(RRRR RRR^RR(R)R RJRRRRH((sD/usr/lib/python2.6/site-packages/repoze/who/tests/test_middleware.pyt9test_call_401_challenger_and_identifier_and_authenticator*s(        c Cs|i}dg}td|}ddkl}|}t|}d|fg}hdd6d d 6}t|} d | fg} t} d | fg} |id |d |d| d| } t}| ||}|i |i dd|i | i t |i |dddS(NRDRs200 OKi(RR^R!R"R#R)RJR RR RR_R(RDR(RRRRR`R%RERRRRRRdR(RRRR RRR^RR(R)R RJRRRRH((sD/usr/lib/python2.6/site-packages/repoze/who/tests/test_middleware.pyt9test_call_200_challenger_and_identifier_and_authenticatorCs(        c CsY|i}dg}hdd6dd6}td||}dd kl}|}t|}d |fg}hd d 6dd6} t| } d | fg} t} d| fg} |id|d|d| d| }t}|||}|i |i dd|i | i t | ii}d|d s. -*)