python (3.12.0)

(root)/
lib/
python3.12/
test/
__pycache__/
test_nntplib.cpython-312.pyc

ΑeddlZddlZddlZddlZddlZddlZddlZddlZddl	Z	ddl
Z
ddlmZddl
mZmZej dZddlmZmZddlmZ	ddlZej0j3ej0j5edZe
ej:ZnGdd	eZGd
dZejAe!fZ"ee"ejFfz
Z"Gdd
eejHZ%ejLedGdde%Z'GddejPZ)dZ*Gddej$Z+GddZ,Gdde,Z-GddZ.Gdde.Z/Gdde/Z0Gd d!e/Z1Gd"d#Z2Gd$d%e2e,ejHZ3Gd&d'e2e,ejHZ4Gd(d)e,ejHZ5Gd*d+e-ejHZ6Gd,d-ejHZ7Gd.d/ejHZ8Gd0d1ejHZ9Gd2d3Z:ejLedGd4d5e9Z;Gd6d7ejHZ<e=d8k(rej|yy#e$rdZY'wxYw)9N)support)
socket_helperwarnings_helpernntplib)NNTP	GroupInfo)patchzkeycert3.pemceZdZdZdZy)SSLErrorz6Non-existent exception class when we lack SSL support.zThis will never be raised.N)__name__
__module____qualname____doc__reasonE/BuggyBox/python/3.12.0/bootstrap/lib/python3.12/test/test_nntplib.pyrrs
D-rrceZdZdZdZdZdZdZdZdZ	dZ
d	Zd
ZdZ
dZd
Zej"dddZdZddZej"dddZdZdZdZedZdZdZy)NetworkedNNTPTestsMixinNcv|jj}|jtt	|yN)server
getwelcomeassertEqualstrtype)selfwelcomes  rtest_welcomez$NetworkedNNTPTestsMixin.test_welcome*s(++((*d7m,rc|jj\}}|j|jd||D]!}|j	t
t
|#y)Nz100 )rhelp
assertTrue
startswithrrr)rresplineslines    r	test_helpz!NetworkedNNTPTestsMixin.test_help.sRkk&&(e/6	.DS$t*-	.rc|jj\}}t|dkDrO|jtt|d|jtt|djyyNr)rlistlenrrrrgrouprr$groupss   r	test_listz!NetworkedNNTPTestsMixin.test_list4s]{{'')fv;?YVAY8S$vay"78rc|jj|j\}}t|dkDrO|j	t
t
|d|j	tt
|djyyr))	rr*	GROUP_PATr+rrrrr,r-s   rtest_list_activez(NetworkedNNTPTestsMixin.test_list_active:sc{{''7fv;?YVAY8S$vay"78rc|jtj5}|jj	ddddj
j}|j|jd|y#1swYAxYw)NXYZZYz500 )	assertRaisesrNNTPPermanentErrorr	_shortcmd	exceptionresponser"r#)rcmr$s   rtest_unknown_commandz,NetworkedNNTPTestsMixin.test_unknown_command@se


w99
:	+bKK!!'*	+||$$/6	+	+sA<<Bc@tjjtjdz
}|jj|\}}t
|dkDr=|j|dt|j|djtyy)N)daysr)datetimedatetoday	timedeltar	newgroupsr+assertIsInstancerr,r)rdtr$r.s    rtest_newgroupsz&NetworkedNNTPTestsMixin.test_newgroupsFsz]]
 
 
"X%7%7Q%?
?{{,,R0fv;?!!&)Y7!!&)//37rcVfd}jjj}||jj|jjj
}||jjd}j
|dy)Ncjj|tjj|yr)rDrassertNotIn
GROUP_NAME)descrs r_check_descz=NetworkedNNTPTestsMixin.test_description.<locals>._check_descPs'!!$,T__d3rzzk.brrtt.baz)rdescriptionrJassertInDESCr1r)rrLrKs`  rtest_descriptionz(NetworkedNNTPTestsMixin.test_descriptionOs	4{{&&t7D

dii&{{&&t~~6D{{&&~6r"rcp|jj|j\}}|j|j	dxs|j	d||j|t||j}|j||jj|jy)Nz215 z282 )
rdescriptionsr1r"r#rDdictrJrrN)rr$descsrKs    rtest_descriptionsz)NetworkedNNTPTestsMixin.test_descriptions_skk..t~~>eOOF#>tv'>	FeT*T__%t{{66tGHrc|jj|j}|jdt	||\}}}}}|j||j|j|t|j|t|j|t|j|||j|jd|y)N211 )
rr,rJrr+rDintassertLessEqualr"r#)rresultr$countfirstlastr,s       r
test_groupz"NetworkedNNTPTestsMixin.test_grouphs""4??3CK(*0'eUD%0eS)eS)dC(UD)/6rc|jj\}}|j|tj|j	|j
d|j
|j
dy)Nii)rr@rDr?assertGreaterEqualyearr[rr$r@s   r	test_datez!NetworkedNNTPTestsMixin.test_datessV[[%%'
ddH$5$56		40TYY-rc|j|t|j|jhd|j	D]#}|j|t
t
df%y)N>r@fromsubject
references:bytes:lines
message-id)rDrTrbkeysvaluesrr)rart_dictvs   r_check_art_dictz'NetworkedNNTPTestsMixin._check_art_dictzs^h-


/	"	8A!!!c4:%67	8rc\|jj|j\}}}}}|jj|dz
|\}}t	|dk(r|jd|d\}}|j
||dz
|j|||j|y)NrXrzno articles retrieved)	rr,rJxoverr+skipTestrbr[rq)	rr$r]r^r_namer%art_numros	         r
test_xoverz"NetworkedNNTPTestsMixin.test_xovers)-):):4??)K&eUD$kk''q$7eu:?MM12!!H2Wd+X&rTzHtemporarily skipped until a permanent solution is found for issue #28971c|jj|j\}}}}}|dz
}|jj|df\}}|d\}}	|j	|	|jj||f\}}|d\}}	|j|||j
|||j	|	y)N
r)rr,rJoverrqrbr[)
rr$r]r^r_rustartr%rvros
          r	test_overz!NetworkedNNTPTestsMixin.test_overs*.):):4??)K&eUD$r	kk&&t}5e!!HX&kk&&t}5e!"I/Wd+X&rc|jj|j\}}}}}|jjd|\}}|D]$}|j	t
