
    <eߢ                     >   d dl Z d dlZd dlmZmZ d dlmZ d dlmZ d dlZd dl	Z	 ej
        d          Z ej
        d          Zej        s e j        d           G d d	ej                  Z G d
 de          Z G d de          Z G d de j                  Z G d de j                  Z G d de j                  Z G d de j                  Z G d de j                  Z G d de j                  Z e j        ej        d           G d de                      Z G d de j                  Z G d d e j                  Z G d! d"e j                  Z  G d# d$e j                  Z! G d% d&e j                  Z"e#d'k    r e j$                     dS dS )(    N)supportmock_socket)socket_helper)warnings_helpersmtpdasyncoreztest requires gethostname()c                       e Zd Zd Zd ZdS )DummyServerc                 v    t          j        j        | g|R i | g | _        | j        r	d| _        d S d| _        d S )Nzreturn statuss   return status)r   
SMTPServer__init__messages_decode_datareturn_status)selfargskwargss      &/usr/lib/python3.11/test/test_smtpd.pyr   zDummyServer.__init__   sT    !$8888888 	2!0D!1D    c                     | j                             ||||f           || j        k    rdS d|v rd|d         v rdS d S d S )Nz	250 Okishmail_optionsSMTPUTF8z250 SMTPUTF8 message okish)r   appendr   )r   peermailfromrcpttosdatakws         r   process_messagezDummyServer.process_message   sb    dHgt<===4%%%;RJ"^2D$D$D//  $D$Dr   N)__name__
__module____qualname__r   r    r   r   r
   r
      s2        2 2 20 0 0 0 0r   r
   c                       e Zd ZdS )DummyDispatcherBrokenN)r    r!   r"   r#   r   r   r%   r%   "   s        Dr   r%   c                       e Zd Zd ZdS )BrokenDummyServerc                     t                      N)r%   )r   nums     r   listenzBrokenDummyServer.listen'   s    #%%%r   N)r    r!   r"   r+   r#   r   r   r'   r'   &   s#        & & & & &r   r'   c                   &    e Zd Zd Zd Zd Zd ZdS )SMTPDServerTestc                 @    t           xt          _        t          _        d S r)   r   r   socketr   r   s    r   setUpzSMTPDServerTest.setUp,       )44xr   c                 ^   t                               t          j        dfdd          }|                                \  }}t                               |||d          fd} |d            |d            |d            |d	           |                     t          |d
           d S )Nr   br   Tdecode_datac                 d    j                             |                                             d S r)   r0   
queue_recvhandle_readlinechannels    r   
write_linezFSMTPDServerTest.test_process_message_unimplemented.<locals>.write_line5   1    N%%d+++!!!!!r      HELO example   MAIL From:eggs@example   RCPT To:spam@example   DATAs	   spam
.
)r   r   r   HOSTacceptSMTPChannelassertRaisesNotImplementedError)r   serverconnaddrr@   r?   s        @r   "test_process_message_unimplementedz2SMTPDServerTest.test_process_message_unimplemented/   s    !!=#5q"98.2 " 4 4]]__
d##FD$D#II	" 	" 	" 	" 	" 	
?###
,---
*+++
7-z;KLLLLLr   c                 r    |                      t          t          j        t          j        dfddd           d S )Nr   r5   Tenable_SMTPUTF8r8   )rI   
ValueErrorr   r   r   rF   r1   s    r   +test_decode_data_and_enable_SMTPUTF8_raisesz;SMTPDServerTest.test_decode_data_and_enable_SMTPUTF8_raises?   sF    #  	 	 	 	 	 	r   c                 r    t                                            t          xt           _        t          _        d S r)   r   	close_allr0   r   r1   s    r   tearDownzSMTPDServerTest.tearDownH   &    )//%,,,r   N)r    r!   r"   r2   rN   rS   rW   r#   r   r   r-   r-   +   sS        5 5 5M M M   0 0 0 0 0r   r-   c                   :    e Zd Zd Zd
dZd Zd Zd Zd Zd Z	d	S )DebuggingServerTestc                 @    t           xt          _        t          _        d S r)   r/   r1   s    r   r2   zDebuggingServerTest.setUpO   r3   r   Fc                     fd} |d           |r |d           n |d            |d            |d            ||            |d           d S )Nc                 d    j                             |                                             d S r)   r:   r=   s    r   r@   z1DebuggingServerTest.send_data.<locals>.write_lineS   rA   r      EHLO examples-   MAIL From:eggs@example BODY=8BITMIME SMTPUTF8rC   rD   rE      .r#   )r   r?   r   rQ   r@   s    `   r   	send_datazDebuggingServerTest.send_dataR   s    	" 	" 	" 	" 	" 	
?### 	2JGHHHHJ0111
*+++
7
4
4r   c                    t                               t          j        dfdd          }|                                \  }}t                               |||d          }t          j                    5 }|                     |d           d d d            n# 1 swxY w Y   |	                                }| 
                    |t          j        d                     d S )Nr   r5   Tr7   s   From: test

hello
z             ---------- MESSAGE FOLLOWS ----------
             From: test
             X-Peer: peer-address

             hello
             ------------ END MESSAGE ------------
             r   DebuggingServerr   rF   rG   rH   r   captured_stdoutr`   getvalueassertEqualtextwrapdedentr   rK   rL   rM   r?   sstdouts          r   *test_process_message_with_decode_data_truez>DebuggingServerTest.test_process_message_with_decode_data_true`   s   &&(:A'>37 ' 9 9]]__
d##FD$D#II$&& 	>!NN7$<===	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 2 " " 	 	 	 	 	   2BBBc                    t                               t          j        dfd          }|                                \  }}t                               |||          }t          j                    5 }|                     |d           d d d            n# 1 swxY w Y   |	                                }| 
                    |t          j        d                     d S )Nr   r5      From: test

héllo
             ---------- MESSAGE FOLLOWS ----------
             b'From: test'
             b'X-Peer: peer-address'
             b''
             b'h\xc3\xa9llo\xff'
             ------------ END MESSAGE ------------
             rb   ri   s          r   +test_process_message_with_decode_data_falsez?DebuggingServerTest.test_process_message_with_decode_data_falseq   s   &&(:A'>II]]__
d##FD$77$&& 	I!NN7$GHHH	I 	I 	I 	I 	I 	I 	I 	I 	I 	I 	I 	I 	I 	I 	I 2 " " 	 	 	 	 	s   .BBBc                    t                               t          j        dfdd          }|                                \  }}t                               |||d          }t          j                    5 }|                     |d           d d d            n# 1 swxY w Y   |	                                }| 
                    |t          j        d                     d S )Nr   r5   TrQ   ro   rp   rb   ri   s          r   .test_process_message_with_enable_SMTPUTF8_truezBDebuggingServerTest.test_process_message_with_enable_SMTPUTF8_true   s"   &&(:A'>7; ' = =]]__
