o
    Òó·i—T  ã                   @   sò  d dl Z d dlZd dlmZ d dlmZ d dlmZ d dlZ	d dl
mZmZmZmZmZ d dlmZ d dlmZmZmZ d dlmZ d d	lmZmZ d d
lmZ d dlmZ z
d dl m!Z!m"Z" W n e#ym   dZ!dZ"Y nw G dd„ deƒZ$dddddddœZ%d0dd„Z&dd„ Z'G dd„ deƒZ(G dd„ dƒZ)G dd„ dƒZ*G dd„ deƒZ+G dd „ d eƒZ,G d!d"„ d"eƒZ-G d#d$„ d$eƒZ.G d%d&„ d&ƒZ/G d'd(„ d(ej0ƒZ1ee! d)ƒee 2ed¡ d)ƒG d*d+„ d+eƒƒƒZ3G d,d-„ d-e/eƒZ4G d.d/„ d/eƒZ5dS )1é    N)ÚList)ÚskipIf)ÚdirectlyProvides)ÚdeferÚerrorÚ
interfacesÚprotocolÚreactor)ÚStringTransport)ÚAdvancedPOP3ClientÚ InsecureAuthenticationDisallowedÚServerErrorResponse)Úpop3testserver)ÚbasicÚloopback)Úlog)ÚTestCase)ÚClientTLSContextÚServerTLSContextc                   @   ó   e Zd Zdd„ ZdS )Ú#StringTransportWithConnectionLosingc                 C   s   | j  t ¡ ¡ d S ©N)r   ÚconnectionLostr   ZConnectionDone©Úself© r   úgC:\Users\psant\Downloads\PAF backend\school\venv\Lib\site-packages\twisted/mail/test/test_pop3client.pyÚloseConnection!   ó   z2StringTransportWithConnectionLosing.loseConnectionN)Ú__name__Ú
__module__Ú__qualname__r   r   r   r   r   r       ó    r   s   180s   LOGIN)s   TOPs   LOGIN-DELAYs   UIDLó   STLSs   USERs   SASLTc                 C   s8   t ƒ }t|_tƒ }||_| |¡ | r| d¡ ||fS )Ns   +OK Hello!
)Ú
POP3ClientÚcapCacheZ	_capCacher   r   ZmakeConnectionÚdataReceived)ÚgreetÚpÚtr   r   r   ÚsetUp/   s   

r*   c                 C   s   | fdd„S )Nc                 S   s   |ƒ S r   r   )ÚresultÚfr   r   r   Ú<lambda>A   s    zstrip.<locals>.<lambda>r   )r,   r   r   r   Ústrip@   s   r.   c                   @   st   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ Zdd„ Zdd„ Z	dd„ Z
dd„ Zdd„ Zdd„ Zdd„ Zdd„ ZdS )ÚPOP3ClientLoginTestsc                    sD   t dd�\}}d|_| dd¡}| d¡ ˆ  |t¡ ‡ fdd„¡S )	NF©r'   Tó   usernameó   passwords   -ERR Offline for maintenance
c                    ó   ˆ   | jd d¡S )Nr   s   Offline for maintenance©ÚassertEqualÚargs©Úexcr   r   r   r-   K   ó    z;POP3ClientLoginTests.testNegativeGreeting.<locals>.<lambda>)r*   ÚallowInsecureLoginÚloginr&   ÚassertFailurer   ÚaddCallback©r   r(   r)   Údr   r   r   ÚtestNegativeGreetingE   s   

ÿz)POP3ClientLoginTests.testNegativeGreetingc                 C   ó<   t ƒ \}}| d¡}|  | ¡ d¡ | d¡ | | jd¡S )Nr1   ó   USER username
s   +OK send password
s   send password)r*   Úuserr5   Úvaluer&   r=   r>   r   r   r   Ú
testOkUserN   ó
   


