a zePE@sdZddlZddlZddlZddlZddlZddlZddlZddlZddlm Z m Z ddl m Z ddlmZddlmZejZdZdZeedrddlZd Zejejepejd Zejejepejd Ze ed Zd ZdZGdddej Z!Gdddej"ej#Z$Gddde Z%erBddl&m'Z'Gddde'e!Z(eGddde%Z)eGddde%Z*Gddde Z+ddZ,e-d kre.dS)!zTest script for poplib module.N)TestCase skipUnless)support)hashlib_helper) socket_helperFPOP3_SSLTz keycert3.pemz pycacert.pemzSSL not supporteds1 1 2 2 3 3 4 4 5 5 . stFrom: postmaster@python.org Content-Type: text/plain MIME-Version: 1.0 Subject: Dummy line1 line2 line3 . c@seZdZgdgdZdZddZddZdd Zd d Zd d Z ddZ ddZ ddZ ddZ ddZeZddZeZddZddZddZd d!Zd"d#Zd$d%Zd&d'Zd(d)Zerd*d+Zd,d-Zd.d/Zd0S)1DummyPOP3Handlerzpython-testlib-pop-server)ZUIDLIMPLEMENTATIONFcCs8tj|||dg|_|dd|_d|_dS)N (+OK dummy pop3 server ready. F)asynchat async_chat__init__set_terminator in_bufferpush tls_active tls_startingselfconnrD/opt/bitninja-python-dojo/embedded/lib/python3.9/test/test_poplib.pyr3s   zDummyPOP3Handler.__init__cCs|j|dSN)rappendrdatarrrcollect_incoming_data;sz&DummyPOP3Handler.collect_incoming_datacCsd|j}t|d}g|_|dd}|d}|dkrR||dd}nd}t|d|r|t|d|}||n|d |dS) N ISO-8859-1 rZcmd_z$-ERR unrecognized POP3 command "%s".) joinrstrsplitlowerfindhasattrgetattrr)rlinecmdspaceargmethodrrrfound_terminator>s    z!DummyPOP3Handler.found_terminatorcCsdSrrrrrr handle_errorNszDummyPOP3Handler.handle_errorcCstj||dddS)Nrr )r r rencoderrrrrQszDummyPOP3Handler.pushcCs||dSrrrr.rrrcmd_echoTszDummyPOP3Handler.cmd_echocCs |dkr|d|ddS)Nguidoz-ERR no such userz+OK password requiredr4r5rrrcmd_userXs zDummyPOP3Handler.cmd_usercCs |dkr|d|ddS)Npythonz-ERR wrong passwordz+OK 10 messagesr4r5rrrcmd_pass]s zDummyPOP3Handler.cmd_passcCs|ddS)Nz +OK 10 100r4r5rrrcmd_statbszDummyPOP3Handler.cmd_statcCs4|r|d||fn|dtj|tdS)Nz +OK %s %sz+OK)rr r LIST_RESPr5rrrcmd_listes zDummyPOP3Handler.cmd_listcCs$|dtttj|tdS)Nz +OK %s bytes)rlen RETR_RESPr r r5rrrcmd_retrnszDummyPOP3Handler.cmd_retrcCs|ddS)Nz +OK message marked for deletion.r4r5rrrcmd_deletszDummyPOP3Handler.cmd_delecCs|ddSNz+OK done nothing.r4r5rrrcmd_noopwszDummyPOP3Handler.cmd_noopcCs|ddSrBr4r5rrrcmd_rpopzszDummyPOP3Handler.cmd_rpopcCs|ddSrBr4r5rrrcmd_apop}szDummyPOP3Handler.cmd_apopcCs|d|dS)Nz +OK closing.)rZclose_when_doner5rrrcmd_quits zDummyPOP3Handler.cmd_quitcCs t|j}|jstrg|d<|SNZSTLS)dictCAPASr SUPPORTS_SSL)rZ_capasrrr _get_capass  zDummyPOP3Handler._get_capascCsZ|d|rL|D],\}}|g}|r:|||d|q|ddS)Nz+OK Capability list followsr .)rrKitemsextendr$)rr.ZcapparamsZ_lnrrrcmd_capas  zDummyPOP3Handler.cmd_capacCs||jrdnddS)Nz+OK I know RFC6856z-ERR What is UTF8?!)r enable_UTF8r5rrrcmd_utf8s zDummyPOP3Handler.cmd_utf8cCsv|jdurh|dt}|t|j|jdddd}|| |d|_d|_ g|_ | n |ddS)NFz+OK Begin TLS negotiationT)Z server_sideZdo_handshake_on_connectZsuppress_ragged_eofsz*-ERR Command not permitted when TLS active) rrssl SSLContextZload_cert_chainCERTFILEZ wrap_socketsocketZ del_channelZ set_socketrr_do_tls_handshake)rr.contextZtls_sockrrrcmd_stlss      zDummyPOP3Handler.cmd_stlsc Csz|jWntjy}z|jdtjtjfvrDWYd}~dS|jdtjkrh|WYd}~Sd|jdvsd|jdvr|WYd}~SWYd}~n\d}~0t y}z0|jdt j kr|WYd}~SWYd}~nd}~00d|_ d|_ dS)NrZSSLV3_ALERT_BAD_CERTIFICATEr"ZSSLV3_ALERT_CERTIFICATE_UNKNOWNTF)rVZ do_handshakerSZSSLErrorargsZSSL_ERROR_WANT_READZSSL_ERROR_WANT_WRITEZ SSL_ERROR_EOF handle_closeOSErrorerrnoZ ECONNABORTEDrr)rerrrrrrWs&  *z"DummyPOP3Handler._do_tls_handshakecCsB|jr|n.ztj|Wntjy<|Yn0dSr)rrWr r handle_readrSZ SSLEOFErrorr[r1rrrr_s  zDummyPOP3Handler.handle_readN)__name__ __module__ __qualname__rIrQrrr0r2rr6r8r:r;r=Zcmd_uidlr@Zcmd_toprArCrDrErFrKrPrRrJrYrWr_rrrrr.s6  rc@sZeZdZeZejfddZddZddZ ddZ d d Z d d Z e Z d dZddZdS)DummyPOP3ServercCsttj|tj|d|_||tj| || dd|_ t |_ |jdd\|_|_d|_dS)NTF) threadingThreadrasyncore dispatcherdaemonZ create_socketrV SOCK_STREAMbindlistenactiveLock active_lock getsocknamehostporthandler_instance)raddressafrrrrs     zDummyPOP3Server.__init__cCs$t|_tj||jdSr)rfEvent_DummyPOP3Server__flagrgstartwaitr1rrrrys  zDummyPOP3Server.startc Csvd|_|jzR|jrTtjrT|jtjdddWdq1sH0YqWtjddntjdd0dS)NTg?r")timeoutcount)Z ignore_all)rnrxsetrhZ socket_maprpZloopZ close_allr1rrrruns  0zDummyPOP3Server.runcCsd|_|dSNF)rnr$r1rrrstopszDummyPOP3Server.stopcCs|||_dSr)handlerrt)rraddrrrrhandle_acceptedszDummyPOP3Server.handle_acceptedcCs |dSr)closer1rrrhandle_connectszDummyPOP3Server.handle_connectcCsdS)Nrrr1rrrwritableszDummyPOP3Server.writablecCsdSrrr1rrrr2szDummyPOP3Server.handle_errorN)r`rarbrrrVAF_INETrryr~rrrr_rr2rrrrrcs  rcc@seZdZddZddZddZddZd d Zd d Zd dZ ddZ ddZ ddZ ddZ ddZddZddZedddZedd d!Zd"d#Zd$d%Zd&d'Zd(d)Zd*d+Zd,d-Zed.d/Zed0d1Zed2d3Zd4S)5 TestPOP3ClasscCs||ddS)N+OK) assertTrue startswithrresprrrassertOKszTestPOP3Class.assertOKcCs8tttf|_|jtj|jj|jjt j d|_ dSNr{) rcHOSTPORTserverrypoplibPOP3rrrs test_supportLOOPBACK_TIMEOUTclientr1rrrsetUps  zTestPOP3Class.setUpcCs|j|jd|_dSr)rrrrr1rrrtearDowns  zTestPOP3Class.tearDowncCs||jddS)Ns(+OK dummy pop3 server ready. ) assertEqualrZ getwelcomer1rrrtest_getwelcomes zTestPOP3Class.test_getwelcomecCs|tj|jjddS)Nz echo -err) assertRaisesr error_protor _shortcmdr1rrrtest_exceptionsszTestPOP3Class.test_exceptionscCs*||jd|tj|jjddS)Nr7invalid)rruserrrrr1rrr test_userszTestPOP3Class.test_usercCs*||jd|tj|jjddS)Nr9r)rrZpass_rrrrr1rrr test_pass_szTestPOP3Class.test_pass_cCs||jddS)N) d)rrstatr1rrr test_statszTestPOP3Class.test_statcCs>||jddgddf||jdddS)Nr")s1 1s2 2s3 3s4 4s5 51sOK 1 1)rrlistrendswithr1rrr test_list s zTestPOP3Class.test_listcCs*dgddf}|jd}|||dS)N +OK 116 bytessFrom: postmaster@python.orgsContent-Type: text/plainsMIME-Version: 1.0sSubject: Dummyrsline1sline2sline3qfoo)rZretrr)rexpectedrrrr test_retr&s  zTestPOP3Class.test_retrcCs&|tj|jjdtjdddS)Nzecho +%sra)rrrrrZ_MAXLINEr1rrrtest_too_long_lines/sz!TestPOP3Class.test_too_long_linescCs||jddSNr)rrZdeler1rrr test_dele3szTestPOP3Class.test_delecCs||jdSr)rrnoopr1rrr test_noop6szTestPOP3Class.test_noopcCs||jddSr)rrZrpopr1rrr test_rpop9szTestPOP3Class.test_rpopmd5cCs||jdddS)NrZ dummypassword)rrapopr1rrrtest_apop_normal<szTestPOP3Class.test_apop_normalcCsVddd}t|jd|&|tj|jjddWdn1sH0YdS)NrsN      3  )!9