python (3.11.7)

(root)/
lib/
python3.11/
test/
__pycache__/
test_nntplib.cpython-311.opt-1.pyc

eddlZddlZddlZddlZddlZddlZddlZddlZddl	Z	ddl
Z
ddlmZddl
mZmZejdZddlmZmZddlmZ	ddlZn
#e$rdZYnwxYwejejeddZeejZnGd	d
eZGddZe e!fZ"ee"ej#fz
Z"Gd
deej$Z%ej&edGdde%Z'Gddej(Z)dZ*GddejZ+GddZ,Gdde,Z-GddZ.Gdde.Z/Gdd e/Z0Gd!d"e/Z1Gd#d$Z2Gd%d&e2e,ej$Z3Gd'd(e2e,ej$Z4Gd)d*e,ej$Z5Gd+d,e-ej$Z6Gd-d.ej$Z7Gd/d0ej$Z8Gd1d2ej$Z9Gd3d4Z:ej&edGd5d6e9Z;Gd7d8ej$Z<e=d9krej>dSdS):N)support)
socket_helperwarnings_helpernntplib)NNTP	GroupInfo)patchcertdatazkeycert3.pemceZdZdZdZdS)SSLErrorz6Non-existent exception class when we lack SSL support.zThis will never be raised.N)__name__
__module____qualname____doc__reasonE/BuggyBox/python/3.11.7/bootstrap/lib/python3.11/test/test_nntplib.pyrrsDD-rrceZdZdZdZdZdZdZdZdZ	dZ
d	Zd
ZdZ
dZd
ZejdddZdZddZejdddZdZdZdZedZdZdZdS)NetworkedNNTPTestsMixinNc|j}|tt	|dSN)server
getwelcomeassertEqualstrtype)selfwelcomes  rtest_welcomez$NetworkedNNTPTestsMixin.test_welcome*s7+((**d7mm,,,,,rc|j\}}||d||D]*}|t
t
|+dS)Nz100 )rhelp
assertTrue
startswithrrr)rresplineslines    r	test_helpz!NetworkedNNTPTestsMixin.test_help.sqk&&((e//666	.	.DS$t**----	.	.rc*|j\}}t|dkrc|tt|d|tt|djdSdSNr)rlistlenrrrrgrouprr%groupss   r	test_listz!NetworkedNNTPTestsMixin.test_list4sy{''))fv;;??YVAY888S$vay"7"788888?rc6|j|j\}}t|dkrc|t
t
|d|tt
|djdSdSr*)	rr+	GROUP_PATr,rrrrr-r.s   rtest_list_activez(NetworkedNNTPTestsMixin.test_list_active:s}{''77fv;;??YVAY888S$vay"7"788888?rc|tj5}|jddddn#1swxYwY|jj}||d|dS)NXYZZYz500 )	assertRaisesrNNTPPermanentErrorr	_shortcmd	exceptionresponser#r$)rcmr%s   rtest_unknown_commandz,NetworkedNNTPTestsMixin.test_unknown_command@s


w9
:
:	+bK!!'***	+	+	+	+	+	+	+	+	+	+	+	+	+	+	+|$//66666sAAAc`tjtjdz
}|j|\}}t
|dkrI||dt||dj	tdSdS)N)daysr)datetimedatetoday	timedeltar	newgroupsr,assertIsInstancerr-r)rdtr%r/s    rtest_newgroupsz&NetworkedNNTPTestsMixin.test_newgroupsFs]
 
 
"
"X%7Q%?%?%?
?{,,R00fv;;??!!&)Y777!!&)/377777?rcPfd}jj}||j|jj}||jd}|ddS)Nct|tj|dSr)rErassertNotIn
GROUP_NAME)descrs r_check_descz=NetworkedNNTPTestsMixin.test_description.<locals>._check_descPs7!!$,,,T_d33333rzzk.brrtt.baz)rdescriptionrKassertInDESCr2r)rrMrLs`  rtest_descriptionz(NetworkedNNTPTestsMixin.test_descriptionOs	4	4	4	4	4{&&t77D

di&&&{&&t~66D{&&~66r"""""rc||j|j\}}||dp|d|||t||j}|||j	|jdS)Nz215 z282 )
rdescriptionsr2r#r$rEdictrKrrO)rr%descsrLs    rtest_descriptionsz)NetworkedNNTPTestsMixin.test_descriptions_sk..t~>>eOOF##>tv'>'>	F	F	FeT***T_%t{66tGGHHHHHrc|j|j}|dt	||\}}}}}|||j||t||t||t|||||	d|dS)N211 )
rr-rKrr,rEintassertLessEqualr#r$)rresultr%countfirstlastr-s       r
test_groupz"NetworkedNNTPTestsMixin.test_grouphs""4?33CKK(((*0'eUD%000eS)))eS)))dC(((UD)))//66666rc|j\}}||tj||jd||jddS)Nii)rrArEr@assertGreaterEqualyearr\rr%rAs   r	test_datez!NetworkedNNTPTestsMixin.test_datessh[%%''
ddH$5666	4000TY-----rc||t||hd|D],}||t
t
df-dS)N>rAfromsubject
references:bytes:lines
message-id)rErUrckeysvaluesrr)rart_dictvs   r_check_art_dictz'NetworkedNNTPTestsMixin._check_art_dictzsh---


/
/
/			""	8	8A!!!c4::%67777	8	8rc|j|j\}}}}}|j|dz
|\}}t	|dkr|d|d\}}|||dz
|||||dS)NrYrzno articles retrieved)	rr-rKxoverr,skipTestrcr\rr)	rr%r^r_r`namer&art_numrps	         r
test_xoverz"NetworkedNNTPTestsMixin.test_xovers)-):):4?)K)K&eUD$k''q$77eu::??MM1222!!H222Wd+++X&&&&&rTzHtemporarily skipped until a permanent solution is found for issue #28971c|j|j\}}}}}|dz
}|j|df\}}|d\}}	||	|j||f\}}|d\}}	||||||||	dS)N
r)rr-rKoverrrrcr\)
rr%r^r_r`rvstartr&rwrps
          r	test_overz!NetworkedNNTPTestsMixin.test_overs*.):):4?)K)K&eUD$r	k&&t}55e!!HX&&&k&&t}55e!"I///Wd+++X&&&&&rc|j|j\}}}}}|jd|\}}|D]0}|t
t
|d1dS)Nri)rr-rKxhdrrrr)rr%r^r_r`rvr&r's        r	test_xhdrz!NetworkedNNTPTestsMixin.test_xhdrs{)-):):4?)K)K&eUD$k&&y$77e	1	1DS$tAw--0000	1	1rc||tj|||j||jD]}||t||jdddS)Nr{).s.
.
)rErArticleInfornumberr&bytesrJ)rr%articlerwr's     rcheck_article_respz*NetworkedNNTPTestsMixin.check_article_respsgw':;;;W^W555M	/	/D!!$....r*,DEEEEErzFIXME: see bpo-32128c
|j|j\}}}}}|||dz
fD]Y}	|j|\}}n7#tj$r%}|jdsYd}~Pd}~wwxYwn|d|	|d||
||||j|\}}	|	|d||
||	||j|\}}
|	|d||
||
|d