zPOP3ClientLoginTests.testOkUserc                    óH   t ƒ \}}| d¡}ˆ  | ¡ d¡ | d¡ ˆ  |t¡ ‡ fdd„¡S )Nr1   rB   s   -ERR account suspended
c                    r3   )Nr   s   account suspendedr4   r7   r   r   r   r-   [   r9   z2POP3ClientLoginTests.testBadUser.<locals>.<lambda>)r*   rC   r5   rD   r&   r<   r   r=   r>   r   r   r   ÚtestBadUserU   ó   



ÿz POP3ClientLoginTests.testBadUserc                 C   rA   )Nr2   ó   PASS password
s   +OK you're in!
s
   you're in!)r*   Úpasswordr5   rD   r&   r=   r>   r   r   r   Ú
testOkPass^   rF   zPOP3ClientLoginTests.testOkPassc                    rG   )Nr2   rJ   s   -ERR go away
c                    r3   )Nr   s   go awayr4   r7   r   r   r   r-   k   r9   z2POP3ClientLoginTests.testBadPass.<locals>.<lambda>)r*   rK   r5   rD   r&   r<   r   r=   r>   r   r   r   ÚtestBadPasse   rI   z POP3ClientLoginTests.testBadPassc                 C   s^   t ƒ \}}d|_| dd¡}|  | ¡ d¡ | d¡ |  | ¡ d¡ | d¡ | | jd¡S )	NTr1   r2   rB   s   +OK go ahead
ó   USER username
PASS password
s   +OK password accepted
s   password accepted)r*   r:   r;   r5   rD   r&   r=   r>   r   r   r   ÚtestOkLoginn   s   


z POP3ClientLoginTests.testOkLoginc                    sj   t ƒ \}}d|_| dd¡}ˆ  | ¡ d¡ | d¡ ˆ  | ¡ d¡ | d¡ ˆ  |t¡ ‡ fdd	„¡S )
NTr1   r2   rB   s   +OK waiting on you
rN   ó   -ERR bogus login
c                    r3   ©Nr   s   bogus loginr4   r7   r   r   r   r-   �   r9   z;POP3ClientLoginTests.testBadPasswordLogin.<locals>.<lambda>©	r*   r:   r;   r5   rD   r&   r<   r   r=   r>   r   r   r   ÚtestBadPasswordLoginx   s   



ÿz)POP3ClientLoginTests.testBadPasswordLoginc                    sP   t ƒ \}}d|_| dd¡}ˆ  | ¡ d¡ | d¡ ˆ  |t¡ ‡ fdd„¡S )NTr1   r2   rB   rP   c                    r3   rQ   r4   r7   r   r   r   r-   ‹   r9   z;POP3ClientLoginTests.testBadUsernameLogin.<locals>.<lambda>rR   r>   r   r   r   ÚtestBadUsernameLogin„   s   


ÿz)POP3ClientLoginTests.testBadUsernameLoginc                 C   s*   t dd�\}}| d¡ |  |jd ¡ d S )NFr0   s"   +OK lalala this has no challenge
©r*   r&   r5   ZserverChallenge©r   r(   r)   r   r   r   ÚtestServerGreetingŽ   ó   
z'POP3ClientLoginTests.testServerGreetingc                 C   s*   t dd�\}}| d¡ |  |jd¡ d S )NFr0   s   +OK <here is the challenge>
s   <here is the challenge>rU   rV   r   r   r   ÚtestServerGreetingWithChallenge“   rX   z4POP3ClientLoginTests.testServerGreetingWithChallengec                 C   sL   t dd�\}}| d¡ | dd¡}|  | ¡ d¡ | d¡ | | jd¡S )	NFr0   s"   +OK <challenge string goes here>
r1   r2   s0   APOP username f34f1e464d0d7927607753129cabe39a
s   +OK Welcome!
s   Welcome!)r*   r&   r;   r5   rD   r=   r>   r   r   r   ÚtestAPOP˜   s   
ÿ
zPOP3ClientLoginTests.testAPOPc                 C   s>   t dd�\}}| d¡ | dd¡}|  | ¡ ¡ |  |t¡S )NFr0   ó   +OK Howdy
r1   r2   )r*   r&   r;   ZassertFalserD   r<   r   r>   r   r   r   Ú testInsecureLoginRaisesException¢   s
   
