o
    ÆbĶ  ć                   @   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   Ś	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   ŚQueryŚMXŚINŚtimeŚ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   ©Ś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   é;   r2   é1   é   é'   r   )r   Ś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   r9   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   r:   r)   r*   r+   r,   r-   )r   r.   r/   r   r0   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>°   s    z4CachingTests.test_expiredTTLLookup.<locals>.<lambda>r   r"   gĶĢĢĢĢN@)r   r$   r%   r   r&   r   r'   Ś	callLaterr   r
   r   r(   r)   r+   r,   r-   )r   r.   r/   r   r   r   r   Śtest_expiredTTLLookup   s2   ’’’’’’õ
ž’ł

z"CachingTests.test_expiredTTLLookupN)
Ś__name__Ś
__module__Ś__qualname__Ś__doc__r   r   r1   r;   r<   rA   r   r   r   r   r      s    $&"r   )rE   r   Śzope.interface.verifyr   Śtwisted.internetr   r   Śtwisted.namesr   r   Śtwisted.trialr   ŚTestCaser   r   r   r   r   Ś<module>   s   