
    5\h                        d dl Z d dlZd dlZd dlZd dlZd dlZd dlZd dlZd dl	Z	d dl
Z
d dlmZ d dlmZmZ  ej        d          Zd dlmZmZ d dlmZ 	 d dlZn# e$ r dZY nw xY wej                            ej                            e          dd          Zeej        Zn G d	 d
e          Z G d d          Ze                                  e!fZ"ee"ej#        fz  Z" G d deej$                  Z% ej&        ed           G d de%                      Z' G d de j(                  Z)d Z* G d dej                  Z+ G d d          Z, G d de,          Z- G d d          Z. G d de.          Z/ G d d e/          Z0 G d! d"e/          Z1 G d# d$          Z2 G d% d&e2e,ej$                  Z3 G d' d(e2e,ej$                  Z4 G d) d*e,ej$                  Z5 G d+ d,e-ej$                  Z6 G d- d.ej$                  Z7 G d/ d0ej$                  Z8 G d1 d2ej$                  Z9 G d3 d4          Z: ej&        ed           G d5 d6e9                      Z; G d7 d8ej$                  Z<e=d9k    r ej>                     dS dS ):    N)support)socket_helperwarnings_helpernntplib)NNTP	GroupInfo)patchcertdatazkeycert3.pemc                       e Zd Z	 dZdS )SSLErrorzThis will never be raised.N)__name__
__module____qualname__reason     ;/opt/python-3.11.14/usr/lib/python3.11/test/test_nntplib.pyr   r      s        D-r   r   c                      e Zd ZdZd Zd Zd Zd Zd Zd Z	d Z
d	 Zd
 Zd Zd Zd Z ej        dd          d             Zd ZddZ ej        dd          d             Zd Zd Zd Zed             Zd Zd ZdS )NetworkedNNTPTestsMixinNc                     | j                                         }|                     t          t	          |                     d S N)server
getwelcomeassertEqualstrtype)selfwelcomes     r   test_welcomez$NetworkedNNTPTestsMixin.test_welcome*   s7    +((**d7mm,,,,,r   c                     | j                                         \  }}|                     |                    d          |           |D ]*}|                     t
          t          |                     +d S )Nz100 )r   help
assertTrue
startswithr   r   r   )r   resplineslines       r   	test_helpz!NetworkedNNTPTestsMixin.test_help.   sq    k&&((e//666 	. 	.DS$t**----	. 	.r   c                 *   | j                                         \  }}t          |          dk    rc|                     t          t          |d                              |                     t          t          |d         j                             d S d S Nr   )r   listlenr   r   r   r   groupr   r$   groupss      r   	test_listz!NetworkedNNTPTestsMixin.test_list4   sy    {''))fv;;??YVAY888S$vay"7"788888 ?r   c                 6   | j                             | j                  \  }}t          |          dk    rc|                     t
          t          |d                              |                     t          t          |d         j                             d S d S r)   )	r   r*   	GROUP_PATr+   r   r   r   r   r,   r-   s      r   test_list_activez(NetworkedNNTPTestsMixin.test_list_active:   s}    {''77fv;;??YVAY888S$vay"7"788888 ?r   c                    |                      t          j                  5 }| j                            d           d d d            n# 1 swxY w Y   |j        j        }|                     |                    d          |           d S )NXYZZYz500 )	assertRaisesr   NNTPPermanentErrorr   	_shortcmd	exceptionresponser"   r#   )r   cmr$   s      r   test_unknown_commandz,NetworkedNNTPTestsMixin.test_unknown_command@   s    w9:: 	+bK!!'***	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+|$//66666s   AAAc                 `   t           j                                        t          j        d          z
  }| j                            |          \  }}t          |          dk    rI|                     |d         t                     |                     |d         j	        t                     d S d S )N   )daysr   )datetimedatetoday	timedeltar   	newgroupsr+   assertIsInstancer   r,   r   )r   dtr$   r.   s       r   test_newgroupsz&NetworkedNNTPTestsMixin.test_newgroupsF   s     ]  ""X%7Q%?%?%??{,,R00fv;;??!!&)Y777!!&)/377777 ?r   c                 P     fd} j                              j                  } ||                                 j        |            j                              j                  } ||            j                             d          }                     |d           d S )Nc                 t                         | t                                         j        |            d S r   )rD   r   assertNotIn
GROUP_NAME)descr   s    r   _check_descz=NetworkedNNTPTestsMixin.test_description.<locals>._check_descP   s7    !!$,,,T_d33333r   zzk.brrtt.baz )r   descriptionrJ   assertInDESCr1   r   )r   rL   rK   s   `  r   test_descriptionz(NetworkedNNTPTestsMixin.test_descriptionO   s    	4 	4 	4 	4 	4 {&&t77Ddi&&&{&&t~66D{&&~66r"""""r   c                 |   | j                             | j                  \  }}|                     |                    d          p|                    d          |           |                     |t                     || j                 }|                     || j         	                    | j                             d S )Nz215 z282 )
r   descriptionsr1   r"   r#   rD   dictrJ   r   rN   )r   r$   descsrK   s       r   test_descriptionsz)NetworkedNNTPTestsMixin.test_descriptions_   s    k..t~>>eOOF##>tv'>'>	F 	F 	FeT***T_%t{66tGGHHHHHr   c                    | j                             | j                  }|                     dt	          |                     |\  }}}}}|                     || j                   |                     |t                     |                     |t                     |                     |t                     |                     ||           |                     |	                    d          |           d S )N   211 )
r   r,   rJ   r   r+   rD   intassertLessEqualr"   r#   )r   resultr$   countfirstlastr,   s          r   
test_groupz"NetworkedNNTPTestsMixin.test_grouph   s    ""4?33CKK(((*0'eUD%000eS)))eS)))dC(((UD)))//66666r   c                     | j                                         \  }}|                     |t          j                   |                     |j        d           |                     |j        d           d S )Ni  i  )r   r@   rD   r?   assertGreaterEqualyearr[   r   r$   r@   s      r   	test_datez!NetworkedNNTPTestsMixin.test_dates   sh    [%%''
ddH$5666	4000TY-----r   c                    |                      |t                     |                     |                                h d           |                                D ],}|                      |t
          t          d           f           -d S )N>   r@   fromsubject
references:bytes:lines
message-id)rD   rT   rb   keysvaluesr   r   )r   art_dictvs      r   _check_art_dictz'NetworkedNNTPTestsMixin._check_art_dictz   s    h---/ / /	 	 	 "" 	8 	8A!!!c4::%67777	8 	8r   c                    | j                             | j                  \  }}}}}| j                             |dz
  |          \  }}t	          |          dk    r|                     d           |d         \  }}|                     ||dz
             |                     ||           |                     |           d S )NrX   r   zno articles retrieved)	r   r,   rJ   xoverr+   skipTestrb   r[   rq   )	r   r$   r]   r^   r_   namer%   art_numro   s	            r   
test_xoverz"NetworkedNNTPTestsMixin.test_xover   s    )-):):4?)K)K&eUD$k''q$77eu::??MM1222!!H222Wd+++X&&&&&r   TzHtemporarily skipped until a permanent solution is found for issue #28971c                    | j                             | j                  \  }}}}}|dz
  }| j                             |d f          \  }}|d         \  }}	|                     |	           | j                             ||f          \  }}|d         \  }}	|                     ||           |                     ||           |                     |	           d S )N
   r   )r   r,   rJ   overrq   rb   r[   )
r   r$   r]   r^   r_   ru   startr%   rv   ro   s
             r   	test_overz!NetworkedNNTPTestsMixin.test_over   s     *.):):4?)K)K&eUD$r	k&&t}55e!!HX&&&k&&t}55e!"I///Wd+++X&&&&&r   c                     | j                             | j                  \  }}}}}| j                             d|          \  }}|D ]0}|                     t
          t          |d                              1d S )Nrh      )r   r,   rJ   xhdrr   r   r   )r   r$   r]   r^   r_   ru   r%   r&   s           r   	test_xhdrz!NetworkedNNTPTestsMixin.test_xhdr   s{    )-):):4?)K)K&eUD$k&&y$77e 	1 	1DS$tAw--0000	1 	1r   c                    |                      |t          j                   ||                     |j        |           |j        D ]}|                      |t                     |                     |j        d         d           d S )Nrz   )   .s   .
   .
)rD   r   ArticleInfor   numberr%   bytesrI   )r   r$   articlerv   r&   s        r   check_article_respz*NetworkedNNTPTestsMixin.check_article_resp   s    gw':;;;W^W555M 	/ 	/D!!$....r*,DEEEEEr   zFIXME: see bpo-32128c                    | j                             | j                  \  }}}}}|||dz
  fD ]Y}	 | j                             |          \  }}n7# t          j        $ r%}|j                            d          s Y d }~Pd }~ww xY w n|                     d           | 	                    |                    d          |           | 
                    |||           | j                             |          \  }}	| 	                    |                    d          |           | 
                    ||	|           | j                             |          \  }}
| 	                    |                    d          |           | 
                    ||
|           d fd|j        D             }fd	|
j        D             }|                     ||d
gz   |	j        z              d S )Nr   z423 z(could not find a suitable article numberz221 z222 z220 c                 ,    |                      d          S )Ns   X-Antivirus)r#   )r&   s    r   <lambda>z@NetworkedNNTPTestsMixin.test_article_head_body.<locals>.<lambda>   s     ? ? r   c                 *    g | ]} |          |S r   r   .0r&   denylists     r   
<listcomp>zBNetworkedNNTPTestsMixin.test_article_head_body.<locals>.<listcomp>   s5     6 6 6&.htnn6t 6 6 6r   c                 *    g | ]} |          |S r   r   r   s     r   r   zBNetworkedNNTPTestsMixin.test_article_head_body.<locals>.<listcomp>   s5     1 1 14!)$1$ 1 1 1r   r   )r   r,   rJ   headr   NNTPTemporaryErrorr9   r#   rt   r"   r   bodyr   r%   r   )r   r$   r]   r^   r_   ru   rv   r   er   r   filtered_head_linesfiltered_linesr   s                @r   test_article_head_bodyz.NetworkedNNTPTestsMixin.test_article_head_body   s#   )-):):4?)K)K&eUD$eTAX. 
	F 
	FG![--g66
dd-   z,,V44 	
 EMMDEEE//666dG444[%%g..
d//666dG444++G44g//666gw777??6 6 6 6
 6 6 61 1 1 17= 1 1 1)<u)Dtz)QRRRRRs   ABA??Bc                       fd}                       j        j        d            | j                                                    j                                        \  }} ||           d S )Nc                     | d         }                     |t          t          f                               d|           d S )NLISTOVERVIEW.FMT)rD   r*   tuplerO   )caps	caps_listr   s     r   _check_capsz>NetworkedNNTPTestsMixin.test_capabilities.<locals>._check_caps   s@    VI!!)dE];;;MM.)44444r      )rb   r   nntp_versiongetcapabilitiescapabilities)r   r   r$   r   s   `   r   test_capabilitiesz)NetworkedNNTPTestsMixin.test_capabilities   s    	5 	5 	5 	5 	5 	 8!<<<DK//11222[--//