t
|d&y)Nrh)rr,rJxhdrrrr)rr$r]r^r_rur%r&s        r	test_xhdrz!NetworkedNNTPTestsMixin.test_xhdrsf)-):):4??)K&eUD$kk&&y$7e	1DS$tAw-0	1rc|j|tj||j|j||j
D]}|j|t|j|j
ddy)Nrz).s.
.
)rDrArticleInfornumberr%bytesrI)rr$articlervr&s     rcheck_article_respz*NetworkedNNTPTestsMixin.check_article_respsqgw':':;W^^W5MM	/D!!$.	/	
r*,DErzFIXME: see bpo-32128c|jj|j\}}}}}|||dz
fD]"}	|jj|\}}n|jd|j|jd||j||jj|\}}	|j|jd||j||	||jj|\}}
|j|jd||j||
|d}|jDcgc]}||s|}
}|
jDcgc]}||s|}}|j||
dgz|	jzy#tj
$r'}|jjdsYd}~d}~wwxYwcc}wcc}w)	Nrz423 z(could not find a suitable article numberz221 z222 z220 c$|jdS)NsX-Antivirus)r#)r&s r<lambda>z@NetworkedNNTPTestsMixin.test_article_head_body.<locals>.<lambda>s ?rr)rr,rJheadrNNTPTemporaryErrorr9r#rtr"rbodyrr%r)rr$r]r^r_rurvrerrdenylistr&filtered_head_linesfiltered_liness               rtest_article_head_bodyz.NetworkedNNTPTestsMixin.test_article_head_bodys)-):):4??)K&eUD$eTAX.
	FG
![[--g6
d

	F
MMDE/6dG4[[%%g.
d/6dG4++G4
g/6gw7?04

6&.tn $66+2==14!)$11)<u)Dtzz)QR---
zz,,V4	
$61s#F+G(4G-+G%>G  G%cfd}jjjd|jjjj	\}}||y)Ncl|d}j|ttfjd|y)NLISTOVERVIEW.FMT)rDr*tuplerO)caps	caps_listrs  r_check_capsz>NetworkedNNTPTestsMixin.test_capabilities.<locals>._check_capss.VI!!)dE];MM.)4r)rbrnntp_versiongetcapabilitiescapabilities)rrr$rs`   rtest_capabilitiesz)NetworkedNNTPTestsMixin.test_capabilitiessW	5	
 8 8!<DKK//12[[--/
dDrc|d}d}|jtj|jj||dy)NnotarealusernotarealpasswordF)userpasswordusenetrc)r5r	NNTPErrorrlogin)rbaduserbadpws   rtest_zloginz#NetworkedNNTPTestsMixin.test_zlogins=!"'++T[[->->&		Hrcvt|}	|jjd|_y#d|_wxYwr)rrquit)rclss  rtest_zzquitz#NetworkedNNTPTestsMixin.test_zzquits/4j	KKCJCJs/	8cd}t|D]?}|jdst||}t|s-t	||||Ay)NcBtjfd}|S)Nc~tj|j5|dddy#1swYyxYwr)rtransient_internet	NNTP_HOST)rmeths rwrappedzHNetworkedNNTPTestsMixin.wrap_methods.<locals>.wrap_meth.<locals>.wrappeds1"55dnnEJs	3<)	functoolswraps)rrs` r	wrap_methz7NetworkedNNTPTestsMixin.wrap_methods.<locals>.wrap_meths%
__T
"
#
Nrtest_)dirr#getattrcallablesetattr)rrrurs    rwrap_methodsz$NetworkedNNTPTestsMixin.wrap_methodssS	H	0D??7+3%DD>
Cy/	0rc|jt5|j|jdddddy#1swYyxYw)NrFtimeoutr)r5
ValueError
NNTP_CLASSrrs rtest_timeoutz$NetworkedNNTPTestsMixin.test_timeouts?


z
*	GOODNNAOF	G	G	Gs	>Acfd}ttjd}|j|j|d<	|j|j
fi|5|j
||j
jddd|j||j|j
fi|5jddd|j|y#1swYnxYw#1swY,xYw#t$rK}tjd|jr%tjd|d|j
d}~wwxYw)Ncltdsy	jy#ttf$rYywxYw)NfileFT)hasattrr!OSErrorEOFError)rsris_connectedzANetworkedNNTPTestsMixin.test_with_statement.<locals>.is_connected
s<66*

X&

s!33Frssl_context(?i)KEY.TOO.SMALLzGot  connecting to )rTrINTERNET_TIMEOUTrrrr"r!assertFalserrresearchrunittestSkipTest)rrkwargsssl_errrs    @rtest_with_statementz+NetworkedNNTPTestsMixin.test_with_statementsG	,,
'$($4$4F=!	$T__T^^>v>F
//
.
/
\^,$T__T^^>v>F


\^,
/
/

	yy-w~~>''$wi8..2nn-?)ABB	sHD6D=DD!DD	DDD	E,!AE''E,r)rr
rrrr'r/r2r;rFrQrVr`rerqrwrskipIfr}rrrrrrclassmethodrrrrrrrr&sK-.9978# I	7.	8	'X__T89
'9
'"1FX__T12S3S<H00&G!rrc@eZdZdZdZdZdZeZe	dZ
e	dZy)NetworkedNNTPTestsznews.trigofacile.comfr.comp.lang.pythonzfr.comp.lang.*Pythonc	~tjdttjd}|j|j|d<tj|j5	|j|jfi||_		dddy#t$rb}tjd|jr'tj|d|d|jt!|jd}~wt"$r%tj|d|jwxYw#1swYyxYw)	NnetworkFrrrz got rz  got EOF error on connecting to )rrequiresrTrrrrrrrrrrrrrprint
EOF_ERRORS)rrrs   r
setUpClasszNetworkedNNTPTests.setUpClassAs3#,,
??&$'OOF=!

