Uname:Linux ip-10-0-5-176 6.8.0-1057-aws #60~22.04.1-Ubuntu SMP Wed May 27 08:16:59 UTC 2026 x86_64

403WebShell
403Webshell
Server IP : 3.111.61.48  /  Your IP : 216.73.216.67
Web Server : Apache
System : Linux ip-10-0-5-176 6.8.0-1057-aws #60~22.04.1-Ubuntu SMP Wed May 27 08:16:59 UTC 2026 x86_64
User : ubuntu ( 1000)
PHP Version : 8.2.31
Disable Function : exec,passthru,shell_exec,system
MySQL : OFF  |  cURL : ON  |  WGET : ON  |  Perl : ON  |  Python : OFF  |  Sudo : ON  |  Pkexec : ON
Directory :  /usr/lib/python3.10/test/__pycache__/

Upload File :
current_dir [ Writeable ] document_root [ Writeable ]

 

Command :


[ Back ]     

Current File : /usr/lib/python3.10/test/__pycache__/test_nntplib.cpython-310.pyc
o

�9j���@s�ddlZddlZddlZddlZddlZddlZddlZddlZddlZ	ddl
Z
ddlZddlm
Z
ddlmZddlmZmZddlmZzddlZWneyWdZYnwe	j�e	j�e�d�ZedurkejZnGdd�de�ZGd	d
�d
�Ze��efZ edur�e ej!f7Z Gdd�deej"�Z#e�$ed
�Gdd�de#��Z%Gdd�dej&�Z'dd�Z(Gdd�dej�Z)Gdd�d�Z*Gdd�de*�Z+Gdd�d�Z,Gdd�de,�Z-Gdd�de-�Z.Gd d!�d!e-�Z/Gd"d#�d#�Z0Gd$d%�d%e0e*ej"�Z1Gd&d'�d'e0e*ej"�Z2Gd(d)�d)e*ej"�Z3Gd*d+�d+e+ej"�Z4Gd,d-�d-ej"�Z5Gd.d/�d/ej"�Z6Gd0d1�d1ej"�Z7Gd2d3�d3�Z8e�$ed
�Gd4d5�d5e7��Z9Gd6d7�d7ej"�Z:e;d8k�r\e�<�dSdS)9�N)�support)�
socket_helper)�NNTP�	GroupInfo)�patchz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
�(/usr/lib/python3.10/test/test_nntplib.pyrsrc@s�eZdZdZdd�Zdd�Zdd�Zdd	�Zd
d�Zdd
�Z	dd�Z
dd�Zdd�Zdd�Z
dd�Zdd�Ze�dd�dd��Zdd�Zd1d d!�Ze�dd"�d#d$��Zd%d&�Zd'd(�Zd)d*�Zed+d,��Zd-d.�Zd/d0�ZdS)2�NetworkedNNTPTestsMixinNcCs|j��}|�tt|��dS�N)�server�
getwelcome�assertEqual�str�type)�self�welcomer
r
r�test_welcome*s
z$NetworkedNNTPTestsMixin.test_welcomecCs>|j��\}}|�|�d�|�|D]
}|�tt|��qdS)Nz100 )r�help�
assertTrue�
startswithrrr)r�resp�lines�liner
r
r�	test_help.s
�z!NetworkedNNTPTestsMixin.test_helpcCsL|j��\}}t|�dkr$|�tt|d��|�tt|dj��dSdS�Nr)r�list�lenrrrr�group�rr�groupsr
r
r�	test_list4s
�z!NetworkedNNTPTestsMixin.test_listcCsP|j�|j�\}}t|�dkr&|�tt|d��|�tt|dj��dSdSr )	rr!�	GROUP_PATr"rrrrr#r$r
r
r�test_list_active:s
�z(NetworkedNNTPTestsMixin.test_list_activecCsV|�tj��}|j�d�Wd�n1swY|jj}|�|�d�|�dS)N�XYZZYz500 )	�assertRaises�nntplib�NNTPPermanentErrorr�	_shortcmd�	exception�responserr)r�cmrr
r
r�test_unknown_command@s
�z,NetworkedNNTPTestsMixin.test_unknown_commandcCs\tj��tjdd�}|j�|�\}}t|�dkr,|�|dt�|�|dj	t
�dSdS)N�)�daysr)�datetime�date�today�	timedeltar�	newgroupsr"�assertIsInstancerr#r)r�dtrr%r
r
r�test_newgroupsFs�z&NetworkedNNTPTestsMixin.test_newgroupscsb�fdd�}�j��j�}||����j|��j��j�}||��j�d�}��|d�dS)Ncs��|t����j|�dSr)r9r�assertNotIn�
GROUP_NAME)�desc�rr
r�_check_descPsz=NetworkedNNTPTestsMixin.test_description.<locals>._check_desczzk.brrtt.baz�)r�descriptionr=�assertIn�DESCr'r)rr@r>r
r?r�test_descriptionOsz(NetworkedNNTPTestsMixin.test_descriptioncCs^|j�|j�\}}|�|�d�p|�d�|�|�|t�||j}|�||j�	|j��dS)Nz215 z282 )
r�descriptionsr'rrr9�dictr=rrB)rr�descsr>r
r
r�test_descriptions_s�
z)NetworkedNNTPTestsMixin.test_descriptionscCs�|j�|j�}|�dt|��|\}}}}}|�||j�|�|t�|�|t�|�|t�|�||�|�|�	d�|�dS)N��211 )
rr#r=rr"r9�int�assertLessEqualrr)r�resultr�count�first�lastr#r
r
r�
test_grouphsz"NetworkedNNTPTestsMixin.test_groupcCs<|j��\}}|�|tj�|�|jd�|�|jd�dS)Ni�i�)rr5r9r4�assertGreaterEqual�yearrM�rrr5r
r
r�	test_datessz!NetworkedNNTPTestsMixin.test_datecCsF|�|t�|�|��hd��|��D]}|�|ttd�f�qdS)N>r5�from�subject�
references�:bytes�:lines�
message-id)r9rGrS�keys�valuesrr)r�art_dict�vr
r
r�_check_art_dictzs
��z'NetworkedNNTPTestsMixin._check_art_dictc	Csz|j�|j�\}}}}}|j�|d|�\}}t|�dkr"|�d�|d\}}|�||d�|�||�|�|�dS)NrJrzno articles retrieved)	rr#r=�xoverr"�skipTestrSrMra)	rrrOrPrQ�namer�art_numr_r
r
r�
test_xover�s
z"NetworkedNNTPTestsMixin.test_xoverTzHtemporarily skipped until a permanent solution is found for issue #28971c
Cs�|j�|j�\}}}}}|d}|j�|df�\}}|d\}}	|�|	�|j�||f�\}}|d\}}	|�||�|�||�|�|	�dS)N�
r���)rr#r=�overrarSrM)
rrrOrPrQrd�startrrer_r
r
r�	test_over�s
z!NetworkedNNTPTestsMixin.test_overcCsL|j�|j�\}}}}}|j�d|�\}}|D]}|�tt|d��qdS)NrX�)rr#r=�xhdrrrr)rrrOrPrQrdrrr
r
r�	test_xhdr�s
�z!NetworkedNNTPTestsMixin.test_xhdrcCsR|�|tj�|dur|�|j|�|jD]}|�|t�q|�|jdd�dS)Nrh)�.s.
�.
)r9r+�ArticleInfor�numberr�bytesr<)rr�articlererr
r
r�check_article_resp�s
z*NetworkedNNTPTestsMixin.check_article_respzFIXME: see bpo-32128c
sN|j�|j�\}}}}}|||dfD](}z
|j�|�\}}Wntjy9}z
|j�d�s/�WYd}~qd}~wwn|�d�|�	|�d�|�|�
|||�|j�|�\}}	|�	|�d�|�|�
||	|�|j�|�\}}
|�	|�d�|�|�
||
|�dd���fd	d
�|j
D�}�fdd
�|
j
D�}|�||dg|	j
�dS)
Nrlz423 z(could not find a suitable article numberz221 z222 z220 cSs
|�d�S)NsX-Antivirus)r)rr
r
r�<lambda>�s
z@NetworkedNNTPTestsMixin.test_article_head_body.<locals>.<lambda>c�g|]}�|�s|�qSr
r
��.0r��denylistr
r�
<listcomp>��
�zBNetworkedNNTPTestsMixin.test_article_head_body.<locals>.<listcomp>crwr
r
rxrzr
rr|�r}�)rr#r=�headr+�NNTPTemporaryErrorr/rrcrru�bodyrtrr)
rrrOrPrQrdrer�er�rt�filtered_head_lines�filtered_linesr
rzr�test_article_head_body�s0��
z.NetworkedNNTPTestsMixin.test_article_head_bodycsD�fdd�}���jjd�|�j����j��\}}||�dS)Ncs(|d}��|ttf���d|�dS)N�LIST�OVERVIEW.FMT)r9r!�tuplerC)�caps�	caps_listr?r
r�_check_caps�sz>NetworkedNNTPTestsMixin.test_capabilities.<locals>._check_caps�)rSr�nntp_version�getcapabilities�capabilities)rr�rr�r
r?r�test_capabilities�s
z)NetworkedNNTPTestsMixin.test_capabilitiescCs&d}d}|jtj|jj||dd�dS)N�notarealuser�notarealpasswordF)�user�password�usenetrc)r*r+�	NNTPErrorr�login)r�baduser�badpwr
r
r�test_zlogin�s

