Sindbad~EG File Manager

Current Path : /usr/local/lib/python3.9/test/__pycache__/
Upload File :
Current File : //usr/local/lib/python3.9/test/__pycache__/test_nntplib.cpython-39.opt-2.pyc

a

��g���@s�ddlZddlZddlZddlZddlZddlZddlZddlZddlZ	ddl
Z
ddlZddlm
Z
ddlmZddlmZmZddlmZzddlZWney�dZYn0e	j�e	j�e�d�Zedur�ejZnGdd�de�ZGd	d
�d
�Ze��efZ edu�re 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�<�dS)9�N)�support)�
socket_helper)�NNTP�	GroupInfo)�patchzkeycert3.pemc@seZdZdZdS)�SSLErrorzThis will never be raised.N)�__name__�
__module__�__qualname__�reason�rr�-/usr/local/lib/python3.9/test/test_nntplib.pyrsrc@s�eZdZdd�Zdd�Zdd�Zdd�Zd	d
�Zdd�Zd
d�Z	dd�Z
dd�Zdd�Zdd�Z
dd�Ze�dd�dd��Zdd�Zd1d d!�Ze�dd"�d#d$��Zd%d&�Zd'd(�Zd)d*�Zed+d,��Zd-d.�Zd/d0�ZdS)2�NetworkedNNTPTestsMixincCs|j��}|�tt|��dS�N)�serverZ
getwelcome�assertEqual�str�type)�self�welcomerrr
�test_welcome(s
z$NetworkedNNTPTestsMixin.test_welcomecCs>|j��\}}|�|�d�|�|D]}|�tt|��q$dS)Nz100 )r�help�
assertTrue�
startswithrrr)r�resp�lines�linerrr
�	test_help,sz!NetworkedNNTPTestsMixin.test_helpcCsH|j��\}}t|�dkrD|�tt|d��|�tt|dj��dS�Nr)r�list�lenrrrr�group�rr�groupsrrr
�	test_list2sz!NetworkedNNTPTestsMixin.test_listcCsL|j�|j�\}}t|�dkrH|�tt|d��|�tt|dj��dSr)	rr�	GROUP_PATr rrrrr!r"rrr
�test_list_active8sz(NetworkedNNTPTestsMixin.test_list_activecCsV|�tj��}|j�d�Wd�n1s.0Y|jj}|�|�d�|�dS)NZXYZZYz500 )	�assertRaises�nntplib�NNTPPermanentErrorrZ	_shortcmd�	exception�responserr)r�cmrrrr
�test_unknown_command>s*z,NetworkedNNTPTestsMixin.test_unknown_commandcCsXtj��tjdd�}|j�|�\}}t|�dkrT|�|dt�|�|dj	t
�dS)N�)Zdaysr)�datetime�dateZtodayZ	timedeltarZ	newgroupsr �assertIsInstancerr!r)r�dtrr#rrr
�test_newgroupsDs
z&NetworkedNNTPTestsMixin.test_newgroupscsb�fdd�}�j��j�}||����j|��j��j�}||��j�d�}��|d�dS)Ncs��|t����j|�dSr)r1r�assertNotIn�
GROUP_NAME)�desc�rrr
�_check_descNsz=NetworkedNNTPTestsMixin.test_description.<locals>._check_desczzk.brrtt.baz�)r�descriptionr5�assertIn�DESCr%r)rr8r6rr7r
�test_descriptionMsz(NetworkedNNTPTestsMixin.test_descriptioncCs^|j�|j�\}}|�|�d�p(|�d�|�|�|t�||j}|�||j�	|j��dS)Nz215 z282 )
r�descriptionsr%rrr1�dictr5rr:)rrZdescsr6rrr
�test_descriptions]s�
z)NetworkedNNTPTestsMixin.test_descriptionscCs�|j�|j�}|�dt|��|\}}}}}|�||j�|�|t�|�|t�|�|t�|�||�|�|�	d�|�dS)N��211 )
rr!r5rr r1�int�assertLessEqualrr)r�resultr�count�first�lastr!rrr
�
test_groupfsz"NetworkedNNTPTestsMixin.test_groupcCs<|j��\}}|�|tj�|�|jd�|�|jd�dS)Ni�i�)rr0r1r/�assertGreaterEqualZyearrD�rrr0rrr
�	test_dateqsz!NetworkedNNTPTestsMixin.test_datecCsF|�|t�|�|��hd��|��D]}|�|ttd�f�q(dS)N>�:bytes�from�
references�:lines�
message-id�subjectr0)r1r?rJ�keys�valuesrr)r�art_dict�vrrr
�_check_art_dictxs
�z'NetworkedNNTPTestsMixin._check_art_dictc	Csz|j�|j�\}}}}}|j�|d|�\}}t|�dkrD|�d�|d\}}|�||d�|�||�|�|�dS)NrArzno articles retrieved)	rr!r5�xoverr �skipTestrJrDrW)	rrrFrGrH�namer�art_numrUr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!r5�overrWrJrD)
rrrFrGrHrZ�startrr[rUrrr
�	test_over�s
z!NetworkedNNTPTestsMixin.test_overcCsL|j�|j�\}}}}}|j�d|�\}}|D]}|�tt|d��q.dS)NrR�)rr!r5Zxhdrrrr)rrrFrGrHrZrrrrr
�	test_xhdr�sz!NetworkedNNTPTestsMixin.test_xhdrNcCsR|�|tj�|dur$|�|j|�|jD]}|�|t�q*|�|jdd�dS)Nr^)�.s.
�.
)r1r(ZArticleInfor�numberr�bytesr4)rr�articler[rrrr
�check_article_resp�s
z*NetworkedNNTPTestsMixin.check_article_respzFIXME: see bpo-32128c
s\|j�|j�\}}}}}|||dfD]^}z|j�|�\}}Wn@tjy~}z&|j�d�s^�WYd}~q&WYd}~n
d}~00q�q&|�d�|�	|�d�|�|�
|||�|j�|�\}}	|�	|�d�|�|�
||	|�|j�|�\}}
|�	|�d�|�|�
||
|�dd���fd	d
�|j
D�}�fdd
�|
j
D�}|�||dg|	j
�dS)
Nrbz423 z(could not find a suitable article numberz221 z222 z220 cSs
|�d�S)NsX-Antivirus)r)rrrr
�<lambda>��z@NetworkedNNTPTestsMixin.test_article_head_body.<locals>.<lambda>csg|]}�|�s|�qSrr��.0r�Z	blacklistrr
�
<listcomp>�s�zBNetworkedNNTPTestsMixin.test_article_head_body.<locals>.<listcomp>csg|]}�|�s|�qSrrrlrnrr
ro�s�rk)rr!r5�headr(�NNTPTemporaryErrorr+rrYrri�bodyrhrr)
rrrFrGrHrZr[rp�errrhZfiltered_head_linesZfiltered_linesrrnr
�test_article_head_body�s,"
z.NetworkedNNTPTestsMixin.test_article_head_bodycsD�fdd�}���jjd�|�j����j��\}}||�dS)Ncs(|d}��|ttf���d|�dS)N�LIST�OVERVIEW.FMT)r1r�tupler;)�capsZ	caps_listr7rr
�_check_caps�sz>NetworkedNNTPTestsMixin.test_capabilities.<locals>._check_caps�)rJr�nntp_version�getcapabilitiesZcapabilities)rryrrxrr7r
�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�s
�z#NetworkedNNTPTestsMixin.test_zlogincCs*t|�}z|j��Wd|_nd|_0dSr)rr�quit)r�clsrrr
�test_zzquit�sz#NetworkedNNTPTestsMixin.test_zzquitcCsJdd�}t|�D]4}|�d�s qt||�}t|�s4qt||||��qdS)Ncst����fdd��}|S)Ncs8t�|j���|�Wd�n1s*0YdSr)r�transient_internet�	NNTP_HOSTr7��methrr
�wrapped�szHNetworkedNNTPTestsMixin.wrap_methods.<locals>.wrap_meth.<locals>.wrapped)�	functools�wraps)r�r�rr�r
�	wrap_meth�sz7NetworkedNNTPTestsMixin.wrap_methods.<locals>.wrap_methZtest_)�dirr�getattr�callable�setattr)r�r�rZr�rrr
�wrap_methods�s

