403Webshell
Server IP : 118.27.122.248  /  Your IP : 216.73.216.15
Web Server : Apache
System : Linux web0264.sh.tyo1 4.18.0-553.79.1.lve.el7h.x86_64 #1 SMP Wed Oct 15 16:34:46 UTC 2025 x86_64
User : c9415830 ( 11735)
PHP Version : 8.4.17
Disable Function : NONE
MySQL : OFF  |  cURL : ON  |  WGET : ON  |  Perl : ON  |  Python : ON  |  Sudo : OFF  |  Pkexec : OFF
Directory :  /opt/alt/python36/lib64/python3.6/test/__pycache__/

Upload File :
current_dir [ Writeable ] document_root [ Writeable ]

 

Command :


[ Back ]     

Current File : /opt/alt/python36/lib64/python3.6/test/__pycache__/test_nntplib.cpython-36.pyc
3

�w2_7��@s�ddlZddlZddlZddlZddlZddlZddlZddlZddl	Z	ddl
mZddlm
Z
mZddlZddlmZyddlZWnek
r�dZYnXyddlZWnek
r�dZYnXdZejjejje�d�Zedk	r�ejZnGdd�de�ZGd	d
�d
�Zej�Gdd�deej�Zej ed
�Gdd�de��Z!Gdd�dej"�Z#dd�Z$Gdd�d�Z%Gdd�de%�Z&Gdd�d�Z'Gdd�de'�Z(Gdd�de(�Z)Gdd�de(�Z*Gd d!�d!�Z+Gd"d#�d#e+e%ej�Z,Gd$d%�d%e+e%ej�Z-Gd&d'�d'e%ej�Z.Gd(d)�d)e&ej�Z/Gd*d+�d+ej�Z0Gd,d-�d-ej�Z1Gd.d/�d/ej�Z2Gd0d1�d1�Z3ej ed
�Gd2d3�d3e2��Z4ej ed4�Gd5d6�d6ej��Z5e6d7k�r�ej7�dS)8�N)�support)�NNTP�	GroupInfo)�patch�zkeycert3.pemc@seZdZdZdZdS)�SSLErrorz6Non-existent exception class when we lack SSL support.zThis will never be raised.N)�__name__�
__module__�__qualname__�__doc__�reason�r
r
�6/opt/alt/python36/lib64/python3.6/test/test_nntplib.pyrsrc@s�eZdZdd�Zdd�Zdd�Zdd�Zd	d
�Zdd�Zd
d�Z	dd�Z
dd�Zdd�Zdd�Z
dd�Zejdd�dd��Zdd�Zd/d d!�Zejdd"�d#d$��Zd%d&�Zd'd(�Zd)d*�Zed+d,��Zd-d.�ZdS)0�NetworkedNNTPTestsMixincCs|jj�}|jtt|��dS)N)�serverZ
getwelcome�assertEqual�str�type)�self�welcomer
r
r�test_welcome*s
z$NetworkedNNTPTestsMixin.test_welcomecCsB|jj�\}}|j|jd�|�x|D]}|jtt|��q&WdS)Nz100 )r�help�
assertTrue�
startswithrrr)r�resp�lines�liner
r
r�	test_help.s
z!NetworkedNNTPTestsMixin.test_helpcCsH|jj�\}}t|�dkrD|jtt|d��|jtt|dj��dS)Nr)r�list�lenrrrr�group)rr�groupsr
r
r�	test_list4sz!NetworkedNNTPTestsMixin.test_listcCsL|jj|j�\}}t|�dkrH|jtt|d��|jtt|dj��dS)Nr)	rr�	GROUP_PATrrrrrr )rrr!r
r
r�test_list_active:sz(NetworkedNNTPTestsMixin.test_list_activec
CsB|jtj��}|jjd�WdQRX|jj}|j|jd�|�dS)NZXYZZYz500 )	�assertRaises�nntplib�NNTPPermanentErrorrZ	_shortcmd�	exception�responserr)r�cmrr
r
r�test_unknown_command@sz,NetworkedNNTPTestsMixin.test_unknown_commandcCsXtjj�tjdd�}|jj|�\}}t|�dkrT|j|dt�|j|dj	t
�dS)N�)Zdaysr)�datetime�dateZtodayZ	timedeltarZ	newgroupsr�assertIsInstancerr r)r�dtrr!r
r
r�test_newgroupsFs
z&NetworkedNNTPTestsMixin.test_newgroupscs`�fdd�}�jj�j�}||��jd|��jj�j�}||��jjd�}�j|d�dS)Ncs�j|t��j�j|�dS)N)r/r�assertNotIn�
GROUP_NAME)�desc)rr
r�_check_descPsz=NetworkedNNTPTestsMixin.test_description.<locals>._check_desc�Pythonzzk.brrtt.baz�)r�descriptionr3�assertInr#r)rr5r4r
)rr�test_descriptionOsz(NetworkedNNTPTestsMixin.test_descriptioncCs^|jj|j�\}}|j|jd�p(|jd�|�|j|t�||j}|j||jj	|j��dS)Nz215 z282 )
r�descriptionsr#rrr/�dictr3rr8)rrZdescsr4r
r
r�test_descriptions_s
z)NetworkedNNTPTestsMixin.test_descriptionscCs�|jj|j�}|jdt|��|\}}}}}|j||j�|j|t�|j|t�|j|t�|j||�|j|j	d�|�dS)N�z211 )
rr r3rrr/�int�assertLessEqualrr)r�resultr�count�first�lastr r
r
r�
test_grouphsz"NetworkedNNTPTestsMixin.test_groupcCs<|jj�\}}|j|tj�|j|jd�|j|jd�dS)Ni�i�)rr.r/r-�assertGreaterEqualZyearr@)rrr.r
r
r�	test_datessz!NetworkedNNTPTestsMixin.test_datec	CsT|j|t�|j|j�dddddddh�x$|j�D]}|j|ttd�f�q4WdS)N�subject�fromr.z
message-id�
referencesz:bytesz:lines)r/r<rF�keys�valuesrr)r�art_dict�vr
r
r�_check_art_dictzs
z'NetworkedNNTPTestsMixin._check_art_dictc	Csz|jj|j�\}}}}}|jj|d|�\}}t|�dkrD|jd�|d\}}|j||d�|j||�|j|�dS)Nr>rzno articles retrieved)	rr r3�xoverr�skipTestrFr@rO)	rrrBrCrD�namer�art_numrMr
r
r�
test_xover�s
z"NetworkedNNTPTestsMixin.test_xoverTzHtemporarily skipped until a permanent solution is found for issue #28971c
Cs�|jj|j�\}}}}}|d}|jj|df�\}}|d\}}	|j|	�|jj||f�\}}|d\}}	|j||�|j||�|j|	�dS)N�
r����)rr r3�overrOrFr@)
rrrBrCrDrR�startrrSrMr
r
r�	test_over�s
z!NetworkedNNTPTestsMixin.test_overcCsP|jj|j�\}}}}}|jjd|�\}}x |D]}|jtt|d��q0WdS)NrHrV)rr r3Zxhdrrrr)rrrBrCrDrRrrr
r
r�	test_xhdr�s
z!NetworkedNNTPTestsMixin.test_xhdrNcCsV|j|tj�|dk	r$|j|j|�x|jD]}|j|t�q,W|j|jdd�dS)NrV�.�.
�.
rW)r\r]r^)r/r&ZArticleInforZnumberr�bytesr2)rr�articlerSrr
r
r�check_article_resp�sz*NetworkedNNTPTestsMixin.check_article_respzFIXME: see bpo-32128c
sR|jj|j�\}}}}}xl|||dfD]P}y|jj|�\}}Wn4tjk
rt}z|jjd�sb�w(WYdd}~XnXPq(W|jd�|j	|jd�|�|j
|||�|jj|�\}}	|j	|jd�|�|j
||	|�|jj|�\}}
|j	|jd�|�|j
||
|�dd���fd	d
�|j
D�}�fdd
�|
j
D�}|j||dg|	j
�dS)
NrVz423 z(could not find a suitable article numberz221 z222 z220 cSs
|jd�S)NsX-Antivirus)r)rr
r
r�<lambda>�sz@NetworkedNNTPTestsMixin.test_article_head_body.<locals>.<lambda>csg|]}�|�s|�qSr
r
)�.0r)�	blacklistr
r�
<listcomp>�szBNetworkedNNTPTestsMixin.test_article_head_body.<locals>.<listcomp>csg|]}�|�s|�qSr
r
)rcr)rdr
rre�s�)rr r3�headr&�NNTPTemporaryErrorr)rrQrra�bodyr`rr)
rrrBrCrDrRrSrg�erir`Zfiltered_head_linesZfiltered_linesr
)rdr�test_article_head_body�s,
z.NetworkedNNTPTestsMixin.test_article_head_bodycsD�fdd�}�j�jjd�|�jj���jj�\}}||�dS)Ncs(|d}�j|ttf��jd|�dS)N�LISTzOVERVIEW.FMT)r/r�tupler9)�capsZ	caps_list)rr
r�_check_caps�sz>NetworkedNNTPTestsMixin.test_capabilities.<locals>._check_caps�)rFr�nntp_version�getcapabilitiesZcapabilities)rrorrnr
)rr�test_capabilities�s
z)NetworkedNNTPTestsMixin.test_capabilitiescCs&d}d}|jtj|jj||dd�dS)NZnotarealuserZnotarealpasswordF)�user�password�usenetrc)r%r&�	NNTPErrorr�login)rZbaduserZbadpwr
r
r�test_zlogin�sz#NetworkedNNTPTestsMixin.test_zlogincCs$t|�}z|jj�Wdd|_XdS)N)rr�quit)r�clsr
r
r�test_zzquit�sz#NetworkedNNTPTestsMixin.test_zzquitcCsNdd�}x@t|�D]4}|jd�s"qt||�}t|�s6qt||||��qWdS)Ncstj���fdd��}|S)Nc	s$tj|j���|�WdQRXdS)N)r�transient_internet�	NNTP_HOST)r)�methr
r�wrapped�szHNetworkedNNTPTestsMixin.wrap_methods.<locals>.wrap_meth.<locals>.wrapped)�	functools�wraps)rr�r
)rr�	wrap_meth�sz7NetworkedNNTPTestsMixin.wrap_methods.<locals>.wrap_methZtest_)�dirr�getattr�callable�setattr)r{r�rRrr
r
r�wrap_methods�s

z$NetworkedNNTPTestsMixin.wrap_methodscs��fdd�}yz|j|jtdd�� �|j|��|j�j��WdQRX|j|��|j|jtdd����j�WdQRX|j|��WnJtk
r�}z.tj	d|j
�r�tjd|�d|j�����WYdd}~XnXdS)Ncs8t�d�sdSy�j�Wnttfk
r2dSXdS)N�fileFT)�hasattrr�OSError�EOFErrorr
)rr
r�is_connected	s
zANetworkedNNTPTestsMixin.test_with_statement.<locals>.is_connectedF)�timeoutrvz(?i)KEY.TOO.SMALLzGot z connecting to )
�
NNTP_CLASSr~�TIMEOUTrr�assertFalserzr�re�searchr�unittest�SkipTest)rr��ssl_errr
)rr�test_with_statements	z+NetworkedNNTPTestsMixin.test_with_statement)N)rr	r
rrr"r$r+r1r:r=rErGrOrTr�ZskipIfrZr[rarkrsryr|�classmethodr�r�r
r
r
rr(s*		
	
rc@s4eZdZdZdZdZeZedd��Z	edd��Z
dS)	�NetworkedNNTPTestsznews.trigofacile.comzfr.comp.lang.pythonzfr.comp.lang.*cCs�tjd�tj|j���y|j|jtdd�|_Wnvtk
r~}z2tj	d|j
�rltj|�d|�d|j�����WYdd}~Xn*t
k
r�tj|�d|j����YnXWdQRXdS)NZnetworkF)r�rvz(?i)KEY.TOO.SMALLz got z connecting to z  got EOF error on connecting to )rZrequiresr}r~r�r�rrr�r�rr�r�r�)r{r�r
r
r�
setUpClass.s

zNetworkedNNTPTests.setUpClasscCs|jdk	r|jj�dS)N)rrz)r{r
r
r�
tearDownClass?s
z NetworkedNNTPTests.tearDownClassN)rr	r
r~r3r#rr�r�r�r�r
r
r
rr�&sr�zrequires SSL supportc@s,eZdZdZdZdZeedd�ZdZ	dZ
dS)�NetworkedNNTP_SSLTestsz
nntp.aioe.orgzcomp.lang.pythonzcomp.lang.*�NNTP_SSLN)rr	r
r~r3r#r�r&r�r"�
test_starttlsr
r
r
rr�Dsr�c@s@eZdZdZdd�Zdd�Zdd�Zdd	�Zd
d�Zdd
�Z	dS)�
_NNTPServerIOz�A 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.cCs>tjj|�tj�|_tj�|_||_|jj|jj|j	�dS)N)
�io�	RawIOBase�__init__�BytesIO�c2s�s2c�handlerrY�readline�	push_data)rr�r
r
rr�as


z_NNTPServerIO.__init__cCsdS)NTr
)rr
r
r�readablejsz_NNTPServerIO.readablecCsdS)NTr
)rr
r
r�writablemsz_NNTPServerIO.writablecCs4|jj�}|jjdd�|jj|�|jj|�dS)z.Push (buffer) some data to send to the client.rrpN)r��tell�seek�write)r�data�posr
r
rr�ps
z_NNTPServerIO.push_datacCs4|jj�}|jj|�|jj|�|jj�t|�S)zThe client sends us some data)r�r�r�r�r��process_pendingr)r�br�r
r
rr�ws


z_NNTPServerIO.writecCs2|jj�|jjt|��}t|�}||d|�<|S)z#The client wants to read a responseN)r�r�r��readr)rZbufr��nr
r
r�readintos

z_NNTPServerIO.readintoN)
rr	r
rr�r�r�r�r�r�r
r
r
rr�\s	r�cCst|�}tj||�}||fS)N)r�r��BufferedRWPair)r��sior�r
r
r�make_mock_file�sr�cs4eZdZdZ�fdd�Z�fdd�Zdd�Z�ZS)�MockedNNTPTestsMixinNcst�j�|j�dS)N)�super�setUp�make_server)r)�	__class__r
rr��s
zMockedNNTPTestsMixin.setUpcst�j�|`dS)N)r��tearDownr)r)r�r
rr��s
zMockedNNTPTestsMixin.tearDowncOs6|j�|_t|j�\|_}tj|df|�|�|_|jS)Nztest.server)�
handler_classr�r�r�r&Z	_NNTPBaser)r�args�kwargsr�r
r
rr��s
z MockedNNTPTestsMixin.make_server)rr	r
r�r�r�r��
__classcell__r
r
)r�rr��sr�cseZdZ�fdd�Z�ZS)�MockedNNTPWithReaderModeMixincst�j�|jdd�dS)NT)Z
readermode)r�r�r�)r)r�r
rr��s
z#MockedNNTPWithReaderModeMixin.setUp)rr	r
r�r�r
r
)r�rr��sr�c@s�eZdZdZdZdd�Zdd�Zdd�Zd	d
�Zdd�Z	d
d�Z
dd�Zdd�Zdd�Z
dd�Zdd�Zdd�Zd8dd�Zdd�Zd d!�Zd9d"d#�Zd$d%�Zd&d'�Zdd(�d)d*�Zdd(�d+d,�Zd-Zd.Zed/eZd:d0d1�Zd;d2d3�Zd<d4d5�Zd6d7�ZdS)=�
NNTPv1HandlerzA handler for RFC 977z200 NNTP mock servercCs0d|_d|_||_||_d|_d|_|j�dS)NFT)�in_body�
allow_posting�	_readline�
_push_data�
_logged_in�
_user_sent�handle_welcome)rr�r�r
r
rrY�szNNTPv1Handler.startcCst|dd�S)Nzutf-8�surrogateescape)r)rr�r
r
r�_decode�szNNTPv1Handler._decodecCs4|jrfx*|j�}|sdS|jj|�|dkrPqWz|j\}}||d|ji�Wdd|_d|_d|_Xx�|j|j��}|s~dS|jd�s�tdj|���|dd	�}|j	�^}}t
|d|j�d�}|dkr�|j�qhy||�Wn4t
k
�r}ztdj|��|�WYdd}~XqhX|jrh||f|_g|_qhWdS)
Ns.
riFz
z line doesn't end with \r\n: {!r}rpZhandle_zcommand failed: {!r}���)r�r�ri�appendZ
body_callbackr��endswith�
ValueError�format�splitr��upper�handle_unknown�	Exception)rrr�tokens�cmdrjr
r
rr��s@