fd|j
D}
fd	|
j
D}|||d
gz|	j
zdS)Nrz423 z(could not find a suitable article numberz221 z222 z220 c,|dS)NsX-Antivirus)r$)r's r<lambda>z@NetworkedNNTPTestsMixin.test_article_head_body.<locals>.<lambda>s ? ?rc*g|]}|
|Srr.0r'denylists  r
<listcomp>zBNetworkedNNTPTestsMixin.test_article_head_body.<locals>.<listcomp>s5666&.htnn6t666rc*g|]}|
|Srrrs  rrzBNetworkedNNTPTestsMixin.test_article_head_body.<locals>.<listcomp>s51114!)$1$111rr)rr-rKheadrNNTPTemporaryErrorr:r$rur#rbodyrr&r)rr%r^r_r`rvrwrerrfiltered_head_linesfiltered_linesrs             @rtest_article_head_bodyz.NetworkedNNTPTestsMixin.test_article_head_bodys#)-):):4?)K)K&eUD$eTAX.
	F
	FG
![--g66
dd-


z,,V44	


EMMDEEE//666dG444[%%g..
d//666dG444++G44
g//666gw777??6666
66611117=111)<u)Dtz)QRRRRRsABA??Bcfd}jjd|jj\}}||dS)Nc|d}|ttfd|dS)NLISTOVERVIEW.FMT)rEr+tuplerP)caps	caps_listrs  r_check_capsz>NetworkedNNTPTestsMixin.test_capabilities.<locals>._check_capss@VI!!)dE];;;MM.)44444r)rcrnntp_versiongetcapabilitiescapabilities)rrr%rs`   rtest_capabilitiesz)NetworkedNNTPTestsMixin.test_capabilitiess	5	5	5	5	5	
 8!<<<DK//11222[--//
dDrcjd}d}|tj|jj||ddS)NnotarealusernotarealpasswordF)userpasswordusenetrc)r6r	NNTPErrorrlogin)rbaduserbadpws   rtest_zloginz#NetworkedNNTPTestsMixin.test_zloginsM!"'+T[->&		H	H	H	H	Hrc~t|}	|jd|_dS#d|_wxYwr)rrquit)rclss  rtest_zzquitz#NetworkedNNTPTestsMixin.test_zzquitsD4jj	KCJJJCJs3	<cd}t|D]R}|dst||}t|s8t	||||SdS)NcFtjfd}|S)Nctj|j5|ddddS#1swxYwYdSr)rtransient_internet	NNTP_HOST)rmeths rwrappedzHNetworkedNNTPTestsMixin.wrap_methods.<locals>.wrap_meth.<locals>.wrappeds"5dnEEDJJJs488)	functoolswraps)rrs` r	wrap_methz7NetworkedNNTPTestsMixin.wrap_methods.<locals>.wrap_meths8
_T
"
"



#
"
Nrtest_)dirr$getattrcallablesetattr)rrrvrs    rwrap_methodsz$NetworkedNNTPTestsMixin.wrap_methodss			HH	0	0D??7++
3%%DD>>

Cyy////	0	0rc|t5||jddddddS#1swxYwYdS)NrFtimeoutr)r6
ValueError
NNTP_CLASSrrs rtest_timeoutz$NetworkedNNTPTestsMixin.test_timeouts


z
*
*	G	GOODNAOFFF	G	G	G	G	G	G	G	G	G	G	G	G	G	G	G	G	G	GsAA

A
cfd}ttjd}|j
|j|d<	|j|jfi|5|||dddn#1swxYwY|||j|jfi|5	dddn#1swxYwY||dS#t$r?}tjd|j
rtjd|d|jd}~wwxYw)NctdsdS	n#ttf$rYdSwxYwdS)NfileFT)hasattrr"OSErrorEOFError)rsris_connectedzANetworkedNNTPTestsMixin.test_with_statement.<locals>.is_connected
sZ66**
u




X&


uu
4s*??Frssl_context(?i)KEY.TOO.SMALLzGot  connecting to )rUrINTERNET_TIMEOUTrrrr#r"assertFalserrresearchrunittestSkipTest)rrkwargsssl_errrs    @rtest_with_statementz+NetworkedNNTPTestsMixin.test_with_statements6					,


'$($4F=!	$T_T^>>v>>F
/
////

...
/
/
/
/
/
/
/
/
/
/
/
/
/
/
/
\\^^,,,$T_T^>>v>>F



















\\^^,,,,,			y-w~>>
B')Aw)A)A.2n)A)ABBB	s`D"	ABD"BD"!B"5D"C8,D"8C<<D"?C< D""
E+,:E&&E+r)r
rrrr r(r0r3r<rGrRrWrarfrrrxrskipIfr~rrrrrrclassmethodrrrrrrrr&sK---...999999777888### III	7	7	7...	8	8	8	'	'	'X_T899
'
'99
'"111FFFFX_T122SS32S<HHH00[0&GGG!!!!!rrcNeZdZdZdZdZdZeZe	dZ
e	dZdS)NetworkedNNTPTestsznews.trigofacile.comfr.comp.lang.pythonzfr.comp.lang.*Pythonc	2tjdttjd}|j
|j|d<tj|j5	|j|jfi||_	n#t$rU}tjd|j
r!tj|d|d|jt!|jd}~wt"$rtj|d|jwxYw	ddddS#1swxYwYdS)	NnetworkFrrrz got rz  got EOF error on connecting to )rrequiresrUrrrrrrrrrrrrrprint
EOF_ERRORS)rrrs   r
setUpClasszNetworkedNNTPTests.setUpClassAs###,


?&$'OF=!

-cm
<
<	A	A
A+S^CMDDVDD




917>BBE"+s-D-D-D-D25--D-DEEEcm$$$
A
A
A'3)@)@.1m)@)@AAA
A	A	A	A	A	A	A	A	A	A	A	A	A	A	A	A	A	A	As7DA54D5
C;?AC,C;;DDDcJ|j|jdSdSr)rr)rs r
tearDownClassz NetworkedNNTPTests.tearDownClassXs*:!JOO"!rN)r
rrrrKr2rQrrrrrrrrrr8sd&I&J IDJAA[A,[rrrequires SSL supportceZdZdZdZdZdZeeddZ	dZ
dZe7ej
Zedejje_dSdS)NetworkedNNTP_SSLTestsz
nntp.aioe.orgz	aioe.testzaioe.*testNNTP_SSLNDEFAULT)r
rrrrKr2rQrrrr0
test_starttlsssl_create_unverified_contextrset_ciphers
TLSVersionTLSv1_2maximum_versionrrrrr]s IJID*d33JIM
4c466	***&)n&<###rrc6eZdZdZdZdZdZdZdZdZ	dS)	
_NNTPServerIOzA raw IO object allowing NNTP commands to be received and processed
    by a handler.  The handler can push responses which can then be read
    from the IO object.ctj|tj|_tj|_||_|j|jj|j	dSr)