z$NetworkedNNTPTestsMixin.wrap_methodscCs@|�t��"|j|jddd�Wd�n1s20YdS)NrF��timeoutr�)r'�
ValueError�
NNTP_CLASSr�r7rrr
�test_timeoutsz$NetworkedNNTPTestsMixin.test_timeoutc
s�fdd�}z�|j|jtjdd����*|�|��|�����Wd�n1sV0Y|�|��|j|jtjdd�������Wd�n1s�0Y|�|��WnNt�y}z4t	�
d|j�r�t�
d|�d|j�����WYd}~n
d}~00dS)Nc	s8t�d�sdSz���Wnttfy2YdS0dS)N�fileFT)�hasattrr�OSError�EOFErrorr�rrr
�is_connecteds
zANetworkedNNTPTestsMixin.test_with_statement.<locals>.is_connectedFr��(?i)KEY.TOO.SMALLzGot � connecting to )r�r�r�INTERNET_TIMEOUTrr�assertFalser�r�re�searchr�unittest�SkipTest)rr��ssl_errrr�r
�test_with_statement
s.	�,�&�z+NetworkedNNTPTestsMixin.test_with_statement)N)rr	r
rrr$r&r-r3r=r@rIrLrWr\r�ZskipIfrarcrirtr}r�r��classmethodr�r�r�rrrr
r&s2		


	