"
zNNTPv1Handler.process_pendingcCs
d|_dS)z7Flag that the client is expected to post a request bodyTN)r�)rr
r
r�expect_body�szNNTPv1Handler.expect_bodycCs|j|�dS)zPush some binary dataN)r�)rr�r
r
rr��szNNTPv1Handler.push_datacCs4tj|�}dj|j��d}|jd�}|j|�dS)zPush a string literalz
zutf-8N)�textwrap�dedent�join�
splitlines�encoder�)rZlitr
r
r�push_lit�s

zNNTPv1Handler.push_litcCs|jd�dS)Nz	500 What?)r�)rr
r
rr��szNNTPv1Handler.handle_unknowncCs|j|j�dS)N)r�r)rr
r
rr��szNNTPv1Handler.handle_welcomecCs|jd�dS)Nz205 Bye!)r�)rr
r
r�handle_QUIT�szNNTPv1Handler.handle_QUITcCs|jd�dS)Nz111 20100914001155)r�)rr
r
r�handle_DATE�szNNTPv1Handler.handle_DATEcCs(|dkr|jd�n|jdj|��dS)Nzfr.comp.lang.pythonz$211 486 761 1265 fr.comp.lang.pythonz411 No such group {})r�r�)rr r
r
r�handle_GROUP�szNNTPv1Handler.handle_GROUPcCs|jd�dS)Nz�            100 Legal commands
              authinfo user Name|pass Password|generic <prog> <args>
              date
              help
            Report problems to <root@example.org>
            .)r�)rr