io	RawIOBase__init__BytesIOc2ss2chandlerr}readline	push_data)rrs  rrz_NNTPServerIO.__init__s^
d###:<<:<<48,dn=====rcdSNTrrs rreadablez_NNTPServerIO.readabletrcdSr	rrs rwritablez_NNTPServerIO.writablerrc|j}|jdd|j||j|dS)z.Push (buffer) some data to send to the client.rrN)rtellseekwrite)rdataposs   rrz_NNTPServerIO.push_datasUhmmoo

at

crc|j}|j||j||jt
|S)zThe client sends us some data)rrrrrprocess_pendingr,)rbrs   rrz_NNTPServerIO.writesXhmmooq

c$$&&&1vv
rc|j|jt	|}t	|}||d|<|S)z#The client wants to read a responseN)rrrreadr,)rbufrns    rreadintoz_NNTPServerIO.readintosL$$&&&HMM#c((##FFBQBrN)
r
rrrrr
r
rrrrrrrr|sx>>>rrcRt|}tj||}||fSr)rrBufferedRWPair)rsiors   rmake_mock_filers-

 
 CS#&&D;rceZdZddZdZdS)
NNTPServerNcL||_||_||dSr)rhost
_base_init)rfr#
readermodes    rrzNNTPServer.__init__s(		
#####rc<|j|`dSr)rclosers r_closezNNTPServer._closes	IIIrr)r
rrrr)rrrr!r!s7$$$$
rr!c2eZdZdZfdZfdZdZxZS)MockedNNTPTestsMixinNcpt|dSrsupersetUpmake_serverr	__class__s rr/zMockedNNTPTestsMixin.setUps,