d##FD$#MM$&& 	I!NN7$GHHH	I 	I 	I 	I 	I 	I 	I 	I 	I 	I 	I 	I 	I 	I 	I 2 " " 	 	 	 	 	rm   c                    t                               t          j        dfdd          }|                                \  }}t                               |||d          }t          j                    5 }|                     |dd           d d d            n# 1 swxY w Y   |	                                }| 
                    |t          j        d                     d S )Nr   r5   Trs   ro   a               ---------- MESSAGE FOLLOWS ----------
             mail options: ['BODY=8BITMIME', 'SMTPUTF8']
             b'From: test'
             b'X-Peer: peer-address'
             b''
             b'h\xc3\xa9llo\xff'
             ------------ END MESSAGE ------------
             rb   ri   s          r   7test_process_SMTPUTF8_message_with_enable_SMTPUTF8_truezKDebuggingServerTest.test_process_SMTPUTF8_message_with_enable_SMTPUTF8_true   s"   &&(:A'>7; ' = =]]__
d##FD$#MM$&& 	1!NN7$G+/  1 1 1	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1  2 " " 	 	 	 	 	s   2BBBc                 r    t                                            t          xt           _        t          _        d S r)   rU   r1   s    r   rW   zDebuggingServerTest.tearDown   rX   r   N)F)
r    r!   r"   r2   r`   rl   rq   rt   rv   rW   r#   r   r   rZ   rZ   M   s        5 5 5     "     "  &0 0 0 0 0r   rZ   c                   ^    e Zd Zd Zd Z ej        ej        d          d             Z	d Z
dS )TestFamilyDetectionc                 @    t           xt          _        t          _        d S r)   r/   r1   s    r   r2   zTestFamilyDetection.setUp   r3   r   c                 r    t                                            t          xt           _        t          _        d S r)   rU   r1   s    r   rW   zTestFamilyDetection.tearDown   rX   r   IPv6 not enabledc                     t                               t          j        dft          j        df          }|                     |j        j        t          j                   d S Nr   )	r   r   r   HOSTv6HOSTv4rf   r0   familyAF_INET6r   rK   s     r   test_socket_uses_IPv6z)TestFamilyDetection.test_socket_uses_IPv6   sK    !!=#7";m>RTU=VWW-v?????r   c                     t                               t          j        dft          j        df          }|                     |j        j        t          j                   d S r~   )	r   r   r   r   r   rf   r0   r   AF_INETr   s     r   test_socket_uses_IPv4z)TestFamilyDetection.test_socket_uses_IPv4   sK    !!=#7";m>RTU=VWW-v~>>>>>r   N)r    r!   r"   r2   rW   unittest
skipUnlessr   IPV6_ENABLEDr   r   r#   r   r   ry   ry      st        5 5 50 0 0 X35GHH@ @ IH@? ? ? ? ?r   ry   c                   0    e Zd ZdZd Zd Zd Zd Zd ZdS )TestRcptOptionParsing:   555 RCPT TO parameters not recognized or not implemented
c                     t           xt          _        t          _        t          j        | _        t          j                    x| _        t          _        d S r)   	r   r   r0   r   DEBUGSTREAMold_debugstreamioStringIOdebugr1   s    r   r2   zTestRcptOptionParsing.setUp   6    )44x$0)+6
U&&&r   c                     t                                            t          xt           _        t          _        | j        t          _        d S r)   r   rV   r0   r   r   r   r1   s    r   rW   zTestRcptOptionParsing.tearDown   3    )//%, 0r   c                 b    |j                             |           |                                 d S r)   r:   r   r?   r>   s      r   r@   z TestRcptOptionParsing.write_line   0    !!$'''r   c                 r   t          t          j        dfd          }|                                \  }}t                              |||          }|                     |d           |                     |d           |                     |d           |                     |j        j	        | j
                   d S )Nr   r5   r^   $   MAIL from: <foo@example.com> size=20s"   RCPT to: <foo@example.com> foo=barr
   r   rF   rG   r   rH   r@   rf   r0   lasterror_responser   rK   rL   rM   r?   s        r   test_params_rejectedz*TestRcptOptionParsing.test_params_rejected   s    m0!4h??]]__
d##FD$77111!HIII!FGGG,d.ABBBBBr   c                 h   t          t          j        dfd          }|                                \  }}t                              |||          }|                     |d           |                     |d           |                     |d           |                     |j        j	        d           d S )Nr   r5   r^   r   s   RCPT to: <foo@example.com>   250 OK

r
   r   rF   rG   r   rH   r@   rf   r0   r   r   s        r   test_nothing_acceptedz+TestRcptOptionParsing.test_nothing_accepted   s    m0!4h??]]__
d##FD$77111!HIII!>???,m<<<<<r   N)	r    r!   r"   r   r2   rW   r@   r   r   r#   r   r   r   r      si        )N7 7 7
1 1 1
  C C C= = = = =r   r   c                   6    e Zd ZdZd Zd Zd Zd Zd Zd Z	dS )	TestMailOptionParsing<   555 MAIL FROM parameters not recognized or not implemented
c                     t           xt          _        t          _        t          j        | _        t          j                    x| _        t          _        d S r)   r   r1   s    r   r2   zTestMailOptionParsing.setUp   r   r   c                     t                                            t          xt           _        t          _        | j        t          _        d S r)   r   r1   s    r   rW   zTestMailOptionParsing.tearDown   r   r   c                 b    |j                             |           |                                 d S r)   r:   r   s      r   r@   z TestMailOptionParsing.write_line   r   r   c                    t          t          j        dfdd          }|                                \  }}t                              |||d          }|                     |d           dD ]=}|                     ||           |                     |j        j	        | j
                   >|                     |d           |                     |j        j	        d           d S )	Nr   r5   Tr7   r^   )-   MAIL from: <foo@example.com> size=20 SMTPUTF8;   MAIL from: <foo@example.com> size=20 SMTPUTF8 BODY=8BITMIMEs1   MAIL from: <foo@example.com> size=20 BODY=UNKNOWN2   MAIL from: <foo@example.com> size=20 body=8bitmimer   r   r   r   rK   rL   rM   r?   r>   s         r   test_with_decode_data_truez0TestMailOptionParsing.test_with_decode_data_true   s    m0!4hDQQQ]]__
d##FD$D#II111
 	G 	GD OOGT***W^0$2EFFFF!HIII,m<<<<<r   c                 (   t          t          j        dfd          }|                                \  }}t                              |||          }|                     |d           dD ]=}|                     ||           |                     |j        j	        | j
                   >|                     |d           |                     |j        j	        d           |                     |d           |                     |j        j	        d           d S )	Nr   r5   r^   )r   r   s:   MAIL from: <foo@example.com> size=20 SMTPUTF8 BODY=UNKNOWNs3   501 Error: BODY can only be one of 7BIT, 8BITMIME
