a 8êdgÀ.ã@s”ddlZddlZddlZddlmZddlmZddlmZGdd„dƒZGdd„deeƒZ Gd d „d eeƒZ Gd d „d eeƒZ e d kre  ¡dS)éN)Úpolicy)Úerrors)Ú TestEmailBasec@s–eZdZejZdZejdd„ƒZdd„Z dd„Z e   d¡Z d d „Zd d „Zd d„Zdd„Zdd„Zdd„Zdd„Zdd„Zdd„Zdd„Zdd„ZdS) ÚTestDefectsBaseFccs dVdS©N©©ÚselfÚdefectrrú@/usr/local/lib/python3.9/test/test_email/test_defect_handling.pyÚ _raise_pointszTestDefectsBase._raise_pointcCs–t d¡}| tj¡| |¡}Wdƒn1s60Y|jrJdS| d¡}| t |dƒ¡|  t |  |¡ƒd¡|  |  |¡dtj¡dS)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 --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Úinnerrrr Útest_same_boundary_inner_outers %(  ÿz.TestDefectsBase.test_same_boundary_inner_outercCs¤t d¡}| tj¡| |¡}Wdƒn1s60Y|jrJdS| | ¡t ¡|  t |  |¡ƒd¡| |  |¡dtj¡| |  |¡dtj ¡dS)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-- érr)rrr rÚNoBoundaryInMultipartDefectrrrrÚstrrrrÚ!MultipartInvariantViolationDefect©r rrrrr Útest_multipart_no_boundaryAs ( ÿÿ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==-- cCsz| tj¡"| |j d¡¡}Wdƒn1s40Y|jrHdS| t|  |¡ƒd¡|  |  |¡dtj¡dS)Nz" Content-Transfer-Encoding: base64rr) r rZ-InvalidMultipartContentTransferEncodingDefectrÚ multipart_msgÚformatrrrrr©r rrrr Útest_multipart_invalid_cteusÿÿÿ" ÿz*TestDefectsBase.test_multipart_invalid_ctecCs6|jr dS| |j d¡¡}| t| |¡ƒd¡dS)NÚr©rrr%r&rrrr'rrr Útest_multipart_no_cte_no_defect€s z/TestDefectsBase.test_multipart_no_cte_no_defectcCsJ|jr dSdD]6}| |j d|¡¡}| t| |¡ƒdd|¡qdS)N)Z7bitZ8bitZBINaryz Content-Transfer-Encoding: rzcte=r*)r Zcterrrr Ú"test_multipart_valid_cte_no_defect…s  ÿz2TestDefectsBase.test_multipart_valid_cte_no_defectcCs¤t d¡}| tj¡| |¡}Wdƒn1s60Y|jrJdS| t|dƒ¡|  t |  |¡ƒd¡|  |  |¡dtj¡|  |  |¡dtj ¡dS)Na From: "Allison Dunlap" 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 rrr)rrr rr rrrrrrrrr"r#rrr Útest_lying_multipartŒs ( ÿÿz$TestDefectsBase.test_lying_multipartcCsŒt d¡}| tj¡| |¡}Wdƒn1s60Y|jrJdS| d¡ d¡}| t |  |¡ƒd¡|  |  |¡dtj¡dS)Na± Content-Type: multipart/mixed; boundary="AAA" From: Mail Delivery Subsystem 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-- rr) rrr rrrrrrrrr)r rZouterZbadrrr Útest_missing_start_boundary¡s ( ÿz+TestDefectsBase.test_missing_start_boundarycCsª| tj¡| d¡}Wdƒn1s,0Y|jr@dS| | ¡dg¡| | ¡d¡| t|  |¡ƒd¡|  |  |¡tjg¡| |  |¡dj d¡dS)Nz Line 1 Subject: test bodyÚSubjectÚbodyrrz Line 1 ) r rZ#FirstHeaderLineIsContinuationDefectrrrÚkeysrrrÚassertDefectsEqualÚliner'rrr Ú&test_first_line_is_continuation_headerÇs(  ÿz6TestDefectsBase.test_first_line_is_continuation_headercCs|| tj¡| d¡}Wdƒn1s,0Y|jr@dS| | ¡dg¡| | ¡d¡| |  |¡tjg¡dS)Nz&Subject: test not a header To: abc b r/znot a header To: abc b ) r rZ MissingHeaderBodySeparatorDefectrrrr1rr2rr'rrr Ú"test_missing_header_body_separatorÒs(  ÿz2TestDefectsBase.test_missing_header_body_separatorcCs|t d¡}| |¡}| tj¡|jdd}Wdƒn1sB0Y|jrVdS| |d¡|  |  |¡tjg¡dS)Nz¹ Subject: test MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 dmk T©Údecodeóvi) rrrr rZInvalidBase64PaddingDefectrrrr2r©r rrÚpayloadrrr Ú"test_bad_padding_in_base64_payloadßs  *   ÿz2TestDefectsBase.test_bad_padding_in_base64_payloadcCs|t d¡}| |¡}| tj¡|jdd}Wdƒn1sB0Y|jrVdS| |d¡|  |  |¡tjg¡dS)Nz½ Subject: test MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 dmk=== Tr6r8) rrrr rZInvalidBase64CharactersDefectrrrr2rr9rrr Ú$test_invalid_chars_in_base64_payloadðs  *   ÿz4TestDefectsBase.test_invalid_chars_in_base64_payloadcCs|t d¡}| |¡}| tj¡|jdd}Wdƒn1sB0Y|jrVdS| |d¡|  |  |¡tjg¡dS)Nz» Subject: test MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 abcde Tr6sabcde) rrrr rZInvalidBase64LengthDefectrrrr2rr9rrr Ú%test_invalid_length_of_base64_payloads  *   ÿz5TestDefectsBase.test_invalid_length_of_base64_payloadcCsŽt d¡}| tj¡| |¡}Wdƒn1s60Y|jrJdS| t|  ¡ƒd¡| |  d¡  ¡d¡|  |  |¡tjg¡dS)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 rrzAlternative 2 ) rrr rZCloseBoundaryNotFoundDefectrrrrrr2rr#rrr Útest_missing_ending_boundarys (  ÿz,TestDefectsBase.test_missing_ending_boundaryN)Ú__name__Ú __module__Ú __qualname__rÚdefaultrÚ contextlibÚcontextmanagerr rr$rrr%r(r+r,r-r.r4r5r;r<r=r>rrrr r s$ /  &  rc@seZdZdd„ZdS)ÚTestDefectDetectioncCs|jSr)r ©r Úobjrrr r2szTestDefectDetection.get_defectsN)r?r@rArrrrr rE0srEc@s.eZdZGdd„dejƒZdd„Zdd„ZdS)ÚTestDefectCapturec@seZdZdZdd„ZdS)zTestDefectCapture.CapturePolicyNcCs|j |¡dSr)ÚcapturedÚappend)r rGr rrr Úregister_defect:sz/TestDefectCapture.CapturePolicy.register_defect)r?r@rArIrKrrrr Ú CapturePolicy8srLcCs|jtƒd|_dS)N)rI)rLÚlistr)r rrr ÚsetUp=szTestDefectCapture.setUpcCs|jjSr)rrIrFrrr r@szTestDefectCapture.get_defectsN)r?r@rArZ EmailPolicyrLrNrrrrr rH6srHc@s0eZdZejZejddZdZejdd„ƒZ dS)ÚTestDefectRaisingT)Zraise_on_defectccs4| |¡dVWdƒn1s&0YdSr)Z assertRaisesrrrr r Js zTestDefectRaising._raise_pointN) r?r@rArrZclonerrCrDr rrrr rODs  rOÚ__main__)rZunittestrCZemailrrZtest.test_emailrrrErHrOr?Úmainrrrr Ús   )