
    daf.                         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      Z G d dee      Z	 G d	 d
ee      Z
 G d dee      Zedk(  r ej                          yy)    N)policy)errors)TestEmailBasec                       e Zd Zej                  ZdZej                  d        Zd Z	d Z
 ej                  d      Zd Zd Zd Zd	 Zd
 Zd Zd Zd Zd Zd Zd Zy)TestDefectsBaseFc              #      K   d  y wN selfdefects     ?/root/Python-3.12.4/Lib/test/test_email/test_defect_handling.py_raise_pointzTestDefectsBase._raise_point   s	     s   c                    t        j                  d      }| j                  t        j                        5  | j                  |      }d d d        | j                  ry j                  d      }| j                  t        |d             | j                  t        | j                  |            d       | j                  | j                  |      d   t        j                         y # 1 sw Y   xY w)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inners       r   test_same_boundary_inner_outerz.TestDefectsBase.test_same_boundary_inner_outer   s     #" #J vAAB 	(--'C	("y12T--e45q9d..u5a8$@@	B	( 	(   C%%C.c                 6   t        j                  d      }| j                  t        j                        5  | j                  |      }d d d        | j                  ry | j                  j                         t               | j                  t        | j                  |            d       | j                  | j                  |      d   t        j                         | j                  | j                  |      d   t        j                         y # 1 sw Y   xY w)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    s      r   test_multipart_no_boundaryz*TestDefectsBase.test_multipart_no_boundaryA   s     " $ vAAB 	(--'C	(coo/5T--c23Q7d..s3A6$@@	Bd..s3A6$FF	H	( 	(s   DDa^          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                    | j                  t        j                        5  | j                  | j                  j                  d            }d d d        | j                  ry | j                  t        | j                              d       | j                  | j                  |      d   t        j                         y # 1 sw Y   sxY w)Nz"
Content-Transfer-Encoding: base64r   r   )r   r   -InvalidMultipartContentTransferEncodingDefectr   multipart_msgformatr   r   r   r   r   r   r    s     r   test_multipart_invalid_ctez*TestDefectsBase.test_multipart_invalid_cteu   s    DDF 	@--&&--=?@C	@
 T--c23Q7d..s3A6@@	B	@ 	@s   +B==Cc                     | j                   ry | j                  | j                  j                  d            }| j	                  t        | j                  |            d       y )N r   r   r   r-   r.   r   r   r   r/   s     r   test_multipart_no_cte_no_defectz/TestDefectsBase.test_multipart_no_cte_no_defect   sL    mmD..55b9:T--c23Q7    c                     | j                   ry dD ]]  }| j                  | j                  j                  d|z               }| j	                  t        | j                  |            dd|z          _ y )N)7bit8bitBINaryz
Content-Transfer-Encoding: r   zcte=r3   )r   cter    s      r   "test_multipart_valid_cte_no_defectz2TestDefectsBase.test_multipart_valid_cte_no_defect   sm    - 	HC--""))*I#*MNPCS!1!1#!67F3JG	Hr5   c                 $   t        j                  d      }| j                  t        j                        5  | j                  |      }d d d        | j                  ry | j                  t        d             | j                  t        | j                  |            d       | j                  | j                  |      d   t        j                         | j                  | j                  |      d   t        j                         y # 1 sw Y   xY w)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)   s      r   test_lying_multipartz$TestDefectsBase.test_lying_multipart   s     	" 	 vAAB 	(--'C	(Y/0T--c23Q7d..s3A6$@@	Bd..s3A6$FF	H	( 	(s   DDc                    t        j                  d      }| j                  t        j                        5  | j                  |      }d d d        | j                  ry j                  d      j                  d      }| j                  t        | j                  |            d       | j                  | j                  |      d   t        j                         y # 1 sw Y   xY w)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   outerbads       r   test_missing_start_boundaryz+TestDefectsBase.test_missing_start_boundary   s     " : vAAB 	*MM&)E	*"..q1T--c23Q7d..s3A6$@@	B	* 	*s   CC"c                 :   | j                  t        j                        5  | j                  d      }d d d        | j                  ry | j                  j                         dg       | j                  |j                         d       | j                  t        | j                  |            d       | j                  | j                  |      t        j                  g       | j                  | j                  |      d   j                  d       y # 1 sw Y   xY w)Nz Line 1
Subject: test

bodySubjectbodyr   r   z Line 1
)r   r   #FirstHeaderLineIsContinuationDefectr   r   r   keysr   r   r   assertDefectsEqualliner/   s     r   &test_first_line_is_continuation_headerz6TestDefectsBase.test_first_line_is_continuation_header   s    vIIJ 	B-- @AC	Bi[1*F3T--c23Q7 0 0 5"("L"L!M	O))#.q166D	B 	Bs   DDc                    | j                  t        j                        5  | j                  d      }d d d        | j                  ry | j                  j                         dg       | j                  |j                         d       | j                  | j                  |      t        j                  g       y # 1 sw Y   xY w)Nz&Subject: test
not a header
To: abc

b
rC   znot a header
To: abc