-
-cmm
<	A
A+S^^CMMDVD
	A	A
9917>>B"++se5	B225--1B-DEEcmm$
A''3%0..1mm->)@AA
A	A	As++D3-"B	D0"AC??1D00D33D<cR|j|jjyyr)rr)rs r
tearDownClassz NetworkedNNTPTests.tearDownClassXs::!JJOO"rN)rr
rrrJr1rPrrrrrrrrrr8sC&I&J IDJAA,rrrequires SSL supportceZdZdZdZdZdZeeddZ	dZ
dZe>ejZejdej j"e_yy)NetworkedNNTP_SSLTestsz
nntp.aioe.orgz	aioe.testzaioe.*testNNTP_SSLNDEFAULT)rr
rrrJr1rPrrrr/
test_starttlsssl_create_unverified_contextrset_ciphers
TLSVersionTLSv1_2maximum_versionrrrrr]sp IJID*d3JIM
4c446	*&)nn&<&<#rrc4eZdZdZdZdZdZdZdZdZ	y)	
_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.c(tjj|tj|_tj|_||_|jj|jj|jyr)
io	RawIOBase__init__BytesIOc2ss2chandlerr|readline	push_data)rrs  rrz_NNTPServerIO.__init__sW
d#::<::<488,,dnn=rcyNTrrs rreadablez_NNTPServerIO.readablercyrrrs rwritablez_NNTPServerIO.writablerrc|jj}|jjdd|jj||jj|y)z.Push (buffer) some data to send to the client.rrN)rtellseekwrite)rdataposs   rrz_NNTPServerIO.push_datasChhmmo

at

crc|jj}|jj||jj||jjt
|S)zThe client sends us some data)rr	rr
rprocess_pendingr+)rbr
s   rrz_NNTPServerIO.writesJhhmmoq

c$$&1v
rc|jj|jjt	|}t	|}||d||S)z#The client wants to read a responseN)rrrreadr+)rbufrns    rreadintoz_NNTPServerIO.readintosA$$&HHMM#c(#FBQrN)
rr
rrrrrrrrrrrrr|s%>rrcLt|}tj||}||fSr)rrBufferedRWPair)rsiors   rmake_mock_filers*

 CS#&D;rceZdZddZdZy)
NNTPServerNcB||_||_|j|yr)rhost
_base_init)rfr
readermodes    rrzNNTPServer.__init__s		
#rc<|jj|`yr)rclosers r_closezNNTPServer._closes		Irr)rr
rrr#rrrrrs$
rrc2eZdZdZfdZfdZdZxZS)MockedNNTPTestsMixinNcBt||jyrsupersetUpmake_serverr	__class__s rr)zMockedNNTPTestsMixin.setUps

rc&t||`yr)r(tearDownrr+s rr.zMockedNNTPTestsMixin.tearDowns
Krc|j|_t|j\|_}t	|dg|i||_|j
S)Nztest.server)
handler_classrrrrr)rargsrrs    rr*z MockedNNTPTestsMixin.make_serversH))+'5$ }FtFvF{{r)rr
rr0r)r.r*
__classcell__r,s@rr%r%sMrr%ceZdZfdZxZS)MockedNNTPWithReaderModeMixincFt||jdy)NT)r r'r+s rr)z#MockedNNTPWithReaderModeMixin.setUps

D)r)rr
rr)r2r3s@rr5r5s
**rr5ceZdZdZdZdZdZdZdZdZ	dZ
d	Zd
ZdZ
dZd
ZdZd dZdZdZd!dZdZdZdddZdddZdZdZedzezZd dZd dZd dZdZy)"
NNTPv1HandlerzA handler for RFC 977z200 NNTP mock servercxd|_d|_||_||_d|_d|_|j
y)NFT)in_body
allow_posting	_readline
_push_data
_logged_in
_user_senthandle_welcome)rrrs   rr|zNNTPv1Handler.starts9!!#rct|ddS)Nutf-8surrogateescape)rrrs  r_decodezNNTPv1Handler._decodes4"344rc|jrm	|j}|sy|jj||dk(rn5	|j\}}||d|jid|_d|_d|_	|j|j}|sy|j
dstdj||dd}|j^}}t|d|jzd}||jn#	|||jr||f|_g|_	#d|_d|_d|_wxYw#t$r }tdj||d}~wwxYw)	NrrF
z line doesn't end with \r\n: {!r}handle_zcommand failed: {!r})r:r<rappend
body_callbackrEendswithrformatsplitrupperhandle_unknown	Exception)rr&rtokenscmdrs      rrzNNTPv1Handler.process_pendingss<<~~'		  &8#

%#11ff-499-%)" 	$<< 01D==( !E!L!LT!RSS9D::<LC&4SYY[!8$?D|##%'&M||-16\*$&	)&*" 	$ !Q$%;%B%B4%HIqPQs$!D4E4E	E7E22E7cd|_y)z7Flag that the client is expected to post a request bodyTN)r:rs rexpect_bodyzNNTPv1Handler.expect_body
s	rc&|j|y)zPush some binary dataN)r=rDs  rrzNNTPv1Handler.push_datasrctj|}dj|jdz}|j	d}|j|y)zPush a string literalrGrBN)textwrapdedentjoin
splitlinesencoder)rlits  rpush_litzNNTPv1Handler.push_litsDooc"kk#..*+f4jj!src&|jdy)Nz	500 What?r^rs rrPzNNTPv1Handler.handle_unknowns

k"rc:|j|jyr)r^rrs rr@zNNTPv1Handler.handle_welcomes

dll#rc&|jdyNz205 Bye!r`rs rhandle_QUITzNNTPv1Handler.handle_QUIT"s

