U
    c6{iĶ  ć                   @   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-hfbvu0bz/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   