rcLt|`dSr)r.tearDownrr1s rr4zMockedNNTPTestsMixin.tearDowns"
KKKrc||_t|j\|_}t	|dg|Ri||_|jS)Nztest.server)
handler_classrrrr!r)rargsrrs    rr0z MockedNNTPTestsMixin.make_serversS))++'55$ }FtFFFvFF{r)r
rrr6r/r4r0
__classcell__r2s@rr+r+seMrr+ceZdZfdZxZS)MockedNNTPWithReaderModeMixinctt|ddS)NT)r&r-r1s rr/z#MockedNNTPWithReaderModeMixin.setUps1


D)))))r)r
rrr/r8r9s@rr;r;s8*********rr;ceZdZdZdZdZdZdZdZdZ	dZ
d	Zd
ZdZ
dZd
ZdZd dZdZdZd!dZdZdZdddZdddZdZdZedzezZd dZd dZd dZdZdS)"
NNTPv1HandlerzA handler for RFC 977z200 NNTP mock servercd|_d|_||_||_d|_d|_|dS)NFT)in_body
allow_posting	_readline
_push_data
_logged_in
_user_senthandle_welcome)rrrs   rr}zNNTPv1Handler.startsE!!#rc$t|ddS)Nutf-8surrogateescape)rrrs  r_decodezNNTPv1Handler._decodes4"3444rc@|jr	|}|sdS|j||dkrn:	|j\}}||d|jid|_d|_d|_n#d|_d|_d|_wxYw	||}|sdS|ds"td||dd}|	^}}t|d|zd}||nS	|||jr||f|_g|_n5#t$r(}td	||d}~wwxYw)
NTrrF
z line doesn't end with \r\n: {!r}handle_zcommand failed: {!r})r@rBrappend
body_callbackrKendswithrformatsplitrupperhandle_unknown	Exception)rr'rtokenscmdrs      rrzNNTPv1Handler.process_pendings<	%
~~''F	  &&&8##


%#1ff-49---%)" 	$&*" 	$$$$$	'<< 0 011D
==((
T !E!L!LT!R!RSSS9D::<<LC&4SYY[[!8$??D|##%%%%'D&MM|'-16\*$&	!QQQ$%;%B%B4%H%HIIqPQ	's$A11BE))
F3#FFcd|_dS)z7Flag that the client is expected to post a request bodyTN)r@rs rexpect_bodyzNNTPv1Handler.expect_body
s
rc0||dS)zPush some binary dataN)rCrJs  rrzNNTPv1Handler.push_datasrctj|}d|dz}|d}||dS)zPush a string literalrMrHN)textwrapdedentjoin
splitlinesencoder)rlits  rpush_litzNNTPv1Handler.push_litsZoc""kk#..**++f4jj!!src0|ddS)Nz	500 What?rdrs rrVzNNTPv1Handler.handle_unknowns

k"""""rc:||jdSr)rdrrs rrFzNNTPv1Handler.handle_welcomes

dl#####rc0|ddSNz205 Bye!rfrs rhandle_QUITzNNTPv1Handler.handle_QUIT"s

j!!!!!rc0|ddS)N111 20100914001155rfrs rhandle_DATEzNNTPv1Handler.handle_DATE%s

*+++++rc|dkr|ddS|d|dS)Nrz$211 486 761 1265 fr.comp.lang.pythonz411 No such group {})rdrS)rr-s  rhandle_GROUPzNNTPv1Handler.handle_GROUP(sN)))MM@AAAAAMM077>>?????rc0|ddS)Nz            100 Legal commands
              authinfo user Name|pass Password|generic <prog> <args>
              date
              help
            Report problems to <root@example.org>
            .rfrs rhandle_HELPzNNTPv1Handler.handle_HELP.s'

					rNc||ddS|dkr|ddS|dkr|ddS|ddS)N412 No newsgroup selected3000234"223 3000234 <45223423@example.com><45223423@example.com>223 0 <45223423@example.com>430 No Such Article Foundrfrmessage_specs  rhandle_STATzNNTPv1Handler.handle_STAT7sMM566666
Y
&
&MM>?????
5
5
5MM899999MM566666rc0|ddS)N*223 3000237 <668929@example.org> retrievedrfrs rhandle_NEXTzNNTPv1Handler.handle_NEXTAs

BCCCCCrc0|ddS)N,223 3000234 <45223423@example.com> retrievedrfrs rhandle_LASTzNNTPv1Handler.handle_LASTDs

DEEEEErc||ddS|dkr4|dkr|ddS|ddS|dkr|ddS|dkrQ|d	kr|d
dS|dkr|ddS|d
dS|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"
                    .ra                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 keywordrf)ractionparams   rhandle_LISTzNNTPv1Handler.handle_LISTGsu>MM




x


%%



~
%
%MM










|
#
#***

---




MM455555rc.|dkr#|dkr|dkr|ddS|dkr#|dkr|dkr|ddS|dkr'|dvr#|dkr|d	d
zdzdS|ddS)
Nr20100913082004a                230 list of newsarticles (NNTP v2) created after Mon Sep 13 08:20:04 2010 follows
                <a4929a40-6328-491a-aaaf-cb79ed7309a2@q2g2000vbk.googlegroups.com>
                <f30c0419-f549-4218-848f-d7d0131da931@y3g2000vbm.googlegroups.com>
                .100913a                230 list of newsarticles (NNTP v1) created after Mon Sep 13 08:20:04 2010 follows
                <a4929a40-6328-491a-aaaf-cb79ed7309a2@q2g2000vbk.googlegroups.com>
                <f30c0419-f549-4218-848f-d7d0131da931@y3g2000vbm.googlegroups.com>
                .)20100101100101090000z
too long lineiz
.zK                230 An empty list of newsarticles follows
                .rf)rr-date_strtime_strs    rhandle_NEWNEWSzNNTPv1Handler.handle_NEWNEWS}s

'''H
,B,BH$$MM





)))h(.B.BH$$MM





)))000(""MM/D0 
!
!
!
!
!
MM




rcj|dkr|ddS|ddS)Nz57-59uK224 Overview information for 57-58 follows
57	Re: ANN: New Plone book with strong Python (and Zope) themes throughout	Doug Hellmann <doug.hellmann-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>	Sat, 19 Jun 2010 18:04:08 -0400	<4FD05F05-F98B-44DC-8111-C6009C925F0C@gmail.com>	<hvalf7$ort$1@dough.gmane.org>	7103	16	Xref: news.gmane.io gmane.comp.python.authors:57
58	Looking for a few good bloggers	Doug Hellmann <doug.hellmann-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>	Thu, 22 Jul 2010 09:14:14 -0400	<A29863FA-F388-40C3-AA25-0FD06B09B5BF@gmail.com>		6683	16	
59	Re: Message d'erreur incompréhensible (par moi)	Eric Brunel <eric.brunel@pragmadev.nospam.com>	Wed, 15 Sep 2010 18:09:15 +0200	<eric.brunel-2B8B56.18091515092010@news.wanadoo.fr>	<4c90ec87$0$32425$ba4acef3@reader.news.orange.fr>	1641	27	Xref: saria.nerim.net fr.comp.lang.python:1265
.
z1                224 No articles
                .rfrys  rhandle_XOVERzNNTPv1Handler.handle_XOVERsY7""MM




4
MM




r)rc|I|jr+|d|dS|ddS|d||_dS)Nz+340 Input article; end with <CR-LF>.<CR-LF>440 Posting not permitted240 Article received OKrArdr[posted_body)rrs  rhandle_POSTzNNTPv1Handler.handle_POSTsy<!
;

KLLL  """""

9:::::
MM3444#Drc|O|jr1|dkr+|d|dS|ddS|d||_dS)N+<i.am.an.article.you.will.want@example.com>z%335 Send it; end with <CR-LF>.<CR-LF>435 Article not wanted235 Article transferred OKr)r
message_idrs   rhandle_IHAVEzNNTPv1Handler.handle_IHAVEs<"
8KKK

EFFF  """""

677777
MM6777#Drz        From: "Demo User" <nobody@example.net>
        Subject: I am just a test article
        Content-Type: text/plain; charset=UTF-8; format=flowed
        Message-ID: <i.am.an.article.you.will.want@example.com>ui        This is just a test article.
        ..Here is a dot-starting line.

        -- Signed by André.z

c2||dnO|dkr|dn3|dkr|dn|ddS||j|ddS)N"220 3000237 <45223423@example.com>rv220 0 <45223423@example.com>rt"220 3000234 <45223423@example.com>rx.)rdsample_articlerys  rhandle_ARTICLEzNNTPv1Handler.handle_ARTICLEsMM>????
5
5
5MM89999
Y
&
&MM>????MM5666F

d)***

crc2||dnO|dkr|dn3|dkr|dn|ddS||j|ddS)N"221 3000237 <45223423@example.com>rv221 0 <45223423@example.com>rt"221 3000234 <45223423@example.com>rxr)rdsample_headrys  rhandle_HEADzNNTPv1Handler.handle_HEADMM>????
5
5
5MM89999
Y
&
&MM>????MM5666F

d&'''

crc2||dnO|dkr|dn3|dkr|dn|ddS||j|ddS)N"222 3000237 <45223423@example.com>rv222 0 <45223423@example.com>rt"222 3000234 <45223423@example.com>rxr)rdsample_bodyrys  rhandle_BODYzNNTPv1Handler.handle_BODYrrcN|jr|ddS|dkr<|jr|ddS|dd|_dS|dkr|dd|_dStd|)	Nz502 Already Logged Inrz 482 User Credential Already Sentz381 Password RequiredTpassz281 Login SuccessfulzUnknown cred type {})rDrdrErWrS)r	cred_typers   rhandle_AUTHINFOzNNTPv1Handler.handle_AUTHINFO
s?	FMM122222
&
 
 
'

@AAAAA

5666"&
&
 
 MM0111"DOOO299)DDEEErrNN) r
rrrrr}rKrr[rrdrVrFrjrmrorqr{r~rrrrrrrrrrrrrrrrr>r>s$G555$'$'$'L###$$$""",,,@@@7777DDDFFF46464646l>@#'
$
$
$
$
$04$$$$$CK"K!6)K7N
F
F
F
F
Frr>c&eZdZdZdZdZddZdS)
NNTPv2Handlerz"A handler for RFC 3977 (NNTP "v2")cd}|js*||ddS||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 USERrN)rDrdrSrfmts  rhandle_CAPABILITIESz!NNTPv2Handler.handle_CAPABILITIESs\		*MM#**%BCCDDDDDMM#**R..)))))rc td)Nz3MODE READER sent despite READER has been advertised)rW)r_s  rhandle_MODEzNNTPv2Handler.handle_MODE.sMNNNrNc,||Sr)rrys  rhandle_OVERzNNTPv2Handler.handle_OVER1s  ...rr)r
rrrrrrrrrrrsO,,***"OOO//////rrc"eZdZdZfdZxZS)CapsAfterLoginNNTPv2Handlerz3A handler that allows CAPABILITIES only after loginc|js|ddStdS)Nz480 You must log in.)rDrdr.rr1s rrz/CapsAfterLoginNNTPv2Handler.handle_CAPABILITIES8sB	*MM011111GG'')))))r)r
rrrrr8r9s@rrr5s>==*********rrc$eZdZdZdZdZdZdS)ModeSwitchingNNTPv2Handlerz$A server that starts in transit modecd|_dSNF)	_switchedrs rrz#ModeSwitchingNNTPv2Handler.__init__Bs
rcd}|jr*||ddS||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
            .rNzMODE-)rrdrSrs  rrz.ModeSwitchingNNTPv2Handler.handle_CAPABILITIESEs[	>	/MM#**R..)))))MM#**W--.....rc>d|_|ddS)NTz200 Posting allowed)rrd)rwhats  rrz&ModeSwitchingNNTPv2Handler.handle_MODEUs"

+,,,,,rN)r
rrrrrrrrrrr?sG../// -----rrceZdZfdZdZdZdZdZdZdZ	dZ
d	Zd
ZdZ
dZd
ZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZ dZ!d Z"d!Z#xZ$S)"NNTPv1v2TestsMixincHtdSr)r.r/r1s rr/zNNTPv1v2TestsMixin.setUp]s


rcZ||jj|jjdSr)rrrrrs rr zNNTPv1v2TestsMixin.test_welcome`s(,dl.BCCCCCrc|jdkr |d|jj|jdd|d|jjdS)NrAUTHINFOtestusertestpw)rrPr_capsrrJrs r
test_authinfoz NNTPv1v2TestsMixin.test_authinfocsd!!MM*dk&7888*h///	
T[%677777rc|j\}}||d||tjdddddddS)Nrl	r7)rrArr@res   rrfzNNTPv1v2TestsMixin.test_dateksa[%%''
d3444x0q"aRHHIIIIIrc||jj|j}||d||jjdSri)rrclosedrrrr#)rr%s  r	test_quitzNNTPv1v2TestsMixin.test_quitps_))){!!z***(((((rc|j\}}||d||gddS)Nz100 Legal commands)z8  authinfo user Name|pass Password|generic <prog> <args>z  datez  helpz%Report problems to <root@example.org>)rr"r)rr%r"s   rr(zNNTPv1v2TestsMixin.test_helpvsc[%%''
d3444 
 
 
					rc	|j\}}|t|d|d}||t	dddd|jd\}}|t|d|d	}||t	d