dDr   c                 j    d}d}|                      t          j        | j        j        ||d           d S )NnotarealusernotarealpasswordF)userpasswordusenetrc)r5   r   	NNTPErrorr   login)r   baduserbadpws      r   test_zloginz#NetworkedNNTPTestsMixin.test_zlogin   sM     !"'+T[->& 	 	H 	H 	H 	H 	Hr   c                 ~    t          |           }	 | j                                         d |_        d S # d |_        w xY wr   )r   r   quit)r   clss     r   test_zzquitz#NetworkedNNTPTestsMixin.test_zzquit   sD    4jj	KCJJJCJs   3 	<c                     d }t          |           D ]R}|                    d          st          | |          }t          |          s8t	          | | ||                     Sd S )Nc                 F     t          j                    fd            }|S )Nc                     t          j        | j                  5   |            d d d            d S # 1 swxY w Y   d S r   )r   transient_internet	NNTP_HOST)r   meths    r   wrappedzHNetworkedNNTPTestsMixin.wrap_methods.<locals>.wrap_meth.<locals>.wrapped   s    "5dnEE  DJJJ                 s   488)	functoolswraps)r   r   s   ` r   	wrap_methz7NetworkedNNTPTestsMixin.wrap_methods.<locals>.wrap_meth   s8    _T""    #" Nr   test_)dirr#   getattrcallablesetattr)r   r   ru   r   s       r   wrap_methodsz$NetworkedNNTPTestsMixin.wrap_methods   s    	 	 	 HH 	0 	0D??7++ 3%%DD>>  Cyy////	0 	0r   c                     |                      t                    5  |                     | j        dd           d d d            d S # 1 swxY w Y   d S )Nr   Ftimeoutr   )r5   
ValueError
NNTP_CLASSr   r   s    r   test_timeoutz$NetworkedNNTPTestsMixin.test_timeout  s    z** 	G 	GOODNAOFFF	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	Gs   AA
A
c                    fd}t          t          j        d          }| j        
| j        |d<   	  | j        | j        fi |5  |                      |                       |                                                                d d d            n# 1 swxY w Y   |                      |                        | j        | j        fi |5  	                                 d d d            n# 1 swxY w Y   |                      |                       d S # t          $ r?}t          j        d|j                  rt          j        d| d| j                   d }~ww xY w)Nc                      t           d          sdS 	                                   n# t          t          f$ r Y dS w xY wdS )NfileFT)hasattrr!   OSErrorEOFError)r   s   r   is_connectedzANetworkedNNTPTestsMixin.test_with_statement.<locals>.is_connected  sZ    66** uX&   uu4s   * ??Fr   ssl_context(?i)KEY.TOO.SMALLzGot  connecting to )rT   r   INTERNET_TIMEOUTr   r   r   r"   r!   assertFalser   r   researchr   unittestSkipTest)r   r   kwargsssl_errr   s       @r   test_with_statementz+NetworkedNNTPTestsMixin.test_with_statement  s6   	 	 	 	 	 ,
 
 
 '$($4F=!	$T_T^>>v>>F / ////.../ / / / / / / / / / / / / / / \\^^,,,$T_T^>>v>>F                \\^^,,,,, 	 	 	y-w~>> B' )Aw )A )A.2n)A )A B B B	s`   D" 	ABD" BD" !B"5D" C8,D" 8C<<D" ?C<  D" "
E+,:E&&E+r   )r   r   r   r   r   r'   r/   r2   r;   rF   rQ   rV   r`   re   rq   rw   r   skipIfr}   r   r   r   r   r   r   classmethodr   r   r   r   r   r   r   r   &   s       K- - -. . .9 9 99 9 97 7 78 8 8# # # I I I	7 	7 	7. . .	8 	8 	8	' 	' 	' X_T 8 9 9' '9 9'"1 1 1F F F F X_T122S S 32S<  H H H   0 0 [0&G G G! ! ! ! !r   r   c                   N    e Zd ZdZdZdZdZeZe	d             Z
e	d             ZdS )NetworkedNNTPTestsznews.trigofacile.comfr.comp.lang.pythonzfr.comp.lang.*Pythonc           	      2   t          j        d           t          t           j        d          }| j        
| j        |d<   t          j        | j                  5  	  | j        | j        fi || _	        n# t          $ rU}t          j        d|j                  r!t          j        |  d| d| j                  t!          | j                    d }~wt"          $ r t          j        |  d| j                  w xY w	 d d d            d S # 1 swxY w Y   d S )	NnetworkFr   r   r   z got r   z  got EOF error on connecting to )r   requiresrT   r   r   r   r   r   r   r   r   r   r   r   r   r   print
EOF_ERRORS)r   r   r   s      r   
setUpClasszNetworkedNNTPTests.setUpClassA  s   ###,
 
 
 ?&$'OF=!-cm<< 	A 	AA+S^CMDDVDD

   917>BB E"+s -D -D -D -D25--D -D E E Ecm$$$ A A A'3 )@ )@.1m)@ )@ A A AA 	A 	A 	A 	A 	A 	A 	A 	A 	A 	A 	A 	A 	A 	A 	A 	A 	A 	As7   DA54D5