�z#NetworkedNNTPTestsMixin.test_zlogincCs(t|�}z|j��Wd|_dSd|_wr)rr�quit)r�clsr
r
r�test_zzquit�sz#NetworkedNNTPTestsMixin.test_zzquitcCsJdd�}t|�D]}|�d�sqt||�}t|�sqt||||��qdS)Ncst����fdd��}|S)Ncs:t�|j��
�|�Wd�dS1swYdSr)r�transient_internet�	NNTP_HOSTr?��methr
r�wrapped�s
"�zHNetworkedNNTPTestsMixin.wrap_methods.<locals>.wrap_meth.<locals>.wrapped)�	functools�wraps)r�r�r
r�r�	wrap_meth�sz7NetworkedNNTPTestsMixin.wrap_methods.<locals>.wrap_meth�test_)�dirr�getattr�callable�setattr)r�r�rdr�r
r
r�wrap_methods�s

�z$NetworkedNNTPTestsMixin.wrap_methodscCsB|�t��|j|jddd�Wd�dS1swYdS)NrF��timeoutr�)r*�
ValueError�
NNTP_CLASSr�r?r
r
r�test_timeouts"�z$NetworkedNNTPTestsMixin.test_timeoutc
s �fdd�}ttjdd�}|jdur|j|d<zX|j|jfi|�����|�|��|�����Wd�n1s<wY|�|��|j|jfi|�������	�Wd�n1sbwY|�|��WdSt
y�}zt�d|j
�r�t�d|�d|j�����d}~ww)	Nc	s6t�d�sdSz���WdSttfyYdSw)N�fileFT)�hasattrr�OSError�EOFErrorr
�rr
r�is_connected
s

��zANetworkedNNTPTestsMixin.test_with_statement.<locals>.is_connectedFr��ssl_context�(?i)KEY.TOO.SMALLzGot � connecting to )rGr�INTERNET_TIMEOUTr�r�r�rr�assertFalser�r�re�searchr�unittest�SkipTest)rr��kwargs�ssl_errr
r�r�test_with_statements6	�

�
����z+NetworkedNNTPTestsMixin.test_with_statementr)rr	r
r�rrr&r(r1r;rErIrRrVrarfr��skipIfrkrnrur�r�r�r��classmethodr�r�r�r
r
r
rr&s6		



	


rc@s8eZdZdZdZdZdZeZe	dd��Z
e	dd��Zd	S)
�NetworkedNNTPTestsznews.trigofacile.com�fr.comp.lang.pythonzfr.comp.lang.*�PythoncCs�t�d�ttjdd�}|jdur|j|d<t�|j��Oz
|j|jfi|��|_	Wn8t
yQ}zt�d|j
�rGt�|�d|�d|j����t|j��d}~wtybt�|�d|j����wWd�dS1snwYdS)	N�networkFr�r�r�z got r�z  got EOF error on connecting to )r�requiresrGr�r�rr�r�r�rrr�r�rr�r��print�
EOF_ERRORS)r�r�r�r
r
r�
setUpClassAs2
�

�
�
���"�zNetworkedNNTPTests.setUpClasscCs|jdur|j��dSdSr)rr�)r�r
r
r�
tearDownClassXs
�z NetworkedNNTPTests.tearDownClassN)rr	r
r�r=r'rDrr�r�r�r�r
r
r
rr�8s
r��requires SSL supportc@sXeZdZdZdZdZdZeedd�Z	dZ
dZedur*e�
�Ze�d�ejje_dSdS)�NetworkedNNTP_SSLTestsz
nntp.aioe.orgz	aioe.testzaioe.*�test�NNTP_SSLN�DEFAULT)rr	r
r�r=r'rDr�r+r�r&�
test_starttls�ssl�_create_unverified_contextr��set_ciphers�
TLSVersion�TLSv1_2�maximum_versionr
r
r
rr�]s
�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>tj�|�t��|_t��|_||_|j�|jj|j	�dSr)
�io�	RawIOBase�__init__�BytesIO�c2s�s2c�handlerrj�readline�	push_data)rr�r
r
rr��s


z_NNTPServerIO.__init__cC�dS�NTr
r?r
r
r�readable��z_NNTPServerIO.readablecCr�r�r
r?r
r
r�writable�r�z_NNTPServerIO.writablecCs4|j��}|j�dd�|j�|�|j�|�dS)z.Push (buffer) some data to send to the client.rr�N)r��tell�seek�write)r�data�posr
r
rr��s
z_NNTPServerIO.push_datacCs4|j��}|j�|�|j�|�|j��t|�S)zThe client sends us some data)r�r�r�r�r��process_pendingr")r�br�r
r
rr��s


z_NNTPServerIO.writecCs2|j��|j�t|��}t|�}||d|�<|S)z#The client wants to read a responseN)r�r�r��readr")r�bufr��nr
r
r�readinto�s

z_NNTPServerIO.readintoN)
rr	r
rr�r�r�r�r�r�r
r
r
rr�|s	r�cCst|�}t�||�}||fSr)r�r��BufferedRWPair)r��sior�r
r
r�make_mock_file�sr�c@seZdZddd�Zdd�ZdS)�
NNTPServerNcCs||_||_|�|�dSr)r��host�
_base_init)r�fr��
readermoder
r
rr��szNNTPServer.__init__cCs|j��|`dSr)r��closer?r
r
r�_close��
zNNTPServer._closer)rr	r
r�r�r
r
r
rr��s
r�cs4eZdZdZ�fdd�Z�fdd�Zdd�Z�ZS)�MockedNNTPTestsMixinNcst���|��dSr��super�setUp�make_serverr?��	__class__r
rr�s
zMockedNNTPTestsMixin.setUpcst���|`dSr)r�tearDownrr?rr
rr�r�zMockedNNTPTestsMixin.tearDowncOs:|��|_t|j�\|_}t|dg|�Ri|��|_|jS)Nztest.server)�
handler_classr�r�r�r�r)r�argsr�r�r
r
rr�s
z MockedNNTPTestsMixin.make_server)rr	r
rrrr�
__classcell__r
r
rrr��s
r�cseZdZ�fdd�Z�ZS)�MockedNNTPWithReaderModeMixincst���|jdd�dS)NT)r�rr?rr
rr�s
z#MockedNNTPWithReaderModeMixin.setUp)rr	r
rr	r
r
rrr
�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/eZd8d0d1�Zd8d2d3�Zd8d4d5�Zd6d7�ZdS):�
NNTPv1HandlerzA handler for RFC 977z200 NNTP mock servercCs0d|_d|_||_||_d|_d|_|��dS)NFT)�in_body�
allow_posting�	_readline�
_push_data�
_logged_in�
_user_sent�handle_welcome)rr�r�r
r
rrj�szNNTPv1Handler.startcCst|dd�S)N�utf-8�surrogateescape)r�rr�r
r
r�_decode�szNNTPv1Handler._decodec
Cs2|jr;	|��}|sdS|j�|�|dkrnqz|j\}}||d|ji�Wd|_d|_d|_n
d|_d|_d|_w	|�|���}|sGdS|�d�sStd�|���|dd�}|�	�^}}t
|d|��d�}|durr|��n&z||�Wnt
y�}ztd	�|��|�d}~ww|jr�||f|_g|_q<)
NTrpr�F�
z line doesn't end with \r\n: {!r}����handle_zcommand failed: {!r})rrr��append�
body_callbackr�endswithr��format�splitr��upper�handle_unknown�	Exception)rrr��tokens�cmdr�r
r
rr��sN�
�

��
�zNNTPv1Handler.process_pendingcCs
d|_dS)z7Flag that the client is expected to post a request bodyTN)rr?r
r
r�expect_body
s
zNNTPv1Handler.expect_bodycCs|�|�dS)zPush some binary dataN)rrr
r
rr�szNNTPv1Handler.push_datacCs4t�|�}d�|���d}|�d�}|�|�dS)zPush a string literalrrN)�textwrap�dedent�join�
splitlines�encoder�)r�litr
r
r�push_lits