ddddS)
Nrcomp.lang.python.announce
0000001153
0000000993mrrrz!gmane.comp.python.distutils.devel
0000014104
0000000001)rr+rr,r)rr%r/gs    rr0zNNTPv1v2TestsMixin.test_lists{''))fVa(((1I1<"C
)
)	*	*	*{''
66fVa(((1I9<"C
)
)	*	*	*	*	*rcH|jd\}}}||d||d||d|jd\}}}||d||d||d|tj5}|jddddn#1swxYwY||jjd|tj5}|jdddn#1swxYwY||jjddS)	N-rurvrwrz<non.existent.id>rxrs)rstatrr6rrr9r:)rr%rwrr;s     r	test_statzNNTPv1v2TestsMixin.test_stats$(K$4$4W$=$=!gzCDDD'***%=>>>$(K$4$45M$N$N!gz=>>>!$$$%=>>>


w9
:
:	2bK0111	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2.0KLLL


w9
:
:	bK															.0KLLLLLs$ DDDE77E;>E;c|j\}}}||d||d||ddS)Nr}-z<668929@example.org>)rnextrrr%rwrs    r	test_nextzNNTPv1v2TestsMixin.test_nextsf$(K$4$4$6$6!gzKLLL'***%;<<<<<rc|j\}}}||d||d||ddS)Nrrrv)rr`rrs    r	test_lastzNNTPv1v2TestsMixin.test_lastsf$(K$4$4$6$6!gzMNNN'***%=>>>>>rc|jd}||d|jd}||ddS)NrThe Python computer language.comp.lang.pythonxrN)rrOr)rrLs  rrRz#NNTPv1v2TestsMixin.test_descriptionsa{&&'9::>???{&&':;;r"""""rcn|jd\}}||d||ddi|jd\}}||ddd|jd\}}||idS)Nrz-215 Descriptions in form "group description".rrz4Announcements about the Python language. (Moderated))rrr)rrTrr.s   rrWz$NNTPv1v2TestsMixin.test_descriptionss{//0BCCfNOOO ?"			{//0CDDf ?)_""			{//0CDDf$$$$$rc^|jd\}}}}}||d|||d||d||d||d|tj5}|jddddn#1swxYwY|j}||j	d|j	dS)NrrZiiizcomp.lang.python.develz411 No such group)
rr-r#r$rr6rrr9r:)rr%r^r_r`r-r;excs        rrazNNTPv1v2TestsMixin.test_groups[*.+*;*;<Q*R*R'eUD%//666$$$t$$$$$$ 5666


w9
:
:	8bK6777	8	8	8	8	8	8	8	8	8	8	8	8	8	8	8l//0CDD	&	&	&	&	&sC((C,/C,ctjdddddd}|jd|\}}d|j}|||||d	d
gtjdddddd}|jd|\}}||d||gdS)
Nrr
rzS230 list of newsarticles (NNTP v{0}) created after Mon Sep 13 08:20:04 2010 followszB<a4929a40-6328-491a-aaaf-cb79ed7309a2@q2g2000vbk.googlegroups.com>zB<f30c0419-f549-4218-848f-d7d0131da931@y3g2000vbm.googlegroups.com>rz)230 An empty list of newsarticles follows)r@rnewnewsrSrr)rrFr%idsexpecteds     rtest_newnewszNNTPv1v2TestsMixin.test_newnewss

tQAr1
5
5K''(:B??	c
=fT&''		
x(((PP			

tQAr1
5
5K''(=rBB	cJKKKb!!!!!rcR|t|d||ddd||dd||dd||d	d
dS)Nrr{rHu-- Signed by André.rNrs.Here is a dot-starting line.sThis is just a test article.)rr,decoderr&s  r_check_article_bodyz&NNTPv1v2TestsMixin._check_article_bodysUQ'''r))'224JKKKrC(((r$DEEEr$CDDDDDrc|t|d||dd||dddS)Nrrs&From: "Demo User" <nobody@example.net>s7Message-ID: <i.am.an.article.you.will.want@example.com>)rr,r
s  r_check_article_headz&NNTPv1v2TestsMixin._check_article_headsZUQ'''q#LMMMq#]^^^^^rc|t|d||dd||dd||dddS)Nrrrr)rr,rrr
s  r_check_article_dataz&NNTPv1v2TestsMixin._check_article_datasvUQ'''  rr+++  rss,,,q3'''''rc|j\}}||d|\}}}||d||d|||jd\}}||d|\}}}||d||d|||jd\}}||d|\}}}||d||d|||t
j5}|jddddn#1swxYwY||jjd	dS)
Nrrrvrrrr<non-existent@example.com>rx)	rrrrr6rrr9r:rr%inforwrr&r;s       rtest_articlezNNTPv1v2TestsMixin.test_articles[((**
dCDDD%)"U'***%=>>>  '''[((11
dCDDD%)"U'***%=>>>  '''[(()ABB
d=>>>%)"U!$$$%=>>>  '''


w9
:
:	>bK <===	>	>	>	>	>	>	>	>	>	>	>	>	>	>	>.0KLLLLL
F44F8;F8c$tj}|j|\}}||d|\}}}||d||d||g|}||dt|||	dt|dS)NrrrrvKFrom: "Demo User" <nobody@example.net>
Subject: I am just a test article
UThis is just a test article.
.Here is a dot-starting line.

-- Signed by André.
)
rrrrrgetvaluer#r$asciirRrr%r%rrwrr&rs        rtest_article_filez$NNTPv1v2TestsMixin.test_article_filesJLL[((a(00
dCDDD%)"U'***%=>>>###zz||
5T{{				



.
T{{					rc|j\}}||d|\}}}||d||d|||jd\}}||d|\}}}||d||d|||jd\}}||d|\}}}||d||d|||t
j5}|jddddn#1swxYwY||jjd	dS)
Nrrrvrrrrrrx)	rrrrr6rrr9r:rs       r	test_headzNNTPv1v2TestsMixin.test_head [%%''
dCDDD%)"U'***%=>>>  '''[%%g..
dCDDD%)"U'***%=>>>  '''[%%&>??
d=>>>%)"U!$$$%=>>>  '''