b
)
r   r    MissingHeaderBodySeparatorDefectr   r   r   rF   r   rG   r   r/   s     r   "test_missing_header_body_separatorz2TestDefectsBase.test_missing_header_body_separator   s    
 vFFG 	O-- MNC	Oi[1*,JK 0 0 5!'!H!H I	K	O 	Os   B99Cc                 z   t        j                  d      }| j                  |      }| j                  t        j
                        5  |j                  d      }d d d        | j                  ry | j                  d       | j                  | j                  |      t        j
                  g       y # 1 sw Y   YxY w)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   InvalidBase64PaddingDefectr   r   r   rG   r   r   r   r    payloads       r   "test_bad_padding_in_base64_payloadz2TestDefectsBase.test_bad_padding_in_base64_payload   s     "  mmF#v@@A 	3ooTo2G	3%( 0 0 5!'!B!B C	E		3 	3   B11B:c                 z   t        j                  d      }| j                  |      }| j                  t        j
                        5  |j                  d      }d d d        | j                  ry | j                  d       | j                  | j                  |      t        j
                  g       y # 1 sw Y   YxY w)Nz            Subject: test
            MIME-Version: 1.0
            Content-Type: text/plain; charset="utf-8"
            Content-Transfer-Encoding: base64

            dmk===
            TrN   rP   )r   r   r   r   r   InvalidBase64CharactersDefectr   r   r   rG   r   rR   s       r   $test_invalid_chars_in_base64_payloadz4TestDefectsBase.test_invalid_chars_in_base64_payload   s     "  mmF#vCCD 	3ooTo2G	3%( 0 0 5!'!E!E F	H		3 	3rU   c                 z   t        j                  d      }| j                  |      }| j                  t        j
                        5  |j                  d      }d d d        | j                  ry | j                  d       | j                  | j                  |      t        j
                  g       y # 1 sw Y   YxY w)Nz            Subject: test
            MIME-Version: 1.0
            Content-Type: text/plain; charset="utf-8"
            Content-Transfer-Encoding: base64

            abcde
            TrN   s   abcde)r   r   r   r   r   InvalidBase64LengthDefectr   r   r   rG   r   rR   s       r   %test_invalid_length_of_base64_payloadz5TestDefectsBase.test_invalid_length_of_base64_payload  s     "  mmF#v??@ 	3ooTo2G	3(+ 0 0 5!'!A!A B	D		3 	3rU   c                    t        j                  d      }| j                  t        j                        5  | j                  |      }d d d        | j                  ry | j                  t        j                               d       | j                  |j                  d      j                         d       | j                  | j                  |      t        j                  g       y # 1 sw Y   xY w)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   CloseBoundaryNotFoundDefectr   r   r   r   r   rG   r   r)   s      r   test_missing_ending_boundaryz,TestDefectsBase.test_missing_ending_boundary  s     " ( vAAB 	(--'C	(S__./3+779;LM 0 0 5!'!C!C D	F	( 	(r#   N)__name__
__module____qualname__r   defaultr   
contextlibcontextmanagerr   r"   r*   r   r   r-   r0   r4   r;   r=   rA   rI   rL   rT   rX   r[   r^   r
   r5   r   r   r   	   s    ^^FN -B^H: $HOO % M.	B8
HH*$BL	EKE"H"D"Fr5   r   c                       e Zd Zd Zy)TestDefectDetectionc                     |j                   S r	   )r   r   objs     r   r   zTestDefectDetection.get_defects2  s    {{r5   N)r_   r`   ra   r   r
   r5   r   rf   rf   0  s    r5   rf   c                   B    e Zd Z G d dej                        Zd Zd Zy)TestDefectCapturec                       e Zd ZdZd Zy)TestDefectCapture.CapturePolicyNc                 :    | j                   j                  |       y r	   )capturedappend)r   ri   r   s      r   register_defectz/TestDefectCapture.CapturePolicy.register_defect:  s    MM  (r5   )r_   r`   ra   ro   rq   r
   r5   r   CapturePolicyrm   8  s    	)r5   rr   c                 B    | j                  t                     | _        y )N)ro   )rr   listr   )r   s    r   setUpzTestDefectCapture.setUp=  s    (($&(9r5   c                 .    | j                   j                  S r	   )r   ro   rh   s     r   r   zTestDefectCapture.get_defects@  s    {{###r5   N)r_   r`   ra   r   EmailPolicyrr   ru   r   r
   r5   r   rk   rk   6  s    )** )
:$r5   rk   c                   r    e Zd Zej                  Z ej
                  d      ZdZej                  d        Z	y)TestDefectRaisingT)raise_on_defectc              #   `   K   | j                  |      5  d  d d d        y # 1 sw Y   y xY wwr	   )assertRaisesr   s     r   r   zTestDefectRaising._raise_pointJ  s+     v& 		 	 	s   ."	.+.N)
r_   r`   ra   r   r   cloner   rc   rd   r   r
   r5   r   ry   ry   D  s:    ##FV\\$/FN r5   ry   __main__)r   unittestrc   emailr   r   test.test_emailr   r   rf   rk   ry   r_   mainr
   r5   r   <module>r      sj         )dF dFN	/= $ $	 	 zHMMO r5   