z5POP3ClientLoginTests.testInsecureLoginRaisesExceptionc                 C   sp   t dd�\}}t|tjƒ | d¡ | dd¡}|  | ¡ d¡ | ¡  | d¡ |  | ¡ d¡ | d¡ |S )
zÕ
        If a server doesn't offer APOP but the transport is secured using
        SSL or TLS, a plaintext login should be allowed, not rejected with
        an InsecureAuthenticationDisallowed exception.
        Fr0   r[   r1   r2   rB   s   +OK
rJ   N)	r*   r   r   ZISSLTransportr&   r;   r5   rD   Úclearr>   r   r   r   Ú testSSLTransportConsideredSecure©   s   


z5POP3ClientLoginTests.testSSLTransportConsideredSecureN)r   r    r!   r@   rE   rH   rL   rM   rO   rS   rT   rW   rY   rZ   r\   r^   r   r   r   r   r/   D   s    			


r/   c                   @   ó   e Zd Zdd„ Zdd„ ZdS )ÚListConsumerc                 C   s
   i | _ d S r   ©Údatar   r   r   r   Ú__init__¼   ó   
zListConsumer.__init__c                 C   s    |\}}| j  |g ¡ |¡ d S r   )rb   Ú
setdefaultÚappend)r   r+   ÚitemrD   r   r   r   Úconsume¿   s   zListConsumer.consumeN©r   r    r!   rc   rh   r   r   r   r   r`   »   ó    r`   c                   @   r_   )ÚMessageConsumerc                 C   s
   g | _ d S r   ra   r   r   r   r   rc   Å   rd   zMessageConsumer.__init__c                 C   s   | j  |¡ d S r   )rb   rf   ©r   Úliner   r   r   rh   È   ó   zMessageConsumer.consumeNri   r   r   r   r   rk   Ä   rj   rk   c                   @   s<   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ Zdd„ ZdS )ÚPOP3ClientListTestsc                 C   óH   t ƒ \}}| ¡ }|  | ¡ d¡ | d¡ | d¡ | | jg d¢¡S )Nó   LIST
ó   +OK Here it comes
s   1 3
2 2
3 1
.
)é   é   é   )r*   ÚlistSizer5   rD   r&   r=   r>   r   r   r   ÚtestListSizeÍ   ó   


z POP3ClientListTests.testListSizec              
   C   sª   t ƒ \}}tƒ }|j}| |¡}|  | ¡ d¡ | d¡ | d¡ |  |jdgdgdgdœ¡ | d¡ |  |jdgdgdgdgdgdgd	œ¡ | d
¡ | | j	|¡S )Nrq   rr   s   1 3
2 2
3 1
rs   rt   ru   )r   ru   rt   s   5 3
6 2
7 1
)r   ru   rt   é   é   é   ó   .
)
r*   r`   rh   rv   r5   rD   r&   rb   r=   ÚassertIdentical©r   r(   r)   Úcr,   r?   r   r   r   ÚtestListSizeWithConsumerÕ   s   




(
z,POP3ClientListTests.testListSizeWithConsumerc                    óF   t ƒ \}}| ¡ }ˆ  | ¡ d¡ | d¡ ˆ  |t¡ ‡ fdd„¡S )Nrq   ó!   -ERR Fatal doom server exploded
c                    r3   ©Nr   s   Fatal doom server explodedr4   r7   r   r   r   r-   é   r9   z8POP3ClientListTests.testFailedListSize.<locals>.<lambda>)r*   rv   r5   rD   r&   r<   r   r=   r>   r   r   r   ÚtestFailedListSizeã   ó   


ÿz&POP3ClientListTests.testFailedListSizec                 C   rp   )Nó   UIDL
rr   s   1 abc
2 def
3 ghi
.
)ó   abcs   defs   ghi)r*   ÚlistUIDr5   rD   r&   r=   r>   r   r   r   ÚtestListUIDì   rx   zPOP3ClientListTests.testListUIDc                 C   sx   t ƒ \}}tƒ }|j}| |¡}|  | ¡ d¡ | d¡ | d¡ |  |jdgdgdgdœ¡ | d¡ | | j	|¡S )	Nr†   rr   s   1 xyz
2 abc
5 mno
s   xyzr‡   s   mno)r   ru   ry   r|   )
r*   r`   rh   rˆ   r5   rD   r&   rb   r=   r}   r~   r   r   r   ÚtestListUIDWithConsumerô   s   