w9
:
:	;bK9:::	;	;	;	;	;	;	;	;	;	;	;	;	;	;	;.0KLLLLLrc$tj}|j|\}}||d|\}}}||d||d||g|}||dt||	|
dt|dS)Nrrrrvrr)rrrrrrr#r$rrrRr s        rtest_head_filez!NNTPv1v2TestsMixin.test_head_file;sJLL[%%1%--
dCDDD%)"U'***%=>>>###zz||
5T{{				

.
T{{					rc|j\}}||d|\}}}||d||d|||jd\}}||d|\}}}||d||d|||jd\}}||d|\}}}||d||d|||t
j5}|jddddn#1swxYwY||jjd	dS)
Nrrrvrrrrrrx)	rrrrr6rrr9r:rs       r	test_bodyzNNTPv1v2TestsMixin.test_bodyOr$rc$tj}|j|\}}||d|\}}}||d||d||g|}||dt||	|
dt|dS)Nrrrrvrr)rrrrrrrr$rr#rRr s        rtest_body_filez!NNTPv1v2TestsMixin.test_body_filejsJLL[%%1%--
dCDDD%)"U'***%=>>>###zz||
5T{{				



.
T{{					rc||d||t|d|d\}}||d||ddddd	d
ddd
|d\}}||dd|d\}}||dddS)Nz224 rr9zEDoug Hellmann <doug.hellmann-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>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>z<hvalf7$ort$1@dough.gmane.org>710316z*news.gmane.io gmane.comp.python.authors:57)rhrirArmrjrkrlxrefrr/rri0Re: Message d'erreur incompréhensible (par moi))r#r$rr,)rr%	overviewsrwr|s     rcheck_over_xover_respz(NNTPv1v2TestsMixin.check_over_xover_resp~s//666Y+++!!
"%%%[`5L:@	 	 						"!
ft,,,!!
iK	M	M	M	M	Mrcn|jdd\}}|||dS)Nr,;)rrtr2rr%r1s   rrxzNNTPv1v2TestsMixin.test_xovers9+++B33i""433333rcl|jd\}}|||dS)N)r,r4)rr|r2r5s   rr~zNNTPv1v2TestsMixin.test_overs7+**844i""433333rsFrom: "Demo User" <nobody@example.net>
Subject: I am just a test article
Content-Type: text/plain; charset=UTF-8; format=flowed
Message-ID: <i.am.an.article.you.will.want@example.com>

This is just a test article.
.Here is a dot-starting line.

-- Signed by André.
c||jj}|t|d||dd||dd||dd||dd	||d
ddS)Nrzr{rrNs-- Signed by André.
r

rs ..Here is a dot-starting line.
rs(From: "Demo User" <nobody@example.net>
)rrrr,r
s  r_check_posted_bodyz%NNTPv1v2TestsMixin._check_posted_bodys(UR(((rH---r$EFFFrG,,,r$IJJJq#PQQQQQrc|j}|||fz}d|j_||}||jdd}|||fz}d|j_||}||S)Nr8
)sample_postrrr9replace)rfuncfile_factoryr7post	func_argsr%s       r_check_post_ihave_subz(NNTPv1v2TestsMixin._check_post_ihave_subsLL..00	#' tY!!!''77LL..00	#' tY!!!rc|j|g|Rdti}||||j|g|Rdti}||||j|g|Rdtji}|||d}|j|g|Rd|i}|||d}|j|g|Rd|i}|||dS)Nr?cHt|dS)NTkeependsiterrars r	iterlinesz6NNTPv1v2TestsMixin.check_post_ihave.<locals>.iterlinessd33444rcHt|dS)NFrErGrIs rrJz6NNTPv1v2TestsMixin.check_post_ihave.<locals>.iterlinesse44555r)rBrr	bytearrayrr)rr>success_respr7r%rJs      rcheck_post_ihavez#NNTPv1v2TestsMixin.check_post_ihaves@)t)$JJJJEJJ|,,,)t)$NNNNINN|,,,)t)$OOOOBJOO|,,,	5	5	5)t)$NNNNINN|,,,	6	6	6)t)$NNNNINN|,,,,,rcJ||jjdd|j_|tj5}|j|jdddn#1swxYwY|	|j
jddS)NrFr)rNrr@rrAr6rrr<rr9r:rr;s  r	test_postzNNTPv1v2TestsMixin.test_postsdk.0IJJJ%*"


w9
:
:	/bKT-...	/	/	/	/	/	/	/	/	/	/	/	/	/	/	/.4	6	6	6	6	6s A88A<?A<c6||jjdd|tj5}|jd|jdddn#1swxYwY||jj	ddS)Nrrz<another.message.id>r)
rNrihaver6rrr<rr9r:rPs  r
test_ihavezNNTPv1v2TestsMixin.test_ihavesdk/1MK	M	M	M


w9
:
:	HbK4d6FGGG	H	H	H	H	H	H	H	H	H	H	H	H	H	H	H.1	3	3	3	3	3s!A..A25A2ctjdddddd}|tj|jjd|dS)Nrrrrr)r@r6r
NNTPDataErrorrr)rrFs  rtest_too_long_linesz&NNTPv1v2TestsMixin.test_too_long_linessU