r
r�handle_HELPszNNTPv1Handler.handle_HELPNcCsJ|dkr|jd�n2|dkr(|jd�n|dkr<|jd�n
|jd�dS)Nz412 No newsgroup selected�3000234z"223 3000234 <45223423@example.com>z<45223423@example.com>z223 0 <45223423@example.com>z430 No Such Article Found)r�)r�message_specr
r
r�handle_STATszNNTPv1Handler.handle_STATcCs|jd�dS)Nz*223 3000237 <668929@example.org> retrieved)r�)rr
r
r�handle_NEXTszNNTPv1Handler.handle_NEXTcCs|jd�dS)Nz,223 3000234 <45223423@example.com> retrieved)r�)rr
r
r�handle_LASTszNNTPv1Handler.handle_LASTcCs�|dkr|jd�n�|dkr<|dkr0|jd�q�|jd�nf|dkrP|jd�nR|dkr�|dk	sdt�|d	krx|jd
�q�|dkr�|jd�q�|jd
�n
|jd�dS)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
                .�ACTIVEz*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"
                    .zOVERVIEW.FMTa                215 Order of fields in overview database.
                Subject:
                From:
                Date:
                Message-ID:
                References:
                Bytes:
                Lines:
                Xref:full
                .�
NEWSGROUPSzcomp.lang.pythonz�                    215 Descriptions in form "group description".
                    comp.lang.python	The Python computer language.
                    .zcomp.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 keyword)r��AssertionError)r�actionZparamr