j!rc&|jdy)N111 20100914001155r`rs rhandle_DATEzNNTPv1Handler.handle_DATE%s

*+rcr|dk(r|jdy|jdj|y)Nrz$211 486 761 1265 fr.comp.lang.pythonz411 No such group {})r^rM)rr,s  rhandle_GROUPzNNTPv1Handler.handle_GROUP(s0))MM@AMM077>?rc&|jdy)Nz            100 Legal commands
              authinfo user Name|pass Password|generic <prog> <args>
              date
              help
            Report problems to <root@example.org>
            .r`rs rhandle_HELPzNNTPv1Handler.handle_HELP.s

	rNc||jdy|dk(r|jdy|dk(r|jdy|jdy)N412 No newsgroup selected3000234"223 3000234 <45223423@example.com><45223423@example.com>223 0 <45223423@example.com>430 No Such Article Foundr`rmessage_specs  rhandle_STATzNNTPv1Handler.handle_STAT7sMMM56
Y
&MM>?
5
5MM89MM56rc&|jdy)N*223 3000237 <668929@example.org> retrievedr`rs rhandle_NEXTzNNTPv1Handler.handle_NEXTAs

BCrc&|jdy)N,223 3000234 <45223423@example.com> retrievedr`rs rhandle_LASTzNNTPv1Handler.handle_LASTDs

DErcj||jdy|dk(r)|dk(r|jdy|jdy|dk(r|jdy|dk(rD|J|d	k(r|jd
y|dk(r|jdy|jd
y|jdy)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 keywordr`)ractionparams   rhandle_LISTzNNTPv1Handler.handle_LISTGs>MM
x

%



~
%MM


|
#$$**

--




MM45rc|dk(r|dk(r|dk(r|jdy|dk(r|dk(r|dk(r|jdy|dk(r!|dvr|dk(r|jd	d
zdzy|jdy)
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
                .r`)rr,date_strtime_strs    rhandle_NEWNEWSzNNTPv1Handler.handle_NEWNEWS}s
''H
,BH$MM

))h(.BH$MM

))00("MM/D0 
!
MM
rcT|dk(r|jdy|jdy)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
                .r`rss  rhandle_XOVERzNNTPv1Handler.handle_XOVERs.7"MM
4
MM
r)rc|@|jr"|jd|jy|jdy|jsJ|jd||_y)Nz+340 Input article; end with <CR-LF>.<CR-LF>440 Posting not permitted240 Article received OKr;r^rUposted_body)rrs  rhandle_POSTzNNTPv1Handler.handle_POSTsW<!!

KL  "

9:%%%MM34#Drc|E|jr'|dk(r"|jd|jy|jdy|jsJ|jd||_y)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`<""KK

EF  "

67%%%MM6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

c||jdn@|dk(r|jdn)|dk(r|jdn|jdy|j|j|jdy)N"220 3000237 <45223423@example.com>rp220 0 <45223423@example.com>rn"220 3000234 <45223423@example.com>rr.)r^sample_articlerss  rhandle_ARTICLEzNNTPv1Handler.handle_ARTICLEsnMM>?
5
5MM89
Y
&MM>?MM56

d))*

crc||jdn@|dk(r|jdn)|dk(r|jdn|jdy|j|j|jdy)N"221 3000237 <45223423@example.com>rp221 0 <45223423@example.com>rn"221 3000234 <45223423@example.com>rrr)r^sample_headrss  rhandle_HEADzNNTPv1Handler.handle_HEADnMM>?
5
5MM89
Y
&MM>?MM56

d&&'

crc||jdn@|dk(r|jdn)|dk(r|jdn|jdy|j|j|jdy)N"222 3000237 <45223423@example.com>rp222 0 <45223423@example.com>rn"222 3000234 <45223423@example.com>rrr)r^sample_bodyrss  rhandle_BODYzNNTPv1Handler.handle_BODYrrc&|jr|jdy|dk(r7|jr|jdy|jdd|_y|dk(r|jdd|_ytdj	|)	Nz502 Already Logged Inrz 482 User Credential Already Sentz381 Password RequiredTpassz281 Login SuccessfulzUnknown cred type {})r>r^r?rQrM)r	cred_typers   rhandle_AUTHINFOzNNTPv1Handler.handle_AUTHINFO
sy??MM12
&
 

@A

56"&
&
 MM01"DO299)DEErrNN) rr
rrrr|rErrUrr^rPr@rdrgrirkrurxr{rrrrrrrrrrrrrrrr8r8s$G5$'L#$",@7DF46l>@#'
$04$CK"K!6)K7N
Frr8c$eZdZdZdZdZddZy)
NNTPv2Handlerz"A handler for RFC 3977 (NNTP "v2")cd}|js!|j|jdy|j|jdy)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 USERrM)r>r^rMrfmts  rhandle_CAPABILITIESz!NNTPv2Handler.handle_CAPABILITIESs<	MM#**%BCDMM#**R.)rctd)Nz3MODE READER sent despite READER has been advertised)rQ)r_s  rhandle_MODEzNNTPv2Handler.handle_MODE.sMNNrNc$|j|Sr)rrss  rhandle_OVERzNNTPv2Handler.handle_OVER1s  ..rr)rr
rrrrrrrrrrs,*"O/rrc"eZdZdZfdZxZS)CapsAfterLoginNNTPv2Handlerz3A handler that allows CAPABILITIES only after loginc^|js|jdyt|
y)Nz480 You must log in.)r>r^r(rr+s rrz/CapsAfterLoginNNTPv2Handler.handle_CAPABILITIES8s"MM01G')r)rr
rrrr2r3s@rrr5s=**rrc"eZdZdZdZdZdZy)ModeSwitchingNNTPv2Handlerz$A server that starts in transit modecd|_yNF)	_switchedrs rrz#ModeSwitchingNNTPv2Handler.__init__Bs	rcd}|jr!|j|jdy|j|jdy)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
            .rMzMODE-)rr^rMrs  rrz.ModeSwitchingNNTPv2Handler.handle_CAPABILITIESEs;	>>MM#**R.)MM#**W-.rcZ|js|dk(sJd|_|jdy)NreaderTz200 Posting allowed)rr^)rwhats  rrz&ModeSwitchingNNTPv2Handler.handle_MODEUs'>>dh&66

+,rN)rr
rrrrrrrrrr?s./ -rrceZdZfdZdZdZdZdZdZdZ	dZ
d	Zd
ZdZ
dZd
ZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZ dZ!d Z"d!Z#xZ$S)"NNTPv1v2TestsMixinc"t|yr)r(r)r+s rr)zNNTPv1v2TestsMixin.setUp]s