rc@s8eZdZdZdZdZdZeZe	dd��Z
e	dd��Zd	S)
�NetworkedNNTPTestsznews.trigofacile.com�fr.comp.lang.pythonzfr.comp.lang.*�PythoncCs�t�d�t�|j���z|j|jtjdd�|_Wnvty�}z8t	�
d|j�rlt�
|�d|�d|j�����WYd}~n0d}~0ty�t�
|�d|j����Yn0Wd�n1s�0YdS)N�networkFr�r�z got r�z  got EOF error on connecting to )rZrequiresrr�r�r�r�rrr�r�rr�r��
EOF_ERRORS)r�r�rrr
�
setUpClass<s"
��
�zNetworkedNNTPTests.setUpClasscCs|jdur|j��dSr)rr�)r�rrr
�
tearDownClassNs
z NetworkedNNTPTests.tearDownClassN)rr	r
r�r5r%r<rr�r�r�r�rrrr
r�3s
r��requires SSL supportc@s0eZdZdZdZdZdZeedd�Z	dZ
dZdS)�NetworkedNNTP_SSLTestsz
nntp.aioe.orgz	aioe.testzaioe.*�test�NNTP_SSLN)rr	r
r�r5r%r<r�r(r�r$�
test_starttlsrrrr
r�Ssr�c@s<eZdZdd�Zdd�Zdd�Zdd�Zd	d
�Zdd�Zd
S)�
_NNTPServerIOcCs>tj�|�t��|_t��|_||_|j�|jj|j	�dSr)
�io�	RawIOBase�__init__�BytesIO�c2s�s2c�handlerr`�readline�	push_data)rr�rrr
r�ss


z_NNTPServerIO.__init__cCsdS�NTrr7rrr
�readable|sz_NNTPServerIO.readablecCsdSr�rr7rrr
�writablesz_NNTPServerIO.writablecCs4|j��}|j�dd�|j�|�|j�|�dS)Nrrz)r��tell�seek�write)r�data�posrrr
r��s
z_NNTPServerIO.push_datacCs4|j��}|j�|�|j�|�|j��t|�Sr)r�r�r�r�r��process_pendingr )r�br�rrr
r��s


z_NNTPServerIO.writecCs2|j��|j�t|��}t|�}||d|�<|Sr)r�r�r��readr )r�bufr��nrrr
�readinto�s

z_NNTPServerIO.readintoN)	rr	r
r�r�r�r�r�r�rrrr
r�ns	r�cCst|�}t�||�}||fSr)r�r��BufferedRWPair)r��sior�rrr
�make_mock_file�sr�c@seZdZddd�Zdd�ZdS)�
NNTPServerNcCs||_||_|�|�dSr)r��hostZ
_base_init)r�fr��
readermoderrr
r��szNNTPServer.__init__cCs|j��|`dSr)r��closer7rrr
�_close�s
zNNTPServer._close)N)rr	r
r�r�rrrr
r��s
r�cs4eZdZdZ�fdd�Z�fdd�Zdd�Z�ZS)�MockedNNTPTestsMixinNcst���|��dSr��super�setUp�make_serverr7��	__class__rr
r��s
zMockedNNTPTestsMixin.setUpcst���|`dSr)r��tearDownrr7r�rr
r��s
zMockedNNTPTestsMixin.tearDowncOs:|��|_t|j�\|_}t|dg|�Ri|��|_|jS)Nztest.server)�
handler_classr�r�r�r�r)r�args�kwargsr�rrr
r��s
z MockedNNTPTestsMixin.make_server)rr	r
r�r�r�r��
__classcell__rrr�r
r��sr�cseZdZ�fdd�Z�ZS)�MockedNNTPWithReaderModeMixincst���|jdd�dS)NT)r�r�r7r�rr
r��s
z#MockedNNTPWithReaderModeMixin.setUp)rr	r
r�r�rrr�r
r��sr�c@s�eZdZdZdd�Zdd�Zdd�Zdd	�Zd
d�Zdd
�Z	dd�Z
dd�Zdd�Zdd�Z
dd�Zdd�Zd7dd�Zdd�Zdd �Zd8d!d"�Zd#d$�Zd%d&�Zdd'�d(d)�Zdd'�d*d+�Zd,Zd-Zed.eZd9d/d0�Zd:d1d2�Zd;d3d4�Zd5d6�ZdS)<�
NNTPv1Handlerz200 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r
r`�szNNTPv1Handler.startcCst|dd�S)N�utf-8�surrogateescape)r�rr�rrr
�_decode�szNNTPv1Handler._decodec
Cs@|jrt|��}|sdS|j�|�|dkrq.qz0|j\}}||d|ji�Wd|_d|_d|_nd|_d|_d|_0|�|���}|s�dS|�d�s�td�|���|dd�}|�	�^}}t
|d|��d�}|dur�|��qtz||�Wn6t
�y"}ztd�|��|�WYd}~qtd}~00|jrt||f|_g|_qtdS)	NrerrF�
z line doesn't end with \r\n: {!r}���Zhandle_zcommand failed: {!r})r�r�rr�appendZ
body_callbackr��endswithr��format�splitr��upper�handle_unknown�	Exception)rrr��tokens�cmdrsrrr
r��sB
�

&
zNNTPv1Handler.process_pendingcCs
d|_dSr�)r�r7rrr
�expect_body�szNNTPv1Handler.expect_bodycCs|�|�dSr)r�r�rrr
r�szNNTPv1Handler.push_datacCs4t�|�}d�|���d}|�d�}|�|�dS)Nr�r�)�textwrap�dedent�join�
splitlines�encoder�)rZlitrrr
�push_lits

zNNTPv1Handler.push_litcCs|�d�dS)Nz	500 What?�rr7rrr
r�szNNTPv1Handler.handle_unknowncCs|�|j�dSr)rrr7rrr
r�szNNTPv1Handler.handle_welcomecCs|�d�dS�Nz205 Bye!rr7rrr
�handle_QUITszNNTPv1Handler.handle_QUITcCs|�d�dS)N�111 20100914001155rr7rrr
�handle_DATEszNNTPv1Handler.handle_DATEcCs(|dkr|�d�n|�d�|��dS)Nr�z$211 486 761 1265 fr.comp.lang.pythonz411 No such group {})rr�)rr!rrr
�handle_GROUPszNNTPv1Handler.handle_GROUPcCs|�d�dS)Nz�            100 Legal commands
              authinfo user Name|pass Password|generic <prog> <args>
              date
              help
            Report problems to <root@example.org>
            .rr7rrr
