{G_Tc@s[ddlZddlZddlZddlZddlZddlZddlZddlZddl Z ddl Z ddl m Z yddl Z Wnek rdZ nXe jZdZe je dde jfdYZdZdZd Ze je dd e jfd YZd e jfd YZe je dde jfdYZidd6dd6dd6Zd)ZdZidd6dd6dd6ZdZiddgd6dgd 6Z d!ej!fd"YZ"d#ej#fd$YZ$e je dd%e jfd&YZ%dd'Z&e'd(krWe&ndS(*iN(t test_supportc Cs|jd|jzy|j\}}Wntjk rFnwXd}xc|r|dkrtjg|gg\}}}|r|j|} || }n|d8}qPW|jWd|j|jXdS(Niiii(tlistentsettaccepttsocketttimeouttselecttsendtclose( tevttbuftservtconntaddrtntrtwtetsent((s-/usr/local/lib/python2.7/test/test_smtplib.pytservers"  !  s!Threading required for this test.t GeneralTestscBsPeZdZdZdZdZdZdZdZdZ RS(cCstj|_tj|_tjtjtj|_ |j j dtj |j |_ |jd|j f}tj dtd||_|jj|jj|jjdS(Nis220 Hola mundo ttargettargs(Rtthreading_setupt_threadst threadingtEventR RtAF_INETt SOCK_STREAMtsockt settimeoutt bind_porttporttThreadRtthreadtstarttwaittclear(tselftservargs((s-/usr/local/lib/python2.7/test/test_smtplib.pytsetUp.s  cCs.|jj|jjtj|jdS(N(R R$R"tjoinRtthreading_cleanupR(R&((s-/usr/local/lib/python2.7/test/test_smtplib.pyttearDown:s  cCs#tjt|j}|jdS(N(tsmtplibtSMTPtHOSTR R(R&tsmtp((s-/usr/local/lib/python2.7/test/test_smtplib.pyt testBasic1?scCs*tjdt|jf}|jdS(Ns%s:%s(R,R-R.R R(R&R/((s-/usr/local/lib/python2.7/test/test_smtplib.pyt testBasic2DscCs<tjt|jdd}|j|jd|jdS(Ntlocal_hostnamettesthost(R,R-R.R t assertEqualR2R(R&R/((s-/usr/local/lib/python2.7/test/test_smtplib.pyttestLocalHostNameIscCsq|jtjtjdztjt|j}WdtjdX|j |j j d|j dS(Ni( t assertIsNoneRtgetdefaulttimeouttsetdefaulttimeoutR,R-R.R tNoneR4Rt gettimeoutR(R&R/((s-/usr/local/lib/python2.7/test/test_smtplib.pyttestTimeoutDefaultOs cCst|jtjtjdztjt|jdd}WdtjdX|j|j j |j dS(NiR( R6RR7R8R,R-R.R R9RR:R(R&R/((s-/usr/local/lib/python2.7/test/test_smtplib.pyttestTimeoutNoneYs cCsBtjt|jdd}|j|jjd|jdS(NRi(R,R-R.R R4RR:R(R&R/((s-/usr/local/lib/python2.7/test/test_smtplib.pyttestTimeoutValuecs( t__name__t __module__R(R+R0R1R5R;R<R=(((s-/usr/local/lib/python2.7/test/test_smtplib.pyR+s     cCs|jzy~ttdr+tj}n tj}d}xMtjr|dkr|dtj|jr||jPn|d8}q=WWnt j k rnXWd|jst j d|jntj |jXdS(Ntpolliig{Gz?ig?(RthasattrRtasyncoretpoll2R@t socket_maptis_setRRRttimetsleept close_all(R tserv_evtt client_evttpoll_funR((s-/usr/local/lib/python2.7/test/test_smtplib.pytdebugging_serverjs(         s&---------- MESSAGE FOLLOWS ---------- s&------------ END MESSAGE ------------ tDebuggingServerTestscBsbeZdZdZdZdZdZdZdZdZ dZ d Z RS( cCstj|_tj|_|jt_tj|_tj |_ tj |_ t j tdfd|_|jjjd|_|j|j |j f}tjdtd||_|jj|j j|j jdS(NitnowhereiiRR(RNi(tsyststdoutt old_stdouttStringIOtoutputRRRRRRIRJtsmtpdtDebuggingServerR.R Rt getsocknameR R!RLR"R#R$R%(R&t serv_args((s-/usr/local/lib/python2.7/test/test_smtplib.pyR(s    cCsG|jj|jj|jjtj|j|j t _ dS(N( RJRRIR$R"R)RR*RRQRORP(R&((s-/usr/local/lib/python2.7/test/test_smtplib.pyR+s    cCs/tjt|jdddd}|jdS(NR2t localhostRi(R,R-R.R tquit(R&R/((s-/usr/local/lib/python2.7/test/test_smtplib.pyt testBasics!cCsKtjt|jdddd}d}|j|j||jdS(NR2RXRiitOk(iR[(R,R-R.R R4tnoopRY(R&R/texpected((s-/usr/local/lib/python2.7/test/test_smtplib.pyttestNOOPs!cCsKtjt|jdddd}d}|j|j||jdS(NR2RXRiiR[(isOk(R,R-R.R R4trsetRY(R&R/R]((s-/usr/local/lib/python2.7/test/test_smtplib.pyttestRSETs!cCsKtjt|jdddd}d}|j|j||jdS(NR2RXRiis%Error: command "EHLO" not implemented(is%Error: command "EHLO" not implemented(R,R-R.R R4tehloRY(R&R/R]((s-/usr/local/lib/python2.7/test/test_smtplib.pyttestNotImplementeds!cCsgtjt|jdddd}d}|j|jd||j|jd||jdS( NR2RXRiis%Error: command "VRFY" not implementedsnobody@nowhere.com(is%Error: command "VRFY" not implemented(R,R-R.R R4tvrfytverifyRY(R&R/R]((s-/usr/local/lib/python2.7/test/test_smtplib.pyttestVRFYs !cCsUtjt|jdddd}|jd}|j|j||jdS(NR2RXRiisDuplicate HELO/EHLO(isDuplicate HELO/EHLO(R,R-R.R theloR4RY(R&R/R]((s-/usr/local/lib/python2.7/test/test_smtplib.pyttestSecondHELOs ! cCsEtjt|jdddd}|j|jd|jdS(NR2RXRis%Error: command "HELP" not implemented(R,R-R.R R4thelpRY(R&R/((s-/usr/local/lib/python2.7/test/test_smtplib.pyttestHELPs!cCsd}tjt|jdddd}|jdd|tjd|j|jj |j j |j j d t|tf}|j|j j|dS( NsA test messageR2RXRitJohntSallyg{Gz?s%s%s %s(R,R-R.R tsendmailRFRGRYRJRRIR$RStflusht MSG_BEGINtMSG_ENDR4tgetvalue(R&tmR/tmexpect((s-/usr/local/lib/python2.7/test/test_smtplib.pyttestSends!     ( R>R?R(R+RZR^R`RbReRgRiRs(((s-/usr/local/lib/python2.7/test/test_smtplib.pyRMs       tNonConnectingTestscBseZdZdZRS(cCs?tj}|jtj|j|jtj|jddS(Nstest msg(R,R-t assertRaisestSMTPServerDisconnectedRaR(R&R/((s-/usr/local/lib/python2.7/test/test_smtplib.pyttestNotConnecteds  cCs9|jtjtjdd|jtjtjddS(NRXtbogusslocalhost:bogus(RuRterrorR,R-(R&((s-/usr/local/lib/python2.7/test/test_smtplib.pyttestNonnumericPorts (R>R?RwRz(((s-/usr/local/lib/python2.7/test/test_smtplib.pyRts tBadHELOServerTestscBs#eZdZdZdZRS(cCstj|_tj|_|jt_tj|_tj |_ t j t j t j |_|jjdtj|j|_|j d|jf}tjdtd||_|jj|j j|j jdS(Nis199 no hello for you! RR(RORPRQRRRSRRRRRR RRRRRRR R!RR"R#R$R%(R&R'((s-/usr/local/lib/python2.7/test/test_smtplib.pyR( s    cCs:|jj|jjtj|j|jt_ dS(N( R R$R"R)RR*RRQRORP(R&((s-/usr/local/lib/python2.7/test/test_smtplib.pyR+s  cCs)|jtjtjt|jdddS(NRXi(RuR,tSMTPConnectErrorR-R.R (R&((s-/usr/local/lib/python2.7/test/test_smtplib.pyttestFailingHELO"s(R>R?R(R+R}(((s-/usr/local/lib/python2.7/test/test_smtplib.pyR{ s  sJohn AsMr.A@somewhere.comsSally BsMs.B@somewhere.comsRuth CsMrs.C@somewhereesle.comt somepasswords<PENCeUxFREJoU0NnbmhNWitOMjNGNndAZWx3b29kLmlubm9zb2Z0LmNvbT4=tTXIuQUBzb21ld2hlcmUuY29ttlogins,AE1yLkFAc29tZXdoZXJlLmNvbQBzb21lcGFzc3dvcmQ=tplaintDTXIUQUBZB21LD2HLCMUUY29TIDG4OWQ0MJKWZGQ4ODNMNDA4NTGXMDRLZWMYZJDMODG1scram-md5tC29TZXBHC3N3B3JKslist-1slist-2tSimSMTPChannelcBs>eZdZdZdZdZdZdZRS(cOsHdjg|D]}dj|^q |_tjj|||dS(Nts 250-{0} (R)tformatt_extrafeaturesRTt SMTPChannelt__init__(R&textra_featuresRtkwtx((s-/usr/local/lib/python2.7/test/test_smtplib.pyR>s(cCs(d}||jd}|j|dS(NsH250-testhost 250-EXPN 250-SIZE 20000000 250-STARTTLS 250-DELIVERBY s250 HELP(Rtpush(R&targtresp((s-/usr/local/lib/python2.7/test/test_smtplib.pyt smtp_EHLOCscCsH|tkr3|jdt|tj|fn|jd|dS(Ns 250 %s %ss550 No such user: %s(t sim_usersRR,t quoteaddr(R&R((s-/usr/local/lib/python2.7/test/test_smtplib.pyt smtp_VRFYLs 'cCs|j}|tkrt|}xt|D]j\}}tj|}|t|dkr~|jdt||fq/|jdt||fq/Wn |jddS(Nis 250-%s %ss 250 %s %ss550 No access for you!(tlowert sim_listst enumerateR,RtlenRR(R&Rt list_namet user_listRt user_emailt quoted_addr((s-/usr/local/lib/python2.7/test/test_smtplib.pyt smtp_EXPNSs   "cCs|jjdkr2|jdjtdS|j\}}|j}|tkrm|jddS|dkr|tdkr|jdn9|dkr|tdkr|jdn |jddS( Nscram-md5s334 {0}s504 auth type unimplementedRs235 plain auth okRs 334 Password:s550 No access for you!(tstripRRRtsim_cram_md5_challengetsplittsim_auth_credentials(R&Rtmechtauth((s-/usr/local/lib/python2.7/test/test_smtplib.pyt smtp_AUTH`s   cCsdS(N((R&((s-/usr/local/lib/python2.7/test/test_smtplib.pyt handle_errorps(R>R?RRRRRR(((s-/usr/local/lib/python2.7/test/test_smtplib.pyR<s    t SimSMTPServercBs5eZdZdZdZdZdZRS(cOs#g|_tjj|||dS(N(t_extra_featuresRTt SMTPServerR(R&RR((s-/usr/local/lib/python2.7/test/test_smtplib.pyRvs cCs1|j\}}t|j||||_dS(N(RRRt _SMTPchannel(R&R R ((s-/usr/local/lib/python2.7/test/test_smtplib.pyt handle_acceptzs cCsdS(N((R&tpeertmailfromtrcpttostdata((s-/usr/local/lib/python2.7/test/test_smtplib.pytprocess_messagescCs|jj|dS(N(Rtappend(R&tfeature((s-/usr/local/lib/python2.7/test/test_smtplib.pyt add_featurescCsdS(N((R&((s-/usr/local/lib/python2.7/test/test_smtplib.pyRs(R>R?RRRRR(((s-/usr/local/lib/python2.7/test/test_smtplib.pyRts     t SMTPSimTestscBsYeZdZdZdZdZdZdZdZdZ dZ RS( cCstj|_tj|_tj|_ttdfd|_ |j j j d|_ |j |j|jf}tj dtd||_|jj|jj|jjdS(NiRNiiRR(snowherei(RRRRRRIRJRR.R RRVR R!RLR"R#R$R%(R&RW((s-/usr/local/lib/python2.7/test/test_smtplib.pyR(s  cCs;|jj|jj|jjtj|jdS(N( RJRRIR$R"R)RR*R(R&((s-/usr/local/lib/python2.7/test/test_smtplib.pyR+s   cCs/tjt|jdddd}|jdS(NR2RXRi(R,R-R.R RY(R&R/((s-/usr/local/lib/python2.7/test/test_smtplib.pyRZs!cCstjt|jdddd}|j|jiidd6dd6dd 6dd 6dd 6}|j|j|j|x$|D]}|j|j|qW|j |jd |j dS( NR2RXRiRtexpnt20000000tsizetstarttlst deliverbyRhsunsupported-feature( R,R-R.R R4tesmtp_featuresRat assertTruethas_extnt assertFalseRY(R&R/texpected_featurestk((s-/usr/local/lib/python2.7/test/test_smtplib.pyttestEHLOs!    cCstjt|jdddd}xRtjD]D\}}dd|tj|ff}|j|j||q.Wd}dd |f}|j|j|||j dS( NR2RXRiis%s %ssnobody@nowhere.comi&sNo such user: %s( R,R-R.R RtitemsRR4RcRY(R&R/temailtnametexpected_knowntutexpected_unknown((s-/usr/local/lib/python2.7/test/test_smtplib.pyRes!c Cstjt|jdddd}xtjD]u\}}g}x2|D]*}|jdt|tj|fqGWddj |f}|j |j ||q.Wd}d }|j |j |||j dS( NR2RXRis%s %sis sPSU-Members-Listi&sNo access for you!(i&sNo access for you!( R,R-R.R RRRRRR)R4RRY( R&R/tlistnametmemberstusersRqRRR((s-/usr/local/lib/python2.7/test/test_smtplib.pyttestEXPNs! (cCs_|jjdtjt|jdddd}d }|j|jtdtd |dS( Ns AUTH PLAINR2RXRiis plain auth okii(is plain auth ok( R RR,R-R.R R4Rtsim_auth(R&R/texpected_auth_ok((s-/usr/local/lib/python2.7/test/test_smtplib.pyttestAUTH_PLAINs!cCs|jjdtjt|jdddd}y|jtdtdWn1tjk r}t t |krdqnXdS( Ns AUTH LOGINR2RXRiiis4expected encoded password not found in error message( R RR,R-R.R RRtSMTPAuthenticationErrortsim_auth_login_passwordtstr(R&R/terr((s-/usr/local/lib/python2.7/test/test_smtplib.pyttestAUTH_LOGINs!cCs|jjdtjt|jdddd}y|jtdtdWn5tjk r}t dt |krd qnXdS( Ns AUTH CRAM-MD5R2RXRiiiscram-md5s7expected encoded credentials not found in error message( R RR,R-R.R RRRRR(R&R/R((s-/usr/local/lib/python2.7/test/test_smtplib.pyttestAUTH_CRAM_MD5s!( R>R?R(R+RZRReRRRR(((s-/usr/local/lib/python2.7/test/test_smtplib.pyRs       cCstjtttttdS(N(Rt run_unittestRRMRtR{R(tverbose((s-/usr/local/lib/python2.7/test/test_smtplib.pyt test_mains t__main__(sMr.A@somewhere.comR~((RBt email.utilsRRRTR,RRRORFRtunittestttestRRt ImportErrorR9R.Rt skipUnlesstTestCaseRRLRnRoRMRtR{RRRRRRRRRRRRR>(((s-/usr/local/lib/python2.7/test/test_smtplib.pytsZ              > a    8s