a ze:@srddlmZddlmZddlmZddlZddlZddl Z ddl Z ddl Z ddl Z ddl Z ddlmZmZmZmZmZddlmZddlZddlmZddlmZmZmZz ddlZWneydZYn0ejejepejd Z ejejepejd Z!Gd d d ej"Z#err?rGrrrrr@]sr@c@s eZdZdS)r@Nr=r>r?rrrrr@jscszeZdZejZdZdZfddZddZ ddZ d d Z d d Z d dZ ddZddZddZddZddZZS)SimpleIMAPHandlerNr0cstd|j_d|j_dSNF)supersetupserver is_selectedloggedr __class__rrrLus zSimpleIMAPHandler.setupcCs$trtd||j|dS)NzSENT: %r)rprintstripwfilewritermessagerrr_sendzszSimpleIMAPHandler._sendcCs||ddS)N )rXrVrrr _send_lineszSimpleIMAPHandler._send_linecCs||ddS)NASCII)rZencoderVrrr_send_textlinesz SimpleIMAPHandler._send_textlinecCs|d|||fdS)N )r]join)rtagcoderWrrr _send_taggedszSimpleIMAPHandler._send_taggedcCs|dd}z&|jd}|dkr*WdS||7}WntyHYdS0|drqXqtrltd||jrz|j |Wq t yd|_Yq 0q | d }|d}|d}|dd}t |d |rt|d |||}|r||_t|q ||d |d q dS) Nz* OK IMAP4rev1rrYzGOT: %rr[rZcmd_BADz unknown)r]Zrfilereadr5endswithrrRrS continuationsend StopIterationdecodesplithasattrgetattrnextrb)rlinepartZ splitliner`cmdargsrhrrrhandles:         zSimpleIMAPHandler.handlecCs4|jrd|jnd}|d|||dddS)Nz IMAP4rev1 Z IMAP4rev1z * CAPABILITY OKCAPABILITY completed) capabilitiesr]rb)rr`rsZcapsrrrcmd_CAPABILITYs  z SimpleIMAPHandler.cmd_CAPABILITYcCs$d|j_|d||dddS)Nz"* BYE IMAP4ref1 Server logging outruzLOGOUT completed)rMrOr]rbrr`rsrrr cmd_LOGOUTs zSimpleIMAPHandler.cmd_LOGOUTcCs|d|j_||dddS)NrruzLOGIN completed)rMrOrbryrrr cmd_LOGINs zSimpleIMAPHandler.cmd_LOGINcCs$d|j_|d||dddS)NT * 2 EXISTSru[READ-WRITE] SELECT completed.)rMrNrZrbryrrr cmd_SELECTs zSimpleIMAPHandler.cmd_SELECTcCs2|jjr d|j_||ddn||dddS)NFruz*Returned to authenticated state. (Success)rezNo mailbox selected)rMrNrbryrrr cmd_UNSELECTszSimpleIMAPHandler.cmd_UNSELECT)r=r>r?rLOOPBACK_TIMEOUTtimeoutrhrwrLrXrZr]rbrtrxrzr{r~r __classcell__rrrPrrIps *rIc@seZdZdZd:ddZddZddZd d Zd d Zd dZ ddZ ddZ ddZ ddZ ddZddZddZedddZedd d!Zd"d#Zed$d%d&d'Zd(d)Zd*d+Zd,d-Zd.d/Zd0d1Zd2d3Zd4d5Zd6d7Z d8d9Z!dS);NewIMAPTestsMixinNTcCsGddd|j}||j|tjdf||_tj|jd|jj ddid|_ d|j _ |j |rx|j |jj|_|j|jfS) a Sets up imap_handler for tests. imap_handler should inherit from either: - SimpleIMAPHandler - for testing IMAP commands, - socketserver.StreamRequestHandler - if raw access to stream is needed. Returns (client, server). c@seZdZddZdS)z/NewIMAPTestsMixin._setup..TestTCPServercSs|||dS)zP End request and raise the error if one occurs. NZ close_request server_closerZrequestZclient_addressrrr handle_errors z.TestTCPServer.handle_errorNr=r>r?rrrrr TestTCPServersrrz-server poll_interval{Gz?nametargetkwargsT) server_classZ addCleanup_cleanuprHOSTrM threadingThreadZ_testMethodName serve_foreverthreaddaemonstart imap_classserver_addressclient)rZ imap_handlerr2rrrr_setups  zNewIMAPTestsMixin._setupcCsJ|jdur |jjdkr |j|j|jt|jd|_dS)z Cleans up the test server. This method should not be called manually, it is added to the cleanup queue in the _setup method already. NLOGOUT)rstateshutdownrMrr join_threadrrrrrrs     zNewIMAPTestsMixin._cleanupcCsDGdddtj}|j|dd\}}|jtjj|jg|jRdS)Nc@seZdZddZdS)zONewIMAPTestsMixin.test_EOF_without_complete_welcome_message..EOFHandlercSs|jddSNs* OKrTrUrrrrrtszVNewIMAPTestsMixin.test_EOF_without_complete_welcome_message..EOFHandler.handleNr=r>r?rtrrrr EOFHandlersrFr2) socketserverStreamRequestHandlerrr4rr6abortrr)rr_rMrrr)test_EOF_without_complete_welcome_messages z;NewIMAPTestsMixin.test_EOF_without_complete_welcome_messagecCsBGdddt}|j|dd\}}|jtjj|jg|jRdS)Nc@seZdZddZdS)zBNewIMAPTestsMixin.test_line_termination..BadNewlineHandlercSs|d||dddSNs* CAPABILITY IMAP4rev1 AUTH rurvrXrbryrrrrxs zQNewIMAPTestsMixin.test_line_termination..BadNewlineHandler.cmd_CAPABILITYNr=r>r?rxrrrrBadNewlineHandler srFr)rIrr4rr6rrr)rrrrMrrrtest_line_termination s z'NewIMAPTestsMixin.test_line_terminationcCstGdddt}||\}}||j|tjjd|dWdn1sZ0Y||jdS)Nc@seZdZdZdS)zMNewIMAPTestsMixin.test_enable_raises_error_if_not_AUTH..EnableHandlerAUTH ENABLE UTF8=ACCEPTNr=r>r?rwrrrr EnableHandlersrzENABLE.*NONAUTHfoo) rIr assertFalse utf8_enabledassertRaisesRegexrr6r3enable)rrrrrrr$test_enable_raises_error_if_not_AUTHs  (z6NewIMAPTestsMixin.test_enable_raises_error_if_not_AUTHcCsL|t\}}|tjjd|dWdn1s>0YdS)Ndoes not support ENABLEr)rrIrrr6r3r)rrrrrr)test_enable_raises_error_if_no_capabilitys  z;NewIMAPTestsMixin.test_enable_raises_error_if_no_capabilitycCsh|t\}}|dd\}}||d|tjjd|dWdn1sZ0YdS)Nuserpassrur UTF8=ACCEPT) rrIloginrrrr6r3rrrrtypdatarrr.test_enable_UTF8_raises_error_if_not_supported$s  z@NewIMAPTestsMixin.test_enable_UTF8_raises_error_if_not_supportedc CsGdddt}||\}}||jd|ddd\}}||d||jd|d \}}||d||jd d }|ddd|d \}}||d||jd |d dS) Nc@s(eZdZdZddZddZddZdS) zHNewIMAPTestsMixin.test_enable_UTF8_True_append..UTF8AppendServerzENABLE UTF8=ACCEPTcSs||dddSNruzENABLE successfulrbryrrr cmd_ENABLE/szSNewIMAPTestsMixin.test_enable_UTF8_True_append..UTF8AppendServer.cmd_ENABLEcss&|ddV|j_||dddSN+ruzFAKEAUTH successfulr]rMresponserbryrrrcmd_AUTHENTICATE1s  zYNewIMAPTestsMixin.test_enable_UTF8_True_append..UTF8AppendServer.cmd_AUTHENTICATEcss&|ddV|j_||dddSNrruZokayrryrrr cmd_APPEND5s  zSNewIMAPTestsMixin.test_enable_UTF8_True_append..UTF8AppendServer.cmd_APPENDN)r=r>r?rwrrrrrrrUTF8AppendServer-srasciiMYAUTHcSsdSNsfakerxrrr;rcz@NewIMAPTestsMixin.test_enable_UTF8_True_append..ru ZmFrZQ== rutf-8Subject: üñí©öðé UTF8 (%s) ) rIrr _encoding authenticaterrappendr\) rrrrMrar msg_stringrrrrrtest_enable_UTF8_True_append,s     z.NewIMAPTestsMixin.test_enable_UTF8_True_appendcCsGdddt}||\}}|ddd\}}||d|d\}}||d||j|tj j d| d d Wdn1s0YdS) Nc@s eZdZdZddZddZdS)zPNewIMAPTestsMixin.test_search_disallows_charset_in_utf8_mode..UTF8ServerrcSs||dddSrrryrrrrJsz[NewIMAPTestsMixin.test_search_disallows_charset_in_utf8_mode..UTF8Server.cmd_ENABLEcss&|ddV|j_||dddSrrryrrrrLs  zaNewIMAPTestsMixin.test_search_disallows_charset_in_utf8_mode..UTF8Server.cmd_AUTHENTICATENr=r>r?rwrrrrrr UTF8ServerHsrrcSsdSrrrrrrrQrczNNewIMAPTestsMixin.test_search_disallows_charset_in_utf8_mode..rurz charset.*UTF8rbar) rIrrrr assertTruerrrr6r3search)rrrrrrrr*test_search_disallows_charset_in_utf8_modeGs   z.MyServercSs||dd|ddSNNOz#unrecognized authentication type {}rrbformatryrrrr[s zGNewIMAPTestsMixin.test_bad_auth_name..MyServer.cmd_AUTHENTICATENr=r>r?rrrrrMyServerZsrz'unrecognized authentication type METHODMETHODcSsdSNrrrrrrrarcz6NewIMAPTestsMixin.test_bad_auth_name..rIrrrr6r3rrrrrrrrtest_bad_auth_nameYs  z$NewIMAPTestsMixin.test_bad_auth_namecCsbGdddt}||\}}|tjjd |dddWdn1sT0YdS)Nc@seZdZddZdS)z?NewIMAPTestsMixin.test_invalid_authentication..MyServercss$|ddV|_||dddSNrrz[AUTHENTICATIONFAILED] invalidr]rrbryrrrres zPNewIMAPTestsMixin.test_invalid_authentication..MyServer.cmd_AUTHENTICATENrrrrrrdsrz \[AUTHENTICATIONFAILED\] invalidrcSsdSrrrrrrrlrcz?NewIMAPTestsMixin.test_invalid_authentication..rrrrrtest_invalid_authenticationcs  z-NewIMAPTestsMixin.test_invalid_authenticationcCsPGdddt}||\}}|ddd\}}||d||jddS)Nc@seZdZddZdS)zCNewIMAPTestsMixin.test_valid_authentication_bytes..MyServercss&|ddV|j_||dddSrrryrrrrps  zTNewIMAPTestsMixin.test_valid_authentication_bytes..MyServer.cmd_AUTHENTICATENrrrrrrosrrcSsdSrrrrrrrurczCNewIMAPTestsMixin.test_valid_authentication_bytes..rurrIrrrrrrrrMrarrrrtest_valid_authentication_bytesns  z1NewIMAPTestsMixin.test_valid_authentication_bytescCsPGdddt}||\}}|ddd\}}||d||jddS)Nc@seZdZddZdS)zHNewIMAPTestsMixin.test_valid_authentication_plain_text..MyServercss&|ddV|j_||dddSrrryrrrr{s  zYNewIMAPTestsMixin.test_valid_authentication_plain_text..MyServer.cmd_AUTHENTICATENrrrrrrzsrrcSsdSNZfakerrrrrrrczHNewIMAPTestsMixin.test_valid_authentication_plain_text..rurrrrrr$test_valid_authentication_plain_textys  z6NewIMAPTestsMixin.test_valid_authentication_plain_textmd5cCsNGdddt}||\}}|d|jv|dd\}}||ddS)Nc@seZdZdZddZdS)z@NewIMAPTestsMixin.test_login_cram_md5_bytes..AuthHandlerLOGINDISABLED AUTH=CRAM-MD5css:|ddV}|dkr(||ddn||dddSNz:+ PDE4OTYuNjk3MTcwOTUyQHBvc3RvZmZpY2UucmVzdG9uLm1jaS5uZXQ=s2dGltIGYxY2E2YmU0NjRiOWVmYTFjY2E2ZmZkNmNmMmQ5ZjMy ruzCRAM-MD5 successfulrz No accessr]rbrr`rsrrrrrs  zQNewIMAPTestsMixin.test_login_cram_md5_bytes..AuthHandler.cmd_AUTHENTICATENr=r>r?rwrrrrr AuthHandlersr AUTH=CRAM-MD5timtanstaaftanstaafrurIrrrwlogin_cram_md5rrrrrretrrrtest_login_cram_md5_bytess  z+NewIMAPTestsMixin.test_login_cram_md5_bytescCsNGdddt}||\}}|d|jv|dd\}}||ddS)Nc@seZdZdZddZdS)zENewIMAPTestsMixin.test_login_cram_md5_plain_text..AuthHandlerrcss:|ddV}|dkr(||ddn||dddSrrrrrrrs  zVNewIMAPTestsMixin.test_login_cram_md5_plain_text..AuthHandler.cmd_AUTHENTICATENrrrrrrsrrrtanstaaftanstaafrurrrrrtest_login_cram_md5_plain_texts  z0NewIMAPTestsMixin.test_login_cram_md5_plain_textcCsbGdddt}||\}}|tjjd |dddWdn1sT0YdS)Nc@seZdZddZdS)z?NewIMAPTestsMixin.test_aborted_authentication..MyServercss>|ddV|_|jdkr,||ddn||dddSNrs* rz[AUTHENTICATIONFAILED] abortedruzMYAUTH successfulrryrrrrs  zPNewIMAPTestsMixin.test_aborted_authentication..MyServer.cmd_AUTHENTICATENrrrrrrsrz \[AUTHENTICATIONFAILED\] abortedrcSsdSr.rrrrrrrcz?NewIMAPTestsMixin.test_aborted_authentication..rrrrrtest_aborted_authentications   z-NewIMAPTestsMixin.test_aborted_authenticationzimaplib._MAXLINE cCsbGdddt}|j|dd\}}|tjjd|j|jWdn1sT0YdS)Nc@seZdZddZdS)z:NewIMAPTestsMixin.test_linetoolong..TooLongHandlercSs|jddS)Ns* OK xxxxxxxxxxx rrrrrrtszANewIMAPTestsMixin.test_linetoolong..TooLongHandler.handleNrrrrrTooLongHandlersr Frzgot more than 10 bytes)rIrrrr6r3rr)rr rrMrrrtest_linetoolongs  z"NewIMAPTestsMixin.test_linetoolongcCsB|jtdd\}}|j|jWdn1s40YdS)NFr)rrIrr)rrrMrrrtest_simple_with_statementsz,NewIMAPTestsMixin.test_simple_with_statementcCs|t\}}|jd}|jd|dd}||jjd||jd|tj d}||jjtj || t  |jd|dd}Wdn1s0YdS)Nr localhostrr) rrIrrrsockrrrrr4 ValueError)rrrMaddrrrrrtest_imaplib_timeout_tests  z+NewIMAPTestsMixin.test_imaplib_timeout_testcCshGdddt}||\}}|jd}|tj |jd|dd}Wdn1sZ0YdS)Nc@seZdZddZdS)zQNewIMAPTestsMixin.test_imaplib_timeout_functionality_test..TimeoutHandlercSstdt|dSr)rsleeprIrtrrrrrts zXNewIMAPTestsMixin.test_imaplib_timeout_functionality_test..TimeoutHandler.handleNrrrrrTimeoutHandlersrrrgMbP?r)rIrrr4r1rr)rrrrMrrrrr'test_imaplib_timeout_functionality_tests  z9NewIMAPTestsMixin.test_imaplib_timeout_functionality_testcCsh|jtdd\}}|j|j*}|dd||jdWdn1sN0Y||jdSNFrrr)rrIrrrrrO assertIsNonerrrMimaprrrtest_with_statements  ,z%NewIMAPTestsMixin.test_with_statementcCs||jtdd\}}|j|j>}|dd||jd|||jWdn1sb0Y||jdSr) rrIrrrrrOlogoutrrrrrtest_with_statement_logouts *z,NewIMAPTestsMixin.test_with_statement_logoutcCsL|t\}}|dd\}}||d||dd||jddS)NrrrurLOGIN completedAUTH)rrIrrrrrrr test_logins  zNewIMAPTestsMixin.test_logincCs|t\}}|dd\}}||d||dd|\}}||d||f||dd||f||jddS) NrrrurrBYEsIMAP4ref1 Server logging outr)rrIrrrrrrrr test_logouts  zNewIMAPTestsMixin.test_logoutcCsVGdddt}||\}}|dd|\}}||d||dddS)Nc@seZdZddZdS)z,NewIMAPTestsMixin.test_lsub..LsubCmdcSs|d||ddS)Nz* LSUB () "." directoryAruzLSUB completedrryrrrcmd_LSUBs z5NewIMAPTestsMixin.test_lsub..LsubCmd.cmd_LSUBN)r=r>r?r#rrrrLsubCmdsr$rrrurs() "." directoryA)rIrrZlsubr)rr$rrrrrrr test_lsubs    zNewIMAPTestsMixin.test_lsubcCs||t\}}|dd|\}}||d||dd|\}}||d||dd||jddS)Nrrrur2s*Returned to authenticated state. (Success)r)rrIrselectrZunselectrrrrr test_unselects     zNewIMAPTestsMixin.test_unselect)T)"r=r>r?rrrrrrrrrrrrrrr requires_hashdigestrrr r patchr r rrrrr r"r%r(rrrrrs< !                rc@seZdZejZejZdS) NewIMAPTestsN) r=r>r?rr6rr TCPServerrrrrrr+sr+zSSL not availablec@s0eZdZeZeZddZddZe ddZ dS)NewIMAPSSLTestscCsttj}||jtj||jd|t| tj d8| t \}}|j |jd|i}|Wdn1s0YdS)NT=IP address mismatch, certificate is not valid for '127.0.0.1' ssl_context)rBrCPROTOCOL_TLS_CLIENTr verify_modeZ CERT_REQUIREDcheck_hostnameload_verify_locationsCAFILErCertificateErrorrrIrrrrr/rrMrrrrtest_ssl_raises&s   zNewIMAPSSLTests.test_ssl_raisescCsFttj}|t|t\}}|jd|jd|d}| dS)Nrrr/) rBrCr0r3r4rrIrrrr6rrrtest_ssl_verified4s  z!NewIMAPSSLTests.test_ssl_verifiedc Cstdtftj|jdPtj|jd |jddtdWdn1sX0YWdn1sv0YWdn1s0YdS)Nr0openZ_connectr)certfile)rZcheck_warningsDeprecationWarningr r*objectrrErrrrtest_certfile_arg_warn?sz&NewIMAPSSLTests.test_certfile_arg_warnN) r=r>r? IMAP4_SSLrr@rr7r9r r?rrrrr-!s  r-c@s.eZdZejZejZddZ ddZ e ddZ e ddZ ed d Zed d Zed dZeddZGdddeZeddZeddZeddZeddZeddZeddZedd Zed!d"Zeed#d$d%Zed&d'Z d(d)Z!ed*d+Z"ed,d-Z#ed.d/Z$d0S)1ThreadedNetworkedTestscCsGddd|j}trtd|||}||j|jtrjtdtd|td|jtd|jtj d|j|j d d id }d |_ | trtd ||fS)Nc@seZdZddZdS)z4ThreadedNetworkedTests.make_server..MyServercSs|||dSr.rrrrrrMs zAThreadedNetworkedTests.make_server..MyServer.handle_errorNrrrrrrLsrzcreating serverzserver createdzADDR =zCLASS =zHDLR =z %s servingrrrTzserver running) rrrRrrr1 getsocknameZRequestHandlerClassrrrrr)rrhdlrrrMr,rrr make_serverJs(    z"ThreadedNetworkedTests.make_servercCs4tr td|||tr0tddS)Nzwaiting for serverdone)rrRrrr_)rrMrrrr reap_serverjsz"ThreadedNetworkedTests.reap_serverc cs@|tjdf|\}}z|VW|||n|||0dS)Nr)rDrrrF)rrCrMrrrr reaped_serverssz$ThreadedNetworkedTests.reaped_serverc cs\||>}|j|j}z||fVW|n |0Wdn1sN0YdSr.)rGrrr)rrCrMrrrr reaped_pair{s    z"ThreadedNetworkedTests.reaped_paircCsB|t$}|j|j}|Wdn1s40YdSr.)rGrIrrrrrMrrrr test_connects  z#ThreadedNetworkedTests.test_connectcCsGdddt}||\}}|ddd\}}||d||jd|d|d d d \}\}|d ||d|d \}\}|d |Wdn1s0YdS)Ncs4eZdZfddZddZddZddZZS) zEThreadedNetworkedTests.test_bracket_flags..BracketFlagHandlercsgd|_tdS)N)ZAnsweredZFlaggedZDeletedZSeenZDraft)flagsrKrtrrPrrrts zLThreadedNetworkedTests.test_bracket_flags..BracketFlagHandler.handlecss&|ddV|j_||dddSrrryrrrrs  zVThreadedNetworkedTests.test_bracket_flags..BracketFlagHandler.cmd_AUTHENTICATEcSs^d|j}|d|d|d|dd|}||d||dddS) N \z * FLAGS (%s)rr|s * 0 RECENTz-* OK [PERMANENTFLAGS %s \*)] Flags permitted.rur})r_rKrZr\rb)rr`rsZflag_msgmsgrrrr~s   zPThreadedNetworkedTests.test_bracket_flags..BracketFlagHandler.cmd_SELECTcSsf|ddd}|j|dd|j}d|d|f}||d||d d dS) Nrd()z (FLAGS (%s))rLz * %s FETCH %srrruzSTORE completed.)rSrlrKextendr_rZr\rb)rr`rsZ new_flagsZ flags_msgrMrrr cmd_STOREs  zOThreadedNetworkedTests.test_bracket_flags..BracketFlagHandler.cmd_STORE)r=r>r?rtrr~rQrrrrPrBracketFlagHandlers  rRrcSsdSrrrrrrrrcz;ThreadedNetworkedTests.test_bracket_flags..rurtest1z+FLAGSz[test]s[test]ZPERMANENTFLAGS)rIrHrrrr'storer7)rrRrMrrarrrrrtest_bracket_flagss     z)ThreadedNetworkedTests.test_bracket_flagscCs\Gdddtj}||,}|jtjj|jg|jRWdn1sN0YdS)Nc@seZdZddZdS)z9ThreadedNetworkedTests.test_issue5949..EOFHandlercSs|jddSrrrrrrrtsz@ThreadedNetworkedTests.test_issue5949..EOFHandler.handleNrrrrrrsr) rrrGr4rr6rrr)rrrMrrrtest_issue5949s  z%ThreadedNetworkedTests.test_issue5949cCsZGdddt}||,}|jtjj|jg|jRWdn1sL0YdS)Nc@seZdZddZdS)zGThreadedNetworkedTests.test_line_termination..BadNewlineHandlercSs|d||dddSrrryrrrrxs zVThreadedNetworkedTests.test_line_termination..BadNewlineHandler.cmd_CAPABILITYNrrrrrrsr)rIrGr4rr6rrr)rrrMrrrrs  z,ThreadedNetworkedTests.test_line_terminationc@s eZdZdZddZddZdS)z!ThreadedNetworkedTests.UTF8ServerrcCs||dddSrrryrrrrsz,ThreadedNetworkedTests.UTF8Server.cmd_ENABLEccs&|ddV|j_||dddSrrryrrrrs  z2ThreadedNetworkedTests.UTF8Server.cmd_AUTHENTICATENrrrrrrsrcCs`||j@\}}||j|tjj|jd||jWdn1sR0YdS)Nr) rHrrrr4rr6r3rrIrrrrs z;ThreadedNetworkedTests.test_enable_raises_error_if_not_AUTHcCsXGddd|j}||(\}}|tjj|jdWdn1sJ0YdS)Nc@seZdZdZdS)zXThreadedNetworkedTests.test_enable_raises_error_if_no_capability..NoEnableServerrNrrrrrNoEnableServersrXr)rrHr4rr6r3r)rrXrMrrrrrsz@ThreadedNetworkedTests.test_enable_raises_error_if_no_capabilityc CsGdddt}|tjjd||:\}}|dd\}}||d|dWdn1sj0YWdn1s0YdS)Nc@s eZdZdS)z\ThreadedNetworkedTests.test_enable_UTF8_raises_error_if_not_supported..NonUTF8ServerNrHrrrr NonUTF8ServersrYrrrur) rIr4rr6r3rHrrr)rrYrMrrrrrrrs  zEThreadedNetworkedTests.test_enable_UTF8_raises_error_if_not_supportedc CsGddd|j}||\}}||jd|ddd\}}||d||jd|d \}}||d||jd d }|ddd|d \}}||d||jd |d Wdn1s0YdS) Nc@seZdZddZdS)zMThreadedNetworkedTests.test_enable_UTF8_True_append..UTF8AppendServercss&|ddV|j_||dddSrrryrrrrs  zXThreadedNetworkedTests.test_enable_UTF8_True_append..UTF8AppendServer.cmd_APPENDN)r=r>r?rrrrrrsrrrcSsdSrrrrrrrrczEThreadedNetworkedTests.test_enable_UTF8_True_append..rurrrrr) rrHrrrrrrr\) rrrMrrarrrrrrrrs(    z3ThreadedNetworkedTests.test_enable_UTF8_True_appendcCs||jp\}}|ddd\}}||d|d\}}||d||j|tj j |j ddWdn1s0YdS)NrcSsdSrrrrrrrrczSThreadedNetworkedTests.test_search_disallows_charset_in_utf8_mode..rurrr) rHrrrrrrr4rr6r3r)rrMrrrrrrrs   zAThreadedNetworkedTests.test_search_disallows_charset_in_utf8_modec CsGdddt}||R\}}|tjj |dddWdn1sT0YWdn1sr0YdS)Nc@seZdZddZdS)z;ThreadedNetworkedTests.test_bad_auth_name..MyServercSs||dd|ddSrrryrrrr's zLThreadedNetworkedTests.test_bad_auth_name..MyServer.cmd_AUTHENTICATENrrrrrr%srrcSsdSrrrrrrr-rcz;ThreadedNetworkedTests.test_bad_auth_name..rIrHr4rr6r3r)rrrMrrrrr"sz)ThreadedNetworkedTests.test_bad_auth_namec CsGdddt}||V\}}|tjj$|ddd\}}Wdn1sX0YWdn1sv0YdS)Nc@seZdZddZdS)zDThreadedNetworkedTests.test_invalid_authentication..MyServercss$|ddV|_||dddSrrryrrrr4s zUThreadedNetworkedTests.test_invalid_authentication..MyServer.cmd_AUTHENTICATENrrrrrr2srrcSsdSrrrrrrr;rczDThreadedNetworkedTests.test_invalid_authentication..rZrrrMrrarrrrr/sz2ThreadedNetworkedTests.test_invalid_authenticationcCsGdddt}||B\}}|ddd\}}||d||jdWdn1sb0Y||B\}}|ddd\}}||d||jdWdn1s0YdS) Nc@seZdZddZdS)zBThreadedNetworkedTests.test_valid_authentication..MyServercss&|ddV|j_||dddSrrryrrrrBs  zSThreadedNetworkedTests.test_valid_authentication..MyServer.cmd_AUTHENTICATENrrrrrr@srrcSsdSrrrrrrrHrczBThreadedNetworkedTests.test_valid_authentication..rurcSsdSrrrrrrrNrc)rIrHrrrr[rrrtest_valid_authentication=s " z0ThreadedNetworkedTests.test_valid_authenticationrcCsGdddt}||@\}}|d|jv|dd\}}||dWdn1s`0Y||@\}}|d|jv|dd\}}||dWdn1s0YdS)Nc@seZdZdZddZdS)z?ThreadedNetworkedTests.test_login_cram_md5..AuthHandlerrcss:|ddV}|dkr(||ddn||dddSrrrrrrr[s  zPThreadedNetworkedTests.test_login_cram_md5..AuthHandler.cmd_AUTHENTICATENrrrrrrWsrrrrrur)rIrHrrwrr)rrrMrrrrrrtest_login_cram_md5Ss*z*ThreadedNetworkedTests.test_login_cram_md5c CsGdddt}||V\}}|tjj$|ddd\}}Wdn1sX0YWdn1sv0YdS)Nc@seZdZddZdS)zDThreadedNetworkedTests.test_aborted_authentication..MyServercss>|ddV|_|jdkr,||ddn||dddSrrryrrrrus   zUThreadedNetworkedTests.test_aborted_authentication..MyServer.cmd_AUTHENTICATENrrrrrrssrrcSsdSr.rrrrrrrczDThreadedNetworkedTests.test_aborted_authentication..rZr[rrrr ps z2ThreadedNetworkedTests.test_aborted_authenticationcCsZGdddt}||,}|jtjj|jg|jRWdn1sL0YdS)Nc@seZdZddZdS)z?ThreadedNetworkedTests.test_linetoolong..TooLongHandlercSs|jdtjdddS)Ns* OK xrY)rTrUrZ_MAXLINErrrrrtszFThreadedNetworkedTests.test_linetoolong..TooLongHandler.handleNrrrrrr sr )rIrGr4rr6r3rr)rr rMrrrr s  z'ThreadedNetworkedTests.test_linetoolongc CsZ|t<}|j|jWdn1s.0YWdn1sL0YdSr.)rGrIrr)rrMrrrr s z1ThreadedNetworkedTests.test_simple_with_statementc Cs|tb}|j|j*}|dd||jdWdn1sH0Y||jWdn1sr0YdSNrr)rGrIrrrrrOrrrMrrrrrs   ,z*ThreadedNetworkedTests.test_with_statementc Cs|tv}|j|j>}|dd||jd|||jWdn1s\0Y||jWdn1s0YdSr_) rGrIrrrrrOrrr`rrrrs  *z1ThreadedNetworkedTests.test_with_statement_logoutN)%r=r>r?rr,rrr6rrDrFrrGrHrrJrVrWrrIrrrrrrrrr\r r)r]r r r rrrrrrrAFsZ      0                rAc@s eZdZeZeZeddZdS)ThreadedNetworkedTestsSSLc Csttj}|t|tjdT|t*}|j |j d|i}| Wdn1s`0YWdn1s~0Y|t.}|j d|j d|d}| Wdn1s0YdS)Nr.r/rrr8) rBrCr0r3r4rr5rGrIrrr)rr/rMrrrrr9s     D z+ThreadedNetworkedTestsSSL.test_ssl_verifiedN) r=r>r?r@rr@rrr9rrrrrasraZnetworkznetwork resource disabledz'cyrus.andrew.cmu.edu blocks connectionsc@sBeZdZdZdZdZdZejZ ddZ ddZ d d Z d d Z d S)RemoteIMAPTestzcyrus.andrew.cmu.edur;Z anonymousrcCsBt|j"||j|j|_Wdn1s40YdSr.)rtransient_internethostrportrMrrrrsetUpszRemoteIMAPTest.setUpcCsD|jdur@t|j|jWdn1s60YdSr.)rMrrcrdrrrrrtearDowns zRemoteIMAPTest.tearDowncCst|jl|jjD]}||tq|d|jj|d|jj|j|j |j }| |ddWdn1s~0YdS)N LOGINDISABLEDzAUTH=ANONYMOUSrru) rrcrdrMrwassertIsInstancestrr7rusernamepasswordr)rcaprsrrrtest_logincapas zRemoteIMAPTest.test_logincapacCsRt|j2|j}d|_||dd|Wdn1sD0YdSNrr!)rrcrdrMrrrrnrrrr"s zRemoteIMAPTest.test_logoutN)r=r>r?rdrerkrlrr6rrfrgror"rrrrrbs rbcs$eZdZfddZddZZS)RemoteIMAP_STARTTLSTestcsTtt|j*|j}||ddWdn1sF0YdS)Nrru)rKrfrrcrdrMZstarttlsrrqrPrrrfs  zRemoteIMAP_STARTTLSTest.setUpcCs.|jjD]}||tq|d|jjdS)Nrh)rMrwrirj assertNotIn)rrmrrrros z&RemoteIMAP_STARTTLSTest.test_logincapa)r=r>r?rfrorrrrPrrrs rrc@sTeZdZdZeZddZddZddZdd Z d d Z d d Z ddZ ddZ dS)RemoteIMAP_SSLTesticCsdSr.rrrrrrfszRemoteIMAP_SSLTest.setUpcCsdSr.rrrrrrgszRemoteIMAP_SSLTest.tearDowncCs(ttj}d|_tj|_|t|SrJ)rBrCr0r2Z CERT_NONEr1rDrE)rr/rrrcreate_ssl_contexts   z%RemoteIMAP_SSLTest.create_ssl_contextcCspz`|jD]}||tq|d|j|d|j||j|j}||ddW| n | 0dS)Nrhz AUTH=PLAINrru) rwrirjrsr7rrkrlrr)rrMrmrnrrrcheck_logincapa s z"RemoteIMAP_SSLTest.check_logincapacCsJt|j*||j|j}||Wdn1s<0YdSr.)rrcrdrrerv)r_serverrrrrosz!RemoteIMAP_SSLTest.test_logincapacCsZt|j:||j|j}|}||dd|Wdn1sL0YdSrp)rrcrdrrerr)rrwrnrrrr"szRemoteIMAP_SSLTest.test_logoutc CsPt|j0|jt|j|j|jt|dWdn1sB0YdS)N)r<r/ rrcrdr4rrrerErurrrr#test_ssl_context_certfile_exclusives z6RemoteIMAP_SSLTest.test_ssl_context_certfile_exclusivec CsPt|j0|jt|j|j|jt|dWdn1sB0YdS)N)Zkeyfiler/rxrrrr"test_ssl_context_keyfile_exclusive%s z5RemoteIMAP_SSLTest.test_ssl_context_keyfile_exclusiveN)r=r>r?rer@rrfrgrurvror"ryrzrrrrrts rt__main__)6rSrZ test.supportr contextlibrrZos.pathosrrrrr1rrrrr r Zunittestr r r rrB ImportErrorpathr_dirname__file__curdirrEr4ZTestCaserr,r@r@rrIrr+Z skipUnlessr-rAraZis_resource_enabledskiprbrrrtr=mainrrrrsl        @ _O $d     4