�handle_HELP szNNTPv1Handler.handle_HELPNcCsJ|dur|�d�n2|dkr(|�d�n|dkr<|�d�n
|�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�rZmessage_specrrr
�handle_STAT)szNNTPv1Handler.handle_STATcCs|�d�dS)N�*223 3000237 <668929@example.org> retrievedrr7rrr
�handle_NEXT3szNNTPv1Handler.handle_NEXTcCs|�d�dS)N�,223 3000234 <45223423@example.com> retrievedrr7rrr
�handle_LAST6szNNTPv1Handler.handle_LASTcCs�|dur|�d�n�|dkr<|dkr0|�d�q�|�d�nZ|dkrP|�d�nF|dkr�|d	krl|�d
�q�|dkr�|�d�q�|�d
�n
|�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"
                    .rva                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�actionZparamrrr
�handle_LIST9s	zNNTPv1Handler.handle_LISTcCs�|dkr$|dkr$|dkr$|�d�nZ|dkrH|dkrH|dkrH|�d�n6|dkrt|dvrt|dkrt|�d	d
d�n
|�d�dS)
NrZ20100913Z082004a                230 list of newsarticles (NNTP v2) created after Mon Sep 13 08:20:04 2010 follows
                <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>
                .)Z20100101Z100101Z090000z
too long linei�z
.zK                230 An empty list of newsarticles follows
                .r)rr!�date_str�time_strrrr
�handle_NEWNEWSos"����
�zNNTPv1Handler.handle_NEWNEWScCs"|dkr|�d�n
|�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
                .rrrrr
�handle_XOVER�s
�zNNTPv1Handler.handle_XOVER)rrcCsB|dur.|jr"|�d�|��q>|�d�n|�d�||_dS)Nz+340 Input article; end with <CR-LF>.<CR-LF>�440 Posting not permitted�240 Article received OK�r�rr��posted_body)rrrrrr
�handle_POST�s