z+POP3ClientListTests.testListUIDWithConsumerc                    r�   )Nr†   r‚   c                    r3   rƒ   r4   r7   r   r   r   r-     r9   z7POP3ClientListTests.testFailedListUID.<locals>.<lambda>)r*   rˆ   r5   rD   r&   r<   r   r=   r>   r   r   r   ÚtestFailedListUID   r…   z%POP3ClientListTests.testFailedListUIDN)	r   r    r!   rw   r€   r„   r‰   rŠ   r‹   r   r   r   r   ro   Ì   s    	ro   c                   @   sL   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ Zdd„ Zdd„ Z	dd„ Z
dS )ÚPOP3ClientMessageTestsc                 C   s^   t ƒ \}}| d¡}|  | ¡ d¡ | d¡ | d¡ | d¡ | d¡ | | jddg¡S )	Né   ó   RETR 8
ó   +OK Message incoming
ó   La la la here is message text
s"   ..Further message text tra la la
r|   ó   La la la here is message texts   .Further message text tra la la©r*   Úretriever5   rD   r&   r=   r>   r   r   r   ÚtestRetrieve  s   





þz#POP3ClientMessageTests.testRetrievec                 C   s`   t ƒ \}}tƒ }|j}| d|¡}|  | ¡ d¡ | d¡ | d¡ | d¡ | | j||¡S )Nr�   rŽ   r�   r�   s   ..Further message text
.
)	r*   rk   rh   r“   r5   rD   r&   r=   Ú_cbTestRetrieveWithConsumerr~   r   r   r   ÚtestRetrieveWithConsumer  s   



z/POP3ClientMessageTests.testRetrieveWithConsumerc                 C   ó"   |   ||¡ |  |jddg¡ d S )Nr‘   s   .Further message text©r}   r5   rb   ©r   r+   r,   r   r   r   r   r•   #  s   
ÿz2POP3ClientMessageTests._cbTestRetrieveWithConsumerc                 C   sb   t ƒ \}}|jddd�}|  | ¡ d¡ | d¡ | d¡ | d¡ | d¡ | | jd	d
g¡S )Nr�   rt   ©Úlinesó	   TOP 8 2
ó   +OK 2 lines on the way
ó   Line the first!  Woop
ó   Line the last!  Bye
r|   ó   Line the first!  Woopó   Line the last!  Byer’   r>   r   r   r   ÚtestPartialRetrieve)  s   





ÿz*POP3ClientMessageTests.testPartialRetrievec                 C   sn   t ƒ \}}tƒ }|j}|jd|dd�}|  | ¡ d¡ | d¡ | d¡ | d¡ | d¡ | | j||¡S )	Nr�   rt   rš   rœ   r�   rž   rŸ   r|   )	r*   rk   rh   r“   r5   rD   r&   r=   Ú"_cbTestPartialRetrieveWithConsumerr~   r   r   r   ÚtestPartialRetrieveWithConsumer5  s   




