U
    Â“«jÍ  ã                   @   sZ   d Z ddlZddlmZ ddlmZmZ ddlmZm	Z	 ddl
mZ G dd„ dejƒZdS )	z#
Tests for L{twisted.names.cache}.
é    N)ÚverifyClass)Ú
interfacesÚtask)ÚcacheÚdns)Úunittestc                   @   s@   e Zd ZdZdd„ Zdd„ Zdd„ Zdd	„ Zd
d„ Zdd„ Z	dS )ÚCachingTestsz+
    Tests for L{cache.CacheResolver}.
    c                 C   s   t tjtjƒ dS )zK
        L{cache.CacheResolver} implements L{interfaces.IResolver}
        N)r   r   Z	IResolverr   ÚCacheResolver©Úself© r   úA/tmp/pip-unpacked-wheel-59kc99xd/twisted/names/test/test_cache.pyÚtest_interface   s    zCachingTests.test_interfacec                 C   sF   t  tjdtjtjd�t ¡ g g g ffi¡}| d¡ | j	g g g f¡S )Nó   example.com©ÚnameÚtypeÚcls)
r   r	   r   ÚQueryZMXÚINÚtimeZlookupMailExchangeÚaddCallbackÚassertEqual)r   Úcr   r   r   Útest_lookup   s    þÿÿ
 ÿzCachingTests.test_lookupc                 C   sÀ   t  dt jt jdt  dd¡¡gt  dt jt jdt  dd¡¡gt  dt jt jdt  dd¡¡gf}t ¡ }t jdt jt jd�}tj	|| 
¡ |fi|d�}| d¡ |  ||j¡ |  | d¡t j¡S )zŠ
        Cache entries passed into L{cache.CacheResolver.__init__} get
        cancelled just like entries added with cacheResult
        r   é<   ú	127.0.0.1é2   é(   r   ©Zreactor)r   ÚRRHeaderÚAr   ÚRecord_Ar   ÚClockr   r   r	   ÚsecondsÚadvanceÚassertNotInÚassertFailureÚlookupAddressÚDomainError)r   ÚrÚclockÚqueryr   r   r   r   Útest_constructorExpires*   s>        
ÿÿ    
ÿÿ    
ÿÿõ
z$CachingTests.test_constructorExpiresc                    s´   t  dt jt jdt  dd¡¡gt  dt jt jdt  dd¡¡gt  dt jt jdt  dd¡¡gf}t ¡ }tj|d�}| 	t j
dt jt jd�|¡ | d¡ ‡ fd	d
„}| d¡ |¡S )z›
        When a cache lookup finds a cached entry from 1 second ago, it is
        returned with a TTL of original TTL minus the elapsed 1 second.
        r   r   r   r   r   r   r   é   c                    s^   ˆ   | d d jd¡ ˆ   | d d jd¡ ˆ   | d d jd¡ ˆ   | d d jjd¡ d S )Nr   é;   r.   é1   é   é'   r   )r   Zttlr   )Úresultr
   r   r   ÚcbLookupl   s    z0CachingTests.test_normalLookup.<locals>.cbLookup)r   r    r!   r   r"   r   r#   r   r	   ÚcacheResultr   r%   r(   r   )r   r*   r+   r   r4   r   r
   r   Útest_normalLookupN   s>        
ÿÿ    
ÿÿ    
ÿÿõ
zCachingTests.test_normalLookupc                 C   s¾   t  dt jt jdt  dd¡¡gt  dt jt jdt  dd¡¡gt  dt jt jdt  dd¡¡gf}t ¡ }tj|d�}t j	dt jt jd�}| 
||¡ | d¡ |  ||j¡ |  | d¡t j¡S )zW
        Once the TTL has been exceeded, the result is removed from the cache.
        r   r   r   r   r   r   r   )r   r    r!   r   r"   r   r#   r   r	   r   r5   r%   r&   r'   r(   r)   )r   r*   r+   r   r,   r   r   r   Útest_cachedResultExpirest   s@        
ÿÿ    
ÿÿ    
ÿÿõ
z%CachingTests.test_cachedResultExpiresc                 C   s¸   t  dt jt jdt  dd¡¡gt  dt jt jdt  dd¡¡gt  dt jt jdt  dd¡¡gf}t ¡ }dd„ |_tj	t j
dt jt jd�| ¡ |fi|d	�}| d
¡ |  | d¡t j¡S )z»
        When the cache is queried exactly as the cached entry should expire but
        before it has actually been cleared, the cache does not return the
        expired entry.
        r   r   r   r   r   c                  _   s   d S )Nr   )ÚargsÚkwargsr   r   r   Ú<lambda>°   ó    z4CachingTests.test_expiredTTLLookup.<locals>.<lambda>r   r   gÍÌÌÌÌN@)r   r    r!   r   r"   r   r#   Z	callLaterr   r	   r   r$   r%   r'   r(   r)   )r   r*   r+   r   r   r   r   Útest_expiredTTLLookup–   sJ        
ÿÿ    
ÿÿ    
ÿÿõ
þÿù

z"CachingTests.test_expiredTTLLookupN)
Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r   r-   r6   r7   r<   r   r   r   r   r      s   $&"r   )r@   r   Zzope.interface.verifyr   Ztwisted.internetr   r   Ztwisted.namesr   r   Ztwisted.trialr   ZTestCaser   r   r   r   r   Ú<module>   s   