C;?AC,C;;DDDc                 J    | j         | j                                          d S d S r   )r   r   )r   s    r   tearDownClassz NetworkedNNTPTests.tearDownClassX  s*    :!JOO "!r   N)r   r   r   r   rJ   r1   rP   r   r   r   r   r   r   r   r   r   r   8  sd        &I&J IDJA A [A,   [  r   r   requires SSL supportc                       e Zd ZdZdZdZdZ eedd          Z	dZ
dZe7 ej                    Ze                    d           ej        j        e_        dS dS )NetworkedNNTP_SSLTestsznntp.aioe.orgz	aioe.testzaioe.*testNNTP_SSLNDEFAULT)r   r   r   r   rJ   r1   rP   r   r   r   r/   test_starttlsssl_create_unverified_contextr   set_ciphers
TLSVersionTLSv1_2maximum_versionr   r   r   r   r   ]  s          I JID*d33J I M
4c466	***&)n&<### r   r   c                   4    e Zd Z	 d Zd Zd Zd Zd Zd ZdS )_NNTPServerIOc                    t           j                            |            t          j                    | _        t          j                    | _        || _        | j                            | j        j        | j	                   d S r   )
io	RawIOBase__init__BytesIOc2ss2chandlerr|   readline	push_data)r   r  s     r   r   z_NNTPServerIO.__init__  s^    
d###:<<:<<48,dn=====r   c                     dS NTr   r   s    r   readablez_NNTPServerIO.readable      tr   c                     dS r  r   r   s    r   writablez_NNTPServerIO.writable  r
  r   c                     	 | j                                         }| j                             dd           | j                             |           | j                             |           d S )Nr   r   )r  tellseekwrite)r   dataposs      r   r  z_NNTPServerIO.push_data  sX    <hmmooatcr   c                     	 | j                                         }| j                             |           | j                             |           | j                                         t          |          S r   )r  r  r  r  r  process_pendingr+   )r   br  s      r   r  z_NNTPServerIO.write  s[    +hmmooqc$$&&&1vvr   c                     	 | j                                          | j                            t	          |                    }t	          |          }||d |<   |S r   )r  r  r  readr+   )r   bufr  ns       r   readintoz_NNTPServerIO.readinto  sO    1$$&&&HMM#c((##FFBQBr   N)	r   r   r   r   r	  r  r  r  r  r   r   r   r   r   |  ss        > > >            r   r   c                 R    t          |           }t          j        ||          }||fS r   )r   r   BufferedRWPair)r  sior   s      r   make_mock_filer    s-    

 
 C S#&&D;r   c                       e Zd ZddZd ZdS )