zNNTPv1Handler.handle_POSTcCsJ|dur6|jr*|dkr*|�d�|��qF|�d�n|�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 OKr")r�
message_idrrr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|dur|�d�n6|dkr(|�d�n"|dkr<|�d�n|�d�dS|�|j�|�d�dS)N�"220 3000237 <45223423@example.com>r�220 0 <45223423@example.com>r
�"220 3000234 <45223423@example.com>r�.)r�sample_articlerrrr
�handle_ARTICLE�s
zNNTPv1Handler.handle_ARTICLEcCsd|dur|�d�n6|dkr(|�d�n"|dkr<|�d�n|�d�dS|�|j�|�d�dS)N�"221 3000237 <45223423@example.com>r�221 0 <45223423@example.com>r
�"221 3000234 <45223423@example.com>rr-)r�sample_headrrrr
�handle_HEAD�s
zNNTPv1Handler.handle_HEADcCsd|dur|�d�n6|dkr(|�d�n"|dkr<|�d�n|�d�dS|�|j�|�d�dS)N�"222 3000237 <45223423@example.com>r�222 0 <45223423@example.com>r
�"222 3000234 <45223423@example.com>rr-)r�sample_bodyrrrr
�handle_BODY�s
zNNTPv1Handler.handle_BODYcCsj|jr|�d�nT|dkr>|jr,|�d�qf|�d�d|_n(|dkrX|�d�d|_ntd�|���dS)	Nz502 Already Logged Inr~z 482 User Credential Already Sentz381 Password RequiredT�passz281 Login SuccessfulzUnknown cred type {})r�rr�r�r�)rZ	cred_typer�rrr
�handle_AUTHINFO�s

zNNTPv1Handler.handle_AUTHINFO)N)NN)N)N)N)rr	r
rr`r�r�r�r�rr�r�rrrrrrrrrrr$r)r3r8r.r/r4r9r;rrrr
r��s8
&	


6 




r�c@s&eZdZdd�Zdd�Zddd�ZdS)	�
NNTPv2HandlercCs0d}|js|�|�d��n|�|�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 USERr9)r�rr��r�fmtrrr
�handle_CAPABILITIESsz!NNTPv2Handler.handle_CAPABILITIEScCstd��dS)Nz3MODE READER sent despite READER has been advertised)r�)r�_rrr
�handle_MODE szNNTPv2Handler.handle_MODENcCs
|�|�Sr)rrrrr
�handle_OVER#szNNTPv2Handler.handle_OVER)N)rr	r
r?rArBrrrr
r<sr<cseZdZ�fdd�Z�ZS)�CapsAfterLoginNNTPv2Handlercs |js|�d�n
t���dS)Nz480 You must log in.)r�rr�r?r7r�rr
r?*sz/CapsAfterLoginNNTPv2Handler.handle_CAPABILITIES)rr	r
r?r�rrr�r
rC'srCc@s$eZdZdd�Zdd�Zdd�ZdS)�ModeSwitchingNNTPv2HandlercCs
d|_dS�NF)�	_switchedr7rrr
r�4sz#ModeSwitchingNNTPv2Handler.__init__cCs0d}|jr|�|�d��n|�|�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
            .r9zMODE-)rFrr�r=rrr
r?7s
z.ModeSwitchingNNTPv2Handler.handle_CAPABILITIEScCsd|_|�d�dS)NTz200 Posting allowed)rFr)rZwhatrrr
rAGsz&ModeSwitchingNNTPv2Handler.handle_MODEN)rr	r
r�r?rArrrr
rD1srDcseZdZ�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)r�r�r7r�rr
r�OszNNTPv1v2TestsMixin.setUpcCs|�|jj|jj�dSr)rrrr�r7rrr
rRszNNTPv1v2TestsMixin.test_welcomecCs<|jdkr|�d|jj�|j�dd�|�d|jj�dS)Nrz�AUTHINFO�testuser�testpw)r{r;r�_capsr�r4r7rrr
�
test_authinfoUs
z NNTPv1v2TestsMixin.test_authinfocCs:|j��\}}|�|d�|�|t�dddddd��dS)Nr���	�r��7)rr0rr/rKrrr
rL]szNNTPv1v2TestsMixin.test_datecCs6|�|jj�|j��}|�|d�|�|jj�dSr)r�r��closedrr�rr)rrrrr
�	test_quitbs
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r
rhszNNTPv1v2TestsMixin.test_helpcCs~|j��\}}|�t|�d�|d}|�|tdddd��|j�d�\}}|�t|�d�|d	}|�|td
ddd��dS)
N�rb�comp.lang.python.announceZ
0000001153Z
0000000993�mrrzrz!gmane.comp.python.distutils.develZ
0000014104Z
0000000001)rrrr r)rrr#�grrr
r$rs ����zNNTPv1v2TestsMixin.test_listcCs�|j�d�\}}}|�|d�|�|d�|�|d�|j�d�\}}}|�|d�|�|d�|�|d�|�tj��}|j�d�Wd�n1s�0Y|�|jjd�|�tj��}|j��Wd�n1s�0Y|�|jjd�dS)	N��-rrr
rz<non.existent.id>rr	)r�statrr'r(rqr*r+)rrr[r(r,rrr
�	test_stat�s*(zNNTPv1v2TestsMixin.test_statcCs8|j��\}}}|�|d�|�|d�|�|d�dS)Nr��-z<668929@example.org>)r�nextr�rrr[r(rrr
�	test_next�szNNTPv1v2TestsMixin.test_nextcCs8|j��\}}}|�|d�|�|d�|�|d�dS)NrrXr)rrHrr]rrr
�	test_last�szNNTPv1v2TestsMixin.test_lastcCs4|j�d�}|�|d�|j�d�}|�|d�dS)Nr�The Python computer language.�comp.lang.pythonxr9)rr:r)rr6rrr
r=�sz#NNTPv1v2TestsMixin.test_descriptioncCsn|j�d�\}}|�|d�|�|ddi�|j�d�\}}|�|ddd��|j�d�\}}|�|i�dS)Nrz-215 Descriptions in form "group description".r`rz4Announcements about the Python language. (Moderated))rrUra)rr>rr"rrr
r@�s��z$NNTPv1v2TestsMixin.test_descriptionscCs�|j�d�\}}}}}|�|�d�|�|�|d�|�|d�|�|d�|�|d�|�tj��}|j�d�Wd�n1s�0Y|j}|�|j	�d�|j	�dS)Nr�rBi�i�i�zcomp.lang.python.develz411 No such group)
rr!rrrr'r(rqr*r+)rrrFrGrHr!r,�excrrr
rI�s*�zNNTPv1v2TestsMixin.test_groupcCs�t�dddddd�}|j�d|�\}}d�|j�}|�||�|�|d	d
g�t�dddddd�}|j�d|�\}}|�|d�|�|g�dS)
NrMrN�
���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>r�z)230 An empty list of newsarticles follows)r/r�newnewsr�r{r)rr2rZidsZexpectedrrr
�test_newnews�s���zNNTPv1v2TestsMixin.test_newnewscCsZ|�t|�d�|�|d�d�d�|�|dd�|�|dd�|�|d	d
�dS)Nrfr^r�u-- Signed by André.r�rk���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)Nrfrs&From: "Demo User" <nobody@example.net>�s7Message-ID: <i.am.an.article.you.will.want@example.com>)rr rlrrr
�_check_article_head�sz&NNTPv1v2TestsMixin._check_article_headcCsH|�t|�d�|�|dd��|�|dd��|�|dd�dS)NrNrfrjrk)rr rormrlrrr
�_check_article_data�sz&NNTPv1v2TestsMixin._check_article_datacCs$|j��\}}|�|d�|\}}}|�|d�|�|d�|�|�|j�d�\}}|�|d�|\}}}|�|d�|�|d�|�|�|j�d�\}}|�|d�|\}}}|�|d�|�|d�|�|�|�tj��}|j�d�Wd�n1�s0Y|�|jjd	�dS)
Nr*r[rrXr,r+r�<non-existent@example.com>r)	rrhrrpr'r(rqr*r+�rr�infor[r(rr,rrr
�test_article�s*





,zNNTPv1v2TestsMixin.test_articlecCs�t��}|jj|d�\}}|�|d�|\}}}|�|d�|�|d�|�|g�|��}|�|�d�t|��|�|�	d�t|��dS)N�r�r*r[r�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�rrhr�getvaluerr�asciir��rr�rrsr[r(rr�rrr
�test_article_file�s$
����z$NNTPv1v2TestsMixin.test_article_filecCs$|j��\}}|�|d�|\}}}|�|d�|�|d�|�|�|j�d�\}}|�|d�|\}}}|�|d�|�|d�|�|�|j�d�\}}|�|d�|\}}}|�|d�|�|d�|�|�|�tj��}|j�d�Wd�n1�s0Y|�|jjd	�dS)
Nr0r[rrXr2r1rrqr)	rrprror'r(rqr*r+rrrrr
�	test_heads*





