Ë
    oj×  ã                   óŽ   — d Z ddlmZ ddlmZ ddlmZ ddlmZ ddl	m
Z
 ddlmZmZ ddlmZ dd	lmZ dd
lmZ  G d„ de«      Zy)z!
Tests for L{twisted.names.tap}.
é    )ÚThreadedResolver)ÚResolver)ÚPORT)ÚResolverChain)ÚSecondaryAuthorityService)ÚOptionsÚ_buildResolvers)Úplatform)Ú
UsageError)ÚSynchronousTestCasec                   ó8   — e Zd ZdZdd„Zdd„Zdd„Zdd„Zdd„Zy)	ÚOptionsTestszf
    Tests for L{Options}, defining how command line arguments for the DNS server
    are parsed.
    Nc                 ó0  — t        «       }| j                  t        |j                  ddg«       | j                  t        |j                  ddg«       | j                  t        |j                  ddg«       | j                  t        |j                  ddg«       y)zÏ
        If the value supplied for an I{--secondary} option does not provide a
        server IP address, optional port number, and domain name,
        L{Options.parseOptions} raises L{UsageError}.
        ú--secondaryÚ ú1.2.3.4z1.2.3.4:helloz1.2.3.4:hello/example.comN)r   ÚassertRaisesr   ÚparseOptions©ÚselfÚoptionss     ú=/usr/lib/python3/dist-packages/twisted/names/test/test_tap.pyÚtest_malformedSecondaryz$OptionsTests.test_malformedSecondary   sŠ   € ô “)ˆØ×Ñœ* g×&:Ñ&:¸]ÈBÐ<OÔPØ×Ñœ* g×&:Ñ&:¸]ÈIÐ<VÔWØ×ÑÜ˜×,Ñ,¨}¸oÐ.Nô	
ð 	×ÑÜØ× Ñ ØÐ7Ð8õ	
ó    c                 óŠ   — t        «       }|j                  ddg«       | j                  dt        fdgfg|j                  «       y)zÇ
        An argument of the form C{"ip/domain"} is parsed by L{Options} for the
        I{--secondary} option and added to its list of secondaries, using the
        default DNS port number.
        r   z1.2.3.4/example.comr   úexample.comN)r   r   ÚassertEqualr   Úsecondariesr   s     r   Útest_secondaryzOptionsTests.test_secondary+   sD   € ô “)ˆØ×Ñ˜mÐ-BÐCÔDØ×Ñ˜I¤tÐ,¨}¨oÐ>Ð?À×ATÑATÕUr   c                 ó~   — t        «       }|j                  ddg«       | j                  ddgfg|j                  «       y)z–
        An argument of the form C{"ip:port/domain"} can be used to specify an
        alternate port number for which to act as a secondary.
        r   ú1.2.3.4:5353/example.com)r   éé  r   N)r   r   r   r   r   s     r   Útest_secondaryExplicitPortz'OptionsTests.test_secondaryExplicitPort5   s@   € ô
 “)ˆØ×Ñ˜mÐ-GÐHÔIØ×ÑÐ,¨}¨oÐ>Ð?À×ATÑATÕUr   c                 ó0  — t        «       }|j                  g d¢«       | j                  t        |j                  «      d«       |j                  d   }| j                  |j                  d   t        «       | j                  |j                  d«       | j                  |j                  d«       |j                  d   }| j                  |j                  d   t        «       | j                  |j                  d«       | j                  |j                  d«       y	)
zœ
        After parsing I{--secondary} options, L{Options} constructs a
        L{SecondaryAuthorityService} instance for each configured secondary.
        )r   r!   r   z1.2.3.5:5354/example.comé   r   r   r"   é   z1.2.3.5iê  N)	r   r   r   ÚlenÚsvcsÚassertIsInstancer   ÚprimaryÚ_port)r   r   Ú	secondarys      r   Útest_secondaryAuthorityServicesz,OptionsTests.test_secondaryAuthorityServices>   sÙ   € ô
 “)ˆØ×Ñòô	
ð 	×Ñœ˜WŸ\™\Ó*¨AÔ.Ø—L‘L ‘Oˆ	Ø×Ñ˜gŸl™l¨1™oÔ/HÔIØ×Ñ˜×*Ñ*¨IÔ6Ø×Ñ˜Ÿ™¨$Ô/Ø—L‘L ‘Oˆ	Ø×Ñ˜gŸl™l¨1™oÔ/HÔIØ×Ñ˜×*Ñ*¨IÔ6Ø×Ñ˜Ÿ™¨$Õ/r   c                 ó  — t        «       }|j                  g d¢«       t        |«      \  }}|D ]M  }t        |t        «      sŒ|j
                  d   }t        |t        «      sŒ4|j                  j                  «        ŒO t        j                  «       dk7  r[ddlm} |j                  D ]F  }| j                  |j                  j                   t"        j$                  «       |j                  «        ŒH | j'                  |d   t        «       y)zÆ
        Recursive DNS lookups, if enabled, should be a last-resort option.
        Any other lookup method (cache, local lookup, etc.) should take
        precedence over recursive lookups
        )z--hosts-filez	hosts.txtz--recursiveéÿÿÿÿÚposixr   )ÚreactorN)r   r   r	   Ú
isinstancer   Ú	resolversr   Ú
_parseCallÚcancelr
   ÚgetTypeÚtwisted.internetr1   Ú_newTimedCallsr   ÚfuncÚ__func__r   Ú_cleanupr)   )r   r   ÚcaÚclÚxÚrecurserr1   s          r   Útest_recursiveConfigurationz(OptionsTests.test_recursiveConfigurationV   s×   € ô “)ˆØ×ÑÒIÔJÜ  Ó)‰ˆˆBð ò 	1ˆAÜ˜!œ]Õ+ØŸ;™; r™?�Ü˜h¬Õ1Ø×'Ñ'×.Ñ.Õ0ð		1ô ×ÑÓ Ò(õ 1à×+Ñ+ò �Ø× Ñ  §¡§¡Ô2B×2KÑ2KÔLØ—‘•
ðð 	×Ñ˜b ™f¤mÕ4r   )ÚreturnN)	Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r   r#   r-   r@   © r   r   r   r      s"   „ ñó

ó$VóVó0ô0 5r   r   N)rE   Útwisted.internet.baser   Útwisted.names.clientr   Útwisted.names.dnsr   Útwisted.names.resolver   Útwisted.names.secondaryr   Útwisted.names.tapr   r	   Útwisted.python.runtimer
   Útwisted.python.usager   Útwisted.trial.unittestr   r   rF   r   r   ú<module>rP      s6   ðñõ 3Ý )Ý "Ý /Ý =ß 6Ý +Ý +Ý 6ôc5Ð&õ c5r   