r   r   r   r   s         r   test_with_decode_data_falsez1TestMailOptionParsing.test_with_decode_data_false  s(   m0!4h??]]__
d##FD$77111
 	G 	GD OOGT***W^0$2EFFFFI	K 	K 	K 	ND	F 	F 	F 	J	L 	L 	L,m<<<<<r   c                 D   t          t          j        dfdd          }|                                \  }}t                              |||d          }|                     |d           |                     |d           |                     |j        j	        d           d S )Nr   r5   Trs   r^   s;   MAIL from: <foo@example.com> size=20 body=8bitmime smtputf8r   r   r   s        r   test_with_enable_smtputf8_truez4TestMailOptionParsing.test_with_enable_smtputf8_true  s    m0!4hPTUUU]]__
d##FD$#MM111J	L 	L 	L 	,m<<<<<r   N)
r    r!   r"   r   r2   rW   r@   r   r   r   r#   r   r   r   r      su        )N7 7 7
1 1 1
  = = = = = =*= = = = =r   r   c                      e Zd Zd Zd Zd Zd Zd Zd Zd Z	d Z
d	 Zd
 Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Z d Z!d  Z"d! Z#d" Z$d# Z%d$ Z&d% Z'd& Z(d' Z)d( Z*d) Z+d* Z,d+ Z-d, Z.d- Z/d. Z0d/ Z1d0 Z2d1 Z3d2 Z4d3 Z5d4 Z6d5 Z7d6 Z8d7 Z9d8 Z:d9 Z;d: Z<d; Z=d< Z>d= Z?d> Z@d? ZAd@ ZBdA ZCdB ZDdC ZEdDS )ESMTPDChannelTestc                 x   t           xt          _        t          _        t          j        | _        t          j                    x| _        t          _        t          t          j        dfdd          | _        | j                                        \  }}t                              | j        ||d          | _        d S Nr   r5   Tr7   r   r   r0   r   r   r   r   r   r   r
   r   rF   rK   rG   rH   r?   r   rL   rM   s      r   r2   zSMTPDChannelTest.setUp$  s    )44x$0)+6