zNNTPv1Handler.push_litcC�|�d�dS)Nz	500 What?�r+r?r
r
rr �zNNTPv1Handler.handle_unknowncCs|�|j�dSr)r+rr?r
r
rr�zNNTPv1Handler.handle_welcomecCr,�Nz205 Bye!r-r?r
r
r�handle_QUIT"r.zNNTPv1Handler.handle_QUITcCr,)N�111 20100914001155r-r?r
r
r�handle_DATE%r.zNNTPv1Handler.handle_DATEcCs*|dkr|�d�dS|�d�|��dS)Nr�z$211 486 761 1265 fr.comp.lang.pythonz411 No such group {})r+r)rr#r
r
r�handle_GROUP(szNNTPv1Handler.handle_GROUPcCr,)Nz�            100 Legal commands
              authinfo user Name|pass Password|generic <prog> <args>
              date
              help
            Report problems to <root@example.org>
            .r-r?r
r
r�handle_HELP.r.zNNTPv1Handler.handle_HELPNcCsP|dur|�d�dS|dkr|�d�dS|dkr!|�d�dS|�d�dS)N�412 No newsgroup selected�3000234�"223 3000234 <45223423@example.com>�<45223423@example.com>�223 0 <45223423@example.com>�430 No Such Article Foundr-�r�message_specr
r
r�handle_STAT7szNNTPv1Handler.handle_STATcCr,)N�*223 3000237 <668929@example.org> retrievedr-r?r
r
r�handle_NEXTAr.zNNTPv1Handler.handle_NEXTcCr,)N�,223 3000234 <45223423@example.com> retrievedr-r?r
r
r�handle_LASTDr.zNNTPv1Handler.handle_LASTcCs�|dur|�d�dS|dkr!|dkr|�d�dS|�d�dS|dkr,|�d�dS|dkrS|dus6J�|d	krA|�d
�dS|dkrL|�d�dS|�d
�dS|�d�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
                .�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"
                    .r�a                215 Order of fields in overview database.
                Subject:
                From:
                Date:
                Message-ID:
                References:
                Bytes:
                Lines:
                Xref:full
                .�
NEWSGROUPS�comp.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-)r�action�paramr
r
r�handle_LISTGs 	zNNTPv1Handler.handle_LISTcCs�|dkr|dkr|dkr|�d�dS|dkr&|dkr&|dkr&|�d�dS|dkr=|dvr=|dkr=|�d	d
d�dS|�d�dS)
NrF�20100913�082004a                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>
                .)�20100101�100101�090000z
too long linei�z
.zK                230 An empty list of newsarticles follows
                .r-)rr#�date_str�time_strr
r
r�handle_NEWNEWS}s

�zNNTPv1Handler.handle_NEWNEWScCs$|dkr|�d�dS|�d�dS)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-r<r
r
r�handle_XOVER�s
�zNNTPv1Handler.handle_XOVER)r�cCsP|dur|jr|�d�|��dS|�d�dS|jsJ�|�d�||_dS)Nz+340 Input article; end with <CR-LF>.<CR-LF>�440 Posting not permitted�240 Article received OK�r
r+r$�posted_body)rr�r
r
r�handle_POST�s



zNNTPv1Handler.handle_POSTcCsX|dur|jr|dkr|�d�|��dS|�d�dS|js"J�|�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 wanted�235 Article transferred OKrW)r�
message_idr�r
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

cC�d|dur
|�d�n|dkr|�d�n|dkr|�d�n|�d�dS|�|j�|�d�dS)N�"220 3000237 <45223423@example.com>r9�220 0 <45223423@example.com>r7�"220 3000234 <45223423@example.com>r;�.)r+�sample_articler<r
r
r�handle_ARTICLE��
zNNTPv1Handler.handle_ARTICLEcCr_)N�"221 3000237 <45223423@example.com>r9�221 0 <45223423@example.com>r7�"221 3000234 <45223423@example.com>r;rc)r+�sample_headr<r
r
r�handle_HEAD�rfzNNTPv1Handler.handle_HEADcCr_)N�"222 3000237 <45223423@example.com>r9�222 0 <45223423@example.com>r7�"222 3000234 <45223423@example.com>r;rc)r+�sample_bodyr<r
r
r�handle_BODY�rfzNNTPv1Handler.handle_BODYcCsn|jr
|�d�dS|dkr"|jr|�d�dS|�d�d|_dS|dkr0|�d�d|_dStd�|���)	Nz502 Already Logged Inr�z 482 User Credential Already Sentz381 Password RequiredT�passz281 Login SuccessfulzUnknown cred type {})rr+rr!r)r�	cred_typer�r
r
r�handle_AUTHINFO
s



zNNTPv1Handler.handle_AUTHINFOr�NN) rr	r
rrrjrr�r$r�r+r rr1r3r4r5r>r@rBrJrSrTrYr^rjrordrerkrprsr
r
r
rr�s<
&
	

6 





rc@s*eZdZdZdd�Zdd�Zd	dd�ZdS)
�
NNTPv2Handlerz"A handler for RFC 3977 (NNTP "v2")cCs2d}|js|�|�d��dS|�|�d��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 USERrA)rr+r�r�fmtr
r
r�handle_CAPABILITIESsz!NNTPv2Handler.handle_CAPABILITIEScCstd��)Nz3MODE READER sent despite READER has been advertised)r!)r�_r
r
r�handle_MODE.szNNTPv2Handler.handle_MODENcCs
|�|�Sr)rTr<r
r
r�handle_OVER1�
zNNTPv2Handler.handle_OVERr)rr	r
rrxrzr{r
r
r
rrus
rucs eZdZdZ�fdd�Z�ZS)�CapsAfterLoginNNTPv2Handlerz3A handler that allows CAPABILITIES only after logincs"|js
|�d�dSt���dS)Nz480 You must log in.)rr+rrxr?rr
rrx8sz/CapsAfterLoginNNTPv2Handler.handle_CAPABILITIES)rr	r
rrxr	r
r
rrr}5sr}c@s(eZdZdZdd�Zdd�Zdd�ZdS)	�ModeSwitchingNNTPv2Handlerz$A server that starts in transit modecCs
d|_dS�NF)�	_switchedr?r
r
rr�Br|z#ModeSwitchingNNTPv2Handler.__init__cCs2d}|jr|�|�d��dS|�|�d��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
            .rAzMODE-)r�r+rrvr