z6POP3ClientMessageTests.testPartialRetrieveWithConsumerc                 C   r—   )Nr    r¡   r˜   r™   r   r   r   r£   A  s   z9POP3ClientMessageTests._cbTestPartialRetrieveWithConsumerc                    rG   )Nr   s   RETR 1
r‚   c                    r3   rƒ   r4   r7   r   r   r   r-   K  r9   z;POP3ClientMessageTests.testFailedRetrieve.<locals>.<lambda>)r*   r“   r5   rD   r&   r<   r   r=   r>   r   r   r   ÚtestFailedRetrieveE  rI   z)POP3ClientMessageTests.testFailedRetrievec                    s¢   t ƒ \‰ }‡ ‡fdd„tdƒD ƒ}tddƒD ]3}ˆ | ¡ d|f ¡ | ¡  ˆ  d¡ ˆ  d|f ¡ ˆ  d	|f ¡ ˆ | ¡ d
¡ ˆ  d¡ qtj|dd�S )z‘
        Issue three retrieve calls immediately without waiting for any to
        succeed and make sure they all do succeed eventually.
        c              	      s8   g | ]}ˆ   |¡ ˆjd |d f d|d f g¡‘qS )s   First line of %d.ru   s   Second line of %d.)r“   r=   r5   )Ú.0Úi©r(   r   r   r   Ú
<listcomp>T  s    
üþÿzCPOP3ClientMessageTests.test_concurrentRetrieves.<locals>.<listcomp>rs   ru   ry   s	   RETR %d
r�   s   First line of %d.
s   Second line of %d.
ó    r|   T)ZfireOnOneErrbackN)r*   Úranger5   rD   r]   r&   r   ZDeferredList)r   r)   Úmessagesr§   r   r¨   r   Útest_concurrentRetrievesN  s   
û
z/POP3ClientMessageTests.test_concurrentRetrievesN)r   r    r!   r”   r–   r•   r¢   r¤   r£   r¥   r­   r   r   r   r   rŒ   
  s    	rŒ   c                   @   s\   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ Zdd„ Zdd„ Z	dd„ Z