r
r�handle_LISTs.
zNNTPv1Handler.handle_LISTcCs�|dkr$|dkr$|dkr$|jd�nZ|dkrH|dkrH|dkrH|jd�n6|dkrt|dkrt|d	krt|jd
dd�n
|jd
�dS)Nzcomp.lang.pythonZ20100913Z082004a                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>
                .Z100913a                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>
                .�20100101�100101Z090000z
too long linei�z
.zK                230 An empty list of newsarticles follows
                .)r�r�)r�)rr �date_str�time_strr
r
r�handle_NEWNEWSQs

zNNTPv1Handler.handle_NEWNEWScCs"|dkr|jd�n
|jd�dS)Nz57-59uL224 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.org 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�)rr�r
r
r�handle_XOVERps
zNNTPv1Handler.handle_XOVER)ricCsL|dkr.|jr"|jd�|j�qH|jd�n|js8t�|jd�||_dS)Nz+340 Input article; end with <CR-LF>.<CR-LF>z440 Posting not permittedz240 Article received OK)r�r�r�r��posted_body)rrir
r
r�handle_POST�s



zNNTPv1Handler.handle_POSTcCsT|dkr6|jr*|dkr*|jd�|j�qP|jd�n|js@t�|jd�||_dS)Nz+<i.am.an.article.you.will.want@example.com>z%335 Send it; end with <CR-LF>.<CR-LF>z435 Article not wantedz235 Article transferred OK)r�r�r�r�r�)r�
message_idrir
r
r�handle_IHAVE�s



zNNTPv1Handler.handle_IHAVEz�        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

cCsd|dkr|jd�n6|dkr(|jd�n"|dkr<|jd�n|jd�dS|j|j�|jd�dS)Nz"220 3000237 <45223423@example.com>z<45223423@example.com>z220 0 <45223423@example.com>r�z"220 3000234 <45223423@example.com>z430 No Such Article Found�.)r��sample_article)rr�r
r
r�handle_ARTICLE�s
zNNTPv1Handler.handle_ARTICLEcCsd|dkr|jd�n6|dkr(|jd�n"|dkr<|jd�n|jd�dS|j|j�|jd�dS)Nz"221 3000237 <45223423@example.com>z<45223423@example.com>z221 0 <45223423@example.com>r�z"221 3000234 <45223423@example.com>z430 No Such Article Foundr�)r��sample_head)rr�r
r
r�handle_HEAD�s
zNNTPv1Handler.handle_HEADcCsd|dkr|jd�n6|dkr(|jd�n"|dkr<|jd�n|jd�dS|j|j�|jd�dS)Nz"222 3000237 <45223423@example.com>z<45223423@example.com>z222 0 <45223423@example.com>r�z"222 3000234 <45223423@example.com>z430 No Such Article Foundr�)r��sample_body)rr�r
r
r�handle_BODY�s
zNNTPv1Handler.handle_BODYcCsj|jr|jd�nT|dkr>|jr,|jd�qf|jd�d|_n(|dkrX|jd�d|_ntdj|���dS)	Nz502 Already Logged Inrtz 482 User Credential Already Sentz381 Password RequiredT�passz281 Login SuccessfulzUnknown cred type {})r�r�r�r�r�)rZ	cred_typer�r
r
r�handle_AUTHINFO�s

zNNTPv1Handler.handle_AUTHINFO)N)NN)N)N)N) rr	r
rrrYr�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r
r
r
rr��s:
&	


6 



r�c@s*eZdZdZdd�Zdd�Zd	dd�ZdS)
�
NNTPv2Handlerz"A handler for RFC 3977 (NNTP "v2")cCs0d}|js|j|jd��n|j|jd��dS)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 USERr7)r�r�r�)r�fmtr
r
r�handle_CAPABILITIES�s
z!NNTPv2Handler.handle_CAPABILITIEScCstd��dS)Nz3MODE READER sent despite READER has been advertised)r�)r�_r
r
r�handle_MODEszNNTPv2Handler.handle_MODENcCs
|j|�S)N)r�)rr�r
r
r�handle_OVERszNNTPv2Handler.handle_OVER)N)rr	r
rrrrr
r
r
rr�srcs eZdZdZ�fdd�Z�ZS)�CapsAfterLoginNNTPv2Handlerz3A handler that allows CAPABILITIES only after logincs |js|jd�n
t�j�dS)Nz480 You must log in.)r�r�r�r)r)r�r
rrsz/CapsAfterLoginNNTPv2Handler.handle_CAPABILITIES)rr	r
rrr�r
r
)r�rr	src@s(eZdZdZdd�Zdd�Zdd�ZdS)	�ModeSwitchingNNTPv2Handlerz$A server that starts in transit modecCs
d|_dS)NF)�	_switched)rr
r
rr�sz#ModeSwitchingNNTPv2Handler.__init__cCs0d}|jr|j|jd��n|j|jd��dS)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
            .r7zMODE-)rr�r�)rrr