rcx|j|jj|jjyr)rrrrrs rrzNNTPv1v2TestsMixin.test_welcome`s&,,dll.B.BCrc|jdk(r&|jd|jj|jj	dd|jd|jjy)NrAUTHINFOtestusertestpw)rrOr_capsrrIrs r
test_authinfoz NNTPv1v2TestsMixin.test_authinfocsX!MM*dkk&7&78*h/	
T[[%6%67rc|jj\}}|j|d|j|tjddddddy)Nrf	r7)rr@rr?rds   rrezNNTPv1v2TestsMixin.test_dateksN[[%%'
d34x00q"aRHIrc|j|jj|jj	}|j|d|j
|jjyrc)rrclosedrrrr")rr$s  r	test_quitzNNTPv1v2TestsMixin.test_quitpsN){{!z*(rc|jj\}}|j|d|j|gdy)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_helpvs>[[%%'
d34 
	rc	r|jj\}}|jt|d|d}|j|t	dddd|jjd\}}|jt|d|d	}|j|t	d
dddy)
Nrcomp.lang.python.announce
0000001153
0000000993mr~rrz!gmane.comp.python.distutils.devel
0000014104
0000000001)rr*rr+r)rr$r.gs    rr/zNNTPv1v2TestsMixin.test_lists{{'')fVa(1I1<"C
)	*{{''
6fVa(1I9<"C
)	*rc*|jjd\}}}|j|d|j|d|j|d|jjd\}}}|j|d|j|d|j|d|jtj
5}|jjdddd|jjjd|jtj
5}|jjddd|j|jjdy#1swYxYw#1swY<xYw)	N-rorprqrz<non.existent.id>rrrm)rstatrr5rrr8r9)rr$rvrr:s     r	test_statzNNTPv1v2TestsMixin.test_statsL$(KK$4$4W$=!gzCD'*%=>$(KK$4$45M$N!gz=>!$%=>


w99
:	2bKK01	2..0KL


w99
:	bKK	..0KL	2	2		s
E=3F	=F	Fc|jj\}}}|j|d|j|d|j|dy)Nrw-z<668929@example.org>)rnextrrr$rvrs    r	test_nextzNNTPv1v2TestsMixin.test_nextsM$(KK$4$4$6!gzKL'*%;<rc|jj\}}}|j|d|j|d|j|dy)Nrzrrp)rr_rrs    r	test_lastzNNTPv1v2TestsMixin.test_lastsM$(KK$4$4$6!gzMN'*%=>rc|jjd}|j|d|jjd}|j|dy)NrThe Python computer language.comp.lang.pythonxrM)rrNr)rrKs  rrQz#NNTPv1v2TestsMixin.test_descriptionsM{{&&'9:>?{{&&':;r"rcR|jjd\}}|j|d|j|ddi|jjd\}}|j|ddd|jjd\}}|j|iy)Nrz-215 Descriptions in form "group description".rrz4Announcements about the Python language. (Moderated))rrr)rrSrr-s   rrVz$NNTPv1v2TestsMixin.test_descriptionss{{//0BCfNO ?"	{{//0CDf ?)_"	{{//0CDf$rc8|jjd\}}}}}|j|jd||j	|d|j	|d|j	|d|j	|d|jtj5}|jjddddj}|j|jjd|jy#1swYKxYw)NrrYiiizcomp.lang.python.develz411 No such group)
rr,r"r#rr5rrr8r9)rr$r]r^r_r,r:excs        rr`zNNTPv1v2TestsMixin.test_groups*.++*;*;<Q*R'eUD%/6$t$$ 56


w99
:	8bKK67	8ll//0CD	&	8	8s*DDctjdddddd}|jjd|\}}dj|j}|j|||j|d	d
gtjdddddd}|jjd|\}}|j|d|j|gy)
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?rnewnewsrMrr)rrEr$idsexpecteds     rtest_newnewszNNTPv1v2TestsMixin.test_newnewss


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


tQAr1
5KK''(=rB	cJKb!rc|jt|d|j|djdd|j|dd|j|dd|j|d	d
y)NrrzrBu-- Signed by André.rHrs.Here is a dot-starting line.sThis is just a test article.)rr+decoderr%s  r_check_article_bodyz&NNTPv1v2TestsMixin._check_article_bodystUQ'r))'24JKrC(r$DEr$CDrc|jt|d|j|dd|j|ddy)Nrrs&From: "Demo User" <nobody@example.net>s7Message-ID: <i.am.an.article.you.will.want@example.com>)rr+rs  r_check_article_headz&NNTPv1v2TestsMixin._check_article_heads@UQ'q#LMq#]^rc|jt|d|j|dd|j|dd|j|ddy)Nrrrr)rr+rr	rs  r_check_article_dataz&NNTPv1v2TestsMixin._check_article_datasRUQ'  r+  rs,q3'rcn|jj\}}|j|d|\}}}|j|d|j|d|j||jjd\}}|j|d|\}}}|j|d|j|d|j||jjd\}}|j|d|\}}}|j|d|j|d|j||j	t
j5}|jjdddd|jjjd	y#1swY0xYw)
Nrrrprrrr<non-existent@example.com>rr)	rrrrr5rrr8r9rr$inforvrr%r:s       rtest_articlezNNTPv1v2TestsMixin.test_articles[[((*
dCD%)"U'*%=>  '[[((1
dCD%)"U'*%=>  '[[(()AB
d=>%)"U!$%=>  '


w99
:	>bKK <=	>..0KL	>	> F++F4ctj}|jj|\}}|j	|d|\}}}|j	|d|j	|d|j	|g|j}|j
|jdt||j
|jdt|y)NrrrrpKFrom: "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#asciirLrrr$rrvrr%rs        rtest_article_filez$NNTPv1v2TestsMixin.test_article_filesJJL[[((a(0
dCD%)"U'*%=>#zz|
5T{		



.
T{	rcn|jj\}}|j|d|\}}}|j|d|j|d|j||jjd\}}|j|d|\}}}|j|d|j|d|j||jjd\}}|j|d|\}}}|j|d|j|d|j||j	t
j5}|jjdddd|jjjd	y#1swY0xYw)
Nrrrprrrrrrr)	rrrrr5rrr8r9rs       r	test_headzNNTPv1v2TestsMixin.test_head [[%%'
dCD%)"U'*%=>  '[[%%g.
dCD%)"U'*%=>  '[[%%&>?
d=>%)"U!$%=>  '


