a
    	¼3jÀ.  ã                   @   s”   d dl Z d dlZd dlZd dlmZ d dlmZ d dlmZ G dd„ dƒZG dd„ deeƒZ	G d	d
„ d
eeƒZ
G dd„ deeƒZedkre ¡  dS )é    N)Úpolicy)Úerrors)ÚTestEmailBasec                   @   s–   e Zd ZejZdZejdd„ ƒZdd„ Z	dd„ Z
e d¡Zd	d
„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ ZdS ) ÚTestDefectsBaseFc                 c   s
   d V  d S ©N© ©ÚselfÚdefectr   r   ú`/www/server/python_manager/versions/3.9.10/lib/python3.9/test/test_email/test_defect_handling.pyÚ_raise_point   s    zTestDefectsBase._raise_pointc                 C   s–   t  d¡}|  tj¡ |  |¡}W d   ƒ n1 s60    Y  | jrJd S | d¡}|  t	|dƒ¡ |  
t|  |¡ƒd¡ |  |  |¡d tj¡ d S )Na_              Subject: XX
            From: xx@xx.dk
            To: XX
            Mime-version: 1.0
            Content-type: multipart/mixed;
               boundary="MS_Mac_OE_3071477847_720252_MIME_Part"

            --MS_Mac_OE_3071477847_720252_MIME_Part
            Content-type: multipart/alternative;
               boundary="MS_Mac_OE_3071477847_720252_MIME_Part"

            --MS_Mac_OE_3071477847_720252_MIME_Part
            Content-type: text/plain; charset="ISO-8859-1"
            Content-transfer-encoding: quoted-printable

            text

            --MS_Mac_OE_3071477847_720252_MIME_Part
            Content-type: text/html; charset="ISO-8859-1"
            Content-transfer-encoding: quoted-printable

            <HTML></HTML>

            --MS_Mac_OE_3071477847_720252_MIME_Part--

            --MS_Mac_OE_3071477847_720252_MIME_Part
            Content-type: image/gif; name="xx.gif";
            Content-disposition: attachment
            Content-transfer-encoding: base64

            Some removed base64 encoded chars.

            --MS_Mac_OE_3071477847_720252_MIME_Part--

            r   Údefectsé   )ÚtextwrapÚdedentr   r   ÚStartBoundaryNotFoundDefectÚ_str_msgÚraise_expectedÚget_payloadÚ
assertTrueÚhasattrÚassertEqualÚlenÚget_defectsÚassertIsInstance)r	   ÚsourceÚmsgÚinnerr   r   r   Útest_same_boundary_inner_outer   s    
%(

ÿz.TestDefectsBase.test_same_boundary_inner_outerc                 C   s¤   t  d¡}|  tj¡ |  |¡}W d   ƒ n1 s60    Y  | jrJd S |  | ¡ t	¡ |  
t|  |¡ƒd¡ |  |  |¡d tj¡ |  |  |¡d tj¡ d S )Naú              Date: Fri, 6 Apr 2001 09:23:06 -0800 (GMT-0800)
            From: foobar
            Subject: broken mail
            MIME-Version: 1.0
            Content-Type: multipart/report; report-type=delivery-status;

            --JAB03225.986577786/zinfandel.lacita.com

            One part

            --JAB03225.986577786/zinfandel.lacita.com
            Content-Type: message/delivery-status

            Header: Another part

            --JAB03225.986577786/zinfandel.lacita.com--
            é   r   r   )r   r   r   r   ÚNoBoundaryInMultipartDefectr   r   r   r   Ústrr   r   r   Ú!MultipartInvariantViolationDefect©r	   r   r   r   r   r   Útest_multipart_no_boundaryA   s    
(
ÿÿz*TestDefectsBase.test_multipart_no_boundarya^          Date: Wed, 14 Nov 2007 12:56:23 GMT
        From: foo@bar.invalid
        To: foo@bar.invalid
        Subject: Content-Transfer-Encoding: base64 and multipart
        MIME-Version: 1.0
        Content-Type: multipart/mixed;
            boundary="===============3344438784458119861=="{}

        --===============3344438784458119861==
        Content-Type: text/plain

        Test message

        --===============3344438784458119861==
        Content-Type: application/octet-stream
        Content-Transfer-Encoding: base64

        YWJj

        --===============3344438784458119861==--
        c                 C   sz   |   tj¡" |  | j d¡¡}W d   ƒ n1 s40    Y  | jrHd S |  t|  	|¡ƒd¡ |  
|  	|¡d tj¡ d S )Nz"
Content-Transfer-Encoding: base64r   r   )r   r   Z-InvalidMultipartContentTransferEncodingDefectr   Úmultipart_msgÚformatr   r   r   r   r   ©r	   r   r   r   r   Útest_multipart_invalid_cteu   s    ÿÿÿ"
ÿz*TestDefectsBase.test_multipart_invalid_ctec                 C   s6   | j r
d S |  | j d¡¡}|  t|  |¡ƒd¡ d S )NÚ r   ©r   r   r%   r&   r   r   r   r'   r   r   r   Útest_multipart_no_cte_no_defect€   s    
z/TestDefectsBase.test_multipart_no_cte_no_defectc                 C   sJ   | j r
d S dD ]6}|  | j d| ¡¡}|  t|  |¡ƒdd| ¡ qd S )N)Z7bitZ8bitZBINaryz
Content-Transfer-Encoding: r   zcte=r*   )r	   Zcter   r   r   r   Ú"test_multipart_valid_cte_no_defect…   s    
ÿz2TestDefectsBase.test_multipart_valid_cte_no_defectc                 C   s¤   t  d¡}|  tj¡ |  |¡}W d   ƒ n1 s60    Y  | jrJd S |  t|dƒ¡ |  	t
|  |¡ƒd¡ |  |  |¡d tj¡ |  |  |¡d tj¡ d S )Na              From: "Allison Dunlap" <xxx@example.com>
            To: yyy@example.com
            Subject: 64423
            Date: Sun, 11 Jul 2004 16:09:27 -0300
            MIME-Version: 1.0
            Content-Type: multipart/alternative;

            Blah blah blah
            r   r   r   r   )r   r   r   r   r    r   r   r   r   r   r   r   r   r"   r#   r   r   r   Útest_lying_multipartŒ   s    

(
ÿÿz$TestDefectsBase.test_lying_multipartc                 C   sŒ   t  d¡}|  tj¡ |  |¡}W d   ƒ n1 s60    Y  | jrJd S | d¡ d¡}|  t	|  
|¡ƒd¡ |  |  
|¡d tj¡ d S )Na±              Content-Type: multipart/mixed; boundary="AAA"
            From: Mail Delivery Subsystem <xxx@example.com>
            To: yyy@example.com

            --AAA

            Stuff

            --AAA
            Content-Type: message/rfc822

            From: webmaster@python.org
            To: zzz@example.com
            Content-Type: multipart/mixed; boundary="BBB"

            --BBB--

            --AAA--

            r   r   )r   r   r   r   r   r   r   r   r   r   r   r   )r	   r   ZouterZbadr   r   r   Útest_missing_start_boundary¡   s    
(
ÿz+TestDefectsBase.test_missing_start_boundaryc                 C   sª   |   tj¡ |  d¡}W d   ƒ n1 s,0    Y  | jr@d S |  | ¡ dg¡ |  | ¡ d¡ |  t|  	|¡ƒd¡ |  
|  	|¡tjg¡ |  |  	|¡d jd¡ d S )Nz Line 1
Subject: test

bodyÚSubjectÚbodyr   r   z Line 1
)r   r   Z#FirstHeaderLineIsContinuationDefectr   r   r   Úkeysr   r   r   ÚassertDefectsEqualÚliner'   r   r   r   Ú&test_first_line_is_continuation_headerÇ   s    (
ÿz6TestDefectsBase.test_first_line_is_continuation_headerc                 C   s|   |   tj¡ |  d¡}W d   ƒ n1 s,0    Y  | jr@d S |  | ¡ dg¡ |  | ¡ d¡ |  |  	|¡tjg¡ d S )Nz&Subject: test
not a header
To: abc

b
r/   znot a header
To: abc

b
)
r   r   Z MissingHeaderBodySeparatorDefectr   r   r   r1   r   r2   r   r'   r   r   r   Ú"test_missing_header_body_separatorÒ   s    (
ÿz2TestDefectsBase.test_missing_header_body_separatorc                 C   s|   t  d¡}|  |¡}|  tj¡ |jdd}W d   ƒ n1 sB0    Y  | jrVd S |  |d¡ |  	|  
|¡tjg¡ d S )Nz¹            Subject: test
            MIME-Version: 1.0
            Content-Type: text/plain; charset="utf-8"
            Content-Transfer-Encoding: base64

            dmk
            T©Údecodeó   vi)r   r   r   r   r   ZInvalidBase64PaddingDefectr   r   r   r2   r   ©r	   r   r   Úpayloadr   r   r   Ú"test_bad_padding_in_base64_payloadß   s    

*
ÿz2TestDefectsBase.test_bad_padding_in_base64_payloadc                 C   s|   t  d¡}|  |¡}|  tj¡ |jdd}W d   ƒ n1 sB0    Y  | jrVd S |  |d¡ |  	|  
|¡tjg¡ d S )Nz½            Subject: test
            MIME-Version: 1.0
            Content-Type: text/plain; charset="utf-8"
            Content-Transfer-Encoding: base64

            dmk===
            Tr6   r8   )r   r   r   r   r   ZInvalidBase64CharactersDefectr   r   r   r2   r   r9   r   r   r   Ú$test_invalid_chars_in_base64_payloadð   s    

*
ÿz4TestDefectsBase.test_invalid_chars_in_base64_payloadc                 C   s|   t  d¡}|  |¡}|  tj¡ |jdd}W d   ƒ n1 sB0    Y  | jrVd S |  |d¡ |  	|  
|¡tjg¡ d S )Nz»            Subject: test
            MIME-Version: 1.0
            Content-Type: text/plain; charset="utf-8"
            Content-Transfer-Encoding: base64

            abcde
            Tr6   s   abcde)r   r   r   r   r   ZInvalidBase64LengthDefectr   r   r   r2   r   r9   r   r   r   Ú%test_invalid_length_of_base64_payload  s    

*
ÿz5TestDefectsBase.test_invalid_length_of_base64_payloadc                 C   sŽ   t  d¡}|  tj¡ |  |¡}W d   ƒ n1 s60    Y  | jrJd S |  t| 	¡ ƒd¡ |  | 	d¡ 	¡ d¡ |  
|  |¡tjg¡ d S )Na?              To: 1@harrydomain4.com
            Subject: Fwd: 1
            MIME-Version: 1.0
            Content-Type: multipart/alternative;
             boundary="------------000101020201080900040301"

            --------------000101020201080900040301
            Content-Type: text/plain; charset=ISO-8859-1
            Content-Transfer-Encoding: 7bit

            Alternative 1

            --------------000101020201080900040301
            Content-Type: text/html; charset=ISO-8859-1
            Content-Transfer-Encoding: 7bit

            Alternative 2

            r   r   zAlternative 2
)r   r   r   r   ZCloseBoundaryNotFoundDefectr   r   r   r   r   r2   r   r#   r   r   r   Útest_missing_ending_boundary  s    
(
ÿz,TestDefectsBase.test_missing_ending_boundaryN)Ú__name__Ú
__module__Ú__qualname__r   Údefaultr   Ú
contextlibÚcontextmanagerr   r   r$   r   r   r%   r(   r+   r,   r-   r.   r4   r5   r;   r<   r=   r>   r   r   r   r   r   	   s$   
/
&r   c                   @   s   e Zd Zdd„ ZdS )ÚTestDefectDetectionc                 C   s   |j S r   )r   ©r	   Úobjr   r   r   r   2  s    zTestDefectDetection.get_defectsN)r?   r@   rA   r   r   r   r   r   rE   0  s   rE   c                   @   s.   e Zd ZG dd„ dejƒZdd„ Zdd„ ZdS )ÚTestDefectCapturec                   @   s   e Zd ZdZdd„ ZdS )zTestDefectCapture.CapturePolicyNc                 C   s   | j  |¡ d S r   )ÚcapturedÚappend)r	   rG   r
   r   r   r   Úregister_defect:  s    z/TestDefectCapture.CapturePolicy.register_defect)r?   r@   rA   rI   rK   r   r   r   r   ÚCapturePolicy8  s   rL   c                 C   s   | j tƒ d| _d S )N)rI   )rL   Úlistr   )r	   r   r   r   ÚsetUp=  s    zTestDefectCapture.setUpc                 C   s   | j jS r   )r   rI   rF   r   r   r   r   @  s    zTestDefectCapture.get_defectsN)r?   r@   rA   r   ZEmailPolicyrL   rN   r   r   r   r   r   rH   6  s   rH   c                   @   s0   e Zd ZejZejddZdZejdd„ ƒZ	dS )ÚTestDefectRaisingT)Zraise_on_defectc                 c   s4   |   |¡ d V  W d   ƒ n1 s&0    Y  d S r   )ZassertRaisesr   r   r   r   r   J  s    zTestDefectRaising._raise_pointN)
r?   r@   rA   r   r   Zcloner   rC   rD   r   r   r   r   r   rO   D  s
   rO   Ú__main__)r   ZunittestrC   Zemailr   r   Ztest.test_emailr   r   rE   rH   rO   r?   Úmainr   r   r   r   Ú<module>   s     )