,zNNTPv1v2TestsMixin.test_headcCs�t��}|jj|d�\}}|�|d�|\}}}|�|d�|�|d�|�|g�|��}|�|�d�t|��|�	|�
d�t|��dS)Nrur0r[rrvrw)r�r�rrprrxrrryr�r�rzrrr
�test_head_file-s$
����z!NNTPv1v2TestsMixin.test_head_filecCs$|j��\}}|�|d�|\}}}|�|d�|�|d�|�|�|j�d�\}}|�|d�|\}}}|�|d�|�|d�|�|�|j�d�\}}|�|d�|\}}}|�|d�|�|d�|�|�|�tj��}|j�d�Wd�n1�s0Y|�|jjd	�dS)
Nr5r[rrXr7r6rrqr)	rrrrrmr'r(rqr*r+rrrrr
�	test_bodyAs*





,zNNTPv1v2TestsMixin.test_bodycCs�t��}|jj|d�\}}|�|d�|\}}}|�|d�|�|d�|�|g�|��}|�|�d�t|��|�	|�
d�t|��dS)Nrur5r[rrvrw)r�r�rrrrrxr�rryrr�rzrrr
�test_body_file\s$
����z!NNTPv1v2TestsMixin.test_body_filecCs�|�|�d�|�|�t|�d�|d\}}|�|d�|�|ddddd	d
ddd
��|d\}}|�|dd�|d\}}|�|dd�dS)Nz224 rnr�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.io gmane.comp.python.authors:57)rNrRr0rQrOrMrP�xrefrbr�rzrR�0Re: Message d'erreur incompréhensible (par moi))rrrr )rr�	overviewsr[r_rrr
�check_over_xover_respps(�

�z(NNTPv1v2TestsMixin.check_over_xover_respcCs"|j�dd�\}}|�||�dS)Nr��;)rrXr��rrr�rrr
r\�szNNTPv1v2TestsMixin.test_xovercCs |j�d�\}}|�||�dS)N)r�r�)rr_r�r�rrr
ra�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)Nr]r^rer�s-- Signed by André.
ri�
rjs ..Here is a dot-starting line.
rs(From: "Demo User" <nobody@example.net>
)r�r#rr rlrrr
�_check_posted_body�sz%NNTPv1v2TestsMixin._check_posted_bodycGsd|j}|||�f}d|j_||�}|��|j�dd�}|||�f}d|j_||�}|��|S)Nr��
)�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|g|�Rdti�}|�||�|j|g|�Rdti�}|�||�|j|g|�Rdtji�}|�||�dd�}|j|g|�Rd|i�}|�||�dd�}|j|g|�Rd|i�}|�||�dS)Nr�cSst|jdd��S)NT��keepends��iterr��r�rrr
�	iterlines�sz6NNTPv1v2TestsMixin.check_post_ihave.<locals>.iterlinescSst|jdd��S)NFr�r�r�rrr
r��s)r�rgr�	bytearrayr�r�)rr�Zsuccess_respr�rr�rrr
�check_post_ihave�sz#NNTPv1v2TestsMixin.check_post_ihavecCsf|�|jjd�d|j_|�tj��}|j�|j�Wd�n1sH0Y|�	|j
jd�dS)Nr!Fr )r�rr�r�r�r'r(rqr�rr*r+�rr,rrr
�	test_post�s,
�zNNTPv1v2TestsMixin.test_postcCsb|�|jjdd�|�tj�� }|j�d|j�Wd�n1sD0Y|�|jj	d�dS)Nr'r%z<another.message.id>r&)
r�rZihaver'r(rqr�rr*r+r�rrr
�
test_ihave�s�.
�zNNTPv1v2TestsMixin.test_ihavecCs.t�dddddd�}|�tj|jjd|�dS)NrMrbrNrr)r/r'r(�
NNTPDataErrorrrg)rr2rrr
�test_too_long_lines�s
�z&NNTPv1v2TestsMixin.test_too_long_lines)%rr	r
r�rrLrLrSrr$rZr^r_r=r@rIrhrmrorprtr{r|r}r~rr�r\rar�r�r�r�r�r�r�r�rrr�r
rGMsD