NNTPServerNc                 L    || _         || _        |                     |           d S r   )r   host
_base_init)r   fr"  
readermodes       r   r   zNNTPServer.__init__  s(    		
#####r   c                 <    | j                                          | ` d S r   )r   closer   s    r   _closezNNTPServer._close  s    	IIIr   r   )r   r   r   r   r(  r   r   r   r   r     s7        $ $ $ $
    r   r   c                   2     e Zd ZdZ fdZ fdZd Z xZS )MockedNNTPTestsMixinNc                 p    t                                                       |                                  d S r   supersetUpmake_serverr   	__class__s    r   r.  zMockedNNTPTestsMixin.setUp  s,    r   c                 L    t                                                       | `d S r   )r-  tearDownr   r0  s    r   r3  zMockedNNTPTestsMixin.tearDown  s"    KKKr   c                     |                                  | _        t          | j                  \  | _        }t	          |dg|R i || _        | j        S )Nztest.server)handler_classr  r  r  r   r   )r   argsr   r   s       r   r/  z MockedNNTPTestsMixin.make_server  sS    ))++'55$ }FtFFFvFF{r   )r   r   r   r5  r.  r3  r/  __classcell__r1  s   @r   r*  r*    se        M              r   r*  c                        e Zd Z fdZ xZS )MockedNNTPWithReaderModeMixinc                 t    t                                                       |                     d           d S )NT)r%  r,  r0  s    r   r.  z#MockedNNTPWithReaderModeMixin.setUp  s1    D)))))r   )r   r   r   r.  r7  r8  s   @r   r:  r:    s8        * * * * * * * * *r   r:  c                       e Zd Z	 dZd Zd Zd Zd Zd Zd Z	d Z
d	 Zd
 Zd Zd Zd ZddZd Zd Zd dZd Zd ZdddZdddZdZdZedz   ez   ZddZddZddZd ZdS )!NNTPv1Handlerz200 NNTP mock serverc                     d| _         d| _        || _        || _        d| _        d| _        |                                  d S )NFT)in_bodyallow_posting	_readline
_push_data
_logged_in
_user_senthandle_welcome)r   r  r  s      r   r|   zNNTPv1Handler.start  sE    !!#r   c                 $    t          |dd          S )Nutf-8surrogateescape)r   r   r  s     r   _decodezNNTPv1Handler._decode  s    4"3444r   c                 @   | j         r	 |                                 }|sd S | j                            |           |dk    rn:	 | j        \  }} ||d| j        i d | _        d | _        d| _         n# d | _        d | _        d| _         w xY w	 |                     |                                           }|sd S |                    d          s"t          d                    |                    |d d         }|	                                ^}}t          | d|                                z   d           }||                                  nS	  ||  | j         r||f| _        g | _        n5# t          $ r(}t          d	                    |                    |d }~ww xY w)
NTr   r   F
z line doesn't end with \r\n: {!r}handle_zcommand failed: {!r})r?  rA  r   appendbody_callbackrJ  endswithr   formatsplitr   upperhandle_unknown	Exception)r   r&   r   tokenscmdr   s         r   r  zNNTPv1Handler.process_pending  s   < 	%~~'' F	  &&&8##%#1ff-49---%)" 	$ &*" 	$$$$$	'<< 0 011D ==(( T !E!L!LT!R!RSSS9D::<<LC&4SYY[[!8$??D|##%%%%'D&MM | '-16\*$&	 ! Q Q Q$%;%B%B4%H%HIIqPQ	's$   A1 1BE) )
F3#FFc                     	 d| _         d S r  )r?  r   s    r   expect_bodyzNNTPv1Handler.expect_body  s    Er   c                 2    	 |                      |           d S r   )rB  rI  s     r   r  zNNTPv1Handler.push_data  s    #r   c                     	 t          j        |          }d                    |                                          dz   }|                    d          }|                     |           d S )NrL  rG  )textwrapdedentjoin
splitlinesencoder  )r   lits     r   push_litzNNTPv1Handler.push_lit  s]    #oc""kk#..**++f4jj!!sr   c                 0    |                      d           d S )Nz	500 What?rc  r   s    r   rU  zNNTPv1Handler.handle_unknown  s    k"""""r   c                 :    |                      | j                   d S r   )rc  r   r   s    r   rE  zNNTPv1Handler.handle_welcome  s    dl#####r   c                 0    |                      d           d S Nz205 Bye!re  r   s    r   handle_QUITzNNTPv1Handler.handle_QUIT"  s    j!!!!!r   c                 0    |                      d           d S )N111 20100914001155re  r   s    r   handle_DATEzNNTPv1Handler.handle_DATE%  s    *+++++r   c                     |dk    r|                      d           d S |                      d                    |                     d S )Nr   z$211 486 761 1265 fr.comp.lang.pythonz411 No such group {})rc  rR  )r   r,   s     r   handle_GROUPzNNTPv1Handler.handle_GROUP(  sN    )))MM@AAAAAMM077>>?????r   c                 0    |                      d           d S )Nz            100 Legal commands
              authinfo user Name|pass Password|generic <prog> <args>
              date
              help
            Report problems to <root@example.org>
            .re  r   s    r   handle_HELPzNNTPv1Handler.handle_HELP.  s'      	 	 	 	 	r   Nc                     ||                      d           d S |dk    r|                      d           d S |dk    r|                      d           d S |                      d           d S )N412 No newsgroup selected3000234"223 3000234 <45223423@example.com><45223423@example.com>223 0 <45223423@example.com>430 No Such Article Foundre  r   message_specs     r   handle_STATzNNTPv1Handler.handle_STAT7  s    MM566666Y&&MM>?????555MM899999MM566666r   c                 0    |                      d           d S )N*223 3000237 <668929@example.org> retrievedre  r   s    r   handle_NEXTzNNTPv1Handler.handle_NEXTA  s    BCCCCCr   c                 0    |                      d           d S )N,223 3000234 <45223423@example.com> retrievedre  r   s    r   handle_LASTzNNTPv1Handler.handle_LASTD  s    DEEEEEr   c                    ||                      d           d S |dk    r4|dk    r|                      d           d S |                      d           d S |dk    r|                      d           d S |dk    rQ|d	k    r|                      d
           d S |dk    r|                      d           d S |                      d           d S |                      d           d S )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".
                    .z501 Unknown LIST keywordre  )r   actionparams      r   handle_LISTzNNTPv1Handler.handle_LISTG  su   >MM       x%%              ~%%MM 
 
 
 
 
 
 |##***       ---              MM455555r   c                 .   |dk    r#|dk    r|dk    r|                      d           d S |dk    r#|dk    r|dk    r|                      d           d S |dk    r'|dv r#|dk    r|                      d	d
z  dz              d S |                      d           d S )Nr  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
                .re  )r   r,   date_strtime_strs       r   handle_NEWNEWSzNNTPv1Handler.handle_NEWNEWS}  s    '''H
,B,BH$$MM      
 )))h(.B.BH$$MM      
 )))000(""MM/D0  ! ! ! ! ! MM      r   c                 j    |dk    r|                      d           d S |                      d           d S )Nz57-59uK  224 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
                .re  rx  s     r   handle_XOVERzNNTPv1Handler.handle_XOVER  sY    7""MM    4 MM      r   )r   c                    |I| j         r+|                     d           |                                  d S |                     d           d S |                     d           || _        d S )Nz+340 Input article; end with <CR-LF>.<CR-LF>440 Posting not permitted240 Article received OKr@  rc  rZ  posted_body)r   r   s     r   handle_POSTzNNTPv1Handler.handle_POST  sy    <! ;KLLL  """""9::::: MM3444#Dr   c                    |O| j         r1|dk    r+|                     d           |                                  d S |                     d           d S |                     d           || _        d S )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_idr   s      r   handle_IHAVEzNNTPv1Handler.handle_IHAVE  s    <" 8KKKEFFF  """""677777 MM6777#Dr   z        From: "Demo User" <nobody@example.net>
        Subject: I am just a test article
        Content-Type: text/plain; charset=UTF-8; format=flowed
        Message-ID: <i.am.an.article.you.will.want@example.com>ui           This is just a test article.
        ..Here is a dot-starting line.

        -- Signed by André.z

c                 2   ||                      d           nO|dk    r|                      d           n3|dk    r|                      d           n|                      d           d S |                      | j                   |                      d           d S )N"220 3000237 <45223423@example.com>ru  220 0 <45223423@example.com>rs  "220 3000234 <45223423@example.com>rw  .)rc  sample_articlerx  s     r   handle_ARTICLEzNNTPv1Handler.handle_ARTICLE  s    MM>????555MM89999Y&&MM>????MM5666Fd)***cr   c                 2   ||                      d           nO|dk    r|                      d           n3|dk    r|                      d           n|                      d           d S |                      | j                   |                      d           d S )N"221 3000237 <45223423@example.com>ru  221 0 <45223423@example.com>rs  "221 3000234 <45223423@example.com>rw  r  )rc  sample_headrx  s     r   handle_HEADzNNTPv1Handler.handle_HEAD      MM>????555MM89999Y&&MM>????MM5666Fd&'''cr   c                 2   ||                      d           nO|dk    r|                      d           n3|dk    r|                      d           n|                      d           d S |                      | j                   |                      d           d S )N"222 3000237 <45223423@example.com>ru  222 0 <45223423@example.com>rs  "222 3000234 <45223423@example.com>rw  r  )rc  sample_bodyrx  s     r   handle_BODYzNNTPv1Handler.handle_BODY  r  r   c                 N   | j         r|                     d           d S |dk    r<| j        r|                     d           d S |                     d           d| _        d S |dk    r|                     d           d| _         d S t          d                    |                    )	Nz502 Already Logged Inr   z 482 User Credential Already Sentz381 Password RequiredTpassz281 Login SuccessfulzUnknown cred type {})rC  rc  rD  rV  rR  )r   	cred_typer  s      r   handle_AUTHINFOzNNTPv1Handler.handle_AUTHINFO
  s    ? 	FMM122222&   '@AAAAA5666"&&  MM0111"DOOO299)DDEEEr   r   NN)r   r   r   r   r|   rJ  r  rZ  r  rc  rU  rE  ri  rl  rn  rp  rz  r}  r  r  r  r  r  r  r  r  r  r  r  r  r  r   r   r   r=  r=    s       $G  5 5 5$' $' $'L      # # #$ $ $" " ", , ,@ @ @  7 7 7 7D D DF F F46 46 46 46l  >  @ #' 
$ 
$ 
$ 
$ 
$ 04 $ $ $ $ $CK"K !6)K7N         F F F F Fr   r=  c                   $    e Zd Z	 d Zd ZddZdS )NNTPv2Handlerc                     d}| j         s*|                     |                    d                     d S |                     |                    d                     d S )Na              101 Capability list:
            VERSION 2 3
            IMPLEMENTATION INN 2.5.1{}
            HDR
            LIST ACTIVE ACTIVE.TIMES DISTRIB.PATS HEADERS NEWSGROUPS OVERVIEW.FMT
            OVER
            POST
            READER
            .z
            AUTHINFO USERrM   )rC  rc  rR  r   fmts     r   handle_CAPABILITIESz!NNTPv2Handler.handle_CAPABILITIES  s\    	  	*MM#**%BCCDDDDDMM#**R..)))))r   c                      t          d          )Nz3MODE READER sent despite READER has been advertised)rV  )r   _s     r   handle_MODEzNNTPv2Handler.handle_MODE.  s    MNNNr   Nc                 ,    |                      |          S r   )r  rx  s     r   handle_OVERzNNTPv2Handler.handle_OVER1  s      ...r   r   )r   r   r   r  r  r  r   r   r   r  r    sL        ,* * *"O O O/ / / / / /r   r  c                         e Zd Z	  fdZ xZS )CapsAfterLoginNNTPv2Handlerc                     | j         s|                     d           d S t                                                       d S )Nz480 You must log in.)rC  rc  r-  r  r0  s    r   r  z/CapsAfterLoginNNTPv2Handler.handle_CAPABILITIES8  sB     	*MM011111GG'')))))r   )r   r   r   r  r7  r8  s   @r   r  r  5  s;        =* * * * * * * * *r   r  c                   "    e Zd Z	 d Zd Zd ZdS )ModeSwitchingNNTPv2Handlerc                     d| _         d S NF)	_switchedr   s    r   r   z#ModeSwitchingNNTPv2Handler.__init__B  s    r   c                     d}| j         r*|                     |                    d                     d S |                     |                    d                     d S )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
            .rM   zMODE-)r  rc  rR  r  s     r   r  z.ModeSwitchingNNTPv2Handler.handle_CAPABILITIESE  s[    	 > 	/MM#**R..)))))MM#**W--.....r   c                 >    d| _         |                     d           d S )NTz200 Posting allowed)r  rc  )r   whats     r   r  z&ModeSwitchingNNTPv2Handler.handle_MODEU  s"    +,,,,,r   N)r   r   r   r   r  r  r   r   r   r  r  ?  sD        .  / / / - - - - -r   r  c                        e Zd Z fdZd Zd Zd Zd Zd Zd Z	d Z
d	 Zd
 Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd ZdZd Zd Zd Z d Z!d  Z"d! Z# xZ$S )"NNTPv1v2TestsMixinc                 H    t                                                       d S r   )r-  r.  r0  s    r   r.  zNNTPv1v2TestsMixin.setUp]  s    r   c                 Z    |                      | j        j        | j        j                   d S r   )r   r   r   r  r   s    r   r   zNNTPv1v2TestsMixin.test_welcome`  s(    ,dl.BCCCCCr   c                     | j         dk    r |                     d| j        j                   | j                            dd           |                     d| j        j                   d S )Nr   AUTHINFOtestusertestpw)r   rO   r   _capsr   rI   r   s    r   test_authinfoz NNTPv1v2TestsMixin.test_authinfoc  sd    !!MM*dk&7888*h/// 	T[%677777r   c                     | j                                         \  }}|                     |d           |                     |t          j        dddddd                     d S )Nrk    	      r      7   )r   r@   r   r?   rd   s      r   re   zNNTPv1v2TestsMixin.test_datek  sa    [%%''
d3444x0q"aRHHIIIIIr   c                     |                      | j        j                   | j                                        }|                     |d           |                     | j        j                   d S rh  )r   r  closedr   r   r   r"   )r   r$   s     r   	test_quitzNNTPv1v2TestsMixin.test_quitp  s_    ))){!!z***(((((r   c                     | j                                         \  }}|                     |d           |                     |g d           d S )Nz100 Legal commands)z8  authinfo user Name|pass Password|generic <prog> <args>z  datez  helpz%Report problems to <root@example.org>)r   r!   r   )r   r$   r!   s      r   r'   zNNTPv1v2TestsMixin.test_helpv  sc    [%%''
d3444  
  
  
 	 	 	 	 	r   c           	         | j                                         \  }}|                     t          |          d           |d         }|                     |t	          dddd                     | j                             d          \  }}|                     t          |          d           |d	         }|                     |t	          d