r
rrxEs
z.ModeSwitchingNNTPv2Handler.handle_CAPABILITIEScCs&|js|dks	J�d|_|�d�dS)N�readerTz200 Posting allowed)r�r+)r�whatr
r
rrzUsz&ModeSwitchingNNTPv2Handler.handle_MODEN)rr	r
rr�rxrzr
r
r
rr~?s
r~cseZdZ�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���dSr)rrr?rr
rr]r.zNNTPv1v2TestsMixin.setUpcCs|�|jj|jj�dSr)rrrr�r?r
r
rr`szNNTPv1v2TestsMixin.test_welcomecCs<|jdkr
|�d|jj�|j�dd�|�d|jj�dS)Nr��AUTHINFO�testuser�testpw)r�rCr�_capsr�r<r?r
r
r�
test_authinfocs
z NNTPv1v2TestsMixin.test_authinfocCs:|j��\}}|�|d�|�|t�dddddd��dS)Nr2���	�r��7)rr5rr4rUr
r
rrVks zNNTPv1v2TestsMixin.test_datecCs6|�|jj�|j��}|�|d�|�|jj�dSr0)r�r��closedrr�rr)rrr
r
r�	test_quitps
zNNTPv1v2TestsMixin.test_quitcCs.|j��\}}|�|d�|�|gd��dS)Nz100 Legal commands)z8  authinfo user Name|pass Password|generic <prog> <args>z  datez  helpz%Report problems to <root@example.org>)rrr)rrrr
r
rrvszNNTPv1v2TestsMixin.test_helpcCs~|j��\}}|�t|�d�|d}|�|tdddd��|j�d�\}}|�t|�d�|d	}|�|td
ddd��dS)
N�rl�comp.lang.python.announce�
0000001153�
0000000993�mrDr�rz!gmane.comp.python.distutils.devel�
0000014104�
0000000001)rr!rr"r)rrr%�gr
r
rr&�s ����zNNTPv1v2TestsMixin.test_listcCs�|j�d�\}}}|�|d�|�|d�|�|d�|j�d�\}}}|�|d�|�|d�|�|d�|�tj��}|j�d�Wd�n1sMwY|�|jjd�|�tj��
}|j��Wd�n1spwY|�|jjd�dS)	N��-r8r9r:rz<non.existent.id>r;r6)r�statrr*r+r�r.r/)rrrer]r0r
r
r�	test_stat�s ��zNNTPv1v2TestsMixin.test_statcC�8|j��\}}}|�|d�|�|d�|�|d�dS)Nr?��-z<668929@example.org>)r�nextr�rrrer]r
r
r�	test_next��zNNTPv1v2TestsMixin.test_nextcCr�)NrAr�r9)rrQrr�r
r
r�	test_last�r�zNNTPv1v2TestsMixin.test_lastcCs4|j�d�}|�|d�|j�d�}|�|d�dS)NrF�The Python computer language.�comp.lang.pythonxrA)rrBr)rr>r
r
rrE�sz#NNTPv1v2TestsMixin.test_descriptioncCsn|j�d�\}}|�|d�|�|ddi�|j�d�\}}|�|ddd��|j�d�\}}|�|i�dS)NrFz-215 Descriptions in form "group description".r�rGz4Announcements about the Python language. (Moderated))rFr�r�)rrFrr$r
r
rrI�s��z$NNTPv1v2TestsMixin.test_descriptionscCs�|j�d�\}}}}}|�|�d�|�|�|d�|�|d�|�|d�|�|d�|�tj��}|j�d�Wd�n1sCwY|j}|�|j	�d�|j	�dS)Nr�rKi�i�i�zcomp.lang.python.develz411 No such group)
rr#rrrr*r+r�r.r/)rrrOrPrQr#r0�excr
r
rrR�s��zNNTPv1v2TestsMixin.test_groupcCs�t�dddddd�}|j�d|�\}}d�|j�}|�||�|�|d	d
g�t�dddddd�}|j�d|�\}}|�|d�|�|g�dS)
Nr�r��
���rFzS230 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>r�z)230 An empty list of newsarticles follows)r4r�newnewsrr�r)rr:r�ids�expectedr
r
r�test_newnews�s��zNNTPv1v2TestsMixin.test_newnewscCsZ|�t|�d�|�|d�d�d�|�|dd�|�|dd�|�|d	d
�dS)Nr�rhru-- Signed by André.rr~���s.Here is a dot-starting line.���sThis is just a test article.)rr"�decode�rrr
r
r�_check_article_body�s
z&NNTPv1v2TestsMixin._check_article_bodycCs4|�t|�d�|�|dd�|�|dd�dS)Nr�rs&From: "Demo User" <nobody@example.net>�s7Message-ID: <i.am.an.article.you.will.want@example.com>)rr"r�r
r
r�_check_article_head�sz&NNTPv1v2TestsMixin._check_article_headcCsH|�t|�d�|�|dd��|�|dd��|�|dd�dS)Nr�r�r�r~)rr"r�r�r�r
r
r�_check_article_data�sz&NNTPv1v2TestsMixin._check_article_datacC�"|j��\}}|�|d�|\}}}|�|d�|�|d�|�|�|j�d�\}}|�|d�|\}}}|�|d�|�|d�|�|�|j�d�\}}|�|d�|\}}}|�|d�|�|d�|�|�|�tj��}|j�d�Wd�n1s�wY|�|jjd	�dS)
Nr`r�r9r�rbrar�<non-existent@example.com>r;)	rrtrr�r*r+r�r.r/�rr�inforer]rr0r
r
r�test_article��,