r
rrs
z.ModeSwitchingNNTPv2Handler.handle_CAPABILITIEScCs(|jr|dkst�d|_|jd�dS)N�readerTz200 Posting allowed)rr�r�)rZwhatr
r
rr)sz&ModeSwitchingNNTPv2Handler.handle_MODEN)rr	r
rr�rrr
r
r
rrsrcseZdZ�fdd�Zdd�Zdd�Zdd�Zd	d
�Zdd�Zd
d�Z	dd�Z
dd�Zdd�Zdd�Z
dd�Zdd�Zdd�Zdd�Zdd �Zd!d"�Zd#d$�Zd%d&�Zd'd(�Zd)d*�Zd+d,�Zd-d.�Zd/d0�Zd1d2�Zd3d4�Zd5Zd6d7�Zd8d9�Zd:d;�Z d<d=�Z!d>d?�Z"d@dA�Z#�Z$S)B�NNTPv1v2TestsMixincst�j�dS)N)r�r�)r)r�r
rr�1szNNTPv1v2TestsMixin.setUpcCs|j|jj|jj�dS)N)rrrr�)rr
r
rr4szNNTPv1v2TestsMixin.test_welcomecCs<|jdkr|jd|jj�|jjdd�|jd|jj�dS)Nrp�AUTHINFO�testuser�testpw)rqr9r�_capsrxr2)rr
r
r�
test_authinfo7s
z NNTPv1v2TestsMixin.test_authinfoc	Cs:|jj�\}}|j|d�|j|tjdddddd��dS)Nz111 20100914001155i��	�r��7)rr.rr-)rrr.r
r
rrG?szNNTPv1v2TestsMixin.test_datecCs6|j|jj�|jj�}|j|d�|j|jj�dS)Nz205 Bye!)r�r��closedrrzrr)rrr
r
r�	test_quitDs
zNNTPv1v2TestsMixin.test_quitcCs2|jj�\}}|j|d�|j|ddddg�dS)Nz100 Legal commandsz8  authinfo user Name|pass Password|generic <prog> <args>z  datez  helpz%Report problems to <root@example.org>)rrr)rrrr
r
rrJszNNTPv1v2TestsMixin.test_helpcCs~|jj�\}}|jt|�d�|d}|j|tdddd��|jjd�\}}|jt|�d�|d	}|j|td
ddd��dS)
N�rVzcomp.lang.python.announceZ
0000001153Z
0000000993�mz*distutils*rprz!gmane.comp.python.distutils.develZ
0000014104Z
0000000001)rrrrr)rrr!�gr
r
rr"Ts
zNNTPv1v2TestsMixin.test_listcCs�|jjd�\}}}|j|d�|j|d�|j|d�|jjd�\}}}|j|d�|j|d�|j|d�|jtj��}|jjd�WdQRX|j|jjd�|jtj��}|jj�WdQRX|j|jjd�dS)	Ni��-z"223 3000234 <45223423@example.com>z<45223423@example.com>z223 0 <45223423@example.com>rz<non.existent.id>z430 No Such Article Foundz412 No newsgroup selected)r�statrr%r&rhr(r))rrrSr�r*r
r
r�	test_statbszNNTPv1v2TestsMixin.test_statcCs8|jj�\}}}|j|d�|j|d�|j|d�dS)Nz*223 3000237 <668929@example.org> retrievedi��-z<668929@example.org>)r�nextr)rrrSr�r
r
r�	test_nextrszNNTPv1v2TestsMixin.test_nextcCs8|jj�\}}}|j|d�|j|d�|j|d�dS)Nz,223 3000234 <45223423@example.com> retrievedi��-z<45223423@example.com>)rrDr)rrrSr�r
r
r�	test_lastxszNNTPv1v2TestsMixin.test_lastcCs4|jjd�}|j|d�|jjd�}|j|d�dS)Nzcomp.lang.pythonzThe Python computer language.zcomp.lang.pythonxr7)rr8r)rr4r
r
rr:~sz#NNTPv1v2TestsMixin.test_descriptioncCsn|jjd�\}}|j|d�|j|ddi�|jjd�\}}|j|ddd��|jjd�\}}|j|i�dS)Nzcomp.lang.pythonz-215 Descriptions in form "group description".zThe Python computer language.zcomp.lang.python*z4Announcements about the Python language. (Moderated))zcomp.lang.pythonzcomp.lang.python.announcezcomp.lang.pythonx)rr;r)rrr!r
r
rr=�s

z$NNTPv1v2TestsMixin.test_descriptionsc
Cs�|jjd�\}}}}}|j|jd�|�|j|d�|j|d�|j|d�|j|d�|jtj��}|jjd�WdQRX|j}|j|j	jd�|j	�dS)Nzfr.comp.lang.pythonz211 i�i�i�zcomp.lang.python.develz411 No such group)
rr rrrr%r&rhr(r))rrrBrCrDr r*�excr
r
rrE�szNNTPv1v2TestsMixin.test_groupcCs�tjdddddd�}|jjd|�\}}dj|j�}|j||�|j|d	d
g�tjdddddd�}|jjd|�\}}|j|d�|j|g�dS)
Ni�r�
���zcomp.lang.pythonzS230 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>zfr.comp.lang.pythonz)230 An empty list of newsarticles follows)r-r�newnewsr�rqr)rr0rZidsZexpectedr
r
r�test_newnews�szNNTPv1v2TestsMixin.test_newnewscCsZ|jt|�d�|j|d
jd�d�|j|dd�|j|dd�|j|d
d	�dS)Nr"rVzutf-8u-- Signed by André.rprf�s.Here is a dot-starting line.sThis is just a test article.rWr�������)rr�decode)rrr
r
r�_check_article_body�s
z&NNTPv1v2TestsMixin._check_article_bodycCs4|jt|�d�|j|dd�|j|dd�dS)Nr"rs&From: "Demo User" <nobody@example.net>r%s7Message-ID: <i.am.an.article.you.will.want@example.com>)rr)rrr
r
r�_check_article_head�sz&NNTPv1v2TestsMixin._check_article_headcCsH|jt|�d�|j|dd��|j|dd��|j|dd�dS)Nrr"rfr')rrr*r))rrr
r
r�_check_article_data�sz&NNTPv1v2TestsMixin._check_article_datac
Cs|jj�\}}|j|d�|\}}}|j|d�|j|d�|j|�|jjd�\}}|j|d�|\}}}|j|d�|j|d�|j|�|jjd�\}}|j|d�|\}}}|j|d�|j|d�|j|�|jtj��}|jjd�WdQRX|j|jjd	�dS)
Nz"220 3000237 <45223423@example.com>i��-z<45223423@example.com>i��-z"220 3000234 <45223423@example.com>z220 0 <45223423@example.com>rz<non-existent@example.com>z430 No Such Article Found)	rr`rr+r%r&rhr(r))rr�inforSr�rr*r
r
r�test_article�s*





zNNTPv1v2TestsMixin.test_articlecCs�tj�}|jj|d�\}}|j|d�|\}}}|j|d�|j|d�|j|g�|j�}|j|jd�t|��|j|j	d�t|��dS)N)r�z"220 3000237 <45223423@example.com>i��-z<45223423@example.com>sKFrom: "Demo User" <nobody@example.net>
Subject: I am just a test article
sUThis is just a test article.
.Here is a dot-starting line.

-- Signed by André.
)
r�r�rr`r�getvaluerr�asciir�)r�frr,rSr�rr�r
r
r�test_article_file�s