w99
:	;bKK9:	;..0KL	;	;rctj}|jj|\}}|j	|d|\}}}|j	|d|j	|d|j	|g|j}|j
|jdt||j|jdt|y)Nrrrrprr)rrrrrrr"r#rrrLrs        rtest_head_filez!NNTPv1v2TestsMixin.test_head_file;sJJL[[%%1%-
dCD%)"U'*%=>#zz|
5T{		

.
T{	rcn|jj\}}|j|d|\}}}|j|d|j|d|j||jjd\}}|j|d|\}}}|j|d|j|d|j||jjd\}}|j|d|\}}}|j|d|j|d|j||j	t
j5}|jjdddd|jjjd	y#1swY0xYw)
Nrrrprrrrrrr)	rrrr	r5rrr8r9rs       r	test_bodyzNNTPv1v2TestsMixin.test_bodyOrrctj}|jj|\}}|j	|d|\}}}|j	|d|j	|d|j	|g|j}|j
|jdt||j|jdt|y)Nrrrrprr)rrrrrrrr#rr"rLrs        rtest_body_filez!NNTPv1v2TestsMixin.test_body_filejsJJL[[%%1%-
dCD%)"U'*%=>#zz|
5T{		



.
T{	rcZ|j|jd||jt|d|d\}}|j|d|j|ddddd	d
ddd
|d\}}|j|dd|d\}}|j|ddy)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)rgrhr@rlrirjrkxrefrr*rrh0Re: Message d'erreur incompréhensible (par moi))r"r#rr+)rr$	overviewsrvr{s     rcheck_over_xover_respz(NNTPv1v2TestsMixin.check_over_xover_resp~s/6Y+!!
"%[`5L:@	 		"!
ft,!!
iK	Mrcf|jjdd\}}|j||y)Nr';)rrsr-rr$r,s   rrwzNNTPv1v2TestsMixin.test_xovers,++++B3i""43rcd|jjd\}}|j||y)N)r'r/)rr{r-r0s   rr}zNNTPv1v2TestsMixin.test_overs*++**84i""43rsFrom: "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é.
c8|jj}|jt|d|j|dd|j|dd|j|dd|j|dd	|j|d
dy)NryrzrrHs-- Signed by André.
r
rs ..Here is a dot-starting line.
rs(From: "Demo User" <nobody@example.net>
)rrrr+rs  r_check_posted_bodyz%NNTPv1v2TestsMixin._check_posted_bodys((UR(rH-r$EFrG,r$IJq#PQrc|j}|||fz}d|j_||}|j|jj	dd}|||fz}d|j_||}|j|S)Nr3
)sample_postrrr4replace)rfuncfile_factoryr1post	func_argsr$s       r_check_post_ihave_subz(NNTPv1v2TestsMixin._check_post_ihave_subsL.00	#' Y!''7L.00	#' Y!rc|j|g|dti}|j|||j|g|dti}|j|||j|g|dtj
i}|j||d}|j|g|d|i}|j||d}|j|g|d|i}|j||y)Nr:c8t|jdS)NTkeependsiterr[rs r	iterlinesz6NNTPv1v2TestsMixin.check_post_ihave.<locals>.iterlinessd344rc8t|jdS)NFr@rBrDs rrEz6NNTPv1v2TestsMixin.check_post_ihave.<locals>.iterlinesse455r)r=rr	bytearrayrr)rr9success_respr1r$rEs      rcheck_post_ihavez#NNTPv1v2TestsMixin.check_post_ihaves)t))$JJEJ|,)t))$NNIN|,)t))$OOBJJO|,	5)t))$NNIN|,	6)t))$NNIN|,rcp|j|jjdd|j_|jtj5}|jj|jddd|jjjdy#1swY0xYw)NrFr)rIrr;rr;r5rrr7rr8r9rr:s  r	test_postzNNTPv1v2TestsMixin.test_postsdkk..0IJ%*"


w99
:	/bKKT--.	/..4	6	/	/s&B,,B5cR|j|jjdd|jtj
5}|jjd|jddd|jjjdy#1swY0xYw)Nrrz<another.message.id>r)
rIrihaver5rrr7rr8r9rKs  r
test_ihavezNNTPv1v2TestsMixin.test_ihavesdkk//1MK	M


w99
:	HbKK4d6F6FG	H..1	3	H	Hs'BB&ctjdddddd}|jtj|jj
d|y)Nrrrrr)r?r5r
NNTPDataErrorrr)rrEs  rtest_too_long_linesz&NNTPv1v2TestsMixin.test_too_long_linessE


