a ze@sddlZddlZddlZddlZddlZddlZddlZddlZddlZ ddl Z ddl Z ddl m Z ddlmZddlmZmZddlmZz ddlZWneydZYn0e je jedZedurejZnGdddeZGd d d ZeefZ edure ej!f7Z Gd d d eej"Z#e$ed Gddde#Z%Gdddej&Z'ddZ(GdddejZ)GdddZ*Gddde*Z+GdddZ,Gddde,Z-Gddde-Z.Gd d!d!e-Z/Gd"d#d#Z0Gd$d%d%e0e*ej"Z1Gd&d'd'e0e*ej"Z2Gd(d)d)e*ej"Z3Gd*d+d+e+ej"Z4Gd,d-d-ej"Z5Gd.d/d/ej"Z6Gd0d1d1ej"Z7Gd2d3d3Z8e$ed Gd4d5d5e7Z9Gd6d7d7ej"Z:e;d8kre<dS)9N)support) socket_helper)NNTP GroupInfo)patchz keycert3.pemc@seZdZdZdS)SSLErrorzThis will never be raised.N)__name__ __module__ __qualname__reasonr r E/opt/bitninja-python-dojo/embedded/lib/python3.9/test/test_nntplib.pyrsrc@seZdZddZddZddZddZd d Zd d Zd dZ ddZ ddZ ddZ ddZ ddZeddddZddZd1d d!Zedd"d#d$Zd%d&Zd'd(Zd)d*Zed+d,Zd-d.Zd/d0ZdS)2NetworkedNNTPTestsMixincCs|j}|tt|dSN)serverZ getwelcome assertEqualstrtype)selfwelcomer r r test_welcome(s z$NetworkedNNTPTestsMixin.test_welcomecCs>|j\}}||d||D]}|tt|q$dS)Nz100 )rhelp assertTrue startswithrrr)rresplinesliner r r test_help,sz!NetworkedNNTPTestsMixin.test_helpcCsH|j\}}t|dkrD|tt|d|tt|djdSNr)rlistlenrrrrgrouprrgroupsr r r test_list2s z!NetworkedNNTPTestsMixin.test_listcCsL|j|j\}}t|dkrH|tt|d|tt|djdSr) rr GROUP_PATr rrrrr!r"r r r test_list_active8s z(NetworkedNNTPTestsMixin.test_list_activecCsV|tj}|jdWdn1s.0Y|jj}||d|dS)NZXYZZYz500 ) assertRaisesnntplibNNTPPermanentErrorrZ _shortcmd exceptionresponserr)rcmrr r r test_unknown_command>s*z,NetworkedNNTPTestsMixin.test_unknown_commandcCsXtjtjdd}|j|\}}t|dkrT||dt||dj t dS)N)Zdaysr) datetimedateZtodayZ timedeltarZ newgroupsr assertIsInstancerr!r)rdtrr#r r r test_newgroupsDs  z&NetworkedNNTPTestsMixin.test_newgroupscsbfdd}jj}||j|jj}||jd}|ddS)Ncs|tj|dSr)r1r assertNotIn GROUP_NAME)descrr r _check_descNs z=NetworkedNNTPTestsMixin.test_description.._check_descz zk.brrtt.baz)r descriptionr5assertInDESCr%r)rr8r6r r7r test_descriptionMs  z(NetworkedNNTPTestsMixin.test_descriptioncCs^|j|j\}}||dp(|d|||t||j}|||j |jdS)Nz215 z282 ) r descriptionsr%rrr1dictr5rr:)rrZdescsr6r r r test_descriptions]s  z)NetworkedNNTPTestsMixin.test_descriptionscCs|j|j}|dt||\}}}}}|||j||t||t||t||||| d|dS)N211 ) rr!r5rr r1intassertLessEqualrr)rresultrcountfirstlastr!r r r test_groupfs    z"NetworkedNNTPTestsMixin.test_groupcCs<|j\}}||tj||jd||jddS)Nii)rr0r1r/assertGreaterEqualZyearrDrrr0r r r test_dateqsz!NetworkedNNTPTestsMixin.test_datecCsF||t||hd|D]}||ttdfq(dS)N>from references message-id:linesr0:bytessubject)r1r?rJkeysvaluesrr)rart_dictvr r r _check_art_dictxs    z'NetworkedNNTPTestsMixin._check_art_dictc Csz|j|j\}}}}}|j|d|\}}t|dkrD|d|d\}}|||d|||||dS)NrArzno articles retrieved) rr!r5xoverr skipTestrJrDrW) rrrFrGrHnamerart_numrUr r r test_xovers    z"NetworkedNNTPTestsMixin.test_xoverTzHtemporarily skipped until a permanent solution is found for issue #28971c Cs|j|j\}}}}}|d}|j|df\}}|d\}} || |j||f\}}|d\}} |||||||| dS)N r)rr!r5overrWrJrD) rrrFrGrHrZstartrr[rUr r r test_overs     z!NetworkedNNTPTestsMixin.test_overcCsL|j|j\}}}}}|jd|\}}|D]}|tt|dq.dS)NrR)rr!r5Zxhdrrrr)rrrFrGrHrZrrr r r test_xhdrsz!NetworkedNNTPTestsMixin.test_xhdrNcCsR||tj|dur$||j||jD]}||tq*||jdddS)Nr^).s. . )r1r(Z ArticleInforZnumberrbytesr4)rrarticler[rr r r check_article_resps  z*NetworkedNNTPTestsMixin.check_article_respzFIXME: see bpo-32128c s\|j|j\}}}}}|||dfD]^}z|j|\}}Wn@tjy~}z&|jds^WYd}~q&WYd}~n d}~00qq&|d| |d|| ||||j |\}} | |d|| || ||j |\}} | |d|| || |ddfd d |j D} fd d | j D} || | d g| j dS) Nrbz423 z(could not find a suitable article numberz221 z222 z220 cSs |dS)Ns X-Antivirus)r)rr r r z@NetworkedNNTPTestsMixin.test_article_head_body..csg|]}|s|qSr r .0rZ blacklistr r szBNetworkedNNTPTestsMixin.test_article_head_body..csg|]}|s|qSr r rkrmr r rnsrj)rr!r5headr(NNTPTemporaryErrorr+rrYrrhbodyrgrr) rrrFrGrHrZr[roerqrgZfiltered_head_linesZfiltered_linesr rmr test_article_head_bodys, " z.NetworkedNNTPTestsMixin.test_article_head_bodycsDfdd}jjd|jj\}}||dS)Ncs(|d}|ttfd|dS)NLIST OVERVIEW.FMT)r1rtupler;)capsZ caps_listr7r r _check_capssz>NetworkedNNTPTestsMixin.test_capabilities.._check_caps)rJr nntp_versiongetcapabilitiesZ capabilities)rrxrrwr r7r test_capabilitiess  z)NetworkedNNTPTestsMixin.test_capabilitiescCs&d}d}|jtj|jj||dddS)NZ notarealuserZnotarealpasswordF)userpasswordusenetrc)r'r( NNTPErrorrlogin)rZbaduserZbadpwr r r test_zlogins z#NetworkedNNTPTestsMixin.test_zlogincCs*t|}z|jWd|_nd|_0dSr)rrquit)rclsr r r test_zzquits z#NetworkedNNTPTestsMixin.test_zzquitcCsJdd}t|D]4}|ds qt||}t|s4qt||||qdS)Ncstfdd}|S)Ncs8t|j|Wdn1s*0YdSr)rtransient_internet NNTP_HOSTr7methr r wrappedszHNetworkedNNTPTestsMixin.wrap_methods..wrap_meth..wrapped) functoolswraps)rrr rr wrap_methsz7NetworkedNNTPTestsMixin.wrap_methods..wrap_methZtest_)dirrgetattrcallablesetattr)rrrZrr r r wrap_methodss   z$NetworkedNNTPTestsMixin.wrap_methodscCs@|t"|j|jdddWdn1s20YdS)NrFtimeoutr)r' ValueError NNTP_CLASSrr7r r r test_timeouts z$NetworkedNNTPTestsMixin.test_timeoutc sfdd}z|j|jtjdd*|||Wdn1sV0Y|||j|jtjddWdn1s0Y||WnNty}z4t d|j rt d|d|jWYd}~n d}~00dS)Nc s8tdsdSz Wnttfy2YdS0dS)NfileFT)hasattrrOSErrorEOFErrorr rr r is_connected s  zANetworkedNNTPTestsMixin.test_with_statement..is_connectedFr(?i)KEY.TOO.SMALLzGot  connecting to )rrrINTERNET_TIMEOUTrr assertFalserrresearchr unittestSkipTest)rrssl_errr rr test_with_statement s.  , & z+NetworkedNNTPTestsMixin.test_with_statement)N)rr r rrr$r&r-r3r=r@rIrLrWr\rZskipIfrarcrhrsr|rr classmethodrrrr r r r r&s2          rc@s8eZdZdZdZdZdZeZe ddZ e ddZ d S) NetworkedNNTPTestsznews.trigofacile.comfr.comp.lang.pythonzfr.comp.lang.*Pythonc Cstdt|jz|j|jtjdd|_Wnvty}z8t d|j rlt |d|d|jWYd}~n0d}~0tyt |d|jYn0Wdn1s0YdS)NZnetworkFrrz got rz got EOF error on connecting to )rZrequiresrrrrrrrrrr rr EOF_ERRORS)rrr r r setUpClass<s"    zNetworkedNNTPTests.setUpClasscCs|jdur|jdSr)rr)rr r r tearDownClassNs z NetworkedNNTPTests.tearDownClassN) rr r rr5r%r<rrrrrr r r r r3s rrequires SSL supportc@s0eZdZdZdZdZdZeeddZ dZ dZ dS)NetworkedNNTP_SSLTestsz nntp.aioe.orgz aioe.testzaioe.*testNNTP_SSLN) rr r rr5r%r<rr(rr$ test_starttlsr r r r rSs rc@s<eZdZddZddZddZddZd d Zd d Zd S) _NNTPServerIOcCs>tj|t|_t|_||_|j|jj|j dSr) io RawIOBase__init__BytesIOc2ss2chandlerr`readline push_data)rrr r r rss    z_NNTPServerIO.__init__cCsdSNTr r7r r r readable|sz_NNTPServerIO.readablecCsdSrr r7r r r writablesz_NNTPServerIO.writablecCs4|j}|jdd|j||j|dS)Nrry)rtellseekwrite)rdataposr r r rs  z_NNTPServerIO.push_datacCs4|j}|j||j||jt|Sr)rrrrrprocess_pendingr )rbrr r r rs     z_NNTPServerIO.writecCs2|j|jt|}t|}||d|<|Sr)rrrreadr )rbufrnr r r readintos   z_NNTPServerIO.readintoN) rr r rrrrrrr r r r rns  rcCst|}t||}||fSr)rrBufferedRWPair)rsiorr r r make_mock_files rc@seZdZdddZddZdS) NNTPServerNcCs||_||_||dSr)rhostZ _base_init)rfr readermoder r r rszNNTPServer.__init__cCs|j|`dSr)rcloser7r r r _closes zNNTPServer._close)N)rr r rrr r r r rs rcs4eZdZdZfddZfddZddZZS)MockedNNTPTestsMixinNcst|dSrsupersetUp make_serverr7 __class__r r rs zMockedNNTPTestsMixin.setUpcst|`dSr)rtearDownrr7rr r rs zMockedNNTPTestsMixin.tearDowncOs:||_t|j\|_}t|dg|Ri||_|jS)Nz test.server) handler_classrrrrr)rargskwargsrr r r rs z MockedNNTPTestsMixin.make_server)rr r rrrr __classcell__r r rr rs  rcseZdZfddZZS)MockedNNTPWithReaderModeMixincst|jdddS)NT)rrr7rr r rs z#MockedNNTPWithReaderModeMixin.setUp)rr r rrr r rr rsrc@seZdZdZddZddZddZdd Zd d Zd d Z ddZ ddZ ddZ ddZ ddZddZd7ddZddZdd Zd8d!d"Zd#d$Zd%d&Zdd'd(d)Zdd'd*d+Zd,Zd-Zed.eZd9d/d0Zd:d1d2Zd;d3d4Zd5d6ZdS)< NNTPv1Handlerz200 NNTP mock servercCs0d|_d|_||_||_d|_d|_|dS)NFT)in_body allow_posting _readline _push_data _logged_in _user_senthandle_welcome)rrrr r r r`szNNTPv1Handler.startcCs t|ddS)Nutf-8surrogateescape)rrrr r r _decodeszNNTPv1Handler._decodec Cs@|jrt|}|sdS|j||dkrq.qz0|j\}}||d|jiWd|_d|_d|_nd|_d|_d|_0||}|sdS|dstd||dd}| ^}}t |d| d}|dur| qtz ||Wn6t y"}ztd||WYd}~qtd}~00|jrt||f|_g|_qtdS) NrerqF z line doesn't end with \r\n: {!r}Zhandle_zcommand failed: {!r})rrrqappendZ body_callbackrendswithrformatsplitrupperhandle_unknown Exception)rrrtokenscmdrrr r r rsB       & zNNTPv1Handler.process_pendingcCs d|_dSr)rr7r r r expect_bodyszNNTPv1Handler.expect_bodycCs||dSr)rrr r r rszNNTPv1Handler.push_datacCs4t|}d|d}|d}||dS)Nrr)textwrapdedentjoin splitlinesencoder)rZlitr r r push_lits  zNNTPv1Handler.push_litcCs|ddS)Nz 500 What?rr7r r r rszNNTPv1Handler.handle_unknowncCs||jdSr)rrr7r r r rszNNTPv1Handler.handle_welcomecCs|ddSNz205 Bye!rr7r r r handle_QUITszNNTPv1Handler.handle_QUITcCs|ddS)N111 20100914001155rr7r r r handle_DATEszNNTPv1Handler.handle_DATEcCs(|dkr|dn|d|dS)Nrz$211 486 761 1265 fr.comp.lang.pythonz411 No such group {})rr)rr!r r r handle_GROUPs zNNTPv1Handler.handle_GROUPcCs|ddS)Nz 100 Legal commands authinfo user Name|pass Password|generic date help Report problems to .rr7r r r handle_HELP szNNTPv1Handler.handle_HELPNcCsJ|dur|dn2|dkr(|dn|dkr<|dn |ddS)N412 No newsgroup selected3000234"223 3000234 <45223423@example.com><45223423@example.com>223 0 <45223423@example.com>430 No Such Article FoundrrZ message_specr r r handle_STAT)s   zNNTPv1Handler.handle_STATcCs|ddS)N*223 3000237 <668929@example.org> retrievedrr7r r r handle_NEXT3szNNTPv1Handler.handle_NEXTcCs|ddS)N,223 3000234 <45223423@example.com> retrievedrr7r r r handle_LAST6szNNTPv1Handler.handle_LASTcCs|dur|dn|dkr<|dkr0|dq|dnZ|dkrP|dnF|dkr|d krl|d q|d kr|d q|d n |ddS)Na 215 Newsgroups in form "group high low flags". comp.lang.python 0000052340 0000002828 y comp.lang.python.announce 0000001153 0000000993 m free.it.comp.lang.python 0000000002 0000000002 y fr.comp.lang.python 0000001254 0000000760 y free.it.comp.lang.python.learner 0000000000 0000000001 y tw.bbs.comp.lang.python 0000000304 0000000304 y .ACTIVE *distutils*z 215 Newsgroups in form "group high low flags" gmane.comp.python.distutils.devel 0000014104 0000000001 m gmane.comp.python.distutils.cvs 0000000000 0000000001 m .zW 215 Newsgroups in form "group high low flags" .rua 215 Order of fields in overview database. Subject: From: Date: Message-ID: References: Bytes: Lines: Xref:full . NEWSGROUPScomp.lang.pythonz 215 Descriptions in form "group description". comp.lang.python The Python computer language. .comp.lang.python*z 215 Descriptions in form "group description". comp.lang.python.announce Announcements about the Python language. (Moderated) comp.lang.python The Python computer language. .zW 215 Descriptions in form "group description". .z501 Unknown LIST keywordr)ractionZparamr r r handle_LIST9s       zNNTPv1Handler.handle_LISTcCs|dkr$|dkr$|dkr$|dnZ|dkrH|dkrH|dkrH|dn6|dkrt|dvrt|dkrt|d d d n |d dS) NrZ20100913Z082004a 230 list of newsarticles (NNTP v2) created after Mon Sep 13 08:20:04 2010 follows .Z100913a 230 list of newsarticles (NNTP v1) created after Mon Sep 13 08:20:04 2010 follows .)Z20100101Z100101Z090000z too long linei z .zK 230 An empty list of newsarticles follows .r)rr!date_strtime_strr r r handle_NEWNEWSos"   zNNTPv1Handler.handle_NEWNEWScCs"|dkr|dn |ddS)Nz57-59uK224 Overview information for 57-58 follows 57 Re: ANN: New Plone book with strong Python (and Zope) themes throughout Doug Hellmann Sat, 19 Jun 2010 18:04:08 -0400 <4FD05F05-F98B-44DC-8111-C6009C925F0C@gmail.com> 7103 16 Xref: news.gmane.io gmane.comp.python.authors:57 58 Looking for a few good bloggers Doug Hellmann Thu, 22 Jul 2010 09:14:14 -0400 6683 16 59 Re: Message d'erreur incompréhensible (par moi) Eric Brunel Wed, 15 Sep 2010 18:09:15 +0200 <4c90ec87$0$32425$ba4acef3@reader.news.orange.fr> 1641 27 Xref: saria.nerim.net fr.comp.lang.python:1265 . z1 224 No articles .rr r r r handle_XOVERs zNNTPv1Handler.handle_XOVER)rqcCsB|dur.|jr"|d|q>|dn|d||_dS)Nz+340 Input article; end with .440 Posting not permitted240 Article received OKrrr posted_body)rrqr r r handle_POSTs    zNNTPv1Handler.handle_POSTcCsJ|dur6|jr*|dkr*|d|qF|dn|d||_dS)N+z%335 Send it; end with .435 Article not wanted235 Article transferred OKr )r message_idrqr r r handle_IHAVEs    zNNTPv1Handler.handle_IHAVEz From: "Demo User" Subject: I am just a test article Content-Type: text/plain; charset=UTF-8; format=flowed Message-ID: ui This is just a test article. ..Here is a dot-starting line. -- Signed by André.z cCsd|dur|dn6|dkr(|dn"|dkr<|dn|ddS||j|ddS)N"220 3000237 <45223423@example.com>r 220 0 <45223423@example.com>r"220 3000234 <45223423@example.com>r .)rsample_articler r r r handle_ARTICLEs     zNNTPv1Handler.handle_ARTICLEcCsd|dur|dn6|dkr(|dn"|dkr<|dn|ddS||j|ddS)N"221 3000237 <45223423@example.com>r 221 0 <45223423@example.com>r"221 3000234 <45223423@example.com>r r+)r sample_headr r r r handle_HEADs     zNNTPv1Handler.handle_HEADcCsd|dur|dn6|dkr(|dn"|dkr<|dn|ddS||j|ddS)N"222 3000237 <45223423@example.com>r 222 0 <45223423@example.com>r"222 3000234 <45223423@example.com>r r+)r sample_bodyr r r r handle_BODYs     zNNTPv1Handler.handle_BODYcCsj|jr|dnT|dkr>|jr,|dqf|dd|_n(|dkrX|dd|_ntd|dS) Nz502 Already Logged Inr}z 482 User Credential Already Sentz381 Password RequiredTpassz281 Login SuccessfulzUnknown cred type {})rrrrr)rZ cred_typerr r r handle_AUTHINFOs    zNNTPv1Handler.handle_AUTHINFO)N)NN)N)N)N)rr r rr`rrrrrrrrrrrrrrrrrr"r'r1r6r,r-r2r7r9r r r r rs8 &  6     rc@s&eZdZddZddZdddZdS) NNTPv2HandlercCs0d}|js||dn||ddS)Na 101 Capability list: VERSION 2 3 IMPLEMENTATION INN 2.5.1{} HDR LIST ACTIVE ACTIVE.TIMES DISTRIB.PATS HEADERS NEWSGROUPS OVERVIEW.FMT OVER POST READER .z AUTHINFO USERr9)rrrrfmtr r r handle_CAPABILITIESs z!NNTPv2Handler.handle_CAPABILITIEScCs tddS)Nz3MODE READER sent despite READER has been advertised)r)r_r r r handle_MODE szNNTPv2Handler.handle_MODENcCs ||Sr)rr r r r handle_OVER#szNNTPv2Handler.handle_OVER)N)rr r r=r?r@r r r r r: sr:cseZdZfddZZS)CapsAfterLoginNNTPv2Handlercs |js|dn tdS)Nz480 You must log in.)rrrr=r7rr r r=*s z/CapsAfterLoginNNTPv2Handler.handle_CAPABILITIES)rr r r=rr r rr rA'srAc@s$eZdZddZddZddZdS)ModeSwitchingNNTPv2HandlercCs d|_dSNF) _switchedr7r r r r4sz#ModeSwitchingNNTPv2Handler.__init__cCs0d}|jr||dn||ddS)Na 101 Capability list: VERSION 2 3 IMPLEMENTATION INN 2.5.1 HDR LIST ACTIVE ACTIVE.TIMES DISTRIB.PATS HEADERS NEWSGROUPS OVERVIEW.FMT OVER POST {}READER .r9zMODE-)rDrrr;r r r r=7s z.ModeSwitchingNNTPv2Handler.handle_CAPABILITIEScCsd|_|ddS)NTz200 Posting allowed)rDr)rZwhatr r r r?Gsz&ModeSwitchingNNTPv2Handler.handle_MODEN)rr r rr=r?r r r r rB1srBcseZdZfddZddZddZddZd d Zd d Zd dZ ddZ ddZ ddZ ddZ ddZddZddZddZdd Zd!d"Zd#d$Zd%d&Zd'd(Zd)d*Zd+d,Zd-d.Zd/d0Zd1d2Zd3d4Zd5Zd6d7Zd8d9Zd:d;Z dd?Z"d@dAZ#Z$S)BNNTPv1v2TestsMixincstdSr)rrr7rr r rOszNNTPv1v2TestsMixin.setUpcCs||jj|jjdSr)rrrrr7r r r rRszNNTPv1v2TestsMixin.test_welcomecCs<|jdkr|d|jj|jdd|d|jjdS)NryAUTHINFOtestusertestpw)rzr;r_capsrr4r7r r r test_authinfoUs z NNTPv1v2TestsMixin.test_authinfoc Cs:|j\}}||d||tdddddddS)Nr r 7)rr0rr/rKr r r rL]s zNNTPv1v2TestsMixin.test_datecCs6||jj|j}||d||jjdSr)rrclosedrrrr)rrr r r test_quitbs  zNNTPv1v2TestsMixin.test_quitcCs.|j\}}||d||gddS)Nz100 Legal commands)z8 authinfo user Name|pass Password|generic z datez helpz%Report problems to )rrr)rrrr r r rhs zNNTPv1v2TestsMixin.test_helpcCs~|j\}}|t|d|d}||tdddd|jd\}}|t|d|d }||td d d ddS) Nrbcomp.lang.python.announceZ 0000001153Z 0000000993mrryrz!gmane.comp.python.distutils.develZ 0000014104Z 0000000001)rrrr r)rrr#gr r r r$rs zNNTPv1v2TestsMixin.test_listcCs|jd\}}}||d||d||d|jd\}}}||d||d||d|tj}|jdWdn1s0Y||jjd|tj}|jWdn1s0Y||jjddS) N-r r r rzr r)rstatrr'r(rpr*r+)rrr[r&r,r r r test_stats      *(zNNTPv1v2TestsMixin.test_statcCs8|j\}}}||d||d||ddS)Nr-z<668929@example.org>)rnextrrrr[r&r r r test_nexts  zNNTPv1v2TestsMixin.test_nextcCs8|j\}}}||d||d||ddS)NrrVr )rrHrr[r r r test_lasts  zNNTPv1v2TestsMixin.test_lastcCs4|jd}||d|jd}||ddS)NrThe Python computer language.comp.lang.pythonxr9)rr:r)rr6r r r r=s   z#NNTPv1v2TestsMixin.test_descriptioncCsn|jd\}}||d||ddi|jd\}}||ddd|jd\}}||idS)Nrz-215 Descriptions in form "group description".r^rz4Announcements about the Python language. (Moderated))rrSr_)rr>rr"r r r r@s z$NNTPv1v2TestsMixin.test_descriptionscCs|jd\}}}}}||d|||d||d||d||d|tj}|jdWdn1s0Y|j}||j d|j dS)NrrBiiizcomp.lang.python.develz411 No such group) rr!rrrr'r(rpr*r+)rrrFrGrHr!r,excr r r rIs    *zNNTPv1v2TestsMixin.test_groupcCstdddddd}|jd|\}}d|j}|||||d d gtdddddd}|jd |\}}||d ||gdS) NrKrL rzS230 list of newsarticles (NNTP v{0}) created after Mon Sep 13 08:20:04 2010 followszBzBrz)230 An empty list of newsarticles follows)r/rnewnewsrrzr)rr2rZidsZexpectedr r r test_newnewss  zNNTPv1v2TestsMixin.test_newnewscCsZ|t|d||ddd||dd||dd||d d dS) Nrdr^ru-- Signed by André.rrjs.Here is a dot-starting line.sThis is just a test article.)rr decoderrr r r _check_article_bodys z&NNTPv1v2TestsMixin._check_article_bodycCs4|t|d||dd||dddS)Nrdrs&From: "Demo User" s7Message-ID: )rr rjr r r _check_article_headsz&NNTPv1v2TestsMixin._check_article_headcCsH|t|d||dd||dd||dddS)NrLrdrhrj)rr rmrkrjr r r _check_article_datasz&NNTPv1v2TestsMixin._check_article_datacCs$|j\}}||d|\}}}||d||d|||jd\}}||d|\}}}||d||d|||jd\}}||d|\}}}||d||d|||tj}|jdWdn1s0Y||jjd dS) Nr(rYr rVr*r)rr ) rrgrrnr'r(rpr*r+rrinfor[r&rr,r r r test_articles*               ,zNNTPv1v2TestsMixin.test_articlecCst}|jj|d\}}||d|\}}}||d||d||g|}||dt||| dt|dS)Nrr(rYr KFrom: "Demo User" Subject: I am just a test article UThis is just a test article. .Here is a dot-starting line. -- Signed by André. ) rrrrgrgetvaluerrasciirrrrrqr[r&rrr r r test_article_files$     z$NNTPv1v2TestsMixin.test_article_filecCs$|j\}}||d|\}}}||d||d|||jd\}}||d|\}}}||d||d|||jd\}}||d|\}}}||d||d|||tj}|jdWdn1s0Y||jjd dS) Nr.rYr rVr0r/rror ) rrorrmr'r(rpr*r+rpr r r test_heads*               ,zNNTPv1v2TestsMixin.test_headcCst}|jj|d\}}||d|\}}}||d||d||g|}||dt|| | dt|dS)Nrsr.rYr rtru) rrrrorrvrrrwrrrxr r r test_head_file-s$     z!NNTPv1v2TestsMixin.test_head_filecCs$|j\}}||d|\}}}||d||d|||jd\}}||d|\}}}||d||d|||jd\}}||d|\}}}||d||d|||tj}|jdWdn1s0Y||jjd dS) Nr3rYr rVr5r4rror ) rrqrrkr'r(rpr*r+rpr r r test_bodyAs*               ,zNNTPv1v2TestsMixin.test_bodycCst}|jj|d\}}||d|\}}}||d||d||g|}||dt|| | dt|dS)Nrsr3rYr rtru) rrrrqrrvrrrwrrrxr r r test_body_file\s$     z!NNTPv1v2TestsMixin.test_body_filec Cs||d||t|d|d\}}||d||ddddd d d d d |d\}}||dd|d\}}||dddS)Nz224 rlr9zEDoug Hellmann zGRe: ANN: New Plone book with strong Python (and Zope) themes throughoutzSat, 19 Jun 2010 18:04:08 -0400z0<4FD05F05-F98B-44DC-8111-C6009C925F0C@gmail.com>zZ7103Z16z*news.gmane.io gmane.comp.python.authors:57)rMrRr0rOrNrQrPxrefrbrryrR0Re: Message d'erreur incompréhensible (par moi))rrrr )rr overviewsr[r_r r r check_over_xover_respps(     z(NNTPv1v2TestsMixin.check_over_xover_respcCs"|jdd\}}|||dS)Nr~;)rrXrrrrr r r r\szNNTPv1v2TestsMixin.test_xovercCs |jd\}}|||dS)N)r~r)rr_rrr r r raszNNTPv1v2TestsMixin.test_oversFrom: "Demo User" Subject: I am just a test article Content-Type: text/plain; charset=UTF-8; format=flowed Message-ID: This is just a test article. .Here is a dot-starting line. -- Signed by André. cCsl|jj}|t|d||dd||dd||dd||dd ||d d dS) Nr]r^rers-- Signed by André. rg rhs ..Here is a dot-starting line. rs(From: "Demo User" )rr!rr rjr r r _check_posted_bodysz%NNTPv1v2TestsMixin._check_posted_bodycGsd|j}|||f}d|j_||}||jdd}|||f}d|j_||}||S)Nr ) sample_postrr!rreplace)rfunc file_factoryrpostZ func_argsrr r r _check_post_ihave_subsz(NNTPv1v2TestsMixin._check_post_ihave_subcGs|j|g|Rdti}||||j|g|Rdti}||||j|g|Rdtji}|||dd}|j|g|Rd|i}|||dd}|j|g|Rd|i}|||dS)NrcSst|jddS)NTkeependsiterrrr r r iterlinessz6NNTPv1v2TestsMixin.check_post_ihave..iterlinescSst|jddS)NFrrrr r r rs)rrfr bytearrayrr)rrZ success_resprrrr r r check_post_ihaves    z#NNTPv1v2TestsMixin.check_post_ihavecCsf||jjdd|j_|tj}|j|jWdn1sH0Y| |j j ddS)NrFr) rrrrrr'r(rprrr*r+rr,r r r test_posts, zNNTPv1v2TestsMixin.test_postcCsb||jjdd|tj }|jd|jWdn1sD0Y||jj ddS)Nr%r#zr$) rrZihaver'r(rprrr*r+rr r r test_ihaves . zNNTPv1v2TestsMixin.test_ihavecCs.tdddddd}|tj|jjd|dS)NrKrbrLrr)r/r'r( NNTPDataErrorrre)rr2r r r test_too_long_liness z&NNTPv1v2TestsMixin.test_too_long_lines)%rr r rrrJrLrQrr$rXr\r]r=r@rIrfrkrmrnrrryrzr{r|r}rr\rarrrrrrrrr r rr rEMsD     rEc@seZdZdZeZddZdS) NNTPv1TestsrbcCs:|j}||i||jjd||jjddS)Nrbrr{rrzZnntp_implementationrrwr r r test_capss  zNNTPv1Tests.test_capsN)rr r rzrrrr r r r rsrc@seZdZdZeZddZdS) NNTPv2Testsryc CsZ|j}||ddgddgdgggdgggd||jjd||jjd dS) N23ZINNz2.5.1ZUSER)rz ACTIVE.TIMESz DISTRIB.PATSZHEADERSrru)VERSIONZIMPLEMENTATIONrFZHDRrtZOVERZPOSTREADERrlz INN 2.5.1rrr r r rs  zNNTPv2Tests.test_capsN)rr r rzr:rrr r r r rsrc@seZdZdZeZddZdS)CapsAfterLoginNNTPv2TestsrycCs2||jji|jdd|d|jjdS)NrGrHr)rrrIrr;r7r r r test_caps_only_after_login sz4CapsAfterLoginNNTPv2Tests.test_caps_only_after_loginN)rr r rzrArrr r r r rsrc@seZdZdZeZddZdS)SendReaderNNTPv2TestsrycCs|d|jjdS)Nr)r;rrIr7r r r (test_we_are_in_reader_mode_after_connectsz>SendReaderNNTPv2Tests.test_we_are_in_reader_mode_after_connectN)rr r rzrBrrr r r r rsrc@sPeZdZddZddZddZddZd d Zd d Ze e d ddZ dS) MiscTestscsVfdd}|dd|dd|dd|dd|dd |d d |d d dS) Ncst||dSr)rr( decode_header)arr7r r givessz+MiscTests.test_decode_header..givesr9za plain headerz with extra spaces z%=?ISO-8859-15?Q?D=E9buter_en_Python?=uDébuter en Pythonz=?utf-8?q?Re=3A_=5Bsqlite=5D_probl=C3=A8me_avec_ORDER_BY_sur_des_cha?= =?utf-8?q?=C3=AEnes_de_caract=C3=A8res_accentu=C3=A9es?=uPRe: [sqlite] problème avec ORDER BY sur des chaînes de caractères accentuéesz,Re: =?UTF-8?B?cHJvYmzDqG1lIGRlIG1hdHJpY2U=?=uRe: problème de matricerr rrr r7r test_decode_headers     zMiscTests.test_decode_headercCsgd}|t|gdgd}|t|gdgd}|t|gdgd}|t|gdgd}|t|gdgd}|t|gd dS) N)Subject:From:Date: Message-ID: References:rQrP)rRrMr0rOrNrQrP)rrrrrBytes:Lines:)zsubject:zFROM:zDaTe:z message-ID:rzBYTES:r) rrrrrrQrP Xref:fullzDistribution:full) rRrMr0rOrNrQrPrZ distribution) rrrrrrrz Xref:FULLzDistribution:FULL)rrrrrrrrrRrMr0rOrNrQrPr)rr(Z_parse_overview_fmtrjr r r test_parse_overview_fmt.s0      z!MiscTests.test_parse_overview_fmtc Cstjdg}dg}t||}|\\}}||d||dddddd d d d d g}t||}|\\}}||dddg}t||}|\\}}||dd||dddS)Nrz3000234 I am just a test article "Demo User" 6 Oct 1998 04:38:40 -0500 <45223423@example.com> <45454@example.net> 1234 17 Xref: news.example.com misc.test:3000363rVzI am just a test articlez "Demo User" z6 Oct 1998 04:38:40 -0500r z<45454@example.net>Z1234Z17z"news.example.com misc.test:3000363rz3000234 I am just a test article "Demo User" 6 Oct 1998 04:38:40 -0500 <45223423@example.com> <45454@example.net> 1234 17 z3000234 I am just a test article "Demo User" 6 Oct 1998 04:38:40 -0500 <45223423@example.com> 1234 17 Xref: rN r9)r(Z_DEFAULT_OVERVIEW_FMTZ_parse_overviewr)rr<rZoverviewr[fieldsr r r test_parse_overviewVs6         zMiscTests.test_parse_overviewc shfdd}|dddddddd |d d dddddd |d d dddddd |d d dddddd dS)Ncst||tj|dSr)rr(Z_parse_datetimer/)rrcr7r r rsz,MiscTests.test_parse_datetime..givesZ19990623135624rRra819990623135624990623Z090623ir rr r7r test_parse_datetimes  zMiscTests.test_parse_datetimec sfdd}|ddddddd d |d dddddd d |d dddddddfdd}|dddd d|d ddd d|d dddddS)Nc sFt||||||}t|||ft|d||fdSrCr/rr(_unparse_datetime yMdhrTsrrr2r7r r rs z.MiscTests.test_unparse_datetime..givesrrRrrarrrrZ20000623rKrArbryrlZ20100605010203cs@t|||}t|||ft|d||fdSrCr/r0rr(rrrrrrr2r7r r rs 000000r rr r7r test_unparse_datetimes  zMiscTests.test_unparse_datetimec sfdd}|ddddddd d |d dddddd d |d dddddddfdd}|dddd d|d ddd d|d dddddS)Nc s0t||||||}t|d||fdSrrrr7r r rsz5MiscTests.test_unparse_datetime_legacy..givesrrRrrarrrrrZ000623rKrArbryrlZ100605rcs*t|||}t|d||fdSrrrr7r r rsrr rr r7r test_unparse_datetime_legacys  z&MiscTests.test_unparse_datetime_legacyrcCs|ttddS)Nr)rrr(r7r r r test_ssl_supportszMiscTests.test_ssl_supportN) rr r rrrrrrr skipUnlesssslrr r r r rs(.  rc@seZdZddZdS)PublicAPITestscCsD|ttdgd}tdur*|d|ttjt|dS)N__all__)rrNNTPReplyErrorrpr)NNTPProtocolErrorrrr)rrr(rrrsetr)rZ target_apir r r test_module_all_attributes  z(PublicAPITests.test_module_all_attributeN)rr r rr r r r rsrc@sDeZdZejZdddZddZddZdd Z d d Z d d Z dS)MockSocketTestsNc sGfddd}Gfddddgtd|L||| |jd||dWdn1sn0YWdn1s0Y|D]}||jqdS) NcseZdZfddZdS)zNMockSocketTests.check_constructor_error_conditions..mock_socket_modulecsSrr )addressr MockSocketr r create_connectionsz`MockSocketTests.check_constructor_error_conditions..mock_socket_module.create_connectionN)rr r rr rr r mock_socket_modulesrcs&eZdZfddZfddZdS)zFMockSocketTests.check_constructor_error_conditions..MockSocketcsddSrr r7) socket_closedr r rszLMockSocketTests.check_constructor_error_conditions..MockSocket.closecs }t|\}}||Sr)rr)socketmoderr>r)filesrr r makefiles  zOMockSocketTests.check_constructor_error_conditions..MockSocket.makefileN)rr r rrr )rrrr r rs rFznntplib.socketdummy)r}r~)rZassertRaisesRegex nntp_classrrP)rrZexpected_error_typeZexpected_error_msgrr~rrr )rrrrr "check_constructor_error_conditionss   L z2MockSocketTests.check_constructor_error_conditionscCs&Gdddt}||tj|jdS)Nc@seZdZdZdS)z1MockSocketTests.test_bad_welcome..Handlerz Bad WelcomeNrr r rr r r r Handlersr)rrr(rrrrr r r test_bad_welcomes z MockSocketTests.test_bad_welcomecCs&Gdddt}||tj|jdS)Nc@seZdZdZdS)zEMockSocketTests.test_service_temporarily_unavailable..Handlerz#400 Service temporarily unavailableNrr r r r rsr)rrr(rprrr r r $test_service_temporarily_unavailables z4MockSocketTests.test_service_temporarily_unavailablecCs&Gdddt}||tj|jdS)Nc@seZdZdZdS)zEMockSocketTests.test_service_permanently_unavailable..Handlerz#502 Service permanently unavailableNrr r r r rsr)rrr(r)rrr r r $test_service_permanently_unavailables z4MockSocketTests.test_service_permanently_unavailablecs,Gfdddt}d||tjdS)NcseZdZfddZdS)z6MockSocketTests.test_bad_capabilities..Handlercs|dSrrr7Zcapabilities_responser r r=szJMockSocketTests.test_bad_capabilities..Handler.handle_CAPABILITIESN)rr r r=r rr r rsrz201 bad capability)rrr(rrr rr test_bad_capabilitiess z%MockSocketTests.test_bad_capabilitiescs8d}d}Gfdddt}d||tj||dS)Nzt@e.comZpythoncseZdZfddZdS)z3MockSocketTests.test_login_aborted..Handlercs|dSrr)rrZauthinfo_responser r r9szCMockSocketTests.test_login_aborted..Handler.handle_AUTHINFON)rr r r9r rr r rsrz503 Mechanism not recognized)rrr(r))rrr~rr rr test_login_aborted sz"MockSocketTests.test_login_aborted)NN) rr r r(rrrrrrrrr r r r rs  rc@seZdZddZdS)bypass_contextcKs|Srr )sockrr r r wrap_socketszbypass_context.wrap_socketN)rr r rr r r r rsrc@seZdZeddZdS) MockSslTestscOstj|dti|S)NZ ssl_context)r(rr)rkwr r r rszMockSslTests.nntp_classN)rr r staticmethodrr r r r rsrc@s0eZdZddZddZeedddZdS) LocalServerTestscCstt}t|}|tj|j|fd|_|j| |jj t tj |dd |_| |jjddddS)N)targetrF)r)rrZ bind_portlisten threadingThread run_serverZ backgroundr`Z addCleanuprrZHOST __enter__nntp__exit__)rrportr r r r%s  zLocalServerTests.setUpcCs||\}}Wdn1s&0Yt}||||d}|d|}|dkrz|dq^|dkr||dt }| t |j |dd}||||d}q^|d kr|d qq^t d |q^Wdn1s 0YdS) Nrbs200 Server ready sCAPABILITIES s.101 Capability list: VERSION 2 STARTTLS . s STARTTLS s382 Begin TLS negotiation now T)Z server_sidesQUIT s 205 Bye! zUnexpected command {!r})accept contextlib ExitStack enter_contextrsendallrrrZ SSLContextZload_cert_chaincertfilerrr)rrclientr>cleanupreaderrcontextr r r r1s2*       zLocalServerTests.run_serverrcCs`|jj}|jj}|j|||jj|||jj||jjtj|t |jjdSr) rrrZstarttlsZassertNotEqualr1rZ SSLSocketr'r)rrrr r r rQs zLocalServerTests.test_starttlsN) rr r rrrrrrr r r r r$s  r__main__)=rrr/rrrrr(Zos.pathosrrrrZ test.supportrrrZ unittest.mockrr ImportErrorpathrdirname__file__r rrrrrrZ SSLEOFErrorZTestCaserrrrrrrrrrr:rArBrErrrrrrrrrrrmainr r r r s~          , G    # N <