z$NNTPv1v2TestsMixin.test_article_filec
Cs|jj�\}}|j|d�|\}}}|j|d�|j|d�|j|�|jjd�\}}|j|d�|\}}}|j|d�|j|d�|j|�|jjd�\}}|j|d�|\}}}|j|d�|j|d�|j|�|jtj��}|jjd�WdQRX|j|jjd	�dS)
Nz"221 3000237 <45223423@example.com>i��-z<45223423@example.com>i��-z"221 3000234 <45223423@example.com>z221 0 <45223423@example.com>rz<non-existent@example.com>z430 No Such Article Found)	rrgrr*r%r&rhr(r))rrr,rSr�rr*r
r
r�	test_head�s*





zNNTPv1v2TestsMixin.test_headcCs�tj�}|jj|d�\}}|j|d�|\}}}|j|d�|j|d�|j|g�|j�}|j|jd�t|��|j	|j
d�t|��dS)N)r�z"221 3000237 <45223423@example.com>i��-z<45223423@example.com>sKFrom: "Demo User" <nobody@example.net>
Subject: I am just a test article
sUThis is just a test article.
.Here is a dot-starting line.

-- Signed by André.
)r�r�rrgrr.rrr/r�r�)rr0rr,rSr�rr�r
r
r�test_head_files

z!NNTPv1v2TestsMixin.test_head_filec
Cs|jj�\}}|j|d�|\}}}|j|d�|j|d�|j|�|jjd�\}}|j|d�|\}}}|j|d�|j|d�|j|�|jjd�\}}|j|d�|\}}}|j|d�|j|d�|j|�|jtj��}|jjd�WdQRX|j|jjd	�dS)
Nz"222 3000237 <45223423@example.com>i��-z<45223423@example.com>i��-z"222 3000234 <45223423@example.com>z222 0 <45223423@example.com>rz<non-existent@example.com>z430 No Such Article Found)	rrirr)r%r&rhr(r))rrr,rSr�rr*r
r
r�	test_body#s*





zNNTPv1v2TestsMixin.test_bodycCs�tj�}|jj|d�\}}|j|d�|\}}}|j|d�|j|d�|j|g�|j�}|j|jd�t|��|j	|j
d�t|��dS)N)r�z"222 3000237 <45223423@example.com>i��-z<45223423@example.com>sKFrom: "Demo User" <nobody@example.net>
Subject: I am just a test article
sUThis is just a test article.
.Here is a dot-starting line.

-- Signed by André.
)r�r�rrirr.r�rr/rr�)rr0rr,rSr�rr�r
r
r�test_body_file>s

z!NNTPv1v2TestsMixin.test_body_filecCs�|j|jd�|�|jt|�d�|d\}}|j|d�|j|ddddd	d
ddd
��|d\}}|j|dd�|d\}}|j|dd�dS)Nz224 r%r�9zEDoug 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>Z7103Z16z+news.gmane.org gmane.comp.python.authors:57)rIrHr.z
message-idrJz:bytesz:lines�xrefrVr7rprHu0Re: Message d'erreur incompréhensible (par moi))rrrr)rr�	overviewsrSrXr
r
r�check_over_xover_respRs$

z(NNTPv1v2TestsMixin.check_over_xover_respcCs"|jjdd�\}}|j||�dS)Nr6�;)rrPr9)rrr8r
r
rrTgszNNTPv1v2TestsMixin.test_xovercCs |jjd�\}}|j||�dS)Nr6r:)r6r:)rrXr9)rrr8r
r
rrZkszNNTPv1v2TestsMixin.test_oversFrom: "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é.
cCsl|jj}|jt|�d�|j|dd�|j|d
d�|j|dd�|j|dd	�|j|d
d�dS)NrUrVs.
rps-- Signed by André.
r%s
r"s ..Here is a dot-starting line.
rs(From: "Demo User" <nobody@example.net>
rWr�r&r')r�r�rr)rrr
r
r�_check_posted_body|sz%NNTPv1v2TestsMixin._check_posted_bodycGsd|j}|||�f}d|j_||�}|j�|jjdd�}|||�f}d|j_||�}|j�|S)Ns
�
)�sample_postr�r�r;�replace)r�func�file_factoryr��postZ	func_argsrr
r
r�_check_post_ihave_sub�sz(NNTPv1v2TestsMixin._check_post_ihave_subcGs�|j|f|�dti�}|j||�|j|f|�dti�}|j||�|j|f|�dtji�}|j||�dd�}|j|f|�d|i�}|j||�dd�}|j|f|�d|i�}|j||�dS)Nr@cSst|jdd��S)NT)�keepends)�iterr�)r�r
r
r�	iterlines�sz6NNTPv1v2TestsMixin.check_post_ihave.<locals>.iterlinescSst|jdd��S)NF)rC)rDr�)r�r
r
rrE�s)rBr_r�	bytearrayr�r�)rr?Zsuccess_respr�rrEr
r
r�check_post_ihave�sz#NNTPv1v2TestsMixin.check_post_ihavec
CsR|j|jjd�d|j_|jtj��}|jj|j�WdQRX|j	|j
jd�dS)Nz240 Article received OKFz440 Posting not permitted)rGrrAr�r�r%r&rhr=rr(r))rr*r
r
r�	test_post�s
zNNTPv1v2TestsMixin.test_postc
CsN|j|jjdd�|jtj��}|jjd|j�WdQRX|j|jj	d�dS)Nz235 Article transferred OKz+<i.am.an.article.you.will.want@example.com>z<another.message.id>z435 Article not wanted)
rGrZihaver%r&rhr=rr(r))rr*r
r
r�
test_ihave�s
zNNTPv1v2TestsMixin.test_ihavecCs.tjdddddd�}|jtj|jjd|�dS)Ni�rVrrzcomp.lang.python)r-r%r&�
NNTPDataErrorrr#)rr0r
r
r�test_too_long_lines�sz&NNTPv1v2TestsMixin.test_too_long_lines)%rr	r
r�rrrGrrr"rrrr:r=rEr$r)r*r+r-r1r2r3r4r5r9rTrZr=r;rBrGrHrIrKr�r
r
)r�rr
/sB

r
c@s eZdZdZdZeZdd�ZdS)�NNTPv1Testsz*Tests an NNTP v1 server (no capabilities).rVcCs:|jj�}|j|i�|j|jjd�|j|jjd�dS)NrV)rrrrrq�nntp_implementation)rrnr
r
r�	test_caps�s
zNNTPv1Tests.test_capsN)rr	r
rrqr�r�rNr
r
r
rrL�srLc@s eZdZdZdZeZdd�ZdS)�NNTPv2Testsz,Tests an NNTP v2 server (with capabilities).rpcCsb|jj�}|j|ddgddgdggdddd	d
dggggd��|j|jjd
�|j|jjd�dS)N�2�3ZINNz2.5.1ZUSERr�zACTIVE.TIMESzDISTRIB.PATSZHEADERSr�zOVERVIEW.FMT)�VERSIONZIMPLEMENTATIONrZHDRrlZOVERZPOST�READERr%z	INN 2.5.1)rrrrrqrM)rrnr
r
rrN�s