tQ1a
3'//++--/A2	Gr)%rr
rr)rrrerr'r/rrrrQrVr`rr	rrrrrr!r#r%r-rwr}r7r4r=rIrLrOrRr2r3s@rrr[sD8J
)*M =?#%&"&E_
(M6*M6(M6(M*44	*	R -*63GrrceZdZdZdZeZdZy)NNTPv1Testsz*Tests an NNTP v1 server (no capabilities).rc|jj}|j|i|j|jjd|j|jjdy)Nrrrrrnntp_implementationrrs  r	test_capszNNTPv1Tests.test_capssX{{**,r"111588$?rN)rr
rrrr8r0rYrrrrTrTs4L!M@rrTceZdZdZdZeZdZy)NNTPv2Testsz,Tests an NNTP v2 server (with capabilities).rc|jj}|j|ddgddgdgggdgggd|j|jjd|j|jjd	y)
N23INNz2.5.1USER)r}zACTIVE.TIMESzDISTRIB.PATSHEADERSrr)VERSIONIMPLEMENTATIONrHDRrOVERPOSTREADERrz	INN 2.5.1rVrXs  rrYzNNTPv2Tests.test_capss{{**,Sz$g.>
 
		
111588+FrN)rr
rrrrr0rYrrrr[r[s6L!MGrr[ceZdZdZdZeZdZy)CapsAfterLoginNNTPv2TestszCTests a probably NNTP v2 server with capabilities only after login.rc|j|jji|jjdd|j	d|jjy)Nrrrb)rrrrrOrs rtest_caps_only_after_loginz4CapsAfterLoginNNTPv2Tests.test_caps_only_after_loginsH**B/*h/

i!2!23rN)rr
rrrrr0rkrrrririsML/M4rriceZdZdZdZeZdZy)SendReaderNNTPv2TestszoSame tests as for v2 but we tell NTTP to send MODE READER to a server
    that isn't in READER mode by default.rcP|jd|jjy)Nrg)rOrrrs r(test_we_are_in_reader_mode_after_connectz>SendReaderNNTPv2Tests.test_we_are_in_reader_mode_after_connect&s

h 1 12rN)rr
rrrrr0rorrrrmrms-L.M3rrmcbeZdZdZdZdZdZdZdZe	jeddZy	)
	MiscTestscfd}|dd|dd|dd|dd|dd|d	d
|ddy)NcPjtj||yr)rr
decode_header)arrs  rgivesz+MiscTests.test_decode_header.<locals>.gives-sW2215q9rrMza 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 matricer+rrrvs` rtest_decode_headerzMiscTests.test_decode_header,sh	:
b2
 01
$&<=
57KL
J`	b	<(	*	@@	Brcgd}|jtj|gdgd}|jtj|gdgd}|jtj|gdgd}|jtj|gdgd}|jtj|gdgd}|jtj|gd	y)
N)Subject:From:Date:Message-ID:References:rjrk)rhrgr@rlrirjrk)rzr{r|r}r~Bytes:Lines:)zsubject:zFROM:zDaTe:zmessage-ID:r~zBYTES:r)	rzr{r|r}r~rjrk	Xref:fullzDistribution:full)	rhrgr@rlrirjrkr*distribution)	rzr{r|r}r~rrz	Xref:FULLzDistribution:FULL)rzr{r|r}r~rrrrhrgr@rlrirjrkr*)rr_parse_overview_fmtrs  rtest_parse_overview_fmtz!MiscTests.test_parse_overview_fmt<s444U;
!	"444U;
!	"444U;
!	"&	
44U;
9	:&	
44U;
9	:A44U;
)	*rctjdgz}dg}tj||}|\\}}|j|d|j|dddddd	d
ddd
g}tj||}|\\}}|j|dddg}tj||}|\\}}|j|dd|j|ddy)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 -0500rpz<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: 	ri rM)r_DEFAULT_OVERVIEW_FMT_parse_overviewr)rrr%overviewrvfieldss      rtest_parse_overviewzMiscTests.test_parse_overviewds++vh6
;
**5#6%&'*16/2/8	"
		

**5#6%&.

**5#6%&-s3,rc
fd}|dddddddd|d	d
dddddd|dd
dddddd|dd
d
dddddy)Ncrjtj||tj|yr)rr_parse_datetimer?)rurcrs   rrvz,MiscTests.test_parse_datetime.<locals>.givess.W44Q:%..2
4r19990623135624rr819990623135624990623090623irrws` rtest_parse_datetimezMiscTests.test_parse_datetimesc	4	dAr2r2>
j(D!RR<
h$2r2r:
h$2r2r:rc
fd}|dddddddd	|d
ddddddd	|ddd
dddddfd}|ddddd|d
dddd|ddd
ddy)Nctj||||||}	jtj|||f	jtj|d||fyrr?rr_unparse_datetime
yMdhrsrrrErs
         rrvz.MiscTests.test_unparse_datetime.<locals>.givesse""1aAq!4BW66r:&1
3W66r5A&1
3rrrrrrrrr20000623rrXrrr20100605010203ctj|||}jtj	|||fjtj	|d||fyrr?r@rrrrrrrrrErs      rrvz.MiscTests.test_unparse_datetime.<locals>.givess]q!Q'BW66r:&1
3W66r5A&1
3r000000rrws` rtest_unparse_datetimezMiscTests.test_unparse_datetimes	3	dAr2r2z8<
dAr2r2z8<
dAq!Q:x8	3	dAr:x0
dAr:x0
dAq*h/rc
fd}|dddddddd	|d
ddddddd	|ddd
dddddfd}|ddddd|d
dddd|ddd
ddy)Nctj||||||}	jtj|d||fyrrrs
         rrvz5MiscTests.test_unparse_datetime_legacy.<locals>.givessB""1aAq!4BW66r4@&1
3rrrrrrrrrr000623rrXrrr100605rctj|||}jtj	|d||fyrrrs      rrvz5MiscTests.test_unparse_datetime_legacy.<locals>.givess:q!Q'BW66r4@&1
3rrrrws` rtest_unparse_datetime_legacyz&MiscTests.test_unparse_datetime_legacys	3	dAr2r2x:
dAr2r2x:
dAq!Q8X6	3	dAr8X.
dAr8X.
dAq(H-rrcB|jttdy)Nr)r"rrrs rtest_ssl_supportzMiscTests.test_ssl_supports45rN)
rr
rrxrrrrrr
skipUnlessrrrrrrqrq*sGB &*P,-\	;0..&X45666rrqceZdZdZdZy)PublicAPITestsz>Ensures that the correct values are exposed in the public API.c|jttdgd}t|j	d|jt
tjt
|y)N__all__)rrNNTPReplyErrorrr6NNTPProtocolErrorrQrtr)r"rrrrJrsetr)r
target_apis  rtest_module_all_attributez(PublicAPITests.test_module_all_attributesO34M
?j)W__-s:?rN)rr
rrrrrrrrsH@rrcPeZdZdZej
Z	d	dZdZdZ	dZ
dZdZy)
MockSocketTestszaTests involving a mock socket object

    Used where the _NNTPServerIO file object is not enough.Ncf	
Gfdd}G	
fddd
g	td|5|j||5|jd||dddddd|j
	D]}|j|jy#1swYExYw#1swYIxYw)	NceZdZfdZy)NMockSocketTests.check_constructor_error_conditions.<locals>.mock_socket_modulecSrr)addressr
MockSockets  rcreate_connectionz`MockSocketTests.check_constructor_error_conditions.<locals>.mock_socket_module.create_connections!|#rN)rr
rr)rsrmock_socket_modulers
$rrc$eZdZfdZfdZy)FMockSocketTests.check_constructor_error_conditions.<locals>.MockSocketc
dyrr)r
socket_closeds rr"zLMockSocketTests.check_constructor_error_conditions.<locals>.MockSocket.closes $
rcT}t|\}}j||Sr)rrJ)socketmoderrrfilesr0s     rmakefilezOMockSocketTests.check_constructor_error_conditions.<locals>.MockSocket.makefiles)'/(14T"rN)rr
rr"r)rr0rsrrrs

%
rrFznntplib.socketdummy)rr)r	assertRaisesRegex
nntp_classr"r)rr0expected_error_typeexpected_error_msgrrrrrrrs `      @@@r"check_constructor_error_conditionsz2MockSocketTests.check_constructor_error_conditionss
	$	$				

#%7
8	D

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

&	&AOOAHH%	&		D	D	D	Ds#B'BB'B$	 B''B0cxGddt}|j|tj|jy)NceZdZdZy)1MockSocketTests.test_bad_welcome.<locals>.HandlerzBad WelcomeNrr
rrrrrHandlerrs#Grr)r8rrrrrrs  rtest_bad_welcomez MockSocketTests.test_bad_welcomes.	$m	$//W..	ArcxGddt}|j|tj|jy)NceZdZdZy)EMockSocketTests.test_service_temporarily_unavailable.<locals>.Handlerz#400 Service temporarily unavailableNrrrrrr;Grr)r8rrrrrs  r$test_service_temporarily_unavailablez4MockSocketTests.test_service_temporarily_unavailable.	<m	<//W//	BrcxGddt}|j|tj|jy)NceZdZdZy)EMockSocketTests.test_service_permanently_unavailable.<locals>.Handlerz#502 Service permanently unavailableNrrrrrrrrr)r8rrr6rrs  r$test_service_permanently_unavailablez4MockSocketTests.test_service_permanently_unavailable
rrcnGfddt}d|j|tjy)NceZdZfdZy)6MockSocketTests.test_bad_capabilities.<locals>.Handlerc(|jyrr`)rcapabilities_responses rrzJMockSocketTests.test_bad_capabilities.<locals>.Handler.handle_CAPABILITIESs

34rN)rr
rr)rsrrrs
5rrz201 bad capability)r8rrr)rrrs  @rtest_bad_capabilitiesz%MockSocketTests.test_bad_capabilitiess4	5m	5!5//W++-B	Drczd}d}Gfddt}d|j|tj||y)Nzt@e.compythonceZdZfdZy)3MockSocketTests.test_login_aborted.<locals>.Handlerc(|jyrr`)rr1authinfo_responses  rrzCMockSocketTests.test_login_aborted.<locals>.Handler.handle_AUTHINFOs

/0rN)rr
rr)rsrrrs
1rrz503 Mechanism not recognized)r8rrr6)rrrrrs    @rtest_login_abortedz"MockSocketTests.test_login_abortedsB	1m	1;//W//1B8	rr)
rr
rrrrrrrrrrrrrrrrs9?J
"&&:ABBD
rrceZdZdZdZy)bypass_contextz'Bypass encryption and actual SSL modulec|Srr)sockr1s  rwrap_socketzbypass_context.wrap_socket(srN)rr
rrrrrrrr&s
1rrceZdZedZy)MockSslTestsc8tj|dti|S)Nr)rrr)r
kws  rrzMockSslTests.nntp_class-sG.GBGGrN)rr
rstaticmethodrrrrrr+sHHrrcJeZdZdZdZejeddZy)LocalServerTestsctj}tj|}|jt	j
|j|f|_|jj|j|jj|jttj|d|_y)N)targetr1F)r)rr	bind_portlisten	threadingThread
run_server
backgroundr|
addCleanuprZenterContextrHOSTnntp)rrports   rr)zLocalServerTests.setUp3s}}&&t,
#**??$2,,-%%d=+=+=te&TU	rc,|5|j\}}dddtj5}|j|j|j	d}|jd	|j
}|dk(r|jdn|dk(r|j|jdtjtj}|jt|j|d}|j||j|j	d}n1|d	k(r|jd
ntdj|	dddy#1swYhxYw#1swYyxYw)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_chaincertfilerrrM)rrclientrcleanuprrScontexts        rrzLocalServerTests.run_server>sn
	(++-KVQ	(

!
!
#	Lw!!&)**6??4+@AFNN23oo'--NN!O+LLNNN#GH!nnS-D-DEG++H5$00D12F))&1$226??43HIFK'NN?3$%>%E%Ec%JKK-(1	L	L	(	(	L	LsE=EF
=F
Frc|jj}|jj}|jj|j	||jj|j	||jj|j|jjtj|jt|jjyr)
rrrstarttlsassertNotEqualrDr	SSLSocketr5r)rrrs   rrzLocalServerTests.test_starttls^syy~~yy~~			
D$))..1D$))..1diinncmm<*dii&8&89rN)	rr
rr)rrrrrrrrrr2s3	VL@X45:6:rr__main__)?rrr?rXrrros.pathosrr	rrtest.supportrrimport_deprecatedrrr
unittest.mockr	rImportErrorpathrZdirname__file__rrrQrrrrSSLEOFErrorTestCaserrrrrrrr%r5r8rrrrrTr[rirmrqrrrrrrmainrrr<module>r2s	
	7
+/
+
+I
6#
77<<1>B?||H.9.GGT$$&[
?3??$$J#0(2C2C#JS01=/=2=<)BLL)X		&*$8*BFBFJ
/M/6*-*--8PGPGf
@$&:H<M<M
@G$&:H<M<MG.	4 4h6G6G	4	39	3_6!!_6D
@X&&
@Lh''L\
S01H?H2H8:x((8:vzHMMOu2
CsI99JJ