dd„ Zdd„ ZdS )ÚPOP3ClientMiscTestsc              
   C   s`   t ƒ \}}|jdd�}|  | ¡ d¡ | d¡ | d¡ | | jd d d g d¢ddgdgd	œ¡S )
Nr   ©ZuseCacheó   CAPA
s   +OK Capabilities on the way
s!   X
Y
Z
A 1 2 3
B 1 2
C 1
.
)ó   1ó   2ó   3r±   r²   )ó   Xó   Yó   Zó   Aó   Bó   C©r*   Zcapabilitiesr5   rD   r&   r=   r>   r   r   r   ÚtestCapabilityi  s   


úþz"POP3ClientMiscTests.testCapabilityc                 C   s>   t ƒ \}}|jdd�}|  | ¡ d¡ | d¡ | | ji ¡S )Nr   r¯   r°   ó   -ERR This server is lame!
rº   r>   r   r   r   ÚtestCapabilityError{  s
   

z'POP3ClientMiscTests.testCapabilityErrorc                 C   ó:   t ƒ \}}| ¡ }|  | ¡ d¡ | d¡ | | jd¡S )Nó   STAT
s   +OK 1 1212
)ru   i¼  )r*   Ústatr5   rD   r&   r=   r>   r   r   r   ÚtestStat‚  ó
   

zPOP3ClientMiscTests.testStatc                    r�   )Nr¿   r¼   c                    r3   ©Nr   s   This server is lame!r4   r7   r   r   r   r-   �  r9   z3POP3ClientMiscTests.testStatError.<locals>.<lambda>)r*   rÀ   r5   rD   r&   r<   r   r=   r>   r   r   r   ÚtestStatError‰  r…   z!POP3ClientMiscTests.testStatErrorc                 C   r¾   )Nó   NOOP
s   +OK No-op to you too!
s   No-op to you too!)r*   Únoopr5   rD   r&   r=   r>   r   r   r   ÚtestNoop’  rÂ   zPOP3ClientMiscTests.testNoopc                    r�   )NrÅ   r¼   c                    r3   rÃ   r4   r7   r   r   r   r-   Ÿ  r9   z3POP3ClientMiscTests.testNoopError.<locals>.<lambda>)r*   rÆ   r5   rD   r&   r<   r   r=   r>   r   r   r   ÚtestNoopError™  r…   z!POP3ClientMiscTests.testNoopErrorc                 C   r¾   )Nó   RSET
s   +OK Reset state
s   Reset state)r*   Úresetr5   rD   r&   r=   r>   r   r   r   ÚtestRset¢  rÂ   zPOP3ClientMiscTests.testRsetc                    r�   )NrÉ   r¼   c                    r3   rÃ   r4   r7   r   r   r   r-   ¯  r9   z3POP3ClientMiscTests.testRsetError.<locals>.<lambda>)r*   rÊ   r5   rD   r&   r<   r   r=   r>   r   r   r   ÚtestRsetError©  r…   z!POP3ClientMiscTests.testRsetErrorc                 C   rA   )Nrs   ó   DELE 4
s   +OK Hasta la vista
s   Hasta la vista)r*   Údeleter5   rD   r&   r=   r>   r   r   r   Ú
testDelete²  rF   zPOP3ClientMiscTests.testDeletec                    rG   )Nrs   rÍ   s   -ERR Winner is not you.
c                    r3   )Nr   s   Winner is not you.r4   r7   r   r   r   r-   ¿  r9   z5POP3ClientMiscTests.testDeleteError.<locals>.<lambda>)r*   rÎ   r5   rD   r&   r<   r   r=   r>   r   r   r   ÚtestDeleteError¹  rI   z#POP3ClientMiscTests.testDeleteErrorN)r   r    r!   r»   r½   rÁ   rÄ   rÇ   rÈ   rË   rÌ   rÏ   rÐ   r   r   r   r   r®   h  s    			r®   c                   @   s   e Zd Zddd„Zdd„ ZdS )ÚSimpleClientNc                 C   s   || _ d| _d S )NT)Údeferredr:   )r   rÒ   ÚcontextFactoryr   r   r   rc   Ä  s   
zSimpleClient.__init__c                 C   s   | j  d ¡ d S r   )rÒ   Úcallback)r   Ú	challenger   r   r   ÚserverGreetingÈ  rn   zSimpleClient.serverGreetingr   )r   r    r!   rc   rÖ   r   r   r   r   rÑ   Ã  s    
rÑ   c                   @   s<   e Zd ZdZdZdd„ Zdd„ Zdd„ Zdd	„ Zd
d„ Z	dS )ÚPOP3HelperMixinNc                 C   s:   t  ¡ }tj| jd�| _t|| jd�| _d| j_	|| _
d S )N)rÓ   é   )r   ÚDeferredr   ZPOP3TestServerÚ	serverCTXÚserverrÑ   Ú	clientCTXÚclientÚtimeoutÚ	connected)r   r?   r   r   r   r*   Ð  s
   
zPOP3HelperMixin.setUpc                 C   s   | ` | `| `d S r   )rÛ   rÝ   rß   r   r   r   r   ÚtearDown×  s   zPOP3HelperMixin.tearDownc                 C   s   | j j ¡  d S r   )rÝ   Ú	transportr   )r   Úignorer   r   r   Ú_cbStopClientÜ  rn   zPOP3HelperMixin._cbStopClientc                 C   s   | j j ¡  | jj ¡  |S r   )rÝ   rá   r   rÛ   )r   Úfailurer   r   r   Ú
_ebGeneralß  s   zPOP3HelperMixin._ebGeneralc                 C   s   t j| j| jdd�S )NF)Znoisy)r   ZloopbackTCPrÛ   rÝ   r   r   r   r   r   ä  r   zPOP3HelperMixin.loopback)
r   r    r!   rÚ   rÜ   r*   rà   rã   rå   r   r   r   r   r   r×   Ì  s    r×   c                   @   s   e Zd ZG dd„ dejƒZdS )ÚTLSServerFactoryc                   @   s2   e Zd ZU dZg Zee ed< dd„ Zdd„ Z	dS )zTLSServerFactory.protocolNÚoutputc                 C   s8   g | j _| jd d … | _| j d¡D ]}|  |¡ qd S )Nr   )ÚfactoryÚinputrç   ÚpopÚsendLinerl   r   r   r   ÚconnectionMadeí  s
   ÿz(TLSServerFactory.protocol.connectionMadec                    sF   ˆ j j |¡ ‡ fdd„ˆ j d¡D ƒ |dkr!ˆ j ˆ j¡ d S d S )Nc                    s   g | ]}ˆ   |¡‘qS r   )rë   )r¦   Úlr   r   r   r©   õ  s    z:TLSServerFactory.protocol.lineReceived.<locals>.<listcomp>r   r#   )rè   ré   rf   rç   rê   rá   ÚstartTLSÚcontextrl   r   r   r   ÚlineReceivedó  s
   ÿz&TLSServerFactory.protocol.lineReceived)
