a 5êdgK¡ã@sxddlZddlZddlmZmZddlmZddlZddlZddl Z ddl Z Gdd„de j ƒZ Gdd„de ƒZGdd „d e ƒZGd d „d ejƒZGd d „d ejƒZGdd„dejƒZGdd„dejƒZGdd„dejƒZGdd„dejƒZe ejd¡Gdd„deƒƒZGdd„dejƒZGdd„dejƒZGdd„dejƒZGdd „d ejƒZGd!d"„d"ejƒZed#krte  ¡dS)$éN)ÚsupportÚ mock_socket)Ú socket_helperc@seZdZdd„Zdd„ZdS)Ú DummyServercOs8tjj|g|¢Ri|¤Žg|_|jr.d|_nd|_dS)Nz return statuss return status)ÚsmtpdÚ SMTPServerÚ__init__ÚmessagesZ _decode_dataÚ return_status)ÚselfÚargsÚkwargs©rú+/usr/local/lib/python3.9/test/test_smtpd.pyr s zDummyServer.__init__cKs>|j ||||f¡||jkr"dSd|vr:d|dvr:dSdS)Nz 250 OkishZ mail_optionsZSMTPUTF8z250 SMTPUTF8 message okish)r Úappendr )r ZpeerÚmailfromZrcpttosÚdataÚkwrrrÚprocess_messages  zDummyServer.process_messageN)Ú__name__Ú __module__Ú __qualname__rrrrrrr src@s eZdZdS)ÚDummyDispatcherBrokenN)rrrrrrrrsrc@seZdZdd„ZdS)ÚBrokenDummyServercCs tƒ‚dS©N)r)r ÚnumrrrÚlisten!szBrokenDummyServer.listenN)rrrrrrrrr src@s,eZdZdd„Zdd„Zdd„Zdd„Zd S) ÚSMTPDServerTestcCstt_t_dSr©rrÚsocketÚasyncore©r rrrÚsetUp&szSMTPDServerTest.setUpcsrtjtjdfddd}| ¡\}}tj|||dd‰‡fdd„}|dƒ|dƒ|d ƒ|d ƒ| t|d ¡dS) Nr©ÚbrT©Ú decode_datacsˆj |¡ˆ ¡dSr©rÚ queue_recvÚ handle_read©Úline©ÚchannelrrÚ write_line/s zFSMTPDServerTest.test_process_message_unimplemented..write_lineó HELO exampleóMAIL From:eggs@exampleóRCPT To:spam@exampleóDATAs spam . )rrrÚHOSTÚacceptÚ SMTPChannelÚ assertRaisesÚNotImplementedError)r ÚserverÚconnÚaddrr.rr,rÚ"test_process_message_unimplemented)sÿ  z2SMTPDServerTest.test_process_message_unimplementedcCs"|jttjtjdfdddddS)Nrr#T©Úenable_SMTPUTF8r&)r6Ú ValueErrorrrrr3r!rrrÚ+test_decode_data_and_enable_SMTPUTF8_raises9súz;SMTPDServerTest.test_decode_data_and_enable_SMTPUTF8_raisescCst ¡tt_t_dSr©r Ú close_allrrr!rrrÚtearDownBszSMTPDServerTest.tearDownN)rrrr"r;r?rBrrrrr%s rc@sFeZdZdd„Zddd„Zdd„Zdd „Zd d „Zd d „Zdd„Z dS)ÚDebuggingServerTestcCstt_t_dSrrr!rrrr"IszDebuggingServerTest.setUpFcsN‡fdd„}|dƒ|r"|dƒn|dƒ|dƒ|dƒ||ƒ|dƒdS) Ncsˆj |¡ˆ ¡dSrr'r*r,rrr.Ms z1DebuggingServerTest.send_data..write_lineó EHLO examples-MAIL From:eggs@example BODY=8BITMIME SMTPUTF8r0r1r2ó.r)r r-rr=r.rr,rÚ send_dataLs  zDebuggingServerTest.send_datacCs†tjtjdfddd}| ¡\}}tj|||dd}t ¡}| |d¡Wdƒn1s^0Y|  ¡}|  |t   d¡¡dS)Nrr#Tr%sFrom: test hello zÁ ---------- MESSAGE FOLLOWS ---------- From: test X-Peer: peer-address hello ------------ END MESSAGE ------------ © rZDebuggingServerrr3r4r5rZcaptured_stdoutrFÚgetvalueÚ assertEqualÚtextwrapÚdedent©r r8r9r:r-ÚsÚstdoutrrrÚ*test_process_message_with_decode_data_trueZsÿ  *z>DebuggingServerTest.test_process_message_with_decode_data_truecCs~t tjdfd¡}| ¡\}}t |||¡}t ¡}| |d¡Wdƒn1sV0Y|  ¡}|  |t   d¡¡dS)Nrr#óFrom: test hélloÿ úå ---------- MESSAGE FOLLOWS ---------- b'From: test' b'X-Peer: peer-address' b'' b'h\xc3\xa9llo\xff' ------------ END MESSAGE ------------ rGrLrrrÚ+test_process_message_with_decode_data_falseks  *z?DebuggingServerTest.test_process_message_with_decode_data_falsecCs†tjtjdfddd}| ¡\}}tj|||dd}t ¡}| |d¡Wdƒn1s^0Y|  ¡}|  |t   d¡¡dS)Nrr#T©r=rPrQrGrLrrrÚ.test_process_message_with_enable_SMTPUTF8_true{sÿ  *zBDebuggingServerTest.test_process_message_with_enable_SMTPUTF8_truecCsŠtjtjdfddd}| ¡\}}tj|||dd}t ¡ }|j|dddWdƒn1sb0Y|  ¡}|  |t   d¡¡dS)Nrr#TrSrPa ---------- MESSAGE FOLLOWS ---------- mail options: ['BODY=8BITMIME', 'SMTPUTF8'] b'From: test' b'X-Peer: peer-address' b'' b'h\xc3\xa9llo\xff' ------------ END MESSAGE ------------ rGrLrrrÚ7test_process_SMTPUTF8_message_with_enable_SMTPUTF8_trueŒsÿ  ÿ$zKDebuggingServerTest.test_process_SMTPUTF8_message_with_enable_SMTPUTF8_truecCst ¡tt_t_dSrr@r!rrrrBŸszDebuggingServerTest.tearDownN)F) rrrr"rFrOrRrTrUrBrrrrrCGs rCc@s:eZdZdd„Zdd„Ze ejd¡dd„ƒZ dd „Z d S) ÚTestFamilyDetectioncCstt_t_dSrrr!rrrr"¥szTestFamilyDetection.setUpcCst ¡tt_t_dSrr@r!rrrrB¨szTestFamilyDetection.tearDownúIPv6 not enabledcCs.t tjdftjdf¡}| |jjtj¡dS©Nr) rrrÚHOSTv6ÚHOSTv4rIrÚfamilyÚAF_INET6©r r8rrrÚtest_socket_uses_IPv6¬sz)TestFamilyDetection.test_socket_uses_IPv6cCs.t tjdftjdf¡}| |jjtj¡dSrX) rrrrZrYrIrr[ÚAF_INETr]rrrÚtest_socket_uses_IPv4±sz)TestFamilyDetection.test_socket_uses_IPv4N) rrrr"rBÚunittestÚ skipUnlessrÚ IPV6_ENABLEDr^r`rrrrrV¤s   rVc@s8eZdZdZdd„Zdd„Zdd„Zdd „Zd d „Zd S) ÚTestRcptOptionParsingó:555 RCPT TO parameters not recognized or not implemented cCs(tt_t_tj|_t ¡|_t_dSr© rrrr Ú DEBUGSTREAMÚold_debugstreamÚioÚStringIOÚdebugr!rrrr"ºs zTestRcptOptionParsing.setUpcCs t ¡tt_t_|jt_dSr©r rArrrhrgr!rrrrB¿s zTestRcptOptionParsing.tearDowncCs|j |¡| ¡dSrr'©r r-r+rrrr.Äs z TestRcptOptionParsing.write_linecCsdttjdfdƒ}| ¡\}}t |||¡}| |d¡| |d¡| |d¡| |jj |j ¡dS)Nrr#rDó$MAIL from: size=20s"RCPT to: foo=bar© rrr3r4rr5r.rIrÚlastÚerror_response©r r8r9r:r-rrrÚtest_params_rejectedÈs    z*TestRcptOptionParsing.test_params_rejectedcCsbttjdfdƒ}| ¡\}}t |||¡}| |d¡| |d¡| |d¡| |jj d¡dS)Nrr#rDrnsRCPT to: ó250 OK © rrr3r4rr5r.rIrrprrrrrÚtest_nothing_acceptedÑs    z+TestRcptOptionParsing.test_nothing_acceptedN) rrrrqr"rBr.rsrvrrrrrd¶s  rdc@s@eZdZdZdd„Zdd„Zdd„Zdd „Zd d „Zd d „Z dS)ÚTestMailOptionParsingó<555 MAIL FROM parameters not recognized or not implemented cCs(tt_t_tj|_t ¡|_t_dSrrfr!rrrr"ßs zTestMailOptionParsing.setUpcCs t ¡tt_t_|jt_dSrrlr!rrrrBäs zTestMailOptionParsing.tearDowncCs|j |¡| ¡dSrr'rmrrrr.és z TestMailOptionParsing.write_linecCs†ttjdfddd}| ¡\}}tj|||dd}| |d¡dD]"}| ||¡| |jj |j ¡qB| |d¡| |jj d¡dS) Nrr#Tr%rD)ó-MAIL from: size=20 SMTPUTF8ó;MAIL from: size=20 SMTPUTF8 BODY=8BITMIMEs1MAIL from: size=20 BODY=UNKNOWNó2MAIL from: size=20 body=8bitmimernrtro©r r8r9r:r-r+rrrÚtest_with_decode_data_trueís    z0TestMailOptionParsing.test_with_decode_data_truecCsšttjdfdƒ}| ¡\}}t |||¡}| |d¡dD]"}| ||¡| |jj |j ¡q:| |d¡| |jj d¡| |d¡| |jj d¡dS) Nrr#rD)ryrzs:MAIL from: size=20 SMTPUTF8 BODY=UNKNOWNs3501 Error: BODY can only be one of 7BIT, 8BITMIME r{rtror|rrrÚtest_with_decode_data_falseýs&   þþÿz1TestMailOptionParsing.test_with_decode_data_falsecCs^ttjdfddd}| ¡\}}tj|||dd}| |d¡| |d¡| |jj d¡dS)Nrr#TrSrDs;MAIL from: size=20 body=8bitmime smtputf8rtrurrrrrÚtest_with_enable_smtputf8_trues  þz4TestMailOptionParsing.test_with_enable_smtputf8_trueN) rrrrqr"rBr.r}r~rrrrrrwÛsrwc@s$eZdZdd„Zdd„Zdd„Zdd„Zd d „Zd d „Zd d„Z dd„Z dd„Z dd„Z dd„Z dd„Zdd„Zdd„Zdd„Zdd „Zd!d"„Zd#d$„Zd%d&„Zd'd(„Zd)d*„Zd+d,„Zd-d.„Zd/d0„Zd1d2„Zd3d4„Zd5d6„Zd7d8„Zd9d:„Zd;d<„Z d=d>„Z!d?d@„Z"dAdB„Z#dCdD„Z$dEdF„Z%dGdH„Z&dIdJ„Z'dKdL„Z(dMdN„Z)dOdP„Z*dQdR„Z+dSdT„Z,dUdV„Z-dWdX„Z.dYdZ„Z/d[d\„Z0d]d^„Z1d_d`„Z2dadb„Z3dcdd„Z4dedf„Z5dgdh„Z6didj„Z7dkdl„Z8dmdn„Z9dodp„Z:dqdr„Z;dsdt„Zdydz„Z?d{d|„Z@d}d~„ZAdd€„ZBdd‚„ZCdƒd„„ZDd…d†„ZEd‡S)ˆÚSMTPDChannelTestcCsbtt_t_tj|_t ¡|_t_t t j dfddd|_ |j   ¡\}}tj|j ||dd|_dS©Nrr#Tr%©rrrr rgrhrirjrkrrr3r8r4r5r-©r r9r:rrrr"s  ÿ ÿzSMTPDChannelTest.setUpcCs t ¡tt_t_|jt_dSrrlr!rrrrB(s zSMTPDChannelTest.tearDowncCs|jj |¡|j ¡dSr©r-rr(r)©r r+rrrr.-szSMTPDChannelTest.write_linecCs|jtttjdfddddSr)r6rrrr3r!rrrÚtest_broken_connect1s þz$SMTPDChannelTest.test_broken_connectc Cs(|jttj|j|jj|jjddddS)NTr<)r6r>rr5r8r-r9r:r!rrrr?6s ýz r‰r!rrrÚtest_HELP_commandks  ÿz"SMTPDChannelTest.test_HELP_commandcCs | d¡| |jjjd¡dS)Ns HELP SPAMsF501 Supported commands: EHLO HELO MAIL RCPT DATA RSET NOOP QUIT VRFY r‰r!rrrÚtest_HELP_command_unknownps  ÿz*SMTPDChannelTest.test_HELP_command_unknowncCs | d¡| |jjjd¡dS)NsHELOs501 Syntax: HELO hostname r‰r!rrrÚtest_HELO_bad_syntaxvs  ÿz%SMTPDChannelTest.test_HELO_bad_syntaxcCs*| d¡| d¡| |jjjd¡dS)Nr/rr‰r!rrrÚtest_HELO_duplicate{s    ÿz$SMTPDChannelTest.test_HELO_duplicatecCs0d|_| d¡| d¡| |jjjd¡dS)NFr/s%MAIL from: SIZE=1234ó"501 Syntax: MAIL FROM:
)Z extended_smtpr.rIr-rrpr!rrrÚ8test_HELO_parameter_rejected_when_extensions_not_enableds    ÿzISMTPDChannelTest.test_HELO_parameter_rejected_when_extensions_not_enabledcCs*| d¡| d¡| |jjjd¡dS)Nr/sMAIL from: rtr‰r!rrrÚ"test_MAIL_allows_space_after_colonˆs    ÿz3SMTPDChannelTest.test_MAIL_allows_space_after_coloncCs*| d¡| d¡| |jjjd¡dS)NrDs&MAIL from: size=20rtr‰r!rrrÚ+test_extended_MAIL_allows_space_after_colonŽs    ÿzó MAIL from: SIZE=1234rtér«)r.r-r¬ÚlenrIrrp©r Úfill_lenrrrÚ*test_MAIL_command_limit_extended_with_SIZE½s  ÿþ ÿþ ÿz;SMTPDChannelTest.test_MAIL_command_limit_extended_with_SIZEcCs2| d¡| d¡| |jjjdd…d¡dS)NrDs5MAIL from: BODY=8BITMIME SMTPUTF8réó5r‰r!rrrÚ-test_MAIL_command_rejects_SMTPUTF8_by_defaultËs  ÿz>SMTPDChannelTest.test_MAIL_command_rejects_SMTPUTF8_by_defaultcCs\d|j_| d¡| d¡| d¡| d¡| d|jjd¡| |jjjd¡dS) Nér/r0r1r2óAsA .ó552 Error: Too much mail data ©r-Zdata_size_limitr.rIrrpr!rrrÚ-test_data_longer_than_default_data_size_limitÑs    ÿ ÿz>SMTPDChannelTest.test_data_longer_than_default_data_size_limitcCs*| d¡| d¡| |jjjd¡dS)NrDs!MAIL FROM: SIZE=512rtr‰r!rrrÚtest_MAIL_size_parameterÝs    ÿz)SMTPDChannelTest.test_MAIL_size_parametercCs*| d¡| d¡| |jjjd¡dS)NrDs%MAIL FROM: SIZE=invalidó9501 Syntax: MAIL FROM:
[SP ] r‰r!rrrÚ test_MAIL_invalid_size_parameterãs    ÿz1SMTPDChannelTest.test_MAIL_invalid_size_parametercCsP| d¡| d¡| |jjjd¡| d¡| d¡| |jjjd¡dS)NrDs"MAIL FROM: ham=greenrxsMAIL FROM:s RCPT TO: ham=greenrer‰r!rrrÚ!test_MAIL_RCPT_unknown_parametersés   ÿ   ÿz2SMTPDChannelTest.test_MAIL_RCPT_unknown_parameterscCs2d|j_| d¡| d¡| |jjjd¡dS)Nr·rDs"MAIL FROM: SIZE=2096s<552 Error: message size exceeds fixed maximum message size rºr!rrrÚrtr‰r!rrrÚtest_MAIL_chevronss  z#SMTPDChannelTest.test_MAIL_chevronscCs*| d¡| d¡| |jjjd¡dS)NrDs MAIL from:<>rtr‰r!rrrÚtest_MAIL_empty_chevronss  z)SMTPDChannelTest.test_MAIL_empty_chevronscCs:| d¡| d¡| |jjjd¡| |jjd¡dS)NrDs%MAIL from: <"Fred Blogs"@example.com>rtú"Fred Blogs"@example.com©r.rIr-rrprr!rrrÚtest_MAIL_quoted_localparts  z+SMTPDChannelTest.test_MAIL_quoted_localpartcCs:| d¡| d¡| |jjjd¡| |jjd¡dS)NrDs#MAIL from: "Fred Blogs"@example.comrtrÈrÉr!rrrÚ$test_MAIL_quoted_localpart_no_angles#s  z5SMTPDChannelTest.test_MAIL_quoted_localpart_no_anglescCs:| d¡| d¡| |jjjd¡| |jjd¡dS)NrDs/MAIL from: <"Fred Blogs"@example.com> SIZE=1000rtrÈrÉr!rrrÚ$test_MAIL_quoted_localpart_with_size)s  z5SMTPDChannelTest.test_MAIL_quoted_localpart_with_sizecCs:| d¡| d¡| |jjjd¡| |jjd¡dS)NrDs-MAIL from: "Fred Blogs"@example.com SIZE=1000rtrÈrÉr!rrrÚ.test_MAIL_quoted_localpart_with_size_no_angles/s  z?SMTPDChannelTest.test_MAIL_quoted_localpart_with_size_no_anglescCs4| d¡| d¡| d¡| |jjjd¡dS)Nr/sMAIL from:eggs@examplesMAIL from:spam@examples 503 Error: nested MAIL command r‰r!rrrÚtest_nested_MAIL5s     ÿz!SMTPDChannelTest.test_nested_MAILcCs | d¡| |jjjd¡dS)NsVRFY eggs@examplesD252 Cannot VRFY user, but will accept message and attempt delivery r‰r!rrrÚ test_VRFY<s  ÿzSMTPDChannelTest.test_VRFYcCs | d¡| |jjjd¡dS)NsVRFYs501 Syntax: VRFY
r‰r!rrrÚtest_VRFY_syntaxBs  ÿz!SMTPDChannelTest.test_VRFY_syntaxcCs | d¡| |jjjd¡dS)NsEXPNs502 EXPN not implemented r‰r!rrrÚtest_EXPN_not_implementedGs  ÿz*SMTPDChannelTest.test_EXPN_not_implementedcCs | d¡| |jjjd¡dS)NsMAIL from:ó503 Error: send HELO first r‰r!rrrÚtest_no_HELO_MAILLs  ÿz"SMTPDChannelTest.test_no_HELO_MAILcCs4| d¡| d¡| d¡| |jjjd¡dS)Nr/r0r2s503 Error: need RCPT command r‰r!rrrÚtest_need_RCPTQs     ÿzSMTPDChannelTest.test_need_RCPTcCs4| d¡| d¡| d¡| |jjjd¡dS)Nr/óMAIL From: eggs@exampleóRCPT to eggs@examples 501 Syntax: RCPT TO:
r‰r!rrrÚtest_RCPT_syntax_HELOXs     ÿz&SMTPDChannelTest.test_RCPT_syntax_HELOcCs4| d¡| d¡| d¡| |jjjd¡dS)NrDrÕrÖs7501 Syntax: RCPT TO:
[SP ] r‰r!rrrÚtest_RCPT_syntax_EHLO_s     ÿz&SMTPDChannelTest.test_RCPT_syntax_EHLOcCs4| d¡| d¡| d¡| |jjjd¡dS)Nr/rÕsRCPT to: rtr‰r!rrrÚtest_RCPT_lowercase_to_OKfs   z*SMTPDChannelTest.test_RCPT_lowercase_to_OKcCs | d¡| |jjjd¡dS)NrÖrÒr‰r!rrrÚtest_no_HELO_RCPTls  ÿz"SMTPDChannelTest.test_no_HELO_RCPTcCsš| d¡| d¡| |jjjd¡| d¡| |jjjd¡| d¡| |jjjd¡| d¡| |jjjd¡| |jjdd d gd fg¡dS© Nr/r0rtr1r2ó%354 End data with . s data more .©z peer-addressz peer-portú eggs@exampleú spam@examplez data more©r.rIr-rrpr8r r!rrrÚtest_data_dialogqs$     ÿ  ýÿz!SMTPDChannelTest.test_data_dialogcCs>| d¡| d¡| d¡| d¡| |jjjd¡dS)Nr/r0r1ó DATA spams501 Syntax: DATA r‰r!rrrÚtest_DATA_syntaxƒs     z!SMTPDChannelTest.test_DATA_syntaxcCs | d¡| |jjjd¡dS)NrârÒr‰r!rrrÚtest_no_HELO_DATAŠs  ÿz"SMTPDChannelTest.test_no_HELO_DATAcCsF| d¡| d¡| d¡| d¡| d¡| |jjd¡dS)Nr/r0r1r2s.. . Ú.©r.rIr-Ú received_datar!rrrÚ$test_data_transparency_section_4_5_2s      z5SMTPDChannelTest.test_data_transparency_section_4_5_2cCs^| d¡| d¡| d¡| d¡| d¡| d¡| |jjddd d gd fg¡dS) Nr/r0r1sRCPT To:ham@exampler2ódata .rÝrÞrßz ham@exampler)r.rIr8r r!rrrÚtest_multiple_RCPT—s       ýÿz#SMTPDChannelTest.test_multiple_RCPTcCsH| d¡| d¡| d¡| d¡| d¡| |jjjd¡dS)Nr/r0r1r2sreturn status .s 250 Okish r‰r!rrrÚtest_manual_status¤s      z#SMTPDChannelTest.test_manual_statuscCs‚| d¡| d¡| d¡| d¡| |jjjd¡| d¡| d¡| d¡| d ¡| |jjd d d gd fg¡dS)Nr/r0r1óRSETrtsMAIL From:foo@examplesRCPT To:eggs@exampler2rérÝz foo@examplerÞrràr!rrrÚ test_RSET­s          ýÿzSMTPDChannelTest.test_RSETcCs*| d¡| d¡| |jjjd¡dS)Nr/rìrtr‰r!rrrÚtest_HELO_RSET½s  zSMTPDChannelTest.test_HELO_RSETcCs | d¡| |jjjd¡dS)NsRSET his501 Syntax: RSET r‰r!rrrÚtest_RSET_syntaxÂs z!SMTPDChannelTest.test_RSET_syntaxcCs | d¡| |jjjd¡dS)Ns UNKNOWN_CMDs1500 Error: command "UNKNOWN_CMD" not recognized r‰r!rrrÚtest_unknown_commandÆs  ÿz%SMTPDChannelTest.test_unknown_commandcCsÌt dtf¡|jj}Wdƒn1s,0Yt dtf¡d|j_Wdƒn1sb0Yt dtf¡|jj}Wdƒn1s˜0Yt dtf¡d|j_Wdƒn1sÎ0Yt dtf¡|jj}Wdƒn1s0Yt dtf¡d|j_Wdƒn1s>0Yt dtf¡|jj}Wdƒn1sv0Yt dtf¡d|j_Wdƒn1s®0Yt dtf¡|jj}Wdƒn1sæ0Yt dtf¡d|j_Wdƒn1s0Yt dtf¡|jj }Wdƒn1sV0Yt dtf¡d|j_ Wdƒn1sŽ0Yt dtf¡|jj }Wdƒn1sÆ0Yt dtf¡d|j_ Wdƒn1sþ0Yt dtf¡|jj }Wdƒn1s60Yt dtf¡d|j_ Wdƒn1sn0Yt dtf¡|jj }Wdƒn1s¦0Yt dtf¡d|j_ Wdƒn1sÞ0Yt dtf¡|jj }Wdƒn1s0Yt dtf¡d|j_ Wdƒn1sN0Yt dtf¡|jj}Wdƒn1s†0Yt dtf¡d|j_Wdƒn1s¾0YdS)NÚÚspam)rZcheck_warningsÚDeprecationWarningr-Z_SMTPChannel__serverZ_SMTPChannel__lineZ_SMTPChannel__stateZ_SMTPChannel__greetingZ_SMTPChannel__mailfromZ_SMTPChannel__rcpttosZ_SMTPChannel__dataZ_SMTPChannel__fqdnZ_SMTPChannel__peerZ_SMTPChannel__connZ_SMTPChannel__addr)r ròrrrÚtest_attribute_deprecationsÌsX&&&&(((((((((((((((((z,SMTPDChannelTest.test_attribute_deprecationsN)Frrrr"rBr.r†r?r‡rŠr‹rŒrŽrr•r–r—r˜r™ršr›rržrŸr¡r¢r£r¦r§r¨r©r­r³r¶r»r¼r¾r¿rÀrÁrÃrÄrÅrÆrÇrÊrËrÌrÍrÎrÏrÐrÑrÓrÔr×rØrÙrÚrárãrärèrêrërírîrïrðrôrrrrr€s†     r€rWc@seZdZdd„ZdS)ÚSMTPDChannelIPv6TestcCsbtt_t_tj|_t ¡|_t_t t j dfddd|_ |j   ¡\}}tj|j ||dd|_dSr)rrrr rgrhrirjrkrrrYr8r4r5r-rƒrrrr"üs  ÿ ÿzSMTPDChannelIPv6Test.setUpN)rrrr"rrrrrõúsrõc@s4eZdZdd„Zdd„Zdd„Zdd„Zd d „Zd S) Ú!SMTPDChannelWithDataSizeLimitTestcCsdtt_t_tj|_t ¡|_t_t t j dfddd|_ |j   ¡\}}tj|j ||ddd|_dS)Nrr#Tr%é r‚rƒrrrr"s  ÿÿz'SMTPDChannelWithDataSizeLimitTest.setUpcCs t ¡tt_t_|jt_dSrrlr!rrrrBs z*SMTPDChannelWithDataSizeLimitTest.tearDowncCs|jj |¡|j ¡dSrr„r…rrrr.sz,SMTPDChannelWithDataSizeLimitTest.write_linecCsš| d¡| d¡| |jjjd¡| d¡| |jjjd¡| d¡| |jjjd¡| d¡| |jjjd¡| |jjdd d gd fg¡dSrÛràr!rrrÚtest_data_limit_dialogs$     ÿ  ýÿz8SMTPDChannelWithDataSizeLimitTest.test_data_limit_dialogcCs~| d¡| d¡| |jjjd¡| d¡| |jjjd¡| d¡| |jjjd¡| d¡| |jjjd¡dS) Nr/r0rtr1r2rÜs'This message is longer than 32 bytes .r¹r‰r!rrrÚ$test_data_limit_dialog_too_much_data.s     ÿ  ÿzFSMTPDChannelWithDataSizeLimitTest.test_data_limit_dialog_too_much_dataN)rrrr"rBr.rørùrrrrrös  röc@s4eZdZdd„Zdd„Zdd„Zdd„Zd d „Zd S) ÚSMTPDChannelWithDecodeDataFalsecCsZtt_t_tj|_t ¡|_t_t t j dfdƒ|_ |j   ¡\}}t |j ||¡|_dS)Nrr#r‚rƒrrrr"?s  z%SMTPDChannelWithDecodeDataFalse.setUpcCs t ¡tt_t_|jt_dSrrlr!rrrrBGs z(SMTPDChannelWithDecodeDataFalse.tearDowncCs|jj |¡|j ¡dSrr„r…rrrr.Lsz*SMTPDChannelWithDecodeDataFalse.write_linecCsP| d¡| d¡| d¡| d¡| d¡| d¡| |jjd¡dS)Nr/r0r1r2óplain ascii textrErær!rrrÚtest_ascii_dataPs      z/SMTPDChannelWithDecodeDataFalse.test_ascii_datacCsZ| d¡| d¡| d¡| d¡| d¡| d¡| d¡| |jjd¡dS) Nr/r0r1r2óutf8 enriched text: żźćóand some plain asciirEs/utf8 enriched text: żźć and some plain asciirær!rrrÚtest_utf8_dataYs       þz.SMTPDChannelWithDecodeDataFalse.test_utf8_dataN©rrrr"rBr.rürÿrrrrrú=s  rúc@s4eZdZdd„Zdd„Zdd„Zdd„Zd d „Zd S) ÚSMTPDChannelWithDecodeDataTruecCsbtt_t_tj|_t ¡|_t_t t j dfddd|_ |j   ¡\}}tj|j ||dd|_dSrr‚rƒrrrr"is  ÿ ÿz$SMTPDChannelWithDecodeDataTrue.setUpcCs t ¡tt_t_|jt_dSrrlr!rrrrBts z'SMTPDChannelWithDecodeDataTrue.tearDowncCs|jj |¡|j ¡dSrr„r…rrrr.ysz)SMTPDChannelWithDecodeDataTrue.write_linecCsP| d¡| d¡| d¡| d¡| d¡| d¡| |jjd¡dS)Nr/r0r1r2rûrEzplain ascii textrær!rrrrü}s      z.SMTPDChannelWithDecodeDataTrue.test_ascii_datacCsZ| d¡| d¡| d¡| d¡| d¡| d¡| d¡| |jjd¡dS) Nr/r0r1r2rýrþrEu/utf8 enriched text: żźć and some plain asciirær!rrrrÿ†s       þz-SMTPDChannelWithDecodeDataTrue.test_utf8_dataNrrrrrrgs   rc@sLeZdZdd„Zdd„Zdd„Zdd„Zd d „Zd d „Zd d„Z dd„Z dS)Ú&SMTPDChannelTestWithEnableSMTPUTF8TruecCsbtt_t_tj|_t ¡|_t_t t j dfddd|_ |j   ¡\}}tj|j ||dd|_dS)Nrr#TrSr‚rƒrrrr"”s  ÿ ÿz,SMTPDChannelTestWithEnableSMTPUTF8True.setUpcCs t ¡tt_t_|jt_dSrrlr!rrrrBžs z/SMTPDChannelTestWithEnableSMTPUTF8True.tearDowncCs|jj |¡|j ¡dSrr„r…rrrr.£sz1SMTPDChannelTestWithEnableSMTPUTF8True.write_linecCs0| d¡| d d¡¡| |jjjd¡dS)NrDu7MAIL from: BODY=8BITMIME SMTPUTF8úutf-8rt)r.r“rIr-rrpr!rrrÚ1test_MAIL_command_accepts_SMTPUTF8_when_announced§s ÿÿzXSMTPDChannelTestWithEnableSMTPUTF8True.test_MAIL_command_accepts_SMTPUTF8_when_announcedcCsÀ| d¡dD]¬}| d|¡| |jjjdd…d¡| d¡| |jjjdd…d¡| d¡| |jjjdd…d ¡| d ¡|d kr¨| |jjjd ¡q| |jjjd ¡qdS)NrD)rˆsBODY=8BITMIME SMTPUTF8sMAIL from: réó250srcpt to:ódataó354sc .rˆrts250 SMTPUTF8 message okish r‰)r Zmail_parametersrrrÚtest_process_smtputf8_message¯s     ÿzDSMTPDChannelTestWithEnableSMTPUTF8True.test_process_smtputf8_messagecCsª| d¡| d d¡¡| |jjjdd…d¡| d d¡¡| |jjjdd…d¡| d¡| |jjjdd…d ¡| d ¡| d ¡| |jjd ¡dS) NrDu2MAIL From: naïve@examplé BODY=8BITMIME SMTPUTF8rrrruRCPT To:späm@examplér2rrýrE)r.r“rIr-rrprçr!rrrrÿ¿s ÿ   þz5SMTPDChannelTestWithEnableSMTPUTF8True.test_utf8_datacCsn| d¡dtdƒ}| dd|dd¡| |jjjd¡| dd|d¡| |jjjd ¡dS) Nó ehlo exampleé$úmail from:<@example>r®rªr´ó @example>r«rt©r.r°rIr-rrpr±rrrÚ7test_MAIL_command_limit_extended_with_SIZE_and_SMTPUTF8Îs    ÿþ ÿÿþz^SMTPDChannelTestWithEnableSMTPUTF8True.test_MAIL_command_limit_extended_with_SIZE_and_SMTPUTF8cCsð| d¡dtdƒ}dD]Ð}| d||d¡| |jjjdd…d ¡| d||d ¡| |jjjdd…d ¡| d ¡| |jjjdd…d ¡| d ¡| |jjjdd…d¡| d¡| |jjjdd…d ¡qdS)Nr r r )rªóbócr®s a@example>rrs500r rsrcpt to:rrstest .r)r r²ÚcharrrrÚ1test_multiple_emails_with_extended_command_lengthÛs     zXSMTPDChannelTestWithEnableSMTPUTF8True.test_multiple_emails_with_extended_command_lengthN) rrrr"rBr.rr rÿrrrrrrr“s  rc@seZdZdd„ZdS)Ú MiscTestCasecCshd£}tj|t|ddS)N> Z parseargsZDevnullÚusageZDATA_SIZE_DEFAULTZ COMMASPACErgÚNEWLINEZOptionsZprogram)Ú blacklist)rZ check__all__r)r rrrrÚ test__all__ìszMiscTestCase.test__all__N)rrrrrrrrrësrÚ__main__)!rarJÚtestrrZ test.supportrrrirr rrÚ ExceptionrrZTestCaserrCrVrdrwr€rbrcrõrörúrrrrÚmainrrrrÚs8 "]%B`  7*,X