ddd                     d S )N   r   comp.lang.python.announce
0000001153
0000000993mr  r   r   z!gmane.comp.python.distutils.devel
0000014104
0000000001)r   r*   r   r+   r   )r   r$   r.   gs       r   r/   zNNTPv1v2TestsMixin.test_list  s    {''))fVa(((1I1<"C) )	* 	* 	* {''66fVa(((1I9<"C) )	* 	* 	* 	* 	*r   c                 H   | j                             d          \  }}}|                     |d           |                     |d           |                     |d           | j                             d          \  }}}|                     |d           |                     |d           |                     |d           |                     t          j                  5 }| j                             d           d d d            n# 1 swxY w Y   |                     |j        j        d           |                     t          j                  5 }| j                                          d d d            n# 1 swxY w Y   |                     |j        j        d           d S )	N- rt  ru  rv  r   z<non.existent.id>rw  rr  )r   statr   r5   r   r   r8   r9   )r   r$   rv   r  r:   s        r   	test_statzNNTPv1v2TestsMixin.test_stat  s   $(K$4$4W$=$=!gzCDDD'***%=>>>$(K$4$45M$N$N!gz=>>>!$$$%=>>>w9:: 	2bK0111	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2.0KLLLw9:: 	bK	 	 	 	 	 	 	 	 	 	 	 	 	 	 	.0KLLLLLs$    DDDE77E;>E;c                     | j                                         \  }}}|                     |d           |                     |d           |                     |d           d S )Nr|  - z<668929@example.org>)r   nextr   r   r$   rv   r  s       r   	test_nextzNNTPv1v2TestsMixin.test_next  sf    $(K$4$4$6$6!gzKLLL'***%;<<<<<r   c                     | j                                         \  }}}|                     |d           |                     |d           |                     |d           d S )Nr  r  ru  )r   r_   r   r  s       r   	test_lastzNNTPv1v2TestsMixin.test_last  sf    $(K$4$4$6$6!gzMNNN'***%=>>>>>r   c                     | j                             d          }|                     |d           | j                             d          }|                     |d           d S )Nr  The Python computer language.comp.lang.pythonxrM   )r   rN   r   )r   rK   s     r   rQ   z#NNTPv1v2TestsMixin.test_description  sa    {&&'9::>???{&&':;;r"""""r   c                 n   | j                             d          \  }}|                     |d           |                     |ddi           | j                             d          \  }}|                     |ddd           | j                             d          \  }}|                     |i            d S )Nr  z-215 Descriptions in form "group description".r  r  z4Announcements about the Python language. (Moderated))r  r  r  )r   rS   r   r-   s      r   rV   z$NNTPv1v2TestsMixin.test_descriptions  s    {//0BCCfNOOO ?" 	 	 	 {//0CDDf ?)_" " 	 	 	 {//0CDDf$$$$$r   c                 ^   | j                             d          \  }}}}}|                     |                    d          |           |                     |d           |                     |d           |                     |d           |                     |d           |                     t          j                  5 }| j                             d           d d d            n# 1 swxY w Y   |j        }|                     |j	                            d          |j	                   d S )Nr   rY   i  i  i  zcomp.lang.python.develz411 No such group)
r   r,   r"   r#   r   r5   r   r   r8   r9   )r   r$   r]   r^   r_   r,   r:   excs           r   r`   zNNTPv1v2TestsMixin.test_group  s[   *.+*;*;<Q*R*R'eUD%//666$$$t$$$$$$ 5666w9:: 	8bK6777	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8l//0CDD	& 	& 	& 	& 	&s   C((C,/C,c                    t          j         dddddd          }| j                            d|          \  }}d                    | j                  }|                     ||           |                     |d	d
g           t          j         dddddd          }| j                            d|          \  }}|                     |d           |                     |g            d S )Nr  r              r  zS230 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   newnewsrR  r   r   )r   rE   r$   idsexpecteds        r   test_newnewszNNTPv1v2TestsMixin.test_newnews  s    tQAr155K''(:B??	c=fT&'' 	 	x(((PP 	 	 	
 tQAr155K''(=rBB	cJKKKb!!!!!r   c                 R   |                      t          |          d           |                      |d                             d          d           |                      |d         d           |                      |d         d           |                      |d	         d
           d S )Nr  rz   rG  u   -- Signed by André.rM  r   s   .Here is a dot-starting line.s   This is just a test article.)r   r+   decoder   r%   s     r   _check_article_bodyz&NNTPv1v2TestsMixin._check_article_body  s    UQ'''r))'224JKKKrC(((r$DEEEr$CDDDDDr   c                     |                      t          |          d           |                      |d         d           |                      |d         d           d S )Nr  r   s&   From: "Demo User" <nobody@example.net>   s7   Message-ID: <i.am.an.article.you.will.want@example.com>)r   r+   r  s     r   _check_article_headz&NNTPv1v2TestsMixin._check_article_head  sZ    UQ'''q#LMMMq#]^^^^^r   c                     |                      t          |          d           |                     |d d                    |                     |dd                     |                      |d         d           d S )Nr  r  r
  r   )r   r+   r  r  r  s     r   _check_article_dataz&NNTPv1v2TestsMixin._check_article_data  sv    UQ'''  rr+++  rss,,,q3'''''r   c                    | j                                         \  }}|                     |d           |\  }}}|                     |d           |                     |d           |                     |           | j                             d          \  }}|                     |d           |\  }}}|                     |d           |                     |d           |                     |           | j                             d          \  }}|                     |d           |\  }}}|                     |d           |                     |d           |                     |           |                     t
          j                  5 }| j                             d           d d d            n# 1 swxY w Y   |                     |j        j        d	           d S )
Nr  r  ru  r  r  r  r   <non-existent@example.com>rw  )	r   r   r   r  r5   r   r   r8   r9   r   r$   inforv   r  r%   r:   s          r   test_articlezNNTPv1v2TestsMixin.test_article  s   [((**
dCDDD%)"U'***%=>>>  '''[((11
dCDDD%)"U'***%=>>>  '''[(()ABB
d=>>>%)"U!$$$%=>>>  '''w9:: 	>bK <===	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	>.0KLLLLL   F44F8;F8c                 $   t          j                    }| j                            |          \  }}|                     |d           |\  }}}|                     |d           |                     |d           |                     |g            |                                }|                     |                    d          t          |                     |                     |	                    d          t          |                     d S )Nr   r  r  ru  K   From: "Demo User" <nobody@example.net>
Subject: I am just a test article
U   This is just a test article.
.Here is a dot-starting line.

-- Signed by André.
)
r   r  r   r   r   getvaluer"   r#   asciirQ  r   r$  r$   r  rv   r  r%   r  s           r   test_article_filez$NNTPv1v2TestsMixin.test_article_file  s   JLL[((a(00
dCDDD%)"U'***%=>>>###zz||5  T{{	 	 	 	. 
 T{{	 	 	 	 	r   c                    | j                                         \  }}|                     |d           |\  }}}|                     |d           |                     |d           |                     |           | j                             d          \  }}|                     |d           |\  }}}|                     |d           |                     |d           |                     |           | j                             d          \  }}|                     |d           |\  }}}|                     |d           |                     |d           |                     |           |                     t
          j                  5 }| j                             d           d d d            n# 1 swxY w Y   |                     |j        j        d	           d S )
Nr  r  ru  r  r  r  r   r  rw  )	r   r   r   r  r5   r   r   r8   r9   r  s          r   	test_headzNNTPv1v2TestsMixin.test_head      [%%''
dCDDD%)"U'***%=>>>  '''[%%g..
dCDDD%)"U'***%=>>>  '''[%%&>??
d=>>>%)"U!$$$%=>>>  '''w9:: 	;bK9:::	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	;.0KLLLLLr  c                 $   t          j                    }| j                            |          \  }}|                     |d           |\  }}}|                     |d           |                     |d           |                     |g            |                                }|                     |                    d          t          |                     | 	                    |
                    d          t          |                     d S )Nr  r  r  ru  r  r  )r   r  r   r   r   r  r"   r#   r  r   rQ  r  s           r   test_head_filez!NNTPv1v2TestsMixin.test_head_file;  s   JLL[%%1%--
dCDDD%)"U'***%=>>>###zz||5  T{{	 	 	 	. 
 T{{	 	 	 	 	r   c                    | j                                         \  }}|                     |d           |\  }}}|                     |d           |                     |d           |                     |           | j                             d          \  }}|                     |d           |\  }}}|                     |d           |                     |d           |                     |           | j                             d          \  }}|                     |d           |\  }}}|                     |d           |                     |d           |                     |           |                     t
          j                  5 }| j                             d           d d d            n# 1 swxY w Y   |                     |j        j        d	           d S )