tQ1a
3
3'/+-/A2	G	G	G	G	Gr)%r
rrr/r rrfrr(r0rrrrRrWrarrrrrr!r#r&r(r*r2rxr~r<r9rBrNrQrTrWr8r9s@rrr[s8DDD888JJJ
)))***MMM ===???###%%%&&&"""&EEE___
(((MMM6*MMM6(MMM6(MMM*444444	*	R	R	R ---*666333GGGGGGGrrc eZdZdZdZeZdZdS)NNTPv1Testsz*Tests an NNTP v1 server (no capabilities).rc|j}||i||jjd||jjddS)Nrrrrrnntp_implementationrrs  r	test_capszNNTPv1Tests.test_capssg{**,,r"""115558$?????rN)r
rrrrr>r6r^rrrrYrYs844L!M@@@@@rrYc eZdZdZdZeZdZdS)NNTPv2Testsz,Tests an NNTP v2 server (with capabilities).rc|j}||ddgddgdgggdgggd||jjd||jjd	dS)
N23INNz2.5.1USER)rzACTIVE.TIMESzDISTRIB.PATSHEADERSrr)VERSIONIMPLEMENTATIONrHDRrOVERPOSTREADERrz	INN 2.5.1r[r]s  rr^zNNTPv2Tests.test_capss{**,,Sz$g.>>>
 
 
	
	
		
115558+FFFFFrN)r
rrrrrr6r^rrrr`r`s866L!MGGGGGrr`c eZdZdZdZeZdZdS)CapsAfterLoginNNTPv2TestszCTests a probably NNTP v2 server with capabilities only after login.rc||jji|jdd|d|jjdS)Nrrrg)rrrrrPrs rtest_caps_only_after_loginz4CapsAfterLoginNNTPv2Tests.test_caps_only_after_loginsT*B///*h///

i!233333rN)r
rrrrrr6rprrrrnrns3MML/M44444rrnc eZdZdZdZeZdZdS)SendReaderNNTPv2TestszoSame tests as for v2 but we tell NTTP to send MODE READER to a server
    that isn't in READER mode by default.rcF|d|jjdS)Nrl)rPrrrs r(test_we_are_in_reader_mode_after_connectz>SendReaderNNTPv2Tests.test_we_are_in_reader_mode_after_connect&s!

h 122222rN)r
rrrrrr6rtrrrrrrrs9--L.M33333rrrcfeZdZdZdZdZdZdZdZe	j
eddZd	S)
	MiscTestscfd}|dd|dd|dd|dd|dd|d	d
|dddS)Ncdt||dSr)rr
decode_header)arrs  rgivesz+MiscTests.test_decode_header.<locals>.gives-s-W22155q99999rrNza 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 matricer0rrr{s` rtest_decode_headerzMiscTests.test_decode_header,s	:	:	:	:	:
b2
 0111
$&<===
57KLLL
J`	b	b	b	<(	*	*	*	@@	B	B	B	B	Brcvgd}|t|gdgd}|t|gdgd}|t|gdgd}|t|gdgd}|t|gdgd}|t|gd	dS)
N)Subject:From:Date:Message-ID:References:rkrl)rirhrArmrjrkrl)rrrrrBytes:Lines:)zsubject:zFROM:zDaTe:zmessage-ID:rzBYTES:r)	rrrrrrkrl	Xref:fullzDistribution:full)	rirhrArmrjrkrlr/distribution)	rrrrrrrz	Xref:FULLzDistribution:FULL)rrrrrrrrrirhrArmrjrkrlr/)rr_parse_overview_fmtr
s  rtest_parse_overview_fmtz!MiscTests.test_parse_overview_fmt<s44444U;;
!
!
!	"	"	"44444U;;
!
!
!	"	"	"44444U;;
!
!
!	"	"	"&&&	
44U;;
9
9
9	:	:	:&&&	
44U;;
9
9
9	:	:	:AAA44U;;
)
)
)	*	*	*	*	*rctjdgz}dg}t||}|\\}}||d||dddddd	d
ddd
g}t||}|\\}}||dddg}t||}|\\}}||dd||dddS)Nr/z3000234	I am just a test article	"Demo User" <nobody@example.com>	6 Oct 1998 04:38:40 -0500	<45223423@example.com>	<45454@example.net>	1234	17	Xref: news.example.com misc.test:3000363rzI am just a test articlez "Demo User" <nobody@example.com>z6 Oct 1998 04:38:40 -0500rvz<45454@example.net>123417z"news.example.com misc.test:3000363rz3000234	I am just a test article	"Demo User" <nobody@example.com>	6 Oct 1998 04:38:40 -0500	<45223423@example.com>	<45454@example.net>	1234	17		z3000234	I am just a test article	"Demo User" <nobody@example.com>	6 Oct 1998 04:38:40 -0500	<45223423@example.com>	 	1234	17	Xref: 	rj rN)r_DEFAULT_OVERVIEW_FMT_parse_overviewr)rrr&overviewrwfieldss      rtest_parse_overviewzMiscTests.test_parse_overviewdsH+vh6
;
**5#66%&'***16/2/8	"
	"
						

**5#66%&...

**5#66%&-s333,,,,,rc
fd}|dddddddd|d	d
dddddd|dd
dddddd|dd
d
ddddddS)Nc~t||tj|dSr)rr_parse_datetimer@)rzrcrs   rr{z,MiscTests.test_parse_datetime.<locals>.givessBW44Q::%.2
4
4
4
4
4r19990623135624rr819990623135624990623090623irr|s` rtest_parse_datetimezMiscTests.test_parse_datetimes	4	4	4	4	4	dAr2r2>>>
j(D!RR<<<
h$2r2r:::
h$2r2r:::::rc
fd}|dddddddd	|d
ddddddd	|ddd
dddddfd}|ddddd|d
dddd|ddd
dddS)Nctj||||||}	t|||f	t|d||fdSrr@rr_unparse_datetime
yMdhrsrrrFrs
         rr{z.MiscTests.test_unparse_datetime.<locals>.givess"1aAq!44BW66r::&1
3
3
3W66r5AA&1
3
3
3
3
3rrrrrrrrr20000623rrYrrr20100605010203ctj|||}t|||ft|d||fdSrr@rArrrrrrrrrFrs      rr{z.MiscTests.test_unparse_datetime.<locals>.givessq!Q''BW66r::&1
3
3
3W66r5AA&1
3
3
3
3
3r000000rr|s` rtest_unparse_datetimezMiscTests.test_unparse_datetimes	3	3	3	3	3	dAr2r2z8<<<
dAr2r2z8<<<
dAq!Q:x888	3	3	3	3	3	dAr:x000
dAr:x000
dAq*h/////rc
fd}|dddddddd	|d
ddddddd	|ddd
dddddfd}|ddddd|d
dddd|ddd
dddS)Nctj||||||}	t|d||fdSr	rrs
         rr{z5MiscTests.test_unparse_datetime_legacy.<locals>.givessY"1aAq!44BW66r4@@&1
3
3
3
3
3rrrrrrrrrr000623rrYrrr100605rctj|||}t|d||fdSr	rrs      rr{z5MiscTests.test_unparse_datetime_legacy.<locals>.givessRq!Q''BW66r4@@&1
3
3
3
3
3rrrr|s` rtest_unparse_datetime_legacyz&MiscTests.test_unparse_datetime_legacys	3	3	3	3	3	dAr2r2x:::
dAr2r2x:::
dAq!Q8X666	3	3	3	3	3	dAr8X...
dAr8X...
dAq(H-----rrcV|ttddS)Nr)r#rrrs rtest_ssl_supportzMiscTests.test_ssl_supports$4455555rN)
r
rrr}rrrrrr
skipUnlessrrrrrrvrv*sBBB &*&*&*P,-,-,-\	;	;	;000....&X4556665666rrvceZdZdZdZdS)PublicAPITestsz>Ensures that the correct values are exposed in the public API.c
|ttdgd}t|d|t
tjt
|dS)N__all__)rrNNTPReplyErrorrr7NNTPProtocolErrorrVryr)r#rrrrPrsetr)r
target_apis  rtest_module_all_attributez(PublicAPITests.test_module_all_attributesy33444MMM
?j)))W_--s:?????rN)r
rrrrrrrrrs.HH@@@@@rrcHeZdZdZejZ	d	dZdZdZ	dZ
dZdZdS)
MockSocketTestszaTests involving a mock socket object

    Used where the _NNTPServerIO file object is not enough.Nc	
Gfdd}G	
fddd
g	td|5|||5|d||dddn#1swxYwYdddn#1swxYwY|
	D]}||jdS)	NceZdZfdZdS)NMockSocketTests.check_constructor_error_conditions.<locals>.mock_socket_modulecSrr)addressr
MockSockets  rcreate_connectionz`MockSocketTests.check_constructor_error_conditions.<locals>.mock_socket_module.create_connections!z||#rN)r
rrr)rsrmock_socket_modulers.
$
$
$
$
$
$
$rrc&eZdZfdZfdZdS)FMockSocketTests.check_constructor_error_conditions.<locals>.MockSocketcddSr	r)r
socket_closeds rr(zLMockSocketTests.check_constructor_error_conditions.<locals>.MockSocket.closes $


rcj}t|\}}||Sr)rrP)socketmoderrrfilesr6s     rmakefilezOMockSocketTests.check_constructor_error_conditions.<locals>.MockSocket.makefiles6'-//(114T"""rN)r
rrr(r)rr6rsrrrsL
%
%
%
%
%







rrFznntplib.socketdummy)rr)r	assertRaisesRegex
nntp_classr#r)rr6expected_error_typeexpected_error_msgrrrr%rrrs `      @@@r"check_constructor_error_conditionsz2MockSocketTests.check_constructor_error_conditionss
	$	$	$	$	$	$	$	$	$	$																								