�rGc@seZdZdZeZdd�ZdS)�NNTPv1TestsrbcCs:|j��}|�|i�|�|jjd�|�|jjd�dS)Nrb�rr|rr{Znntp_implementation�rrxrrr
�	test_caps�s
zNNTPv1Tests.test_capsN)rr	r
r{r�r�r�rrrr
r��sr�c@seZdZdZeZdd�ZdS)�NNTPv2TestsrzcCsZ|j��}|�|ddgddgdgggd�gggd��|�|jjd�|�|jjd	�dS)
N�2�3ZINNz2.5.1ZUSER)rzACTIVE.TIMESzDISTRIB.PATSZHEADERSrrv)�VERSIONZIMPLEMENTATIONrHZHDRruZOVERZPOST�READERrnz	INN 2.5.1r�r�rrr
r��s
�zNNTPv2Tests.test_capsN)rr	r
r{r<r�r�rrrr
r��sr�c@seZdZdZeZdd�ZdS)�CapsAfterLoginNNTPv2TestsrzcCs2|�|jji�|j�dd�|�d|jj�dS)NrIrJr�)rrrKr�r;r7rrr
�test_caps_only_after_login
sz4CapsAfterLoginNNTPv2Tests.test_caps_only_after_loginN)rr	r
r{rCr�r�rrrr
r�sr�c@seZdZdZeZdd�ZdS)�SendReaderNNTPv2TestsrzcCs|�d|jj�dS)Nr�)r;rrKr7rrr
�(test_we_are_in_reader_mode_after_connectsz>SendReaderNNTPv2Tests.test_we_are_in_reader_mode_after_connectN)rr	r
r{rDr�r�rrrr
r�sr�c@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�r7rr
�givessz+MiscTests.test_decode_header.<locals>.givesr9za plain headerz with extra  spaces z%=?ISO-8859-15?Q?D=E9buter_en_Python?=uDébuter en Pythonz=?utf-8?q?Re=3A_=5Bsqlite=5D_probl=C3=A8me_avec_ORDER_BY_sur_des_cha?= =?utf-8?q?=C3=AEnes_de_caract=C3=A8res_accentu=C3=A9es?=uPRe: [sqlite] problème avec ORDER BY sur des chaînes de caractères accentuéesz,Re: =?UTF-8?B?cHJvYmzDqG1lIGRlIG1hdHJpY2U=?=uRe: problème de matricer�r�rr�rr7r
�test_decode_headers



���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:rMrP)rRrNr0rQrOrMrP)r�r�r�r�r��Bytes:�Lines:)zsubject:zFROM:zDaTe:zmessage-ID:r�zBYTES:r�)	r�r�r�r�r�rMrP�	Xref:fullzDistribution:full)	rRrNr0rQrOrMrPr�Zdistribution)	r�r�r�r�r�r�r�z	Xref:FULLzDistribution:FULL)r�r�r�r�r�r�r�r��rRrNr0rQrOrMrPr�)rr(Z_parse_overview_fmtrlr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:3000363rXzI am just a test articlez "Demo User" <nobody@example.com>z6 Oct 1998 04:38:40 -0500rz<45454@example.net>Z1234Z17z"news.example.com misc.test:3000363r�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		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: 	rO� r9)r(Z_DEFAULT_OVERVIEW_FMTZ_parse_overviewr)rr>rZoverviewr[�fieldsrrr
�test_parse_overviewVs6�
�
�
�
zMiscTests.test_parse_overviewc	sh�fdd�}|dddddddd	�|d
ddddddd	�|dddddddd	�|d
ddddddd	�dS)Ncs��t�||�tj|��dSr)rr(Z_parse_datetimer/)r�r��cr7rr
r��s�z,MiscTests.test_parse_datetime.<locals>.givesZ19990623135624��rT�rc�8��19990623�135624�990623Z090623i�rr�rr7r
�test_parse_datetime�s
zMiscTests.test_parse_datetimec	s��fdd�}|ddddddd	d
�|dddddddd
�|d
ddddddd��fdd�}|dddd	d�|ddddd�|d
dddd�dS)Nc	sFt�||||||�}��t�|�||f���t�|d�||f�dSrE�r/rr(�_unparse_datetime�	�y�M�d�hrV�srrr2r7rr
r��s��z.MiscTests.test_unparse_datetime.<locals>.givesr�rTr�rcr�r�r�r���Z20000623rMrArbrzrnZ20100605�010203cs@t�|||�}��t�|�||f���t�|d�||f�dSrE�r/r0rr(r��r�r�r�rrr2r7rr
r��s���000000rr�rr7r
�test_unparse_datetime�szMiscTests.test_unparse_datetimec	s��fdd�}|ddddddd	d
�|dddddddd
�|d
ddddddd��fdd�}|dddd	d�|ddddd�|d
dddd�dS)Nc	s0t�||||||�}��t�|d�||f�dSr�r�r�r7rr
r��s�z5MiscTests.test_unparse_datetime_legacy.<locals>.givesr�rTr�rcr�r�r�r�r�Z000623rMrArbrzrnZ100605r�cs*t�|||�}��t�|d�||f�dSr�r�r�r7rr
r��s�r�rr�rr7r
�test_unparse_datetime_legacy�sz&MiscTests.test_unparse_datetime_legacyr�cCs|�ttd��dS)Nr�)rr�r(r7rrr
�test_ssl_support�szMiscTests.test_ssl_supportN)
rr	r
r�r�r�r�r�r�r��
skipUnless�sslr�rrrr
r�s(.
r�c@seZdZdd�ZdS)�PublicAPITestscCsD|�ttd��gd�}tdur*|�d�|�ttj�t|��dS)N�__all__)rr��NNTPReplyErrorrqr)�NNTPProtocolErrorr�r�r�)rr�r(r�r�r�setr�)rZ
target_apirrr
�test_module_all_attribute�s