Nr  r  ru  r  r  r  r   r  rw  )	r   r   r   r  r5   r   r   r8   r9   r  s          r   	test_bodyzNNTPv1v2TestsMixin.test_bodyO  r#  r  c                 $   t          j                    }| j                            |          \  }}|                     |d           |\  }}}|                     |d           |                     |d           |                     |g            |                                }|                     |                    d          t          |                     | 	                    |
                    d          t          |                     d S )Nr  r  r  ru  r  r  )r   r  r   r   r   r  r   r#   r  r"   rQ  r  s           r   test_body_filez!NNTPv1v2TestsMixin.test_body_filej  s   JLL[%%1%--
dCDDD%)"U'***%=>>>###zz||5  T{{	 	 	 	. 
 T{{	 	 	 	 	r   c                    |                      |                    d          |           |                     t          |          d           |d         \  }}|                     |d           |                     |ddddd	d
ddd           |d         \  }}|                     |d         d            |d         \  }}|                     |d         d           d S )Nz224 r  r   9   zEDoug Hellmann <doug.hellmann-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>zGRe: ANN: New Plone book with strong Python (and Zope) themes throughoutzSat, 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)rg   rh   r@   rl   ri   rj   rk   xrefr   r.  r   rh   0   Re: Message d'erreur incompréhensible (par moi))r"   r#   r   r+   )r   r$   	overviewsrv   r{   s        r   check_over_xover_respz(NNTPv1v2TestsMixin.check_over_xover_resp~  s   //666Y+++!!"%%%[`5L:@	  	  		 		 		 "!ft,,,!!iK	M 	M 	M 	M 	Mr   c                 n    | j                             dd          \  }}|                     ||           d S )Nr+  ;   )r   rs   r1  r   r$   r0  s      r   rw   zNNTPv1v2TestsMixin.test_xover  s9    +++B33i""433333r   c                 l    | j                             d          \  }}|                     ||           d S )N)r+  r3  )r   r{   r1  r4  s      r   r}   zNNTPv1v2TestsMixin.test_over  s7    +**844i""433333r   s  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>

This is just a test article.
.Here is a dot-starting line.

-- Signed by André.
c                 |   | j         j        }|                     t          |          d           |                     |d         d           |                     |d         d           |                     |d         d           |                     |d         d	           |                     |d
         d           d S )Nry   rz   r   rM  s   -- Signed by André.
r	     
r
  s    ..Here is a dot-starting line.
r   s(   From: "Demo User" <nobody@example.net>
)r  r  r   r+   r  s     r   _check_posted_bodyz%NNTPv1v2TestsMixin._check_posted_body  s    (UR(((rH---r$EFFFrG,,,r$IJJJq#PQQQQQr   c                   | j         }| ||          fz   }d | j        _         || }|                                  | j                             dd          }| ||          fz   }d | j        _         || }|                                  |S )Nr7     
)sample_postr  r  r8  replace)r   funcfile_factoryr6  post	func_argsr$   s          r   _check_post_ihave_subz(NNTPv1v2TestsMixin._check_post_ihave_sub  s    LL..00	#' tY!!! ''77LL..00	#' tY!!!r   c                     | j         |g|R dt          i}|                     ||            | j         |g|R dt          i}|                     ||            | j         |g|R dt          j        i}|                     ||           d } | j         |g|R d|i}|                     ||           d } | j         |g|R d|i}|                     ||           d S )Nr>  c                 H    t          |                     d                    S )NTkeependsiterr`  r  s    r   	iterlinesz6NNTPv1v2TestsMixin.check_post_ihave.<locals>.iterlines  s    d33444r   c                 H    t          |                     d                    S )NFrD  rF  rH  s    r   rI  z6NNTPv1v2TestsMixin.check_post_ihave.<locals>.iterlines  s    e44555r   )rA  r   r   	bytearrayr   r  )r   r=  success_respr6  r$   rI  s         r   check_post_ihavez#NNTPv1v2TestsMixin.check_post_ihave  s@   )t)$JJJJEJJ|,,,)t)$NNNNINN|,,,)t)$OOOOBJOO|,,,	5 	5 	5)t)$NNNNINN|,,,	6 	6 	6)t)$NNNNINN|,,,,,r   c                 J   |                      | j        j        d           d| j        _        |                     t          j                  5 }| j                            | j                   d d d            n# 1 swxY w Y   | 	                    |j
        j        d           d S )Nr  Fr  )rM  r   r?  r  r@  r5   r   r   r;  r   r8   r9   r   r:   s     r   	test_postzNNTPv1v2TestsMixin.test_post  s    dk.0IJJJ%*"w9:: 	/bKT-...	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/.4	6 	6 	6 	6 	6s    A88A<?A<c                 6   |                      | j        j        dd           |                     t          j                  5 }| j                            d| j                   d d d            n# 1 swxY w Y   |                     |j        j	        d           d S )Nr  r  z<another.message.id>r  )
rM  r   ihaver5   r   r   r;  r   r8   r9   rO  s     r   
test_ihavezNNTPv1v2TestsMixin.test_ihave  s    dk/1MK	M 	M 	Mw9:: 	HbK4d6FGGG	H 	H 	H 	H 	H 	H 	H 	H 	H 	H 	H 	H 	H 	H 	H.1	3 	3 	3 	3 	3s   !A..A25A2c                     t          j         dddddd          }|                     t          j        | j        j        d|           d S )Nr  r   r  r   r  )r?   r5   r   NNTPDataErrorr   r  )r   rE   s     r   test_too_long_linesz&NNTPv1v2TestsMixin.test_too_long_lines  sU    tQ1a33'/+-/A2	G 	G 	G 	G 	Gr   )%r   r   r   r.  r   r  re   r  r'   r/   r  r  r  rQ   rV   r`   r  r  r  r  r  r   r"  r%  r'  r)  r1  rw   r}   r;  r8  rA  rM  rP  rS  rV  r7  r8  s   @r   r  r  [  s8           D D D8 8 8J J J
) ) )  * * *M M M = = =? ? ?# # #% % %& & &" " "&E E E_ _ _
( ( (M M M6  *M M M6  (M M M6  (M M M*4 4 44 4 4	* 	R 	R 	R   - - -*6 6 63 3 3G G G G G G Gr   r  c                       e Zd Z	 dZeZd ZdS )NNTPv1Testsr   c                     | j                                         }|                     |i            |                     | j         j        d           |                     | j         j        d            d S )Nr   r   r   r   r   nntp_implementationr   r   s     r   	test_capszNNTPv1Tests.test_caps  sg    {**,,r"""115558$?????r   N)r   r   r   r   r=  r5  r]  r   r   r   rX  rX    s5        4L!M@ @ @ @ @r   rX  c                       e Zd Z	 dZeZd ZdS )NNTPv2Testsr   c                    | j                                         }|                     |ddgddgdgg g dg g g d           |                     | j         j        d           |                     | j         j        d	           d S )
N23INNz2.5.1USER)r  zACTIVE.TIMESzDISTRIB.PATSHEADERSr  r   )VERSIONIMPLEMENTATIONr  HDRr   OVERPOSTREADERr  z	INN 2.5.1rZ  r\  s     r   r]  zNNTPv2Tests.test_caps  s    {**,,Sz$g.> > >
  
  
	 
	 
	 	115558+FFFFFr   N)r   r   r   r   r  r5  r]  r   r   r   r_  r_    s5        6L!MG G G G Gr   r_  c                       e Zd Z	 dZeZd ZdS )CapsAfterLoginNNTPv2Testsr   c                     |                      | j        j        i            | j                            dd           |                     d| j        j                   d S )Nr  r  rf  )r   r   r  r   rO   r   s    r   test_caps_only_after_loginz4CapsAfterLoginNNTPv2Tests.test_caps_only_after_login  sT    *B///*h///i!233333r   N)r   r   r   r   r  r5  ro  r   r   r   rm  rm    s0        ML/M4 4 4 4 4r   rm  c                       e Zd Z	 dZeZd ZdS )SendReaderNNTPv2Testsr   c                 F    |                      d| j        j                   d S )Nrk  )rO   r   r  r   s    r   (test_we_are_in_reader_mode_after_connectz>SendReaderNNTPv2Tests.test_we_are_in_reader_mode_after_connect&  s!    h 122222r   N)r   r   r   r   r  r5  rs  r   r   r   rq  rq    s4        - L.M3 3 3 3 3r   rq  c                   f    e Zd Zd Zd Zd Zd Zd Zd Z e	j
        ed          d             Zd	S )
	MiscTestsc                       fd} |dd            |dd            |dd            |dd            |dd            |d	d
            |dd           d S )Nc                 d                         t                              |           |           d S r   )r   r   decode_header)ar  r   s     r   givesz+MiscTests.test_decode_header.<locals>.gives-  s-    W22155q99999r   rM   za plain headerz with extra  spaces z%=?ISO-8859-15?Q?D=E9buter_en_Python?=u   Dé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?=uP   Re: [sqlite] problème avec ORDER BY sur des chaînes de caractères accentuéesz,Re: =?UTF-8?B?cHJvYmzDqG1lIGRlIG1hdHJpY2U=?=u   Re: problème de matricer/  r   r   rz  s   ` r   test_decode_headerzMiscTests.test_decode_header,  s    	: 	: 	: 	: 	:b2 0111$&<===57KLLL J`	b 	b 	b 	<(	* 	* 	* 	@@	B 	B 	B 	B 	Br   c                 v   g d}|                      t                              |          g d           g d}|                      t                              |          g d           g d}|                      t                              |          g d           g d}|                      t                              |          g d           g d}|                      t                              |          g d           g d}|                      t                              |          g d	           d S )
N)Subject:From:Date:Message-ID:References:rj   rk   )rh   rg   r@   rl   ri   rj   rk   )r~  r  r  r  r  Bytes:Lines:)zsubject:zFROM:zDaTe:zmessage-ID:r  zBYTES:r  )	r~  r  r  r  r  rj   rk   	Xref:fullzDistribution:full)	rh   rg   r@   rl   ri   rj   rk   r.  distribution)	r~  r  r  r  r  r  r  z	Xref:FULLzDistribution:FULL)r~  r  r  r  r  r  r  r  rh   rg   r@   rl   ri   rj   rk   r.  )r   r   _parse_overview_fmtr  s     r   test_parse_overview_fmtz!MiscTests.test_parse_overview_fmt<  s   4 4 444U;;! ! !	" 	" 	"4 4 444U;;! ! !	" 	" 	"4 4 444U;;! ! !	" 	" 	"& & & 	44U;;9 9 9	: 	: 	:& & & 	44U;;9 9 9	: 	: 	:A A A44U;;) ) )	* 	* 	* 	* 	*r   c                    t           j        dgz   }dg}t                               ||          }|\  \  }}|                     |d           |                     |dddddd	d
dd           dg}t                               ||          }|\  \  }}|                     |d         d            dg}t                               ||          }|\  \  }}|                     |d         d           |                     |d         d           d S )Nr.  z3000234	I am just a test article	"Demo User" <nobody@example.com>	6 Oct 1998 04:38:40 -0500	<45223423@example.com>	<45454@example.net>	1234	17	Xref: news.example.com misc.test:3000363r  zI am just a test articlez "Demo User" <nobody@example.com>z6 Oct 1998 04:38:40 -0500ru  z<45454@example.net>123417z"news.example.com misc.test:3000363r  z3000234	I am just a test article	"Demo User" <nobody@example.com>	6 Oct 1998 04:38:40 -0500	<45223423@example.com>	<45454@example.net>	1234	17		z3000234	I am just a test article	"Demo User" <nobody@example.com>	6 Oct 1998 04:38:40 -0500	<45223423@example.com>	 	1234	17	Xref: 	ri    rM   )r   _DEFAULT_OVERVIEW_FMT_parse_overviewr   )r   r  r%   overviewrv   fieldss         r   test_parse_overviewzMiscTests.test_parse_overviewd  sH   +vh6;
 **5#66%&'***16/2/8	"
 	"
 		 		 		
 **5#66%&...
 **5#66%&-s333,,,,,r   c           
            fd} |dd dddddd            |d	d
dddddd            |dd
dddddd            |dd
dddddd           d S )Nc                 ~                         t                              | |          t          j        |            d S r   )r   r   _parse_datetimer?   )ry  r  cr   s      r   rz  z,MiscTests.test_parse_datetime.<locals>.gives  sB    W44Q::%.24 4 4 4 4r   19990623135624  r     r   8      19990623135624990623090623i  r   r{  s   ` r   test_parse_datetimezMiscTests.test_parse_datetime  s    	4 	4 	4 	4 	4 	dAr2r2>>>j(D!RR<<<h$2r2r:::h$2r2r:::::r   c           
            fd} |dddddddd	            |d