zNNTPv2Tests.test_capsN)rr	r
rrqrr�rNr
r
r
rrO�srOc@s eZdZdZdZeZdd�ZdS)�CapsAfterLoginNNTPv2TestszCTests a probably NNTP v2 server with capabilities only after login.rpcCs2|j|jji�|jjdd�|jd|jj�dS)Nrr
rR)rrrrxr9)rr
r
r�test_caps_only_after_login�sz4CapsAfterLoginNNTPv2Tests.test_caps_only_after_loginN)rr	r
rrqrr�rUr
r
r
rrT�srTc@s eZdZdZdZeZdd�ZdS)�SendReaderNNTPv2TestszoSame tests as for v2 but we tell NTTP to send MODE READER to a server
    that isn't in READER mode by default.rpcCs|jd|jj�dS)NrS)r9rr)rr
r
r�(test_we_are_in_reader_mode_after_connect�sz>SendReaderNNTPv2Tests.test_we_are_in_reader_mode_after_connectN)rr	r
rrqrr�rWr
r
r
rrV�srVc@sPeZdZdd�Zdd�Zdd�Zdd�Zd	d
�Zdd�Ze	j
ed
�dd��ZdS)�	MiscTestscsV�fdd�}|dd�|dd�|dd�|dd�|dd	�|d
d�|dd�dS)
Ncs�jtj|�|�dS)N)rr&�
decode_header)�ar�)rr
r�givessz+MiscTests.test_decode_header.<locals>.givesr7za 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 matriceu0Re: Message d'erreur incompréhensible (par moi)r
)rr[r
)rr�test_decode_headers



zMiscTests.test_decode_headercCsDdddddddg}|jtj|�dd	d
ddddg�dddddd
dg}|jtj|�dd	d
ddddg�dddddddg}|jtj|�dd	d
ddddg�dddddddddg	}|jtj|�dd	d
ddddddg	�dddddd
dddg	}|jtj|�dd	d
ddddddg	�dddddd
ddg}|jtj|�dd	d
dddddg�dS)NzSubject:zFrom:zDate:zMessage-ID:zReferences:z:bytesz:linesrHrIr.z
message-idrJzBytes:zLines:zsubject:zFROM:zDaTe:zmessage-ID:zBYTES:z	Xref:fullzDistribution:fullr7Zdistributionz	Xref:FULLzDistribution:FULL)rr&Z_parse_overview_fmt)rrr
r
r�test_parse_overview_fmts@











z!MiscTests.test_parse_overview_fmtcCs�tjdg}dg}tj||�}|\\}}|j|d�|j|dddddd	d
dd��d
g}tj||�}|\\}}|j|dd�dg}tj||�}|\\}}|j|dd�|j|dd�dS)Nr7z�3000234	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:3000363i��-zI am just a test articlez "Demo User" <nobody@example.com>z6 Oct 1998 04:38:40 -0500z<45223423@example.com>z<45454@example.net>Z1234Z17z"news.example.com misc.test:3000363)rHrIr.z
message-idrJz:bytesz:linesr7z�3000234	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		z�3000234	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� r7)r&Z_DEFAULT_OVERVIEW_FMTZ_parse_overviewr)rrrZoverviewrSZfieldsr
r
r�test_parse_overview8s.



zMiscTests.test_parse_overviewc	sh�fdd�}|dddddddd	�|d
ddddddd	�|dddddddd	�|d
ddddddd	�dS)Ncs�jtj||�tj|��dS)N)rr&Z_parse_datetimer-)rZr��c)rr
rr[gsz,MiscTests.test_parse_datetime.<locals>.givesZ19990623135624i�r�r�8��19990623�135624�990623Z090623i�r
)rr[r
)rr�test_parse_datetimefs
zMiscTests.test_parse_datetimec	s��fdd�}|ddddddd	d
�|dddddddd
�|d
ddddddd��fdd�}|dddd	d�|ddddd�|d
dddd�dS)Nc	sFtj||||||�}�jtj|�||f��jtj|d�||f�dS)NF)r-rr&�_unparse_datetime)	�y�M�d�hr�sr�r�r0)rr
rr[ts

z.MiscTests.test_unparse_datetime.<locals>.givesi�rrarrbrcrdrei�Z20000623i�r>rVrpr%Z20100605�010203cs@tj|||�}�jtj|�||f��jtj|d�||f�dS)NF)r-r.rr&rh)rirjrkr�r�r0)rr
rr[~s

�000000r
)rr[r
)rr�test_unparse_datetimeqszMiscTests.test_unparse_datetimec	s��fdd�}|ddddddd	d
�|dddddddd
�|d
ddddddd��fdd�}|dddd	d�|ddddd�|d
dddd�dS)Nc	s0tj||||||�}�jtj|d�||f�dS)NT)r-rr&rh)	rirjrkrlrrmr�r�r0)rr
rr[�sz5MiscTests.test_unparse_datetime_legacy.<locals>.givesi�rrarrbrcrfrei�Z000623i�r>rVrpr%Z100605rncs*tj|||�}�jtj|d�||f�dS)NT)r-r.rr&rh)rirjrkr�r�r0)rr
rr[�sror
)rr[r
)rr�test_unparse_datetime_legacy�sz&MiscTests.test_unparse_datetime_legacyzrequires SSL supportcCs|jttd��dS)Nr�)rr�r&)rr
r
r�test_ssl_support�szMiscTests.test_ssl_supportN)
rr	r
r\r]r_rgrprqr��
skipUnless�sslrrr
r
r
rrX�s(.rXc@seZdZdZdd�ZdS)�PublicAPITestsz>Ensures that the correct values are exposed in the public API.cCsP|jttd��dddddddd	g}tdk	r6|jd
�|jttj�t|��dS)N�__all__rrw�NNTPReplyErrorrhr'�NNTPProtocolErrorrJrYr�)rr�r&rtr�r�setrv)rZ
target_apir
r
r�test_module_all_attribute�s