z(PublicAPITests.test_module_all_attributeN)rr	r
r�rrrr
r��sr�c@sDeZdZejZddd�Zdd�Zdd�Zdd	�Z	d
d�Z
dd
�ZdS)�MockSocketTestsNc	s�G�fdd�d�}G���fdd�d��d�g�td|��L|�||�� |jd||d�Wd�n1sn0YWd�n1s�0Y|����D]}|�|j�q�dS)	NcseZdZ�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
r�rr�rr
�mock_socket_module�sr�cs&eZdZ�fdd�Z��fdd�ZdS)zFMockSocketTests.check_constructor_error_conditions.<locals>.MockSocketcsd�dSr�rr7)�
socket_closedrr
r��szLMockSocketTests.check_constructor_error_conditions.<locals>.MockSocket.closecs ��}t|�\}}��|�|Sr)r�r�)�socket�moder�r@r�)�filesr�rr
�makefile�s
zOMockSocketTests.check_constructor_error_conditions.<locals>.MockSocket.makefileN)rr	r
r�r�r)r�r�r�rr
r��sr�Fznntplib.socket�dummy)r~r)rZassertRaisesRegex�
nntp_classrrR)rr�Zexpected_error_typeZexpected_error_msgr�rr�r�r)r�r�r�r�r
�"check_constructor_error_conditions�s
�L
z2MockSocketTests.check_constructor_error_conditionscCs&Gdd�dt�}|�|tj|j�dS)Nc@seZdZdZdS)z1MockSocketTests.test_bad_welcome.<locals>.HandlerzBad WelcomeN�rr	r
rrrrr
�Handler�sr�)r�r�r(r�r�rr�rrr
�test_bad_welcome�s
�z MockSocketTests.test_bad_welcomecCs&Gdd�dt�}|�|tj|j�dS)Nc@seZdZdZdS)zEMockSocketTests.test_service_temporarily_unavailable.<locals>.Handlerz#400 Service temporarily unavailableNr�rrrr
r��sr�)r�r�r(rqrr�rrr
�$test_service_temporarily_unavailable�s
�z4MockSocketTests.test_service_temporarily_unavailablecCs&Gdd�dt�}|�|tj|j�dS)Nc@seZdZdZdS)zEMockSocketTests.test_service_permanently_unavailable.<locals>.Handlerz#502 Service permanently unavailableNr�rrrr
r��sr�)r�r�r(r)rr�rrr
�$test_service_permanently_unavailable�s
�z4MockSocketTests.test_service_permanently_unavailablecs,G�fdd�dt�}d�|�|tj��dS)NcseZdZ�fdd�ZdS)z6MockSocketTests.test_bad_capabilities.<locals>.Handlercs|���dSrrr7�Zcapabilities_responserr
r?szJMockSocketTests.test_bad_capabilities.<locals>.Handler.handle_CAPABILITIESN)rr	r
r?rr�rr
r�sr�z201 bad capability)r�r�r(r�r�rr�r
�test_bad_capabilitiess
�z%MockSocketTests.test_bad_capabilitiescs8d}d}G�fdd�dt�}d�|�|tj�||�dS)Nzt@e.comZpythoncseZdZ�fdd�ZdS)z3MockSocketTests.test_login_aborted.<locals>.Handlercs|���dSrr)rr��Zauthinfo_responserr
r;szCMockSocketTests.test_login_aborted.<locals>.Handler.handle_AUTHINFON)rr	r
r;rr�rr
r�sr�z503 Mechanism not recognized)r�r�r(r))rr�rr�rr�r
�test_login_aborteds�z"MockSocketTests.test_login_aborted)NN)rr	r
r(rr�r�r�r�r�r�r�rrrr
r��s�
	r�c@seZdZdd�ZdS)�bypass_contextcKs|Srr)�sockr�rrr
�wrap_socketszbypass_context.wrap_socketN)rr	r
r�rrrr
r�sr�c@seZdZedd��ZdS)�MockSslTestscOstj|dti|��S)NZssl_context)r(r�r�)r��kwrrr
r�szMockSslTests.nntp_classN)rr	r
�staticmethodr�rrrr
r�sr�c@s0eZdZdd�Zdd�Ze�ed�dd��ZdS)	�LocalServerTestscCstt��}t�|�}|��tj|j|fd�|_|j��|�	|jj
�ttj|dd��
�|_|�	|jjddd�dS)N)�targetr�F)r�)r�rZ	bind_port�listen�	threading�Thread�
run_serverZ
backgroundr`Z
addCleanupr�rZHOST�	__enter__�nntp�__exit__)rr��portrrr
r�%s
�
zLocalServerTests.setUpcCs|�|��\}}Wd�n1s&0Yt����}|�|�|�|�d��}|�d�|��}|dkrz|�d�q^|dkr�|��|�d�t�	�}|�
t�|j|dd�}|�|�|�|�d��}q^|d	kr�|�d
�q�q^t
d�|���q^Wd�n1�s0YdS)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})�accept�
contextlib�	ExitStack�
enter_contextr��sendallr�r�r�Z
SSLContextZload_cert_chain�certfiler�r�r�)rr��clientr@�cleanup�readerr��contextrrr
r1s2*


�

�

zLocalServerTests.run_serverr�cCs`|jj}|jj}|j��|�||jj�|�||jj�|�|jjtj�|�t	|jj�dSr)
rr�r�ZstarttlsZassertNotEqualr1r�Z	SSLSocketr'r�)rr�r�rrr
r�Qs
zLocalServerTests.test_starttlsN)	rr	r
r�rr�r�r�r�rrrr
r�$s 
r��__main__)=r�r�r/r�r�r�rr(Zos.path�osr�r�r�rZtest.supportrrrZ
unittest.mockrr��ImportError�pathr��dirname�__file__rrr�rr�r�r�ZSSLEOFErrorZTestCaser�r�r�r�r�r�r�r�r�r�r<rCrDrGr�r�r�r�r�r�r�r�r�r�r�mainrrrr
�<module>s~


 
,G

�#N
<


Sindbad File Manager Version 1.0, Coded By Sindbad EG ~ The Terrorists