U
    
W[4  ć                   @   sj   d Z ddlmZmZ ddlZddlmZ ddlmZ ddl	m
Z
mZ ddlmZmZ G dd	 d	ejZdS )
z#
Tests for L{twisted.names.cache}.
é    )ŚdivisionŚabsolute_importN)ŚverifyClass)Śunittest)ŚdnsŚcache)ŚtaskŚ
interfacesc                   @   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   ś?/usr/lib/python3/dist-packages/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   é;   r0   é1   é   é'   r   )r   Zttlr   )Śresultr   r   r   ŚcbLookupV   s    z0CachingTests.test_normalLookup.<locals>.cbLookup)r   r"   r#   r   r$   r   r%   r   r   ŚcacheResultr   r'   r*   r   )r   r,   r-   r   r6   r   r   r   Śtest_normalLookupC   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   r7   r'   r(   r)   r*   r+   )r   r,   r-   r   r.   r   r   r   Śtest_cachedResultExpires_   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_expiredTTLLookupx   s.    
’
’
’ü

žž
 ’z"CachingTests.test_expiredTTLLookupN)
Ś__name__Ś
__module__Ś__qualname__Ś__doc__r   r   r/   r8   r9   r>   r   r   r   r   r
      s   r
   )rB   Z
__future__r   r   r   Zzope.interface.verifyr   Ztwisted.trialr   Ztwisted.namesr   r   Ztwisted.internetr   r	   ZTestCaser
   r   r   r   r   Ś<module>   s   