r   r    r!   rï   rç   r   ÚbytesÚ__annotations__rì   rð   r   r   r   r   r   é  s
   
 r   N)r   r    r!   r   ZLineReceiverr   r   r   r   r   ræ   è  s    ræ   zOpenSSL not presentc                   @   s   e Zd ZdZdd„ ZdS )ÚPOP3TLSTestsz=
    Tests for POP3Client's support for TLS connections.
    c           
         s  t ƒ ‰dgg d¢dgddgdggˆj_tƒ ˆj_tjdˆdd�}ˆ |j¡ | 	¡ j
}| 	¡ j}t ¡ ‰tt ¡ tƒ ƒ‰‡‡fdd„}|ˆ_t ¡ }‡fd	d
„|_t |||¡‰ ‡fdd„}‡fdd„}‡‡fdd„}‡ ‡fdd„}	ˆj |¡ ˆj |¡ ˆj |¡ ˆj |	¡ ˆjS )zd
        POP3Client.startTLS starts a TLS session over its existing TCP
        connection.
        ó   +OK)rô   r#   ó   .rõ   r   z	127.0.0.1)Z	interfacec                    s   t  ˆ| ¡ ˆ  d ¡ d S r   )rÑ   r   rÔ   )Úreason)ÚconnLostDeferredÚcpr   r   r     ó   z2POP3TLSTests.test_startTLS.<locals>.connectionLostc                      s   ˆ S r   r   r   ©rø   r   r   r-     s    z,POP3TLSTests.test_startTLS.<locals>.<lambda>c                    ó   t  d¡ ˆ  ¡ S )Nz!Connected to server; starting TLS)r   Úmsgrî   ©Zignoredrú   r   r   ÚcbConnected!  ó   
z/POP3TLSTests.test_startTLS.<locals>.cbConnectedc                    rû   )NzStarted TLS; disconnecting)r   rü   Úquitrý   rú   r   r   ÚcbStartedTLS%  rÿ   z0POP3TLSTests.test_startTLS.<locals>.cbStartedTLSc                    s    t  d¡ ˆ  ˆjg d¢¡ d S )Nz.Disconnected; asserting correct input received)ó   CAPAr#   r  s   QUIT)r   rü   r5   ré   )Zign)r   Úsfr   r   ÚcbDisconnected)  s   
z2POP3TLSTests.test_startTLS.<locals>.cbDisconnectedc                    s   t  d¡ ˆ  ¡  ˆS )NzEAsserted correct input; disconnecting client and shutting down server)r   rü   Z
disconnect©r+   )Úconnr÷   r   r   Úcleanup-  s
   ÿz+POP3TLSTests.test_startTLS.<locals>.cleanupN)ræ   r   rç   r   rï   r	   Z	listenTCPZ
addCleanupÚstopListeningZgetHostÚhostÚportr   rÙ   rÑ   r   r   ZClientFactoryZ
connectTCPrÒ   r=   ZaddBoth)
r   r
  ÚHÚPr   Úcfrþ   r  r  r  r   )r  r÷   rø   r   r  r   Útest_startTLS  s8   û


