a 5êdg:¤ã@srddlmZddlmZddlmZddlZddlZddl Z ddl Z ddl Z ddl Z ddl Z ddlmZmZmZmZmZddlmZddlZddlmZddlmZmZmZz ddlZWneyÎdZYn0ej ej e¡pæejd ¡Z ej ej e¡pejd ¡Z!Gd d „d ej"ƒZ#err?rGrrrrr@]sr@c@s eZdZdS)r@N©r=r>r?rrrrr@jscszeZdZejZdZdZ‡fdd„Zdd„Z dd„Z d d „Z d d „Z d d„Z dd„Zdd„Zdd„Zdd„Zdd„Z‡ZS)ÚSimpleIMAPHandlerNr0cstƒ ¡d|j_d|j_dS©NF)ÚsuperÚsetupÚserverÚ is_selectedÚloggedr©Ú __class__rrrLus zSimpleIMAPHandler.setupcCs$trtd| ¡ƒ|j |¡dS)NzSENT: %r)rÚprintÚstripÚwfileÚwrite©rÚmessagerrrÚ_sendzszSimpleIMAPHandler._sendcCs| |d¡dS)Nó )rXrVrrrÚ _send_lineszSimpleIMAPHandler._send_linecCs| | d¡¡dS)NÚASCII)rZÚencoderVrrrÚ_send_textline‚sz SimpleIMAPHandler._send_textlinecCs| d |||f¡¡dS)Nú )r]Újoin)rÚtagÚcoderWrrrÚ _send_tagged…szSimpleIMAPHandler._send_taggedcCs| d¡d}z&|j d¡}|dkr*WdS||7}WntyHYdS0| d¡rqXqtrltd| ¡ƒ|jržz|j  |¡Wq t yšd|_Yq 0q |  d¡  ¡}|d}|d}|dd…}t |d |ƒrt|d |ƒ||ƒ}|r||_t|ƒq | |d |d ¡q dS) Nz* OK IMAP4rev1órrYzGOT: %rr[réZcmd_ÚBADz unknown)r]ZrfileÚreadr5ÚendswithrrRrSÚ continuationÚsendÚ StopIterationÚdecodeÚsplitÚhasattrÚgetattrÚnextrb)rÚlineÚpartZ splitliner`ÚcmdÚargsrhrrrÚhandleˆs:         zSimpleIMAPHandler.handlecCs4|jrd|jnd}| d|¡| |dd¡dS)Nz IMAP4rev1 Z IMAP4rev1z * CAPABILITY ÚOKúCAPABILITY completed)Ú capabilitiesr]rb)rr`rsZcapsrrrÚcmd_CAPABILITY²s ÿ þz SimpleIMAPHandler.cmd_CAPABILITYcCs$d|j_| d¡| |dd¡dS)Nz"* BYE IMAP4ref1 Server logging outruzLOGOUT completed)rMrOr]rb©rr`rsrrrÚ cmd_LOGOUT¹s zSimpleIMAPHandler.cmd_LOGOUTcCs|d|j_| |dd¡dS)NrruzLOGIN completed)rMrOrbryrrrÚ cmd_LOGIN¾s zSimpleIMAPHandler.cmd_LOGINcCs$d|j_| d¡| |dd¡dS)NTó * 2 EXISTSruú[READ-WRITE] SELECT completed.)rMrNrZrbryrrrÚ cmd_SELECTÂs zSimpleIMAPHandler.cmd_SELECTcCs2|jjr d|j_| |dd¡n| |dd¡dS)NFruz*Returned to authenticated state. (Success)rezNo mailbox selected)rMrNrbryrrrÚ cmd_UNSELECTÇszSimpleIMAPHandler.cmd_UNSELECT)r=r>r?rÚLOOPBACK_TIMEOUTÚtimeoutrhrwrLrXrZr]rbrtrxrzr{r~rÚ __classcell__rrrPrrIps *rIc@seZdZdZd:dd„Zdd„Zdd„Zd d „Zd d „Zd d„Z dd„Z dd„Z dd„Z dd„Z dd„Zdd„Zdd„Ze d¡dd„ƒZe d¡d d!„ƒZd"d#„Ze d$d%¡d&d'„ƒZd(d)„Zd*d+„Zd,d-„Zd.d/„Zd0d1„Zd2d3„Zd4d5„Zd6d7„Z d8d9„Z!dS);ÚNewIMAPTestsMixinNTcCs„Gdd„d|jƒ}| |j¡| tjdf|¡|_tj|jd|jj ddid|_ d|j _ |j   ¡|rx|j |jjŽ|_|j|jfS) Nc@seZdZdd„ZdS)z/NewIMAPTestsMixin._setup..TestTCPServercSs| |¡| ¡‚dSr.©Z close_requestÚ server_close©rZrequestZclient_addressrrrÚ handle_errorÚs z.TestTCPServer.handle_errorN©r=r>r?r‡rrrrÚ TestTCPServerÙsr‰rz-serverÚ poll_intervalç{®Gáz„?©ÚnameÚtargetÚkwargsT)Ú server_classZ addCleanupÚ_cleanuprÚHOSTrMÚ threadingÚThreadZ_testMethodNameÚ serve_foreverÚthreadÚdaemonÚstartÚ imap_classÚserver_addressÚclient)rZ imap_handlerr2r‰rrrÚ_setupÒs ú zNewIMAPTestsMixin._setupcCsJ|jdur |jjdkr |j ¡|j ¡|j ¡t |j¡d|_dS)NÚLOGOUT)r›ÚstateÚshutdownrMr…rÚ join_threadr–rrrrr‘ós     zNewIMAPTestsMixin._cleanupcCsDGdd„dtjƒ}|j|dd\}}|jtjj|jg|j¢RŽdS)Nc@seZdZdd„ZdS)zONewIMAPTestsMixin.test_EOF_without_complete_welcome_message..EOFHandlercSs|j d¡dS©Ns* OK©rTrUrrrrrtszVNewIMAPTestsMixin.test_EOF_without_complete_welcome_message..EOFHandler.handleN©r=r>r?rtrrrrÚ EOFHandlersr¤F©r2) Ú socketserverÚStreamRequestHandlerrœr4rr6Úabortr™rš)rr¤Ú_rMrrrÚ)test_EOF_without_complete_welcome_messages ÿz;NewIMAPTestsMixin.test_EOF_without_complete_welcome_messagecCsBGdd„dtƒ}|j|dd\}}|jtjj|jg|j¢RŽdS)Nc@seZdZdd„ZdS)zBNewIMAPTestsMixin.test_line_termination..BadNewlineHandlercSs| d¡| |dd¡dS©Ns* CAPABILITY IMAP4rev1 AUTH rurv©rXrbryrrrrxs zQNewIMAPTestsMixin.test_line_termination..BadNewlineHandler.cmd_CAPABILITYN©r=r>r?rxrrrrÚBadNewlineHandler sr®Fr¥)rIrœr4rr6r¨r™rš)rr®r©rMrrrÚtest_line_termination s ÿz'NewIMAPTestsMixin.test_line_terminationcCstGdd„dtƒ}| |¡\}}| |j¡| tjjd¡| d¡Wdƒn1sZ0Y| |j¡dS)Nc@seZdZdZdS)zMNewIMAPTestsMixin.test_enable_raises_error_if_not_AUTH..EnableHandlerúAUTH ENABLE UTF8=ACCEPTN©r=r>r?rwrrrrÚ EnableHandlersr²zENABLE.*NONAUTHÚfoo) rIrœÚ assertFalseÚ utf8_enabledÚassertRaisesRegexrr6r3Úenable)rr²r›r©rrrÚ$test_enable_raises_error_if_not_AUTHs  (z6NewIMAPTestsMixin.test_enable_raises_error_if_not_AUTHcCsL| t¡\}}| tjjd¡| d¡Wdƒn1s>0YdS)Núdoes not support ENABLEr³)rœrIr¶rr6r3r·)rr›r©rrrÚ)test_enable_raises_error_if_no_capabilitys  ÿz;NewIMAPTestsMixin.test_enable_raises_error_if_no_capabilitycCsh| t¡\}}| dd¡\}}| |d¡| tjjd¡| d¡Wdƒn1sZ0YdS)NÚuserÚpassrur¹ú UTF8=ACCEPT) rœrIÚloginrr¶rr6r3r·©rr›r©ÚtypÚdatarrrÚ.test_enable_UTF8_raises_error_if_not_supported$s  ÿz@NewIMAPTestsMixin.test_enable_UTF8_raises_error_if_not_supportedc CsÈGdd„dtƒ}| |¡\}}| |jd¡| ddd„¡\}}| |d¡| |jd¡| d ¡\}}| |d¡| |jd ¡d }| ddd| d ¡¡\}}| |d¡| |jd | d ¡¡dS) Nc@s(eZdZdZdd„Zdd„Zdd„ZdS) zHNewIMAPTestsMixin.test_enable_UTF8_True_append..UTF8AppendServerzENABLE UTF8=ACCEPTcSs| |dd¡dS©NruzENABLE successful©rbryrrrÚ cmd_ENABLE/szSNewIMAPTestsMixin.test_enable_UTF8_True_append..UTF8AppendServer.cmd_ENABLEcss&| d¡dV|j_| |dd¡dS©Nú+ruzFAKEAUTH successful©r]rMÚresponserbryrrrÚcmd_AUTHENTICATE1s  zYNewIMAPTestsMixin.test_enable_UTF8_True_append..UTF8AppendServer.cmd_AUTHENTICATEcss&| d¡dV|j_| |dd¡dS©NrÇruZokayrÈryrrrÚ cmd_APPEND5s  zSNewIMAPTestsMixin.test_enable_UTF8_True_append..UTF8AppendServer.cmd_APPENDN)r=r>r?rwrÅrÊrÌrrrrÚUTF8AppendServer-srÍÚasciiÚMYAUTHcSsdS©Nsfaker©ÚxrrrÚ;rcz@NewIMAPTestsMixin.test_enable_UTF8_True_append..ruó ZmFrZQ== r½úutf-8õSubject: üñí©öðéú UTF8 (%s) ) rIrœrÚ _encodingÚ authenticaterÉr·Úappendr\) rrÍr›rMrar©Ú msg_stringrÀrÁrrrÚtest_enable_UTF8_True_append,s     ÿz.NewIMAPTestsMixin.test_enable_UTF8_True_appendcCs¤Gdd„dtƒ}| |¡\}}| ddd„¡\}}| |d¡| d¡\}}| |d¡| |j¡| tj j d¡|  d d ¡Wdƒn1s–0YdS) Nc@s eZdZdZdd„Zdd„ZdS)zPNewIMAPTestsMixin.test_search_disallows_charset_in_utf8_mode..UTF8Serverr°cSs| |dd¡dSrÃrÄryrrrrÅJsz[NewIMAPTestsMixin.test_search_disallows_charset_in_utf8_mode..UTF8Server.cmd_ENABLEcss&| d¡dV|j_| |dd¡dSrÆrÈryrrrrÊLs  zaNewIMAPTestsMixin.test_search_disallows_charset_in_utf8_mode..UTF8Server.cmd_AUTHENTICATEN©r=r>r?rwrÅrÊrrrrÚ UTF8ServerHsrÞrÏcSsdSrÐrrÑrrrrÓQrczNNewIMAPTestsMixin.test_search_disallows_charset_in_utf8_mode..rur½z charset.*UTF8r³Úbar) rIrœrÙrr·Ú assertTruerµr¶rr6r3Úsearch)rrÞr›r©rÀrrrÚ*test_search_disallows_charset_in_utf8_modeGs   z.MyServercSs| |dd |d¡¡dS©NÚNOz#unrecognized authentication type {}r©rbÚformatryrrrrÊ[s ÿzGNewIMAPTestsMixin.test_bad_auth_name..MyServer.cmd_AUTHENTICATEN©r=r>r?rÊrrrrÚMyServerZsrèz'unrecognized authentication type METHODÚMETHODcSsdS©NrrrrrrrÓarcz6NewIMAPTestsMixin.test_bad_auth_name..©rIrœr¶rr6r3rÙ©rrèr›r©rrrÚtest_bad_auth_nameYs  ÿz$NewIMAPTestsMixin.test_bad_auth_namecCsbGdd„dtƒ}| |¡\}}| tjjd¡ | ddd„¡Wdƒn1sT0YdS)Nc@seZdZdd„ZdS)z?NewIMAPTestsMixin.test_invalid_authentication..MyServercss$| d¡dV|_| |dd¡dS©NrÇräz[AUTHENTICATIONFAILED] invalid©r]rÉrbryrrrrÊes zPNewIMAPTestsMixin.test_invalid_authentication..MyServer.cmd_AUTHENTICATENrçrrrrrèdsrèz \[AUTHENTICATIONFAILED\] invalidrÏcSsdSrÐrrÑrrrrÓlrcz?NewIMAPTestsMixin.test_invalid_authentication..rërìrrrÚtest_invalid_authenticationcs  ÿz-NewIMAPTestsMixin.test_invalid_authenticationcCsPGdd„dtƒ}| |¡\}}| ddd„¡\}}| |d¡| |jd¡dS)Nc@seZdZdd„ZdS)zCNewIMAPTestsMixin.test_valid_authentication_bytes..MyServercss&| d¡dV|j_| |dd¡dSrÆrÈryrrrrÊps  zTNewIMAPTestsMixin.test_valid_authentication_bytes..MyServer.cmd_AUTHENTICATENrçrrrrrèosrèrÏcSsdSrÐrrÑrrrrÓurczCNewIMAPTestsMixin.test_valid_authentication_bytes..rurÔ©rIrœrÙrrÉ©rrèr›rMrar©rrrÚtest_valid_authentication_bytesns  z1NewIMAPTestsMixin.test_valid_authentication_bytescCsPGdd„dtƒ}| |¡\}}| ddd„¡\}}| |d¡| |jd¡dS)Nc@seZdZdd„ZdS)zHNewIMAPTestsMixin.test_valid_authentication_plain_text..MyServercss&| d¡dV|j_| |dd¡dSrÆrÈryrrrrÊ{s  zYNewIMAPTestsMixin.test_valid_authentication_plain_text..MyServer.cmd_AUTHENTICATENrçrrrrrèzsrèrÏcSsdS©NZfakerrÑrrrrÓ€rczHNewIMAPTestsMixin.test_valid_authentication_plain_text..rurÔrñròrrrÚ$test_valid_authentication_plain_textys  z6NewIMAPTestsMixin.test_valid_authentication_plain_textÚmd5cCsNGdd„dtƒ}| |¡\}}| d|jv¡| dd¡\}}| |d¡dS)Nc@seZdZdZdd„ZdS)z@NewIMAPTestsMixin.test_login_cram_md5_bytes..AuthHandlerúLOGINDISABLED AUTH=CRAM-MD5css:| d¡dV}|dkr(| |dd¡n| |dd¡dS©Nz:+ PDE4OTYuNjk3MTcwOTUyQHBvc3RvZmZpY2UucmVzdG9uLm1jaS5uZXQ=s2dGltIGYxY2E2YmU0NjRiOWVmYTFjY2E2ZmZkNmNmMmQ5ZjMy ruzCRAM-MD5 successfulräz No access©r]rb©rr`rsÚrrrrrʈs  zQNewIMAPTestsMixin.test_login_cram_md5_bytes..AuthHandler.cmd_AUTHENTICATEN©r=r>r?rwrÊrrrrÚ AuthHandler†srýú AUTH=CRAM-MD5Útimótanstaaftanstaafru©rIrœràrwÚlogin_cram_md5r©rrýr›r©ÚretrrrÚtest_login_cram_md5_bytes„s  z+NewIMAPTestsMixin.test_login_cram_md5_bytescCsNGdd„dtƒ}| |¡\}}| d|jv¡| dd¡\}}| |d¡dS)Nc@seZdZdZdd„ZdS)zENewIMAPTestsMixin.test_login_cram_md5_plain_text..AuthHandlerr÷css:| d¡dV}|dkr(| |dd¡n| |dd¡dSrørùrúrrrrÊšs  zVNewIMAPTestsMixin.test_login_cram_md5_plain_text..AuthHandler.cmd_AUTHENTICATENrürrrrrý˜srýrþrÿÚtanstaaftanstaafrurrrrrÚtest_login_cram_md5_plain_text–s  z0NewIMAPTestsMixin.test_login_cram_md5_plain_textcCsbGdd„dtƒ}| |¡\}}| tjjd¡ | ddd„¡Wdƒn1sT0YdS)Nc@seZdZdd„ZdS)z?NewIMAPTestsMixin.test_aborted_authentication..MyServercss>| d¡dV|_|jdkr,| |dd¡n| |dd¡dS©NrÇs* räz[AUTHENTICATIONFAILED] abortedruzMYAUTH successfulrïryrrrrʪs  ýzPNewIMAPTestsMixin.test_aborted_authentication..MyServer.cmd_AUTHENTICATENrçrrrrrè©srèz \[AUTHENTICATIONFAILED\] abortedrÏcSsdSr.rrÑrrrrÓ·rcz?NewIMAPTestsMixin.test_aborted_authentication..rërìrrrÚtest_aborted_authentication¨s   ÿz-NewIMAPTestsMixin.test_aborted_authenticationzimaplib._MAXLINEé cCsbGdd„dtƒ}|j|dd\}}| tjjd¡|j|jŽWdƒn1sT0YdS)Nc@seZdZdd„ZdS)z:NewIMAPTestsMixin.test_linetoolong..TooLongHandlercSs|j d¡dS)Ns* OK xxxxxxxxxxx r¢rrrrrt¼szANewIMAPTestsMixin.test_linetoolong..TooLongHandler.handleNr£rrrrÚTooLongHandler»sr Fr¥zgot more than 10 bytes)rIrœr¶rr6r3r™rš)rr r©rMrrrÚtest_linetoolong¹s  ÿz"NewIMAPTestsMixin.test_linetoolongcCsB|jtdd\}}|j|jŽWdƒn1s40YdS)NFr¥)rœrIr™rš)rr©rMrrrÚtest_simple_with_statementÄsz,NewIMAPTestsMixin.test_simple_with_statementcCsª| t¡\}}|jd}|jd|dd}| |jjd¡| ¡|jd|tj d}| |jjtj ¡| ¡|  t ¡ |jd|dd}Wdƒn1sœ0YdS)NrÚ localhost©rr) rœrIršr™rÚsockrrŸrr€r4Ú ValueError)rr©rMÚaddrr›rrrÚtest_imaplib_timeout_testÉs  z+NewIMAPTestsMixin.test_imaplib_timeout_testcCshGdd„dtƒ}| |¡\}}|jd}| tj¡ |jd|dd}Wdƒn1sZ0YdS)Nc@seZdZdd„ZdS)zQNewIMAPTestsMixin.test_imaplib_timeout_functionality_test..TimeoutHandlercSst d¡t |¡dSrê)rÚsleeprIrtrrrrrt×s zXNewIMAPTestsMixin.test_imaplib_timeout_functionality_test..TimeoutHandler.handleNr£rrrrÚTimeoutHandlerÖsrrrgü©ñÒMbP?r)rIrœršr4r1rr™)rrr©rMrr›rrrÚ'test_imaplib_timeout_functionality_testÕs  z9NewIMAPTestsMixin.test_imaplib_timeout_functionality_testcCsh|jtdd\}}|j|jŽ*}| dd¡| |jd¡Wdƒn1sN0Y| |j¡dS©NFr¥r»r¼)rœrIr™ršr¾rrOÚ assertIsNone©rr©rMÚimaprrrÚtest_with_statementàs  ,z%NewIMAPTestsMixin.test_with_statementcCs||jtdd\}}|j|jŽ>}| dd¡| |jd¡| ¡| |j¡Wdƒn1sb0Y| |j¡dSr) rœrIr™ršr¾rrOÚlogoutrrrrrÚtest_with_statement_logoutçs *z,NewIMAPTestsMixin.test_with_statement_logoutcCsL| t¡\}}| dd¡\}}| |d¡| |dd¡| |jd¡dS)Nr»r¼ruróLOGIN completedÚAUTH)rœrIr¾rržr¿rrrÚ test_loginós  zNewIMAPTestsMixin.test_logincCs€| t¡\}}| dd¡\}}| |d¡| |dd¡| ¡\}}| |d||f¡| |dd||f¡| |jd¡dS) Nr»r¼rurrÚBYEsIMAP4ref1 Server logging outr)rœrIr¾rrržr¿rrrÚ test_logoutús  zNewIMAPTestsMixin.test_logoutcCsVGdd„dtƒ}| |¡\}}| dd¡| ¡\}}| |d¡| |dd¡dS)Nc@seZdZdd„ZdS)z,NewIMAPTestsMixin.test_lsub..LsubCmdcSs| d¡| |dd¡S)Nz* LSUB () "." directoryAruzLSUB completedrùryrrrÚcmd_LSUBs z5NewIMAPTestsMixin.test_lsub..LsubCmd.cmd_LSUBN)r=r>r?r#rrrrÚLsubCmdsr$r»r¼rurs() "." directoryA)rIrœr¾Zlsubr)rr$r›r©rÀrÁrrrÚ test_lsubs    zNewIMAPTestsMixin.test_lsubcCs|| t¡\}}| dd¡| ¡\}}| |d¡| |dd¡| ¡\}}| |d¡| |dd¡| |jd¡dS)Nr»r¼ruró2s*Returned to authenticated state. (Success)r)rœrIr¾ÚselectrZunselectržr¿rrrÚ test_unselects     zNewIMAPTestsMixin.test_unselect)T)"r=r>r?r›rœr‘rªr¯r¸rºrÂrÜrârírðrórõr Úrequires_hashdigestrrr r Úpatchr r rrrrr r"r%r(rrrrrƒÏs< !                rƒc@seZdZejZejZdS)Ú NewIMAPTestsN) r=r>r?rr6r™r¦Ú TCPServerrrrrrr+sr+zSSL not availablec@s0eZdZeZeZdd„Zdd„Ze dd„ƒZ dS)ÚNewIMAPSSLTestscCsŽt tj¡}| |jtj¡| |jd¡| t¡|  tj d¡8|  t ¡\}}|j |jd|iŽ}| ¡Wdƒn1s€0YdS)NTú=IP address mismatch, certificate is not valid for '127.0.0.1'Ú ssl_context)rBrCÚPROTOCOL_TLS_CLIENTrÚ verify_modeZ CERT_REQUIREDÚcheck_hostnameÚload_verify_locationsÚCAFILEr¶ÚCertificateErrorrœrIr™ršrŸ©rr/r©rMr›rrrÚtest_ssl_raises&s  ÿ ÿzNewIMAPSSLTests.test_ssl_raisescCsFt tj¡}| t¡| t¡\}}|jd|jd|d}|  ¡dS)Nrr©r/) rBrCr0r3r4rœrIr™ršrŸr6rrrÚtest_ssl_verified4s  ÿz!NewIMAPSSLTests.test_ssl_verifiedc Cs¢t dtf¡€tj |jd¡Ptj |jd¡ |jddtdWdƒn1sX0YWdƒn1sv0YWdƒn1s”0YdS)Nr0ÚopenZ_connectré)Úcertfile)rZcheck_warningsÚDeprecationWarningr r*Úobjectr™rErrrrÚtest_certfile_arg_warn?sz&NewIMAPSSLTests.test_certfile_arg_warnN) r=r>r?Ú IMAP4_SSLr™r@rr7r9r r?rrrrr-!s  r-c@s.eZdZejZejZdd„Z dd„Z e dd„ƒZ e dd„ƒZ ed d „ƒZed d „ƒZed d„ƒZedd„ƒZGdd„deƒZedd„ƒZedd„ƒZedd„ƒZedd„ƒZedd„ƒZedd„ƒZedd „ƒZed!d"„ƒZee d#¡d$d%„ƒƒZed&d'„ƒZ d(d)„Z!ed*d+„ƒZ"ed,d-„ƒZ#ed.d/„ƒZ$d0S)1ÚThreadedNetworkedTestscCs¨Gdd„d|jƒ}trtdƒ|||ƒ}| |j|j ¡¡trjtdƒtd|ƒtd|jƒtd|jƒtj d|j|j d d id }d |_ |  ¡tr td ƒ||fS)Nc@seZdZdd„ZdS)z4ThreadedNetworkedTests.make_server..MyServercSs| |¡| ¡‚dSr.r„r†rrrr‡Ms zAThreadedNetworkedTests.make_server..MyServer.handle_errorNrˆrrrrrèLsrèzcreating serverzserver createdzADDR =zCLASS =zHDLR =z %s servingrŠr‹rŒTzserver running) rrrRrršr1Ú getsocknameZRequestHandlerClassr“r”r•r—r˜)rrÚhdlrrèrMr,rrrÚ make_serverJs(    úz"ThreadedNetworkedTests.make_servercCs4tr tdƒ| ¡| ¡| ¡tr0tdƒdS)Nzwaiting for serverÚdone)rrRrŸr…r_)rrMr–rrrÚ reap_serverjsz"ThreadedNetworkedTests.reap_serverc cs@| tjdf|¡\}}z|VW| ||¡n| ||¡0dS)Nr)rDrr’rF)rrCrMr–rrrÚ reaped_serverssz$ThreadedNetworkedTests.reaped_serverc cs\| |¡>}|j|jŽ}z||fVW| ¡n | ¡0Wdƒn1sN0YdSr.)rGr™ršr)rrCrMr›rrrÚ reaped_pair{s    z"ThreadedNetworkedTests.reaped_paircCsB| t¡$}|j|jŽ}| ¡Wdƒn1s40YdSr.)rGrIr™ršrŸ©rrMr›rrrÚ test_connect„s  z#ThreadedNetworkedTests.test_connectcCsÀGdd„dtƒ}| |¡’\}}| ddd„¡\}}| |d¡| |jd¡| d¡| d d d ¡\}\}| d |¡| d¡| d ¡\}\}| d |¡Wdƒn1s²0YdS)Ncs4eZdZ‡fdd„Zdd„Zdd„Zdd„Z‡ZS) zEThreadedNetworkedTests.test_bracket_flags..BracketFlagHandlercsgd¢|_tƒ ¡dS)N)ZAnsweredZFlaggedZDeletedZSeenZDraft)ÚflagsrKrtrrPrrrt•s zLThreadedNetworkedTests.test_bracket_flags..BracketFlagHandler.handlecss&| d¡dV|j_| |dd¡dSrÆrÈryrrrrÊ™s  zVThreadedNetworkedTests.test_bracket_flags..BracketFlagHandler.cmd_AUTHENTICATEcSs^d |j¡}| d| d¡¡| d¡| d¡d|}| | d¡¡| |dd¡dS) Nú \z * FLAGS (%s)rÎr|s * 0 RECENTz-* OK [PERMANENTFLAGS %s \*)] Flags permitted.rur})r_rKrZr\rb)rr`rsZflag_msgÚmsgrrrr~žs   ÿzPThreadedNetworkedTests.test_bracket_flags..BracketFlagHandler.cmd_SELECTcSsf|d d¡ d¡ ¡}|j |¡dd |j¡}d|d|f}| | d¡¡| |d d ¡dS) Nrdú(ú)z (FLAGS (%s))rLz * %s FETCH %srrÎruzSTORE completed.)rSrlrKÚextendr_rZr\rb)rr`rsZ new_flagsZ flags_msgrMrrrÚ cmd_STORE¨s  zOThreadedNetworkedTests.test_bracket_flags..BracketFlagHandler.cmd_STORE)r=r>r?rtrÊr~rQr‚rrrPrÚBracketFlagHandler“s  rRrÏcSsdSrÐrrÑrrrrÓ±rcz;ThreadedNetworkedTests.test_bracket_flags..rurÔÚtestó1z+FLAGSz[test]s[test]ZPERMANENTFLAGS)rIrHrÙrrÉr'Ústorer7)rrRrMr›rarÁrÀrrrÚtest_bracket_flagsŠs     z)ThreadedNetworkedTests.test_bracket_flagscCs\Gdd„dtjƒ}| |¡,}|jtjj|jg|j¢RŽWdƒn1sN0YdS)Nc@seZdZdd„ZdS)z9ThreadedNetworkedTests.test_issue5949..EOFHandlercSs|j d¡dSr¡r¢rrrrrt¿sz@ThreadedNetworkedTests.test_issue5949..EOFHandler.handleNr£rrrrr¤¾sr¤) r¦r§rGr4rr6r¨r™rš)rr¤rMrrrÚtest_issue5949»s  ÿÿz%ThreadedNetworkedTests.test_issue5949cCsZGdd„dtƒ}| |¡,}|jtjj|jg|j¢RŽWdƒn1sL0YdS)Nc@seZdZdd„ZdS)zGThreadedNetworkedTests.test_line_termination..BadNewlineHandlercSs| d¡| |dd¡dSr«r¬ryrrrrxÌs zVThreadedNetworkedTests.test_line_termination..BadNewlineHandler.cmd_CAPABILITYNr­rrrrr®Êsr®)rIrGr4rr6r¨r™rš)rr®rMrrrr¯Çs  ÿÿz,ThreadedNetworkedTests.test_line_terminationc@s eZdZdZdd„Zdd„ZdS)z!ThreadedNetworkedTests.UTF8Serverr°cCs| |dd¡dSrÃrÄryrrrrÅ×sz,ThreadedNetworkedTests.UTF8Server.cmd_ENABLEccs&| d¡dV|j_| |dd¡dSrÆrÈryrrrrÊÚs  z2ThreadedNetworkedTests.UTF8Server.cmd_AUTHENTICATENrÝrrrrrÞÔsrÞcCs`| |j¡@\}}| |j¡| tjj|jd¡| |j¡Wdƒn1sR0YdS)Nr³) rHrÞr´rµr4rr6r3r·rIrrrr¸ßs z;ThreadedNetworkedTests.test_enable_raises_error_if_not_AUTHcCsXGdd„d|jƒ}| |¡(\}}| tjj|jd¡Wdƒn1sJ0YdS)Nc@seZdZdZdS)zXThreadedNetworkedTests.test_enable_raises_error_if_no_capability..NoEnableServerrNr±rrrrÚNoEnableServerêsrXr³)rÞrHr4rr6r3r·)rrXrMr›rrrrºèsz@ThreadedNetworkedTests.test_enable_raises_error_if_no_capabilityc Cs–Gdd„dtƒ}| tjj¡d| |¡:\}}| dd¡\}}| |d¡| d¡Wdƒn1sj0YWdƒn1sˆ0YdS)Nc@s eZdZdS)z\ThreadedNetworkedTests.test_enable_UTF8_raises_error_if_not_supported..NonUTF8ServerNrHrrrrÚ NonUTF8ServerñsrYr»r¼rur½) rIr4rr6r3rHr¾rr·)rrYrMr›rÀrÁrrrrÂïs  zEThreadedNetworkedTests.test_enable_UTF8_raises_error_if_not_supportedc CsêGdd„d|jƒ}| |¡º\}}| |jd¡| ddd„¡\}}| |d¡| |jd¡| d ¡\}}| |d¡| |jd ¡d }| ddd| d ¡¡\}}| |d¡| |jd | d ¡¡Wdƒn1sÜ0YdS) Nc@seZdZdd„ZdS)zMThreadedNetworkedTests.test_enable_UTF8_True_append..UTF8AppendServercss&| d¡dV|j_| |dd¡dSrËrÈryrrrrÌþs  zXThreadedNetworkedTests.test_enable_UTF8_True_append..UTF8AppendServer.cmd_APPENDN)r=r>r?rÌrrrrrÍýsrÍrÎrÏcSsdSrÐrrÑrrrrÓrczEThreadedNetworkedTests.test_enable_UTF8_True_append..rurÔr½rÕrÖr×) rÞrHrrØrÙrÉr·rÚr\) rrÍrMr›rar©rÛrÀrÁrrrrÜús( ÿ ÿ  þz3ThreadedNetworkedTests.test_enable_UTF8_True_appendcCs| |j¡p\}}| ddd„¡\}}| |d¡| d¡\}}| |d¡| |j¡| tj j |j dd¡Wdƒn1s‚0YdS)NrÏcSsdSrÐrrÑrrrrÓrczSThreadedNetworkedTests.test_search_disallows_charset_in_utf8_mode..rur½r³rß) rHrÞrÙrr·ràrµr4rr6r3rá)rrMr›rÀr©rrrrâs   zAThreadedNetworkedTests.test_search_disallows_charset_in_utf8_modec Cs€Gdd„dtƒ}| |¡R\}}| tjj¡ | ddd„¡Wdƒn1sT0YWdƒn1sr0YdS)Nc@seZdZdd„ZdS)z;ThreadedNetworkedTests.test_bad_auth_name..MyServercSs| |dd |d¡¡dSrãråryrrrrÊ's ÿzLThreadedNetworkedTests.test_bad_auth_name..MyServer.cmd_AUTHENTICATENrçrrrrrè%srèrécSsdSrêrrrrrrÓ-rcz;ThreadedNetworkedTests.test_bad_auth_name..©rIrHr4rr6r3rÙ)rrèrMr›rrrrí"sz)ThreadedNetworkedTests.test_bad_auth_namec Cs„Gdd„dtƒ}| |¡V\}}| tjj¡$| ddd„¡\}}Wdƒn1sX0YWdƒn1sv0YdS)Nc@seZdZdd„ZdS)zDThreadedNetworkedTests.test_invalid_authentication..MyServercss$| d¡dV|_| |dd¡dSrîrïryrrrrÊ4s zUThreadedNetworkedTests.test_invalid_authentication..MyServer.cmd_AUTHENTICATENrçrrrrrè2srèrÏcSsdSrÐrrÑrrrrÓ;rczDThreadedNetworkedTests.test_invalid_authentication..rZ©rrèrMr›rarÁrrrrð/sz2ThreadedNetworkedTests.test_invalid_authenticationcCsÌGdd„dtƒ}| |¡B\}}| ddd„¡\}}| |d¡| |jd¡Wdƒn1sb0Y| |¡B\}}| ddd„¡\}}| |d¡| |jd¡Wdƒn1s¾0YdS) Nc@seZdZdd„ZdS)zBThreadedNetworkedTests.test_valid_authentication..MyServercss&| d¡dV|j_| |dd¡dSrÆrÈryrrrrÊBs  zSThreadedNetworkedTests.test_valid_authentication..MyServer.cmd_AUTHENTICATENrçrrrrrè@srèrÏcSsdSrÐrrÑrrrrÓHrczBThreadedNetworkedTests.test_valid_authentication..rurÔcSsdSrôrrÑrrrrÓNrc)rIrHrÙrrÉr[rrrÚtest_valid_authentication=s ÿ" ÿz0ThreadedNetworkedTests.test_valid_authenticationröcCsÈGdd„dtƒ}| |¡@\}}| d|jv¡| dd¡\}}| |d¡Wdƒn1s`0Y| |¡@\}}| d|jv¡| dd¡\}}| |d¡Wdƒn1sº0YdS)Nc@seZdZdZdd„ZdS)z?ThreadedNetworkedTests.test_login_cram_md5..AuthHandlerr÷css:| d¡dV}|dkr(| |dd¡n| |dd¡dSrørùrúrrrrÊ[s  zPThreadedNetworkedTests.test_login_cram_md5..AuthHandler.cmd_AUTHENTICATENrürrrrrýWsrýrþrÿrrur)rIrHràrwrr)rrýrMr›rrÁrrrÚtest_login_cram_md5Ss*z*ThreadedNetworkedTests.test_login_cram_md5c Cs„Gdd„dtƒ}| |¡V\}}| tjj¡$| ddd„¡\}}Wdƒn1sX0YWdƒn1sv0YdS)Nc@seZdZdd„ZdS)zDThreadedNetworkedTests.test_aborted_authentication..MyServercss>| d¡dV|_|jdkr,| |dd¡n| |dd¡dSrrïryrrrrÊus   zUThreadedNetworkedTests.test_aborted_authentication..MyServer.cmd_AUTHENTICATENrçrrrrrèssrèrÏcSsdSr.rrÑrrrrÓ€rczDThreadedNetworkedTests.test_aborted_authentication..rZr[rrrr ps z2ThreadedNetworkedTests.test_aborted_authenticationcCsZGdd„dtƒ}| |¡,}|jtjj|jg|j¢RŽWdƒn1sL0YdS)Nc@seZdZdd„ZdS)z?ThreadedNetworkedTests.test_linetoolong..TooLongHandlercSs|j dtjdd¡dS)Ns* OK óxrY)rTrUrZ_MAXLINErrrrrt…szFThreadedNetworkedTests.test_linetoolong..TooLongHandler.handleNr£rrrrr „sr )rIrGr4rr6r3r™rš)rr rMrrrr ƒs  ÿÿz'ThreadedNetworkedTests.test_linetoolongc CsZ| t¡<}|j|jŽWdƒn1s.0YWdƒn1sL0YdSr.)rGrIr™rš)rrMrrrr s z1ThreadedNetworkedTests.test_simple_with_statementc Cs€| t¡b}|j|jŽ*}| dd¡| |jd¡Wdƒn1sH0Y| |j¡Wdƒn1sr0YdS©Nr»r¼)rGrIr™ršr¾rrOr©rrMrrrrr”s   ,z*ThreadedNetworkedTests.test_with_statementc Cs”| t¡v}|j|jŽ>}| dd¡| |jd¡| ¡| |j¡Wdƒn1s\0Y| |j¡Wdƒn1s†0YdSr_) rGrIr™ršr¾rrOrrr`rrrrœs  *z1ThreadedNetworkedTests.test_with_statement_logoutN)%r=r>r?r¦r,rrr6r™rDrFrrGrHrrJrVrWr¯rIrÞr¸rºrÂrÜrârírðr\r r)r]r r r rrrrrrrAFsZ      0                rAc@s eZdZeZeZedd„ƒZdS)ÚThreadedNetworkedTestsSSLc CsÔt tj¡}| t¡| tjd¡T| t¡*}|j |j d|iŽ}|  ¡Wdƒn1s`0YWdƒn1s~0Y| t¡.}|j d|j d|d}|  ¡Wdƒn1sÆ0YdS)Nr.r/rrr8) rBrCr0r3r4r¶r5rGrIr™ršrŸ)rr/rMr›rrrr9­s   þ  ÿD ÿz+ThreadedNetworkedTestsSSL.test_ssl_verifiedN) r=r>r?r@rr@r™rr9rrrrra¨sraZnetworkznetwork resource disabledz'cyrus.andrew.cmu.edu blocks connectionsc@sBeZdZdZdZdZdZejZ dd„Z dd„Z d d „Z d d „Z d S)ÚRemoteIMAPTestzcyrus.andrew.cmu.edur;Z anonymousr¼cCsBt |j¡"| |j|j¡|_Wdƒn1s40YdSr.)rÚtransient_internetÚhostr™ÚportrMrrrrÚsetUpËszRemoteIMAPTest.setUpcCsD|jdur@t |j¡|j ¡Wdƒn1s60YdSr.)rMrrcrdrrrrrÚtearDownÏs zRemoteIMAPTest.tearDowncCsŒt |j¡l|jjD]}| |t¡q| d|jj¡| d|jj¡|j |j |j ¡}|  |dd¡Wdƒn1s~0YdS)NÚ LOGINDISABLEDzAUTH=ANONYMOUSrru) rrcrdrMrwÚassertIsInstanceÚstrr7r¾ÚusernameÚpasswordr)rÚcapÚrsrrrÚtest_logincapaÔs zRemoteIMAPTest.test_logincapacCsRt |j¡2|j ¡}d|_| |dd|¡Wdƒn1sD0YdS©Nrr!)rrcrdrMrr©rrnrrrr"Ýs zRemoteIMAPTest.test_logoutN)r=r>r?rdrerkrlrr6r™rfrgror"rrrrrbÁs rbcs$eZdZ‡fdd„Zdd„Z‡ZS)ÚRemoteIMAP_STARTTLSTestcsTtƒ ¡t |j¡*|j ¡}| |dd¡Wdƒn1sF0YdS)Nrru)rKrfrrcrdrMZstarttlsrrqrPrrrfês  zRemoteIMAP_STARTTLSTest.setUpcCs.|jjD]}| |t¡q| d|jj¡dS)Nrh)rMrwrirjÚ assertNotIn)rrmrrrroðs z&RemoteIMAP_STARTTLSTest.test_logincapa)r=r>r?rfror‚rrrPrrräs rrc@sTeZdZdZeZdd„Zdd„Zdd„Zdd „Z d d „Z d d „Z dd„Z dd„Z dS)ÚRemoteIMAP_SSLTestiácCsdSr.rrrrrrfüszRemoteIMAP_SSLTest.setUpcCsdSr.rrrrrrgÿszRemoteIMAP_SSLTest.tearDowncCs(t tj¡}d|_tj|_| t¡|SrJ)rBrCr0r2Z CERT_NONEr1rDrE)rr/rrrÚcreate_ssl_contexts   z%RemoteIMAP_SSLTest.create_ssl_contextcCspz`|jD]}| |t¡q| d|j¡| d|j¡| |j|j¡}| |dd¡W|  ¡n |  ¡0dS)Nrhz AUTH=PLAINrru) rwrirjrsr7r¾rkrlrr)rrMrmrnrrrÚcheck_logincapa s z"RemoteIMAP_SSLTest.check_logincapacCsJt |j¡*| |j|j¡}| |¡Wdƒn1s<0YdSr.)rrcrdr™rerv)rÚ_serverrrrrosz!RemoteIMAP_SSLTest.test_logincapacCsZt |j¡:| |j|j¡}| ¡}| |dd|¡Wdƒn1sL0YdSrp)rrcrdr™rerr)rrwrnrrrr"szRemoteIMAP_SSLTest.test_logoutc CsPt |j¡0|jt|j|j|jt| ¡dWdƒn1sB0YdS)N)r<r/© rrcrdr4rr™rerErurrrrÚ#test_ssl_context_certfile_exclusives þz6RemoteIMAP_SSLTest.test_ssl_context_certfile_exclusivec CsPt |j¡0|jt|j|j|jt| ¡dWdƒn1sB0YdS)N)Zkeyfiler/rxrrrrÚ"test_ssl_context_keyfile_exclusive%s þz5RemoteIMAP_SSLTest.test_ssl_context_keyfile_exclusiveN)r=r>r?rer@r™rfrgrurvror"ryrzrrrrrtös rtÚ__main__)6rSrZ test.supportrÚ contextlibrrZos.pathÚosr¦rrr“r1rrrrr r Zunittestr r r rrBÚ ImportErrorÚpathr_ÚdirnameÚ__file__ÚcurdirrEr4ZTestCaserr,r@r@r§rIrƒr+Z skipUnlessr-rAraZis_resource_enabledÚskiprbrrrtr=ÚmainrrrrÚsl        @ _O $d  ÿ  ÿ 4