�zNNTPv1v2TestsMixin.test_articlecCs�t��}|jj|d�\}}|�|d�|\}}}|�|d�|�|d�|�|g�|��}|�|�d�t|��|�|�	d�t|��dS)N�r�r`r�r9�KFrom: "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é.
)
r�r�rrtr�getvaluerr�asciir�rr�rr�rer]rr�r
r
r�test_article_files$
����z$NNTPv1v2TestsMixin.test_article_filecCr�)
Nrgr�r9r�rirhrr�r;)	rrrr�r*r+r�r.r/r�r
r
r�	test_head r�zNNTPv1v2TestsMixin.test_headcC�t��}|jj|d�\}}|�|d�|\}}}|�|d�|�|d�|�|g�|��}|�|�d�t|��|�	|�
d�t|��dS)Nr�rgr�r9r�r�)r�r�rrrr�rrr�r�rr�r
r
r�test_head_file;�$
����z!NNTPv1v2TestsMixin.test_head_filecCr�)
Nrlr�r9r�rnrmrr�r;)	rr�rr�r*r+r�r.r/r�r
r
r�	test_bodyOr�zNNTPv1v2TestsMixin.test_bodycCr�)Nr�rlr�r9r�r�)r�r�rr�rr�r�rr�rrr�r
r
r�test_body_filejr�z!NNTPv1v2TestsMixin.test_body_filecCs�|�|�d�|�|�t|�d�|d\}}|�|d�|�|ddddd	d
ddd
��|d\}}|�|dd�|d\}}|�|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>�7103�16z*news.gmane.io gmane.comp.python.authors:57)rWrXr5r\rYrZr[�xrefrlr�r�rX�0Re: Message d'erreur incompréhensible (par moi))rrrr")rr�	overviewsrerir
r
r�check_over_xover_resp~s(�

�z(NNTPv1v2TestsMixin.check_over_xover_respcCs"|j�dd�\}}|�||�dS)Nr��;)rrbr��rrr�r
r
rrf�szNNTPv1v2TestsMixin.test_xovercCs |j�d�\}}|�||�dS)N)r�r�)rrir�r�r
r
rrk�szNNTPv1v2TestsMixin.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}|�t|�d�|�|dd�|�|dd�|�|dd�|�|dd	�|�|d
d�dS)Nrgrhrprs-- Signed by André.
r��
r�s ..Here is a dot-starting line.
rs(From: "Demo User" <nobody@example.net>
)r�rXrr"r�r
r
r�_check_posted_body�sz%NNTPv1v2TestsMixin._check_posted_bodycGsd|j}|||�f}d|j_||�}|��|j�dd�}|||�f}d|j_||�}|��|S)Nr��
)�sample_postr�rXr��replace)r�func�file_factoryr�post�	func_argsrr
r
r�_check_post_ihave_sub�sz(NNTPv1v2TestsMixin._check_post_ihave_subcGs�|j|g|�Rdti�}|�||�|j|g|�Rdti�}|�||�|j|g|�Rdtji�}|�||�dd�}|j|g|�Rd|i�}|�||�dd�}|j|g|�Rd|i�}|�||�dS)Nr�cS�t|jdd��S)NT��keepends��iterr(�r�r
r
r�	iterlines�r/z6NNTPv1v2TestsMixin.check_post_ihave.<locals>.iterlinescSr�)NFr�r�r�r
r
rr��r/)r�rsr�	bytearrayr�r�)rr��success_resprrr�r
r
r�check_post_ihave�sz#NNTPv1v2TestsMixin.check_post_ihavecCsf|�|jjd�d|j_|�tj��}|j�|j�Wd�n1s$wY|�	|j
jd�dS)NrVFrU)r�rr�r�r
r*r+r�r�rr.r/�rr0r
r
r�	test_post�s�
�zNNTPv1v2TestsMixin.test_postcCsb|�|jjdd�|�tj��}|j�d|j�Wd�n1s"wY|�|jj	d�dS)Nr\rZz<another.message.id>r[)
r�r�ihaver*r+r�r�rr.r/r�r
r
r�
test_ihave�s��
�zNNTPv1v2TestsMixin.test_ihavecCs.t�dddddd�}|�tj|jjd|�dS)Nr�rlr�rrF)r4r*r+�
NNTPDataErrorrr�)rr:r
r
r�test_too_long_lines�s
�z&NNTPv1v2TestsMixin.test_too_long_lines)%rr	r
rrr�rVr�rr&r�r�r�rErIrRr�r�r�r�r�r�r�r�r�r�r�rfrkr�r�r�r�r�r�r�r	r
r
rrr�[sF

�r�c@� eZdZdZdZeZdd�ZdS)�NNTPv1Testsz*Tests an NNTP v1 server (no capabilities).rlcCs:|j��}|�|i�|�|jjd�|�|jjd�dS)Nrl�rr�rr��nntp_implementation�rr�r
r
r�	test_caps�s
zNNTPv1Tests.test_capsN)rr	r
rr�rrr�r
r
r
rr���
r�c@r�)�NNTPv2Testsz,Tests an NNTP v2 server (with capabilities).r�cCsZ|j��}|�|ddgddgdgggd�gggd��|�|jjd�|�|jjd	�dS)
N�2�3�INNz2.5.1�USER)rCzACTIVE.TIMESzDISTRIB.PATS�HEADERSrEr�)�VERSION�IMPLEMENTATIONr��HDRr��OVER�POST�READERr�z	INN 2.5.1r�r�r
r
rr�s
�zNNTPv2Tests.test_capsN)rr	r
rr�rurr�r
r
r
rr��r�r�c@r�)�CapsAfterLoginNNTPv2TestszCTests a probably NNTP v2 server with capabilities only after login.r�cCs2|�|jji�|j�dd�|�d|jj�dS)Nr�r�r�)rrr�r�rCr?r
r
r�test_caps_only_after_loginsz4CapsAfterLoginNNTPv2Tests.test_caps_only_after_loginN)rr	r
rr�r}rr�r
r
r
rr�r�r�c@r�)�SendReaderNNTPv2TestszoSame tests as for v2 but we tell NTTP to send MODE READER to a server
    that isn't in READER mode by default.r�cCs|�d|jj�dS)Nr�)rCrr�r?r
r
r�(test_we_are_in_reader_mode_after_connect&sz>SendReaderNNTPv2Tests.test_we_are_in_reader_mode_after_connectN)rr	r
rr�r~rrr
r
r
rrs
rc@sPeZdZdd�Zdd�Zdd�Zdd�Zd	d
�Zdd�Ze	�
ed
�dd��ZdS)�	MiscTestscsV�fdd�}|dd�|dd�|dd�|dd�|dd	�|d
d�|dd�dS)
Ncs��t�|�|�dSr)rr+�
decode_header)�ar�r?r
r�gives-sz+MiscTests.test_decode_header.<locals>.givesrAza 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�r
�rrr
r?r�test_decode_header,s



���zMiscTests.test_decode_headercCs�gd�}|�t�|�gd��gd�}|�t�|�gd��gd�}|�t�|�gd��gd�}|�t�|�gd��gd�}|�t�|�gd��gd�}|�t�|�gd	��dS)
N)�Subject:�From:�Date:�Message-ID:�References:rZr[)rXrWr5r\rYrZr[)rr	r
rr�Bytes:�Lines:)zsubject:zFROM:zDaTe:zmessage-ID:rzBYTES:r)	rr	r
rrrZr[�	Xref:fullzDistribution:full)	rXrWr5r\rYrZr[r��distribution)	rr	r
rrr
rz	Xref:FULLzDistribution:FULL)rr	r
rrr
rr�rXrWr5r\rYrZr[r�)rr+�_parse_overview_fmtr�r
r
r�test_parse_overview_fmt<s0������z!MiscTests.test_parse_overview_fmtcCs�tjdg}dg}t�||�}|\\}}|�|d�|�|dddddd	d
dd��d
g}t�||�}|\\}}|�|dd�dg}t�||�}|\\}}|�|dd�|�|dd�dS)Nr�z�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:3000363r�zI am just a test articlez "Demo User" <nobody@example.com>z6 Oct 1998 04:38:40 -0500r9z<45454@example.net>�1234�17z"news.example.com misc.test:3000363rz�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: 	rY� rA)r+�_DEFAULT_OVERVIEW_FMT�_parse_overviewr)rrwr�overviewre�fieldsr
r
r�test_parse_overviewds6�
�
�
�
zMiscTests.test_parse_overviewc	sh�fdd�}|dddddddd	�|d
ddddddd	�|dddddddd	�|d
ddddddd	�dS)Ncs��t�||�tj|��dSr)rr+�_parse_datetimer4)rr��cr?r
rr�s�z,MiscTests.test_parse_datetime.<locals>.gives�19990623135624��r��r��8��19990623�135624�990623�090623i�r
rr
r?r�test_parse_datetime�s
zMiscTests.test_parse_datetimec	��fdd�}|ddddddd	d
�|dddddddd
�|d
ddddddd��fdd�}|dddd	d�|ddddd�|d
dddd�dS)Nc	sFt�||||||�}��t�|�||f���t�|d�||f�dSr�r4rr+�_unparse_datetime�	�y�M�d�hr��srQrRr:r?r
rr�s��z.MiscTests.test_unparse_datetime.<locals>.givesrr�r r�r!r"r#r$���20000623r�rJrlr�r��20100605�010203cs@t�|||�}��t�|�||f���t�|d�||f�dSr�r4r5rr+r*�r,r-r.rQrRr:r?r
rr�s���000000r
rr
r?r�test_unparse_datetime�szMiscTests.test_unparse_datetimec	r()Nc	s0t�||||||�}��t�|d�||f�dSr�r)r+r?r
rr�s�z5MiscTests.test_unparse_datetime_legacy.<locals>.givesrr�r r�r!r"r%r$r1�000623r�rJrlr�r��100605r4cs*t�|||�}��t�|d�||f�dSr�r5r6r?r
rr�s�r7r
rr
r?r�test_unparse_datetime_legacy�sz&MiscTests.test_unparse_datetime_legacyr�cCs|�ttd��dS)Nr�)rr�r+r?r
r
r�test_ssl_support��zMiscTests.test_ssl_supportN)
rr	r
rrrr'r8r;r��
skipUnlessr�r<r
r
r
rr*s(.
rc@�eZdZdZdd�ZdS)�PublicAPITestsz>Ensures that the correct values are exposed in the public API.cCsD|�ttd��gd�}tdur|�d�|�ttj�t|��dS)N�__all__)rr��NNTPReplyErrorr�r,�NNTPProtocolErrorr�rr�)rr�r+r�rr�setrA)r�
target_apir
r
r�test_module_all_attribute�s

z(PublicAPITests.test_module_all_attributeN)rr	r
rrFr
r
r
rr@�sr@c@sJeZdZdZejZ	ddd�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.Nc	s�G�fdd�d�}G���fdd�d��d�g�td|��&|�||��|jd||d�Wd�n1s7wYWd�n1sFwY|����D]}|�|j�qRdS)	Nc�eZdZ�fdd�ZdS)zNMockSocketTests.check_constructor_error_conditions.<locals>.mock_socket_modulecs��Srr
)�addressr���
MockSocketr
r�create_connection�sz`MockSocketTests.check_constructor_error_conditions.<locals>.mock_socket_module.create_connectionN)rr	r
rLr
rJr
r�mock_socket_module��rMcs&eZdZ�fdd�Z��fdd�ZdS)zFMockSocketTests.check_constructor_error_conditions.<locals>.MockSocketcsd�dSr�r
r?)�
socket_closedr
rr��szLMockSocketTests.check_constructor_error_conditions.<locals>.MockSocket.closecs ��}t|�\}}��|�|Sr)r�r)�socket�moder�ryr�)�filesrr
r�makefile�s
zOMockSocketTests.check_constructor_error_conditions.<locals>.MockSocket.makefileN)rr	r
r�rSr
)rRrrOr
rrK�srKFznntplib.socket�dummy)r�r�)r�assertRaisesRegex�
nntp_classrr�)rr�expected_error_type�expected_error_msgr�r�rMr�r
)rKrRrrOr�"check_constructor_error_conditions�s
���
�z2MockSocketTests.check_constructor_error_conditionscC�&Gdd�dt�}|�|tj|j�dS)Nc@�eZdZdZdS)z1MockSocketTests.test_bad_welcome.<locals>.HandlerzBad WelcomeN�rr	r
rr
r
r
r�Handler��r])rrYr+rCr�rr]r
r
r�test_bad_welcome��
�z MockSocketTests.test_bad_welcomecCrZ)Nc@r[)zEMockSocketTests.test_service_temporarily_unavailable.<locals>.Handlerz#400 Service temporarily unavailableNr\r
r
r
rr]r^r])rrYr+r�rr_r
r
r�$test_service_temporarily_unavailableraz4MockSocketTests.test_service_temporarily_unavailablecCrZ)Nc@r[)zEMockSocketTests.test_service_permanently_unavailable.<locals>.Handlerz#502 Service permanently unavailableNr\r
r
r
rr]r^r])rrYr+r,rr_r
r
r�$test_service_permanently_unavailable
raz4MockSocketTests.test_service_permanently_unavailablecs,G�fdd�dt�}d�|�|tj��dS)NcrH)z6MockSocketTests.test_bad_capabilities.<locals>.Handlerc�|���dSrr-r?��capabilities_responser
rrxr.zJMockSocketTests.test_bad_capabilities.<locals>.Handler.handle_CAPABILITIESN)rr	r
rxr
rer
rr]rNr]z201 bad capability)rrYr+rBr_r
rer�test_bad_capabilitiess
�z%MockSocketTests.test_bad_capabilitiescs8d}d}G�fdd�dt�}d�|�|tj�||�dS)Nzt@e.com�pythoncrH)z3MockSocketTests.test_login_aborted.<locals>.Handlercrdrr-)rr��authinfo_responser
rrsr.zCMockSocketTests.test_login_aborted.<locals>.Handler.handle_AUTHINFON)rr	r
rsr
rir
rr]rNr]z503 Mechanism not recognized)rrYr+r,)rr�r�r]r
rir�test_login_aborteds�z"MockSocketTests.test_login_abortedrt)
rr	r
rr+rrVrYr`rbrcrgrkr
r
r
rrG�s
�	rGc@r?)�bypass_contextz'Bypass encryption and actual SSL modulecKs|Srr
)�sockrr
r
r�wrap_socket(r�zbypass_context.wrap_socketN)rr	r
rrnr
r
r
rrl&srlc@seZdZedd��ZdS)�MockSslTestscOstj|dti|��S)Nr�)r+r�rl)r��kwr
r
rrV-r=zMockSslTests.nntp_classN)rr	r
�staticmethodrVr
r
r
rro+sroc@s0eZdZdd�Zdd�Ze�ed�dd��ZdS)	�LocalServerTestscCstt��}t�|�}|��tj|j|fd�|_|j��|�	|jj
�ttj|dd��
�|_|�	|jjddd�dS)N)�targetrF)r�)rPr�	bind_port�listen�	threading�Thread�
run_server�
backgroundrj�
addCleanupr'r�HOST�	__enter__�nntp�__exit__)rrm�portr
r
rr3s
�
zLocalServerTests.setUpcCs|�|��\}}Wd�n1swYt���i}|�|�|�|�d��}|�d�	|��}|dkr>|�d�n>|dkrk|��|�d�t�	tj
�}|�t�|j
|dd�}|�|�|�|�d��}n|d	kru|�d
�ntd�|���q0Wd�dS1s�wYdS)N�rbs200 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_contextrS�sendallr�r�r��
SSLContext�PROTOCOL_TLS_SERVER�load_cert_chain�certfilernr�r)rrm�clientry�cleanupr�r#�contextr
r
rrx?s<�


�

�

�"�zLocalServerTests.run_serverr�cCs`|jj}|jj}|j��|�||jj�|�||jj�|�|jjtj�|�t	|jj�dSr)
r}r�rm�starttls�assertNotEqualr9r��	SSLSocketr*r�)rr�rmr
r
rr�_s
zLocalServerTests.test_starttlsN)	rr	r
rrxr�r>r�r�r
r
r
rrr2s

 rr�__main__)=r�rPr4r%r�r�r�r+�os.path�osr�rvr�r�test.supportrrr�
unittest.mockrr��ImportError�pathr'�dirname�__file__r�rr!rr�r�r��SSLEOFError�TestCaser�r>r�r�r�r�r�r�r
rrur}r~r�r�r�r�rrr@rGrlrorrr�mainr
r
r
r�<module>s��

%,G

�#N

<�

Youez - 2016 - github.com/yon3zu
LinuXploit