zPOP3TLSTests.test_startTLSN)r   r    r!   Ú__doc__r  r   r   r   r   ró   ú  s    ró   c                   @   r   )ÚPOP3TimeoutTestsc                    s‚   ‡ ‡‡fdd„}‡fdd„‰ ‡fdd„‰‡fdd„}d	ˆj _d
t_||g}tˆjjtt|ƒƒ ˆj ˆj¡ ˆj 	ˆj
¡ ˆ ¡ S )Nc                     s&   ˆj  dd¡} |  ˆ ¡ |  ˆ¡ | S )NÚtestÚtwisted)rÝ   r;   r=   Ú
addErrback)r?   ©ÚloggedInr   ÚtimedOutr   r   r;   ?  s   

z+POP3TimeoutTests.testTimeout.<locals>.loginc                    s   ˆ   d¡ d S )Nz%Successfully logged in!?  Impossible!)Zfailr  r   r   r   r  E  s   z.POP3TimeoutTests.testTimeout.<locals>.loggedInc                    s   |   tj¡ ˆ  d ¡ d S r   )Ztrapr   ÚTimeoutErrorrã   )rä   r   r   r   r  H  rù   z.POP3TimeoutTests.testTimeout.<locals>.timedOutc                      s
   ˆ j  ¡ S r   )rÝ   r   r   r   r   r   r   L  rd   z*POP3TimeoutTests.testTimeout.<locals>.quitg{®Gáz„?T)rÝ   rÞ   r   ZTIMEOUT_RESPONSEÚmaprß   r=   r.   rã   r  rå   r   )r   r;   r   Úmethodsr   r  r   ÚtestTimeout>  s   zPOP3TimeoutTests.testTimeoutN)r   r    r!   r  r   r   r   r   r  =  r"   r  c                   @   s    e Zd ZdZdd„ Zdd„ ZdS )ÚPOP3ClientModuleStructureTestszt
    Miscellaneous tests more to do with module/package structure than
    anything to do with the POP3 client.
    c                 C   s   |   tjjjg ¡ dS )zŒ
        twisted.mail._pop3client.__all__ should be empty because all classes
        should be imported through twisted.mail.pop3.
        N)r5   r  ÚmailZ_pop3clientÚ__all__r   r   r   r   Útest_allb  s   z'POP3ClientModuleStructureTests.test_allc                 C   sn   dd„ t  tjd t j¡D ƒ}|D ]#}|dks*|  ttjj	|ƒ|› dtjj	› �¡ q|  ttjj	dƒ¡ qdS )a  
        Every public class in twisted.mail._pop3client should be available as
        a member of twisted.mail.pop3 with the exception of
        twisted.mail._pop3client.POP3Client which should be available as
        twisted.mail.pop3.AdvancedClient.
        c                 S   s$   g | ]}|d  d  dks|d  ‘qS )r   Ú_r   )r¦   r   r   r   r   r©   p  s    ûÿz>POP3ClientModuleStructureTests.test_import.<locals>.<listcomp>ztwisted.mail._pop3clientr$   z not in r   N)
ÚinspectÚ
getmembersÚsysÚmodulesÚisclassÚ
assertTrueÚhasattrr  r  Zpop3)r   ZpublicClassesZpcr   r   r   Útest_importi  s   ÿþþùz*POP3ClientModuleStructureTests.test_importN)r   r    r!   r  r  r'  r   r   r   r   r  \  s    r  )T)6r   r"  Útypingr   Zunittestr   Zzope.interfacer   Ztwisted.mail._pop3clientr  Ztwisted.internetr   r   r   r   r	   Ztwisted.internet.testingr
   Ztwisted.mail.pop3r   r$   r   r   Ztwisted.mail.testr   Ztwisted.protocolsr   r   Ztwisted.pythonr   Ztwisted.trial.unittestr   Ztwisted.test.ssl_helpersr   r   ÚImportErrorr   r%   r*   r.   r/   r`   rk   ro   rŒ   r®   rÑ   r×   ZServerFactoryræ   ZIReactorSSLró   r  r  r   r   r   r   Ú<module>   sV   þú

w	>^[	
A