z(PublicAPITests.test_module_all_attributeN)rr	r
rrzr
r
r
rru�sruc@sHeZdZdZejZddd�Zdd�Zdd�Z	d	d
�Z
dd�Zd
d�ZdS)�MockSocketTestszaTests involving a mock socket object

    Used where the _NNTPServerIO file object is not enough.Ncs�G�fdd�d�}G���fdd�d��d�g�td|��.|j||��|jd||d�WdQRXWdQRX|j��x�D]}|j|j�q~WdS)	NcseZdZ�fdd�ZdS)zNMockSocketTests.check_constructor_error_conditions.<locals>.mock_socket_modulecs��S)Nr
)Zaddressr�)�
MockSocketr
r�create_connection�sz`MockSocketTests.check_constructor_error_conditions.<locals>.mock_socket_module.create_connectionN)rr	r
r}r
)r|r
r�mock_socket_module�sr~cs&eZdZ�fdd�Z��fdd�ZdS)zFMockSocketTests.check_constructor_error_conditions.<locals>.MockSocketcsd�dS)NTr
)r)�
socket_closedr
r�close�szLMockSocketTests.check_constructor_error_conditions.<locals>.MockSocket.closecs ��}t|�\}}�j|�|S)N)r�r�)�socket�moder�rr�)�filesr�r
r�makefile�s
zOMockSocketTests.check_constructor_error_conditions.<locals>.MockSocket.makefileN)rr	r
r�r�r
)r�r�rr
rr|�sr|Fznntplib.socketZdummy)rtru)rZassertRaisesRegex�
nntp_classrr)rr�Zexpected_error_typeZexpected_error_msgrxrur~r0r
)r|r�r�rr�"check_constructor_error_conditions�s$

z2MockSocketTests.check_constructor_error_conditionscCs&Gdd�dt�}|j|tj|j�dS)Nc@seZdZdZdS)z1MockSocketTests.test_bad_welcome.<locals>.HandlerzBad WelcomeN)rr	r
rr
r
r
r�Handler�sr�)r�r�r&rxr)rr�r
r
r�test_bad_welcome�sz MockSocketTests.test_bad_welcomecCs&Gdd�dt�}|j|tj|j�dS)Nc@seZdZdZdS)zEMockSocketTests.test_service_temporarily_unavailable.<locals>.Handlerz#400 Service temporarily unavailableN)rr	r
rr
r
r
rr��sr�)r�r�r&rhr)rr�r
r
r�$test_service_temporarily_unavailable�sz4MockSocketTests.test_service_temporarily_unavailablecCs&Gdd�dt�}|j|tj|j�dS)Nc@seZdZdZdS)zEMockSocketTests.test_service_permanently_unavailable.<locals>.Handlerz#502 Service permanently unavailableN)rr	r
rr
r
r
rr��sr�)r�r�r&r'r)rr�r
r
r�$test_service_permanently_unavailable�sz4MockSocketTests.test_service_permanently_unavailablecs,G�fdd�dt�}d�|j|tj��dS)NcseZdZ�fdd�ZdS)z6MockSocketTests.test_bad_capabilities.<locals>.Handlercs|j��dS)N)r�)r)�capabilities_responser
rr�szJMockSocketTests.test_bad_capabilities.<locals>.Handler.handle_CAPABILITIESN)rr	r
rr
)r�r
rr��sr�z201 bad capability)r�r�r&rw)rr�r
)r�r�test_bad_capabilities�sz%MockSocketTests.test_bad_capabilitiescs8d}d}G�fdd�dt�}d�|j|tj�||�dS)Nzt@e.com�pythoncseZdZ�fdd�ZdS)z3MockSocketTests.test_login_aborted.<locals>.Handlercs|j��dS)N)r�)rr�)�authinfo_responser
rr��szCMockSocketTests.test_login_aborted.<locals>.Handler.handle_AUTHINFON)rr	r
r�r
)r�r
rr��sr�z503 Mechanism not recognized)r�r�r&r')rrxrur�r
)r�r�test_login_aborted�sz"MockSocketTests.test_login_aborted)NN)
rr	r
rr&rr�r�r�r�r�r�r�r
r
r
rr{�s
	r{c@seZdZdZdd�ZdS)�bypass_contextz'Bypass encryption and actual SSL modulecKs|S)Nr
)�sockr�r
r
r�wrap_socket�szbypass_context.wrap_socketN)rr	r
rr�r
r
r
rr��sr�c@seZdZedd��ZdS)�MockSslTestscOstj|dti|��S)NZssl_context)r&r�r�)r��kwr
r
rr�szMockSslTests.nntp_classN)rr	r
�staticmethodr�r
r
r
rr��sr�zrequires multithreadingc@s0eZdZdd�Zdd�Zejed�dd��ZdS)	�LocalServerTestscCsttj�}tj|�}|j�tj|j|fd�|_|jj�|j	|jj
�ttj|dd�j
�|_|j	|jjddd�dS)N)�targetr�F)rv)r�rZ	bind_portZlisten�	threadingZThread�
run_serverZ
backgroundrYZ
addCleanupr�rZHOST�	__enter__�nntp�__exit__)rr�Zportr
r
rr�s

zLocalServerTests.setUpcCs�|�|j�\}}WdQRXtj���}|j|�|j|jd��}|jd�x�|j�}|dkrh|jd�qL|dkr�|j�|jd�tj	�}|j
t�|j|dd�}|j|�|j|jd��}qL|d	kr�|jd
�PqLt
dj|���qLWWdQRXdS)N�rbs200 Server ready
sCAPABILITIES
s.101 Capability list:
VERSION 2
STARTTLS
.
s
STARTTLS
s382 Begin TLS negotiation now
T)Zserver_sidesQUIT
s
205 Bye!
zUnexpected command {!r})Zaccept�
contextlib�	ExitStack�
enter_contextr�Zsendallr�r�rtZ
SSLContextZload_cert_chain�certfiler�r�r�)rr�ZclientrZcleanupr	r��contextr
r
rr�s0







zLocalServerTests.run_serverzrequires SSL supportcCs`|jj}|jj}|jj�|j||jj�|j||jj�|j|jjtj�|jt	|jj�dS)N)
r�r�r�ZstarttlsZassertNotEqualr/rtZ	SSLSocketr%r�)rr�r�r
r
rr�3s
zLocalServerTests.test_starttlsN)	rr	r
r�r�r�rsrtr�r
r
r
rr�s r��__main__)8r�r�r-r�r�r�r�Zos.path�osr�Ztestrr&rrZ
unittest.mockrrt�ImportErrorr�r��pathr��dirname�__file__r�rr�rr�ZTestCaser�rsr�r�r�r�r�r�r�rrrr
rLrOrTrVrXrur{r�r�r�r�mainr
r
r
r�<module>sz


|,G

#N
<


Youez - 2016 - github.com/yon3zu
LinuXploit