U&!=#5q"98.24 4 4[''))
d((dD59 ) ; ;r   c                     t                                            t          xt           _        t          _        | j        t          _        d S r)   r   r1   s    r   rW   zSMTPDChannelTest.tearDown.  r   r   c                 v    | j         j                            |           | j                                          d S r)   r?   r0   r;   r<   r   r>   s     r   r@   zSMTPDChannelTest.write_line3  5    &&t,,,  """""r   c                 f    |                      t          t          t          j        dfdd           d S r   )rI   r%   r'   r   rF   r1   s    r   test_broken_connectz$SMTPDChannelTest.test_broken_connect7  sC    !#4#X4 	 	A 	A 	A 	A 	Ar   c           	          |                      t          t          j        | j        | j        j        | j        j        dd           d S )NTrP   )rI   rR   r   rH   rK   r?   rL   rM   r1   s    r   rS   z<SMTPDChannelTest.test_decode_data_and_enable_SMTPUTF8_raises<  sI    )K*DL,= d 	 	4 	4 	4 	4 	4r   c                 8    | j                                          d S r)   )rK   handle_acceptr1   s    r   test_server_acceptz#SMTPDChannelTest.test_server_acceptB  s    !!#####r   c                 z    |                      d           |                     | j        j        j        d           d S )Nr   s   500 Error: bad syntax
r@   rf   r?   r0   r   r1   s    r   test_missing_dataz"SMTPDChannelTest.test_missing_dataE  sC    ,15	7 	7 	7 	7 	7r   c                 z    |                      d           |                     | j        j        j        d           d S )Nr^   s
   250 HELP
r   r1   s    r   	test_EHLOzSMTPDChannelTest.test_EHLOJ  s8    (((,1?CCCCCr   c                 z    |                      d           |                     | j        j        j        d           d S )Ns   EHLOs   501 Syntax: EHLO hostname
r   r1   s    r   test_EHLO_bad_syntaxz%SMTPDChannelTest.test_EHLO_bad_syntaxN  C       ,19	; 	; 	; 	; 	;r   c                     |                      d           |                      d           |                     | j        j        j        d           d S )Nr^      503 Duplicate HELO/EHLO
r   r1   s    r   test_EHLO_duplicatez$SMTPDChannelTest.test_EHLO_duplicateS  U    ((((((,17	9 	9 	9 	9 	9r   c                     |                      d           |                      d           |                     | j        j        j        d           d S )Nr^   rB   r   r   r1   s    r   test_EHLO_HELO_duplicatez)SMTPDChannelTest.test_EHLO_HELO_duplicateY  r   r   c                    t           j                                        }|                     d           |                     | j        j        j        d                    |                              d                     d S )NrB   z250 {}
ascii)	r   r0   getfqdnr@   rf   r?   r   formatencode)r   names     r   	test_HELOzSMTPDChannelTest.test_HELO_  sw    |##%%(((,1%,,T2299'BB	D 	D 	D 	D 	Dr   c                     |                      d           |                      d           |                     | j        j        j        d           d S )NrB   r^   r   r   r1   s    r   test_HELO_EHLO_duplicatez)SMTPDChannelTest.test_HELO_EHLO_duplicatee  r   r   c                 z    |                      d           |                     | j        j        j        d           d S )Ns   HELPsF   250 Supported commands: EHLO HELO MAIL RCPT DATA RSET NOOP QUIT VRFY
r   r1   s    r   	test_HELPzSMTPDChannelTest.test_HELPk  sE       ,19	: 	: 	: 	: 	:r   c                 z    |                      d           |                     | j        j        j        d           d S )Ns	   HELP MAILs"   250 Syntax: MAIL FROM: <address>
r   r1   s    r   test_HELP_commandz"SMTPDChannelTest.test_HELP_commandq  sH    %%%,1@	B 	B 	B 	B 	Br   c                 z    |                      d           |                     | j        j        j        d           d S )Ns	   HELP SPAMsF   501 Supported commands: EHLO HELO MAIL RCPT DATA RSET NOOP QUIT VRFY
r   r1   s    r   test_HELP_command_unknownz*SMTPDChannelTest.test_HELP_command_unknownv  sE    %%%,19	: 	: 	: 	: 	:r   c                 z    |                      d           |                     | j        j        j        d           d S )Ns   HELOs   501 Syntax: HELO hostname
r   r1   s    r   test_HELO_bad_syntaxz%SMTPDChannelTest.test_HELO_bad_syntax|  r   r   c                     |                      d           |                      d           |                     | j        j        j        d           d S )NrB   r   r   r1   s    r   test_HELO_duplicatez$SMTPDChannelTest.test_HELO_duplicate  r   r   c                     d| _         |                     d           |                     d           |                     | j        j        j        d           d S )NFrB   s%   MAIL from:<foo@example.com> SIZE=1234"   501 Syntax: MAIL FROM: <address>
)extended_smtpr@   rf   r?   r0   r   r1   s    r   8test_HELO_parameter_rejected_when_extensions_not_enabledzISMTPDChannelTest.test_HELO_parameter_rejected_when_extensions_not_enabled  sc    "(((@AAA,1@	B 	B 	B 	B 	Br   c                     |                      d           |                      d           |                     | j        j        j        d           d S )NrB   s   MAIL from:   <foo@example.com>r   r   r1   s    r   "test_MAIL_allows_space_after_colonz3SMTPDChannelTest.test_MAIL_allows_space_after_colon  sV    (((9:::,1&	( 	( 	( 	( 	(r   c                     |                      d           |                      d           |                     | j        j        j        d           d S )Nr^   s&   MAIL from:   <foo@example.com> size=20r   r   r1   s    r   +test_extended_MAIL_allows_space_after_colonz<SMTPDChannelTest.test_extended_MAIL_allows_space_after_colon  sV    (((ABBB,1&	( 	( 	( 	( 	(r   c                 z    |                      d           |                     | j        j        j        d           d S )N   NOOPr   r   r1   s    r   	test_NOOPzSMTPDChannelTest.test_NOOP  s8       ,1=AAAAAr   c                     |                      d           |                      d           |                     | j        j        j        d           d S )NrB   r   r   r   r1   s    r   test_HELO_NOOPzSMTPDChannelTest.test_HELO_NOOP  J    (((   ,1=AAAAAr   c                 z    |                      d           |                     | j        j        j        d           d S )Ns   NOOP his   501 Syntax: NOOP
r   r1   s    r   test_NOOP_bad_syntaxz%SMTPDChannelTest.test_NOOP_bad_syntax  sC    
###,10	2 	2 	2 	2 	2r   c                 z    |                      d           |                     | j        j        j        d           d S )N   QUIT	   221 Bye
r   r1   s    r   	test_QUITzSMTPDChannelTest.test_QUIT  s8       ,1>BBBBBr   c                     |                      d           |                      d           |                     | j        j        j        d           d S )NrB   r   r   r   r1   s    r   test_HELO_QUITzSMTPDChannelTest.test_HELO_QUIT  sJ    (((   ,1>BBBBBr   c                 z    |                      d           |                     | j        j        j        d           d S )Ns   QUIT bye byer   r   r1   s    r   test_QUIT_arg_ignoredz&SMTPDChannelTest.test_QUIT_arg_ignored  s8    (((,1>BBBBBr   c                     d| j         _        |                     d           |                     | j         j        j        d           d S )Nz	BAD STATErB   s   451 Internal confusion
)r?   
smtp_stater@   rf   r0   r   r1   s    r   test_bad_statezSMTPDChannelTest.test_bad_state  sM    "-(((,16	8 	8 	8 	8 	8r   c                     |                      d           |                      dd| j        j        z  z   dz              |                     | j        j        j        d           d S )NrB   s   MAIL from:    as   @example   500 Error: line too long
)r@   r?   command_size_limitrf   r0   r   r1   s    r   test_command_too_longz&SMTPDChannelTest.test_command_too_long  sw    (((t|>>?#$ 	% 	% 	% 	,18	: 	: 	: 	: 	:r   c                 z   |                      d           | j        j        t          d          z
  }|                      dd|z  z   dz              |                     | j        j        j        d           |                      dd|dz   z  z   dz              |                     | j        j        j        d           d S )	Nr^   zMAIL from:<@example>   MAIL from:<r  s   @example> SIZE=1234r      r  )r@   r?   r  lenrf   r0   r   r   fill_lens     r   *test_MAIL_command_limit_extended_with_SIZEz;SMTPDChannelTest.test_MAIL_command_limit_extended_with_SIZE  s    (((<2S9O5P5PPx(./ 	0 	0 	0 	,1=AAA2././ 	0 	0 	0 	,18	: 	: 	: 	: 	:r   c                     |                      d           |                      d           |                     | j        j        j        dd         d           d S )Nr^   s5   MAIL from: <naive@example.com> BODY=8BITMIME SMTPUTF8r         5r   r1   s    r   -test_MAIL_command_rejects_SMTPUTF8_by_defaultz>SMTPDChannelTest.test_MAIL_command_rejects_SMTPUTF8_by_default  s]    (((D	F 	F 	F,1!A#6=====r   c                 Z   d| j         _        |                     d           |                     d           |                     d           |                     d           |                     d| j         j        z  dz              |                     | j         j        j        d           d S )	N  rB   rC   rD   rE      As   A
.   552 Error: Too much mail data
r?   data_size_limitr@   rf   r0   r   r1   s    r   -test_data_longer_than_default_data_size_limitz>SMTPDChannelTest.test_data_longer_than_default_data_size_limit  s    '+$(((1222/000   t|;;!" 	# 	# 	#,1=	? 	? 	? 	? 	?r   c                     |                      d           |                      d           |                     | j        j        j        d           d S )Nr^   s!   MAIL FROM:<eggs@example> SIZE=512r   r   r1   s    r   test_MAIL_size_parameterz)SMTPDChannelTest.test_MAIL_size_parameter  sV    (((<===,1&	( 	( 	( 	( 	(r   c                     |                      d           |                      d           |                     | j        j        j        d           d S )Nr^   s%   MAIL FROM:<eggs@example> SIZE=invalid9   501 Syntax: MAIL FROM: <address> [SP <mail-parameters>]
r   r1   s    r    test_MAIL_invalid_size_parameterz1SMTPDChannelTest.test_MAIL_invalid_size_parameter  s[    (((@AAA,1J	L 	L 	L 	L 	Lr   c                 B   |                      d           |                      d           |                     | j        j        j        d           |                      d           |                      d           |                     | j        j        j        d           d S )Nr^   s"   MAIL FROM:<eggs@example> ham=greenr   s   MAIL FROM:<eggs@example>s    RCPT TO:<eggs@example> ham=greenr   r   r1   s    r   !test_MAIL_RCPT_unknown_parametersz2SMTPDChannelTest.test_MAIL_RCPT_unknown_parameters  s    (((=>>>,1M	O 	O 	O 	3444;<<<,1K	M 	M 	M 	M 	Mr   c                     d| j         _        |                     d           |                     d           |                     | j         j        j        d           d S )Nr  r^   s"   MAIL FROM:<eggs@example> SIZE=2096s<   552 Error: message size exceeds fixed maximum message size
r  r1   s    r   <test_MAIL_size_parameter_larger_than_default_data_size_limitzMSMTPDChannelTest.test_MAIL_size_parameter_larger_than_default_data_size_limit  se    '+$(((=>>>,1M	O 	O 	O 	O 	Or   c                     |                      d           |                      d           |                     | j        j        j        d           d S )NrB   s   RCPT to:spam@examples   503 Error: need MAIL command
r   r1   s    r   test_need_MAILzSMTPDChannelTest.test_need_MAIL  sV    (((/000,1/	1 	1 	1 	1 	1r   c                     |                      d           |                      d           |                     | j        j        j        d           d S )NrB      MAIL from eggs@exampler   r   r1   s    r   test_MAIL_syntax_HELOz&SMTPDChannelTest.test_MAIL_syntax_HELO  sV    (((1222,13	5 	5 	5 	5 	5r   c                     |                      d           |                      d           |                     | j        j        j        d           d S )Nr^   r'  r  r   r1   s    r   test_MAIL_syntax_EHLOz&SMTPDChannelTest.test_MAIL_syntax_EHLO  s[    (((1222,1J	L 	L 	L 	L 	Lr   c                     |                      d           |                      d           |                     | j        j        j        d           d S )NrB   s
   MAIL from:r   r   r1   s    r   test_MAIL_missing_addressz*SMTPDChannelTest.test_MAIL_missing_address  sU    (((&&&,13	5 	5 	5 	5 	5r   c                     |                      d           |                      d           |                     | j        j        j        d           d S )NrB   s   MAIL from:<eggs@example>r   r   r1   s    r   test_MAIL_chevronsz#SMTPDChannelTest.test_MAIL_chevrons  sK    (((3444,1=AAAAAr   c                     |                      d           |                      d           |                     | j        j        j        d           d S )Nr^   s   MAIL from:<>r   r   r1   s    r   test_MAIL_empty_chevronsz)SMTPDChannelTest.test_MAIL_empty_chevrons  sJ    ((((((,1=AAAAAr   c                     |                      d           |                      d           |                     | j        j        j        d           |                     | j        j        d           d S )Nr^   s%   MAIL from: <"Fred Blogs"@example.com>r   "Fred Blogs"@example.comr@   rf   r?   r0   r   r   r1   s    r   test_MAIL_quoted_localpartz+SMTPDChannelTest.test_MAIL_quoted_localpart#  sg    (((@AAA,1=AAA.0JKKKKKr   c                     |                      d           |                      d           |                     | j        j        j        d           |                     | j        j        d           d S )Nr^   s#   MAIL from: "Fred Blogs"@example.comr   r2  r3  r1   s    r   $test_MAIL_quoted_localpart_no_anglesz5SMTPDChannelTest.test_MAIL_quoted_localpart_no_angles)  sg    (((>???,1=AAA.0JKKKKKr   c                     |                      d           |                      d           |                     | j        j        j        d           |                     | j        j        d           d S )Nr^   s/   MAIL from: <"Fred Blogs"@example.com> SIZE=1000r   r2  r3  r1   s    r   $test_MAIL_quoted_localpart_with_sizez5SMTPDChannelTest.test_MAIL_quoted_localpart_with_size/  sg    (((JKKK,1=AAA.0JKKKKKr   c                     |                      d           |                      d           |                     | j        j        j        d           |                     | j        j        d           d S )Nr^   s-   MAIL from: "Fred Blogs"@example.com SIZE=1000r   r2  r3  r1   s    r   .test_MAIL_quoted_localpart_with_size_no_anglesz?SMTPDChannelTest.test_MAIL_quoted_localpart_with_size_no_angles5  sg    (((HIII,1=AAA.0JKKKKKr   c                     |                      d           |                      d           |                      d           |                     | j        j        j        d           d S )NrB   s   MAIL from:eggs@examples   MAIL from:spam@examples    503 Error: nested MAIL command
r   r1   s    r   test_nested_MAILz!SMTPDChannelTest.test_nested_MAIL;  si    (((12221222,11	3 	3 	3 	3 	3r   c                 z    |                      d           |                     | j        j        j        d           d S )Ns   VRFY eggs@examplesD   252 Cannot VRFY user, but will accept message and attempt delivery
r   r1   s    r   	test_VRFYzSMTPDChannelTest.test_VRFYB  sF    ,---,1	 	 	 	 	r   c                 z    |                      d           |                     | j        j        j        d           d S )Ns   VRFYs   501 Syntax: VRFY <address>
r   r1   s    r   test_VRFY_syntaxz!SMTPDChannelTest.test_VRFY_syntaxH  sC       ,1-	/ 	/ 	/ 	/ 	/r   c                 z    |                      d           |                     | j        j        j        d           d S )Ns   EXPNs   502 EXPN not implemented
r   r1   s    r   test_EXPN_not_implementedz*SMTPDChannelTest.test_EXPN_not_implementedM  sC       ,1+	- 	- 	- 	- 	-r   c                 z    |                      d           |                     | j        j        j        d           d S )Ns   MAIL from:<foo@example.com>   503 Error: send HELO first
r   r1   s    r   test_no_HELO_MAILz"SMTPDChannelTest.test_no_HELO_MAILR  sD    6777,1:	< 	< 	< 	< 	<r   c                     |                      d           |                      d           |                      d           |                     | j        j        j        d           d S )NrB   rC   rE   s   503 Error: need RCPT command
r   r1   s    r   test_need_RCPTzSMTPDChannelTest.test_need_RCPTW  sh    (((1222   ,1/	1 	1 	1 	1 	1r   c                     |                      d           |                      d           |                      d           |                     | j        j        j        d           d S )NrB      MAIL From: eggs@example   RCPT to eggs@examples    501 Syntax: RCPT TO: <address>
r   r1   s    r   test_RCPT_syntax_HELOz&SMTPDChannelTest.test_RCPT_syntax_HELO^  si    (((2333/000,11	3 	3 	3 	3 	3r   c                     |                      d           |                      d           |                      d           |                     | j        j        j        d           d S )Nr^   rI  rJ  s7   501 Syntax: RCPT TO: <address> [SP <mail-parameters>]
r   r1   s    r   test_RCPT_syntax_EHLOz&SMTPDChannelTest.test_RCPT_syntax_EHLOe  sn    (((2333/000,1H	J 	J 	J 	J 	Jr   c                     |                      d           |                      d           |                      d           |                     | j        j        j        d           d S )NrB   rI  s   RCPT to: <eggs@example>r   r   r1   s    r   test_RCPT_lowercase_to_OKz*SMTPDChannelTest.test_RCPT_lowercase_to_OKl  s^    (((23332333,1=AAAAAr   c                 z    |                      d           |                     | j        j        j        d           d S )NrJ  rD  r   r1   s    r   test_no_HELO_RCPTz"SMTPDChannelTest.test_no_HELO_RCPTr  sD    /000,1:	< 	< 	< 	< 	<r   c                 L   |                      d           |                      d           |                     | j        j        j        d           |                      d           |                     | j        j        j        d           |                      d           |                     | j        j        j        d           |                      d           |                     | j        j        j        d           |                     | j        j        dd	d
gdfg           d S NrB   rC   r   rD   rE   %   354 End data with <CR><LF>.<CR><LF>
s   data
more
.zpeer-addressz	peer-porteggs@examplespam@examplez	data
morer@   rf   r?   r0   r   rK   r   r1   s    r   test_data_dialogz!SMTPDChannelTest.test_data_dialogw      (((1222,1=AAA/000,1=AAA   ,16	8 	8 	8,---,1=AAA-+ 	 	 	 	 	r   c                     |                      d           |                      d           |                      d           |                      d           |                     | j        j        j        d           d S )NrB   rC   rD   	   DATA spams   501 Syntax: DATA
r   r1   s    r   test_DATA_syntaxz!SMTPDChannelTest.test_DATA_syntax  sq    (((1222/000%%%,13JKKKKKr   c                 z    |                      d           |                     | j        j        j        d           d S )Nr\  rD  r   r1   s    r   test_no_HELO_DATAz"SMTPDChannelTest.test_no_HELO_DATA  sC    %%%,1:	< 	< 	< 	< 	<r   c                    |                      d           |                      d           |                      d           |                      d           |                      d           |                     | j        j        d           d S )NrB   rC   rD   rE   s   ..
.
.r@   rf   r?   received_datar1   s    r   $test_data_transparency_section_4_5_2z5SMTPDChannelTest.test_data_transparency_section_4_5_2  s    (((1222/000   '''3S99999r   c                 P   |                      d           |                      d           |                      d           |                      d           |                      d           |                      d           |                     | j        j        ddd	d
gdfg           d S )NrB   rC   rD   s   RCPT To:ham@examplerE      data
.rU  rV  rW  zham@exampler   )r@   rf   rK   r   r1   s    r   test_multiple_RCPTz#SMTPDChannelTest.test_multiple_RCPT  s    (((1222/000.///   %%%-+m, 	 	 	 	 	r   c                 "   |                      d           |                      d           |                      d           |                      d           |                      d           |                     | j        j        j        d           d S )NrB   rC   rD   rE   s   return status
.s   250 Okish
r   r1   s    r   test_manual_statusz#SMTPDChannelTest.test_manual_status  s    (((1222/000   -...,13CDDDDDr   c                    |                      d           |                      d           |                      d           |                      d           |                     | j        j        j        d           |                      d           |                      d           |                      d           |                      d	           |                     | j        j        d
ddgdfg           d S )NrB   rC   rD      RSETr   s   MAIL From:foo@examples   RCPT To:eggs@examplerE   rf  rU  zfoo@examplerV  r   rX  r1   s    r   	test_RSETzSMTPDChannelTest.test_RSET  s    (((1222/000   ,1=AAA0111/000   %%%-+ 	 	 	 	 	r   c                     |                      d           |                      d           |                     | j        j        j        d           d S )NrB   rk  r   r   r1   s    r   test_HELO_RSETzSMTPDChannelTest.test_HELO_RSET  r   r   c                 z    |                      d           |                     | j        j        j        d           d S )Ns   RSET his   501 Syntax: RSET
r   r1   s    r   test_RSET_syntaxz!SMTPDChannelTest.test_RSET_syntax  s9    
###,13JKKKKKr   c                 z    |                      d           |                     | j        j        j        d           d S )Ns   UNKNOWN_CMDs1   500 Error: command "UNKNOWN_CMD" not recognized
r   r1   s    r   test_unknown_commandz%SMTPDChannelTest.test_unknown_command  sE    ''',1+	, 	, 	, 	, 	,r   c                 
   t          j        dt          f          5  | j        j        }d d d            n# 1 swxY w Y   t          j        dt          f          5  d| j        _        d d d            n# 1 swxY w Y   t          j        dt          f          5  | j        j        }d d d            n# 1 swxY w Y   t          j        dt          f          5  d| j        _        d d d            n# 1 swxY w Y   t          j        dt          f          5  | j        j        }d d d            n# 1 swxY w Y   t          j        dt          f          5  d| j        _        d d d            n# 1 swxY w Y   t          j        dt          f          5  | j        j        }d d d            n# 1 swxY w Y   t          j        dt          f          5  d| j        _        d d d            n# 1 swxY w Y   t          j        dt          f          5  | j        j        }d d d            n# 1 swxY w Y   t          j        dt          f          5  d| j        _        d d d            n# 1 swxY w Y   t          j        dt          f          5  | j        j	        }d d d            n# 1 swxY w Y   t          j        dt          f          5  d| j        _	        d d d            n# 1 swxY w Y   t          j        dt          f          5  | j        j
        }d d d            n# 1 swxY w Y   t          j        dt          f          5  d| j        _
        d d d            n# 1 swxY w Y   t          j        dt          f          5  | j        j        }d d d            n# 1 swxY w Y   t          j        dt          f          5  d| j        _        d d d            n# 1 swxY w Y   t          j        dt          f          5  | j        j        }d d d            n# 1 swxY w Y   t          j        dt          f          5  d| j        _        d d d            n# 1 swxY w Y   t          j        dt          f          5  | j        j        }d d d            n# 1 swxY w Y   t          j        dt          f          5  d| j        _        d d d            n# 1 swxY w Y   t          j        dt          f          5  | j        j        }d d d            n# 1 swxY w Y   t          j        dt          f          5  d| j        _        d d d            d S # 1 swxY w Y   d S )N spam)r   check_warningsDeprecationWarningr?   _SMTPChannel__server_SMTPChannel__line_SMTPChannel__state_SMTPChannel__greeting_SMTPChannel__mailfrom_SMTPChannel__rcpttos_SMTPChannel__data_SMTPChannel__fqdn_SMTPChannel__peer_SMTPChannel__conn_SMTPChannel__addr)r   ru  s     r   test_attribute_deprecationsz,SMTPDChannelTest.test_attribute_deprecations  s5
   +R1C,DEE 	5 	5<4D	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5+R1C,DEE 	7 	706DL-	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7+R1C,DEE 	3 	3<2D	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3+R1C,DEE 	5 	5.4DL+	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5+R1C,DEE 	4 	4<3D	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4+R1C,DEE 	6 	6/5DL,	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6+R1C,DEE 	7 	7<6D	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7+R1C,DEE 	9 	928DL/	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9+R1C,DEE 	7 	7<6D	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7+R1C,DEE 	9 	928DL/	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9+R1C,DEE 	6 	6<5D	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6+R1C,DEE 	8 	817DL.	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8+R1C,DEE 	3 	3<2D	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3+R1C,DEE 	5 	5.4DL+	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5+R1C,DEE 	3 	3<2D	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3+R1C,DEE 	5 	5.4DL+	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5+R1C,DEE 	3 	3<2D	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3+R1C,DEE 	5 	5.4DL+	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5+R1C,DEE 	3 	3<2D	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3+R1C,DEE 	5 	5.4DL+	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5+R1C,DEE 	3 	3<2D	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3+R1C,DEE 	5 	5.4DL+	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5s  599A44A8;A8B33B7:B7C22C69C6D11D58D5E00E47E4F//F36F3G..G25G2H--H14H1I,,I03I0J++J/2J/K**K.1K.L))L-0L-M((M,/M,N''N+.N+O&&O*-O*P%%P),P)Q$$Q(+Q(
R##R'*R'	S""S&)S&T!!T%(T%U!!U%(U%N)Fr    r!   r"   r2   rW   r@   r   rS   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.  r0  r4  r6  r8  r:  r<  r>  r@  rB  rE  rG  rK  rM  rO  rQ  rY  r]  r_  rd  rg  ri  rl  rn  rp  rr  r  r#   r   r   r   r   #  sO       ; ; ;1 1 1
# # #A A A
4 4 4$ $ $7 7 7
D D D; ; ;
9 9 99 9 9D D D9 9 9: : :B B B
: : :; ; ;
9 9 9B B B( ( (( ( (B B BB B B
2 2 2
C C CC C C
C C C8 8 8: : :: : :> > >
? 
? 
?( ( (L L L	M 	M 	MO O O1 1 15 5 5L L L5 5 5B B B
B B B
L L LL L LL L LL L L3 3 3  / / /
- - -
< < <
1 1 13 3 3J J JB B B< < <
  $L L L< < <
: : :  E E E   B B B
L L L, , ,,5 ,5 ,5 ,5 ,5r   r   r|   c                       e Zd Zd ZdS )SMTPDChannelIPv6Testc                 x   t           xt          _        t          _        t          j        | _        t          j                    x| _        t          _        t          t          j        dfdd          | _        | j                                        \  }}t                              | j        ||d          | _        d S r   )r   r   r0   r   r   r   r   r   r   r
   r   r   rK   rG   rH   r?   r   s      r   r2   zSMTPDChannelIPv6Test.setUp  s    )44x$0)+6
U&!=#7";X.24 4 4[''))
d((dD59 ) ; ;r   N)r    r!   r"   r2   r#   r   r   r  r     s#        ; ; ; ; ;r   r  c                   ,    e Zd Zd Zd Zd Zd Zd ZdS )!SMTPDChannelWithDataSizeLimitTestc                 z   t           xt          _        t          _        t          j        | _        t          j                    x| _        t          _        t          t          j        dfdd          | _        | j                                        \  }}t                              | j        ||dd          | _        d S )Nr   r5   Tr7       r   r   s      r   r2   z'SMTPDChannelWithDataSizeLimitTest.setUp  s    )44x$0)+6
U&!=#5q"98.24 4 4[''))
d((dD"59 ) ; ;r   c                     t                                            t          xt           _        t          _        | j        t          _        d S r)   r   r1   s    r   rW   z*SMTPDChannelWithDataSizeLimitTest.tearDown  r   r   c                 v    | j         j                            |           | j                                          d S r)   r   r   s     r   r@   z,SMTPDChannelWithDataSizeLimitTest.write_line  r   r   c                 L   |                      d           |                      d           |                     | j        j        j        d           |                      d           |                     | j        j        j        d           |                      d           |                     | j        j        j        d           |                      d           |                     | j        j        j        d           |                     | j        j        dd	d
gdfg           d S rS  rX  r1   s    r   test_data_limit_dialogz8SMTPDChannelWithDataSizeLimitTest.test_data_limit_dialog"  rZ  r   c                     |                      d           |                      d           |                     | j        j        j        d           |                      d           |                     | j        j        j        d           |                      d           |                     | j        j        j        d           |                      d           |                     | j        j        j        d           d S )	NrB   rC   r   rD   rE   rT  s'   This message is longer than 32 bytes
.r  r   r1   s    r   $test_data_limit_dialog_too_much_datazFSMTPDChannelWithDataSizeLimitTest.test_data_limit_dialog_too_much_data4  s    (((1222,1=AAA/000,1=AAA   ,16	8 	8 	8DEEE,1=	? 	? 	? 	? 	?r   N)r    r!   r"   r2   rW   r@   r  r  r#   r   r   r  r    s_        	; 	; 	;1 1 1
# # #  $? ? ? ? ?r   r  c                   ,    e Zd Zd Zd Zd Zd Zd ZdS )SMTPDChannelWithDecodeDataFalsec                 p   t           xt          _        t          _        t          j        | _        t          j                    x| _        t          _        t          t          j        dfd          | _        | j                                        \  }}t                              | j        ||          | _        d S )Nr   r5   r   r   s      r   r2   z%SMTPDChannelWithDecodeDataFalse.setUpE  s    )44x$0)+6
U&!=#5q"98DD[''))
d((dDAAr   c                     t                                            t          xt           _        t          _        | j        t          _        d S r)   r   r1   s    r   rW   z(SMTPDChannelWithDecodeDataFalse.tearDownM  r   r   c                 v    | j         j                            |           | j                                          d S r)   r   r   s     r   r@   z*SMTPDChannelWithDecodeDataFalse.write_lineR  r   r   c                 B   |                      d           |                      d           |                      d           |                      d           |                      d           |                      d           |                     | j        j        d           d S )NrB   rC   rD   rE      plain ascii textr_   rb  r1   s    r   test_ascii_dataz/SMTPDChannelWithDecodeDataFalse.test_ascii_dataV  s    (((1222/000   +,,,35HIIIIIr   c                 l   |                      d           |                      d           |                      d           |                      d           |                      d           |                      d           |                      d           |                     | j        j        d           d S )	NrB   rC   rD   rE      utf8 enriched text: żźć   and some plain asciir_   s/   utf8 enriched text: żźć
and some plain asciirb  r1   s    r   test_utf8_dataz.SMTPDChannelWithDecodeDataFalse.test_utf8_data_  s    (((1222/000   GHHH/000L&(	) 	) 	) 	) 	)r   Nr    r!   r"   r2   rW   r@   r  r  r#   r   r   r  r  C  se        B B B1 1 1
# # #J J J) ) ) ) )r   r  c                   ,    e Zd Zd Zd Zd Zd Zd ZdS )SMTPDChannelWithDecodeDataTruec                 x   t           xt          _        t          _        t          j        | _        t          j                    x| _        t          _        t          t          j        dfdd          | _        | j                                        \  }}t                              | j        ||d          | _        d S r   r   r   s      r   r2   z$SMTPDChannelWithDecodeDataTrue.setUpo  s    )44x$0)+6
U&!=#5q"98.24 4 4[''))
d((dD  ) " "r   c                     t                                            t          xt           _        t          _        | j        t          _        d S r)   r   r1   s    r   rW   z'SMTPDChannelWithDecodeDataTrue.tearDownz  r   r   c                 v    | j         j                            |           | j                                          d S r)   r   r   s     r   r@   z)SMTPDChannelWithDecodeDataTrue.write_line  r   r   c                 B   |                      d           |                      d           |                      d           |                      d           |                      d           |                      d           |                     | j        j        d           d S )NrB   rC   rD   rE   r  r_   zplain ascii textrb  r1   s    r   r  z.SMTPDChannelWithDecodeDataTrue.test_ascii_data  s    (((1222/000   +,,,35GHHHHHr   c                 l   |                      d           |                      d           |                      d           |                      d           |                      d           |                      d           |                      d           |                     | j        j        d           d S )	NrB   rC   rD   rE   r  r  r_   u/   utf8 enriched text: żźć
and some plain asciirb  r1   s    r   r  z-SMTPDChannelWithDecodeDataTrue.test_utf8_data  s    (((1222/000   GHHH/000L&>	@ 	@ 	@ 	@ 	@r   Nr  r#   r   r   r  r  m  sg        	" 	" 	"1 1 1
# # #I I I
@ 
@ 
@ 
@ 
@r   r  c                   >    e Zd Zd Zd Zd Zd Zd Zd Zd Z	d Z
d	S )
&SMTPDChannelTestWithEnableSMTPUTF8Truec                 x   t           xt          _        t          _        t          j        | _        t          j                    x| _        t          _        t          t          j        dfdd          | _        | j                                        \  }}t                              | j        ||d          | _        d S )Nr   r5   Trs   r   r   s      r   r2   z,SMTPDChannelTestWithEnableSMTPUTF8True.setUp  s    )44x$0)+6
U&!=#5q"98268 8 8[''))
d((dD9= ) ? ?r   c                     t                                            t          xt           _        t          _        | j        t          _        d S r)   r   r1   s    r   rW   z/SMTPDChannelTestWithEnableSMTPUTF8True.tearDown  r   r   c                 v    | j         j                            |           | j                                          d S r)   r   r   s     r   r@   z1SMTPDChannelTestWithEnableSMTPUTF8True.write_line  r   r   c                     |                      d           |                      d                    d                     |                     | j        j        j        d           d S )Nr^   u7   MAIL from: <naïve@example.com> BODY=8BITMIME SMTPUTF8utf-8r   )r@   r   rf   r?   r0   r   r1   s    r   1test_MAIL_command_accepts_SMTPUTF8_when_announcedzXSMTPDChannelTestWithEnableSMTPUTF8True.test_MAIL_command_accepts_SMTPUTF8_when_announced  sf    (((ELL 	
 	
 	
 	,1=AAAAAr   c                    |                      d           dD ]3}|                      d|z              |                     | j        j        j        dd         d           |                      d           |                     | j        j        j        dd         d           |                      d           |                     | j        j        j        dd         d	           |                      d
           |dk    r'|                     | j        j        j        d           |                     | j        j        j        d           5d S )Nr^   )r   s   BODY=8BITMIME SMTPUTF8s   MAIL from: <a@example> r         250s   rcpt to:<b@example.com>   data   354s   c
.r   r   s   250 SMTPUTF8 message okish
r   )r   mail_parameterss     r   test_process_smtputf8_messagezDSMTPDChannelTestWithEnableSMTPUTF8True.test_process_smtputf8_message  sO   (((? 	D 	DOOO6HIIIT\05ac:FCCCOO6777T\05ac:FCCCOOG$$$T\05ac:FCCCOOI&&&#%%  !4!9=IIII  !4!9!BD D D D	D 	Dr   c                    |                      d           |                      d                    d                     |                     | j        j        j        dd         d           |                      d                    d                     |                     | j        j        j        dd         d           |                      d           |                     | j        j        j        dd         d	           |                      d
           |                      d           |                     | j        j        d
           d S )Nr^   u2   MAIL From: naïve@examplé BODY=8BITMIME SMTPUTF8r  r   r  r  u   RCPT To:späm@examplérE   r  r  r_   )r@   r   rf   r?   r0   r   rc  r1   s    r   r  z5SMTPDChannelTestWithEnableSMTPUTF8True.test_utf8_data  s8   (((@GGPP	R 	R 	R,1!A#6???077@@AAA,1!A#6???   ,1!A#6???GHHHL&;	= 	= 	= 	= 	=r   c                 f   |                      d           dt          d          z
  }|                      dd|dz   z  z   dz              |                     | j        j        j        d           |                      dd|z  z   dz              |                     | j        j        j        d	           d S )
N   ehlo example$  mail from:<@example>r
  r  r  	   @example>r  r   r@   r  rf   r?   r0   r   r  s     r   7test_MAIL_command_limit_extended_with_SIZE_and_SMTPUTF8z^SMTPDChannelTestWithEnableSMTPUTF8True.test_MAIL_command_limit_extended_with_SIZE_and_SMTPUTF8  s    (((!S)?%@%@@1-.$% 	& 	& 	& 	,18	: 	: 	:x($% 	& 	& 	& 	,1=AAAAAr   c                    |                      d           dt          d          z
  }dD ]_}|                      d||z  z   dz              |                     | j        j        j        dd         d	           |                      d||z  z   d
z              |                     | j        j        j        dd         d           |                      d           |                     | j        j        j        dd         d           |                      d           |                     | j        j        j        dd         d           |                      d           |                     | j        j        j        dd         d           ad S )Nr  r  r  )r     b   cr
  s
   a@example>r   r  s   500r  r  s   rcpt to:<hans@example.com>r  r  s   test
.r  )r   r  chars      r   1test_multiple_emails_with_extended_command_lengthzXSMTPDChannelTestWithEnableSMTPUTF8True.test_multiple_emails_with_extended_command_length  s   (((!S)?%@%@@& 
	D 
	DDOONTH_<}LMMMT\05ac:FCCCOONTH_<|KLLLT\05ac:FCCCOO9:::T\05ac:FCCCOOG$$$T\05ac:FCCCOOL)))T\05ac:FCCCC
	D 
	Dr   N)r    r!   r"   r2   rW   r@   r  r  r  r  r  r#   r   r   r  r    s        ? ? ?1 1 1
# # #B B BD D D = = =B B BD D D D Dr   r  c                       e Zd Zd ZdS )MiscTestCasec                 F    h d}t          j        | t          |           d S )N>	   usageDevnullNEWLINEOptionsprogram	parseargs
COMMASPACEr   DATA_SIZE_DEFAULT)not_exported)r   check__all__r   )r   r  s     r   test__all__zMiscTestCase.test__all__  s3    
 
 
 	T5|DDDDDDr   N)r    r!   r"   r  r#   r   r   r  r    s(        E E E E Er   r  __main__)%r   rg   testr   r   test.supportr   r   r0   r   import_deprecatedr   r   has_gethostnameSkipTestr   r
   	Exceptionr%   r'   TestCaser-   rZ   ry   r   r   r   r   r   r  r  r  r  r  r  r    mainr#   r   r   <module>r     s     % % % % % % % % & & & & & & ( ( ( ( ( (  				 	*)'22,?,Z88$ ;
(
9
:
::0 0 0 0 0%" 0 0 0"	 	 	 	 	I 	 	 	& & & & & & & &
0 0 0 0 0h' 0 0 0DZ0 Z0 Z0 Z0 Z0(+ Z0 Z0 Z0z? ? ? ? ?(+ ? ? ?$"= "= "= "= "=H- "= "= "=J?= ?= ?= ?= ?=H- ?= ?= ?=D[5 [5 [5 [5 [5x( [5 [5 [5z ]/1CDD	; 	; 	; 	; 	;+ 	; 	; ED	;4? 4? 4? 4? 4?(9 4? 4? 4?n') ') ') ') ')h&7 ') ') ')T)@ )@ )@ )@ )@X%6 )@ )@ )@XUD UD UD UD UDX-> UD UD UDpE E E E E8$ E E E zHMOOOOO r   