ddddddd	            |dddddddd            fd} |ddddd            |d
dddd            |ddddd           d S )Nc                     t          j         | |||||          }	                    t                              |          ||f           	                    t                              |d          ||f           d S r  r?   r   r   _unparse_datetime
yMdhr  sr  r  rE   r   s
            r   rz  z.MiscTests.test_unparse_datetime.<locals>.gives  s    "1aAq!44BW66r::&13 3 3W66r5AA&13 3 3 3 3r   r  r  r  r   r  r  r  r    20000623r  rX   r   r   r  20100605010203c                     t          j        | ||          }                    t                              |          ||f                               t                              |d          ||f           d S r  r?   r@   r   r   r  r  r  r  r  r  rE   r   s         r   rz  z.MiscTests.test_unparse_datetime.<locals>.gives  s    q!Q''BW66r::&13 3 3W66r5AA&13 3 3 3 3r   000000r   r{  s   ` r   test_unparse_datetimezMiscTests.test_unparse_datetime  s    	3 	3 	3 	3 	3 	dAr2r2z8<<<dAr2r2z8<<<dAq!Q:x888	3 	3 	3 	3 	3 	dAr:x000dAr:x000dAq*h/////r   c           
            fd} |dddddddd	            |d
ddddddd	            |dddddddd            fd} |ddddd            |d
dddd            |ddddd           d S )Nc                     t          j         | |||||          }	                    t                              |d          ||f           d S r  r  r  s
            r   rz  z5MiscTests.test_unparse_datetime_legacy.<locals>.gives  sY    "1aAq!44BW66r4@@&13 3 3 3 3r   r  r  r  r   r  r  r  r  r  000623r  rX   r   r   r  100605r  c                     t          j        | ||          }                    t                              |d          ||f           d S r  r  r  s         r   rz  z5MiscTests.test_unparse_datetime_legacy.<locals>.gives  sR    q!Q''BW66r4@@&13 3 3 3 3r   r  r   r{  s   ` r   test_unparse_datetime_legacyz&MiscTests.test_unparse_datetime_legacy  s    	3 	3 	3 	3 	3 	dAr2r2x:::dAr2r2x:::dAq!Q8X666	3 	3 	3 	3 	3 	dAr8X...dAr8X...dAq(H-----r   r   c                 V    |                      t          t          d                     d S )Nr   )r"   r   r   r   s    r   test_ssl_supportzMiscTests.test_ssl_support  s$    4455555r   N)r   r   r   r|  r  r  r  r  r  r   
skipUnlessr   r  r   r   r   ru  ru  *  s        B B B &* &* &*P,- ,- ,-\	; 	; 	;0 0 0.. . .& X4556 6 656 6 6r   ru  c                       e Zd Z	 d ZdS )PublicAPITestsc                 
   |                      t          t          d                     g d}t          |                    d           |                     t          t          j                  t          |                     d S )N__all__)r   r   NNTPReplyErrorr   r6   NNTPProtocolErrorrU  rx  r   )r"   r   r   r   rO  r   setr  )r   
target_apis     r   test_module_all_attributez(PublicAPITests.test_module_all_attribute  sy    33444M M M
 ?j)))W_--s:?????r   N)r   r   r   r  r   r   r   r  r    s+        H@ @ @ @ @r   r  c                   F    e Zd Z	 ej        Z	 ddZd Zd Zd Z	d Z
d ZdS )	MockSocketTestsNc                   	
  G fdd          } G 	
fdd          d
g 	t          d|          5  |                     ||          5  |                     d||           d d d            n# 1 swxY w Y   d d d            n# 1 swxY w Y   |                     
           	D ]}|                     |j                   d S )	Nc                       e Zd Z fdZdS )NMockSocketTests.check_constructor_error_conditions.<locals>.mock_socket_modulec                                  S r   r   )addressr   