#%7
8
8	D	D

#
#$79K
L
L	D	DOOG%(OCCC	D	D	D	D	D	D	D	D	D	D	D	D	D	D	D	D	D	D	D	D	D	D	D	D	D	D	D	D	D	D	

&&&	&	&AOOAH%%%%	&	&s5BA5)B5A9	9B<A9	=BBBcxGddt}||tj|jdS)NceZdZdZdS)1MockSocketTests.test_bad_welcome.<locals>.HandlerzBad WelcomeNr
rrrrrrHandlerrs#GGGrr)r>rrrrrrs  rtest_bad_welcomez MockSocketTests.test_bad_welcomes_	$	$	$	$	$m	$	$	$//W.	A	A	A	A	ArcxGddt}||tj|jdS)NceZdZdZdS)EMockSocketTests.test_service_temporarily_unavailable.<locals>.Handlerz#400 Service temporarily unavailableNrrrrrr;GGGrr)r>rrrrrs  r$test_service_temporarily_unavailablez4MockSocketTests.test_service_temporarily_unavailable_	<	<	<	<	<m	<	<	<//W/	B	B	B	B	BrcxGddt}||tj|jdS)NceZdZdZdS)EMockSocketTests.test_service_permanently_unavailable.<locals>.Handlerz#502 Service permanently unavailableNrrrrrrrrr)r>rrr7rrs  r$test_service_permanently_unavailablez4MockSocketTests.test_service_permanently_unavailable
rrcxGfddt}d||tjdS)NceZdZfdZdS)6MockSocketTests.test_bad_capabilities.<locals>.Handlerc2|dSrrf)rcapabilities_responses rrzJMockSocketTests.test_bad_capabilities.<locals>.Handler.handle_CAPABILITIESs

344444rN)r
rrr)rsrrrs.
5
5
5
5
5
5
5rrz201 bad capability)r>rrr)rrrs  @rtest_bad_capabilitiesz%MockSocketTests.test_bad_capabilitiessq	5	5	5	5	5	5	5m	5	5	5!5//W+-B	D	D	D	D	Drcd}d}Gfddt}d||tj||dS)Nzt@e.compythonceZdZfdZdS)3MockSocketTests.test_login_aborted.<locals>.Handlerc2|dSrrf)rr7authinfo_responses  rrzCMockSocketTests.test_login_aborted.<locals>.Handler.handle_AUTHINFOs

/00000rN)r
rrr)rsrrrs.
1
1
1
1
1
1
1rrz503 Mechanism not recognized)r>rrr7)rrrrrs    @rtest_login_abortedz"MockSocketTests.test_login_aborteds{	1	1	1	1	1	1	1m	1	1	1;//W/1B8					rr)
r
rrrrrrrrrrrrrrrrrs??J
"&&&&&:AAABBBBBBDDD




rrceZdZdZdZdS)bypass_contextz'Bypass encryption and actual SSL modulec|Srr)sockr7s  rwrap_socketzbypass_context.wrap_socket(srN)r
rrrrrrrrr&s)11rrc$eZdZedZdS)MockSslTestsc2tj|dti|S)Nr)rrr)rkws  rrzMockSslTests.nntp_class-sG.GBGGGrN)r
rrstaticmethodrrrrrr+s2HH\HHHrrcNeZdZdZdZejeddZdS)LocalServerTestsctj}tj|}|t	j|j|f|_|j|	|jj
|ttj
|d|_dS)N)targetr7F)r)rr	bind_portlisten	threadingThread
run_server
backgroundr}
addCleanupr`enterContextrHOSTnntp)rrports   rr/zLocalServerTests.setUp3s}&t,,


#*?$222,---%%d=+=te&T&T&TUU			rc|5|\}}dddn#1swxYwYtj5}||||d}|d	|}|dkr|dn|dkr||dtj	tj
}|t|
|d}||||d}n>|d	kr|d
n$td|,	ddddS#1swxYwYdS)Nrbs200 Server ready
TsCAPABILITIES
s.101 Capability list:
VERSION 2
STARTTLS
.
s
STARTTLS
s382 Begin TLS negotiation now
)server_sidesQUIT
s
205 Bye!
zUnexpected command {!r})accept
contextlib	ExitStack
enter_contextrsendallrr(r
SSLContextPROTOCOL_TLS_SERVERload_cert_chaincertfilerrrS)rrclientrcleanupreaderrYcontexts        rrzLocalServerTests.run_server>sg
	(	(++--KVQ	(	(	(	(	(	(	(	(	(	(	(	(	(	(	(

!
#
#	Lw!!&)))**6??4+@+@AAFNN2333
Loo''---NN!O++LLNNNNN#GHHH!nS-DEEG++H555$00D122F))&111$226??43H3HIIFFK''NN?333$%>%E%Ec%J%JKKK-
L(1	L	L	L	L	L	L	L	L	L	L	L	L	L	L	L	L	L	Ls'++FGGGrc|jj}|jj}|j|||jj|||jj||jjtj|t|jjdSr)
rrrstarttlsassertNotEqualrEr	SSLSocketr6r)rrrs   rrzLocalServerTests.test_starttls^sy~y~		
D$).111D$).111dincm<<<*di&899999rN)	r
rrr/rrrrrrrrr	r	2se	V	V	VLLL@X455::65:::rr	__main__)?rrr@r^rrros.pathosrrrrtest.supportrrimport_deprecatedrrr
unittest.mockr	rImportErrorpathr`dirname__file__r"rrWrrrrSSLEOFErrorTestCaserrrrrrr!r+r;r>rrrrrYr`rnrrrvrrrrr	r
mainrrr<module>r8s*				



				77777777
+/
+I
6
6########JJJJ
CCC7<<11:~NN?|HH.....9...GGGGGGGGT$$&&&[
?3?$$J#####0(2C###JS011=====/==21=<)))))BL)))X								&*****$8***BFBFBFBFBFBFBFBFJ
/////M///6*****-***--------8PGPGPGPGPGPGPGPGf
@
@
@
@
@$&:H<M
@
@
@GGGGG$&:H<MGGG.	4	4	4	4	4 4h6G	4	4	4	3	3	3	3	39	3	3	3_6_6_6_6_6!_6_6_6D
@
@
@
@
@X&
@
@
@LLLLLh'LLL\
S011HHHHH?HH21H8:8:8:8:8:x(8:8:8:vzHMOOOOOsAA%$A%