MockSockets     r   create_connectionz`MockSocketTests.check_constructor_error_conditions.<locals>.mock_socket_module.create_connection  s    !z||#r   N)r   r   r   r  )r  s   r   mock_socket_moduler    s.        $ $ $ $ $ $ $r   r  c                   &    e Zd ZfdZ fdZdS )FMockSocketTests.check_constructor_error_conditions.<locals>.MockSocketc                     dd S r  r   )r   socket_closeds    r   r'  zLMockSocketTests.check_constructor_error_conditions.<locals>.MockSocket.close  s     $r   c                 j                 }t          |          \  }}                    |           |S r   )r  rO  )socketmoder  r  r   filesr5  s        r   makefilezOMockSocketTests.check_constructor_error_conditions.<locals>.MockSocket.makefile  s6    '-//(114T"""r   N)r   r   r   r'  r  )r  r5  r  s   r   r  r    sL        % % % % %       r   r  Fznntplib.socketdummy)r   r   )r	   assertRaisesRegex
nntp_classr"   r  )r   r5  expected_error_typeexpected_error_msgr   r   r  r$  r  r  r  s    `      @@@r   "check_constructor_error_conditionsz2MockSocketTests.check_constructor_error_conditions  s   
	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$		 		 		 		 		 		 		 		 		 		 		 		 #%788 	D 	D##$79KLL	D 	DOOG%(OCCC	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	&&& 	& 	&AOOAH%%%%	& 	&s5   BA5)B5A9	9B<A9	=BBBc                 x     G d dt                     }|                     |t          j        |j                   d S )Nc                       e Zd ZdZdS )1MockSocketTests.test_bad_welcome.<locals>.HandlerzBad WelcomeNr   r   r   r   r   r   r   Handlerr    s        #GGGr   r  )r=  r  r   r  r   r   r  s     r   test_bad_welcomez MockSocketTests.test_bad_welcome  s_    	$ 	$ 	$ 	$ 	$m 	$ 	$ 	$//W.	A 	A 	A 	A 	Ar   c                 x     G d dt                     }|                     |t          j        |j                   d S )Nc                       e Zd ZdZdS )EMockSocketTests.test_service_temporarily_unavailable.<locals>.Handlerz#400 Service temporarily unavailableNr  r   r   r   r  r            ;GGGr   r  )r=  r  r   r   r   r  s     r   $test_service_temporarily_unavailablez4MockSocketTests.test_service_temporarily_unavailable  _    	< 	< 	< 	< 	<m 	< 	< 	<//W/	B 	B 	B 	B 	Br   c                 x     G d dt                     }|                     |t          j        |j                   d S )Nc                       e Zd ZdZdS )EMockSocketTests.test_service_permanently_unavailable.<locals>.Handlerz#502 Service permanently unavailableNr  r   r   r   r  r    r  r   r  )r=  r  r   r6   r   r  s     r   $test_service_permanently_unavailablez4MockSocketTests.test_service_permanently_unavailable
  r  r   c                 x     G fddt                     }d|                     |t          j                   d S )Nc                       e Zd Z fdZdS )6MockSocketTests.test_bad_capabilities.<locals>.Handlerc                 2    |                                 d S r   re  )r   capabilities_responses    r   r  zJMockSocketTests.test_bad_capabilities.<locals>.Handler.handle_CAPABILITIES  s    344444r   N)r   r   r   r  )r  s   r   r  r    s.        5 5 5 5 5 5 5r   r  z201 bad capability)r=  r  r   r  )r   r  r  s     @r   test_bad_capabilitiesz%MockSocketTests.test_bad_capabilities  sq    	5 	5 	5 	5 	5 	5 	5m 	5 	5 	5 !5//W+-B	D 	D 	D 	D 	Dr   c                     d}d} G fddt                     }d|                     |t          j        ||           d S )Nzt@e.compythonc                       e Zd Z fdZdS )3MockSocketTests.test_login_aborted.<locals>.Handlerc                 2    |                                 d S r   re  )r   r6  authinfo_responses     r   r  zCMockSocketTests.test_login_aborted.<locals>.Handler.handle_AUTHINFO  s    /00000r   N)r   r   r   r  )r  s   r   r  r    s.        1 1 1 1 1 1 1r   r  z503 Mechanism not recognized)r=  r  r   r6   )r   r   r   r  r  s       @r   test_login_abortedz"MockSocketTests.test_login_aborted  s{    	1 	1 	1 	1 	1 	1 	1m 	1 	1 	1 ;//W/1B8	 	 	 	 	r   r  )r   r   r   r   r   r  r  r  r  r  r  r  r   r   r   r  r    s        ? J
 "&& & & &:A A AB B BB B BD D D
 
 
 
 
r   r  c                       e Zd Z	 d ZdS )bypass_contextc                     | S r   r   )sockr6  s     r   wrap_socketzbypass_context.wrap_socket(  s    r   N)r   r   r   r  r   r   r   r  r  &  s&        1    r   r  c                   $    e Zd Zed             ZdS )MockSslTestsc                  2    t          j        | dt          i|S )Nr   )r   r   r  )r  kws     r   r  zMockSslTests.nntp_class-  s    G.GBGGGr   N)r   r   r   staticmethodr  r   r   r   r  r  +  s2        H H \H H Hr   r  c                   N    e Zd Zd Zd Z ej        ed          d             ZdS )LocalServerTestsc                    t          j                     }t          j        |          }|                                 t	          j        | j        |f          | _        | j                                         | 	                    | j        j
                   |                     t          t          j        |d                    | _        d S )N)targetr6  F)r   )r  r   	bind_portlisten	threadingThread
run_server
backgroundr|   
addCleanupr_  enterContextr   HOSTnntp)r   r   ports      r   r.  zLocalServerTests.setUp3  s    }&t,,#*?$2 2 2,---%%d=+=te&T&T&TUU			r   c                    |5  |                                 \  }}d d d            n# 1 swxY w Y   t          j                    5 }|                    |           |                    |                    d                    }|                    d           	 |                                }|dk    r|                    d           n|dk    r|                                 |                    d           t          j	        t          j
                  }|                    t                     |                    |d          }|                    |           |                    |                    d                    }n>|d	k    r|                    d
           n$t          d                    |                    ,	 d d d            d S # 1 swxY w Y   d S )Nrbs   200 Server ready
Ts   CAPABILITIES
s.   101 Capability list:
VERSION 2
STARTTLS
.
s
   STARTTLS
s   382 Begin TLS negotiation now
)server_sides   QUIT
s
   205 Bye!
zUnexpected command {!r})accept
contextlib	ExitStackenter_contextr  sendallr  r'  r   
SSLContextPROTOCOL_TLS_SERVERload_cert_chaincertfiler  r   rR  )r   r   clientr  cleanupreaderrX  contexts           r   r  zLocalServerTests.run_server>  sg    	( 	(++--KVQ	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	(!## 	Lw!!&)))**6??4+@+@AAFNN2333Loo''---NN!    O++LLNNNNN#GHHH!nS-DEEG++H555$00D 1 2 2F))&111$226??43H3HIIFFK''NN?333$%>%E%Ec%J%JKKK-L( 1	L 	L 	L 	L 	L 	L 	L 	L 	L 	L 	L 	L 	L 	L 	L 	L 	L 	Ls   '++F GGGr   c                    | j         j        }| j         j        }| j                                          |                     || j         j                   |                     || j         j                   |                     | j         j        t          j                   |                     t          | j         j                   d S r   )
r  r   r   starttlsassertNotEqualrD   r   	SSLSocketr5   r   )r   r   r   s      r   r   zLocalServerTests.test_starttls^  s    y~y~	 	D$).111D$).111dincm<<<*di&899999r   N)	r   r   r   r.  r  r   r  r   r   r   r   r   r  r  2  se        	V 	V 	VL L L@ X455: : 65: : :r   r  __main__)?r   r  r?   r]  r   r   r  os.pathosr   r  r   r   test.supportr   r   import_deprecatedr   r   r   unittest.mockr	   r   ImportErrorpathr_  dirname__file__r!  r   rV  r   r   r   r   SSLEOFErrorTestCaser   r  r   r   r   r  r   r*  r:  r=  r  r  r  r  rX  r_  rm  rq  ru  r  r  r  r  r  r   mainr   r   r   <module>r7     s*   				              				           7 7 7 7 7 7 7 7
+/
+I
6
6 # # # # # # # #      JJJJ   
CCC 7<<11:~NN?|HH. . . . .9 . . .G G G G G G G GT  $ $ & & & [
?3?$$J# # # # #0(2C # # #J S011= = = = =/ = = 21=<) ) ) ) )BL ) ) )X  	 	 	 	 	 	 	 	       &* * * * *$8 * * *BF BF BF BF BF BF BF BFJ
/ / / / /M / / /6* * * * *- * * *- - - - - - - -8PG PG PG PG PG PG PG PGf
@ 
@ 
@ 
@ 
@$&:H<M 
@ 
@ 
@G G G G G$&:H<M G G G.	4 	4 	4 	4 	4 4h6G 	4 	4 	4	3 	3 	3 	3 	39	3 	3 	3_6 _6 _6 _6 _6! _6 _6 _6D
@ 
@ 
@ 
@ 
@X& 
@ 
@ 
@L L L L Lh' L L L\       
 S011H H H H H? H H 21H8: 8: 8: 8: 8:x( 8: 8: 8:v zHMOOOOO s   A A%$A%