§
    Ètºf×  ã                   ó–   — 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dS )z!
Tests for L{twisted.names.tap}.
é    )ÚThreadedResolver)ÚResolver)ÚPORT)ÚResolverChain)ÚSecondaryAuthorityService)ÚOptionsÚ_buildResolvers)Úplatform)Ú
UsageError)ÚSynchronousTestCasec                   ó:   — e Zd ZdZd	d„Zd	d„Zd	d„Zd	d„Zd	d„ZdS )
ÚOptionsTestszf
    Tests for L{Options}, defining how command line arguments for the DNS server
    are parsed.
    ÚreturnNc                 ó:  — t          ¦   «         }|                      t          |j        ddg¦  «         |                      t          |j        ddg¦  «         |                      t          |j        ddg¦  «         |                      t          |j        ddg¦  «         dS )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     úZ/var/www/surfInsights/venv3-11/lib/python3.11/site-packages/twisted/names/test/test_tap.pyÚtest_malformedSecondaryz$OptionsTests.test_malformedSecondary   sª   € õ ‘)”)ˆØ×Ò�* gÔ&:¸]ÈBÐ<OÑPÔPÐPØ×Ò�* gÔ&:¸]ÈIÐ<VÑWÔWÐWØ×ÒÝ˜Ô,¨}¸oÐ.Nñ	
ô 	
ð 	
ð 	×ÒÝØÔ ØÐ7Ð8ñ	
ô 	
ð 	
ð 	
ð 	
ó    c                 óœ   — t          ¦   «         }|                     ddg¦  «         |                      dt          fdgfg|j        ¦  «         dS )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+   sU   € õ ‘)”)ˆØ×Ò˜mÐ-BÐCÑDÔDÐDØ×Ò˜I¥tÐ,¨}¨oÐ>Ð?ÀÔATÑUÔUÐUÐUÐUr   c                 óŽ   — t          ¦   «         }|                     ddg¦  «         |                      ddgfg|j        ¦  «         dS )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   sQ   € õ
 ‘)”)ˆØ×Ò˜mÐ-GÐHÑIÔIÐIØ×ÒÐ,¨}¨oÐ>Ð?ÀÔATÑUÔUÐUÐUÐUr   c                 óD  — t          ¦   «         }|                     g d¢¦  «         |                      t          |j        ¦  «        d¦  «         |j        d         }|                      |j        d         t          ¦  «         |                      |j        d¦  «         |                      |j        d¦  «         |j        d         }|                      |j        d         t          ¦  «         |                      |j        d¦  «         |                      |j        d¦  «         d	S )
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 ”Oˆ	Ø×Ò˜gœl¨1œoÕ/HÑIÔIÐIØ×Ò˜Ô*¨IÑ6Ô6Ð6Ø×Ò˜œ¨$Ñ/Ô/Ð/Ø”L ”Oˆ	Ø×Ò˜gœl¨1œoÕ/HÑIÔIÐIØ×Ò˜Ô*¨IÑ6Ô6Ð6Ø×Ò˜œ¨$Ñ/Ô/Ð/Ð/Ð/r   c                 ó*  — t          ¦   «         }|                     g d¢¦  «         t          |¦  «        \  }}|D ]R}t          |t          ¦  «        r;|j        d         }t          |t          ¦  «        r|j                             ¦   «          ŒSt          j
        ¦   «         dk    rNddlm} |j        D ]@}|                      |j        j        t"          j        ¦  «         |                     ¦   «          ŒA|                      |d         t          ¦  «         dS )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.internetr2   Ú_newTimedCallsr   ÚfuncÚ__func__r   Ú_cleanupr*   )r   r   ÚcaÚclÚxÚrecurserr2   s          r   Útest_recursiveConfigurationz(OptionsTests.test_recursiveConfigurationV   s  € õ ‘)”)ˆØ×ÒÐIÐIÐIÑJÔJÐJÝ  Ñ)Ô)‰ˆˆBð ð 	1ð 	1ˆAÝ˜!�]Ñ+Ô+ð 1Øœ; rœ?�Ý˜h­Ñ1Ô1ð 1ØÔ'×.Ò.Ñ0Ô0Ð0øõ ÔÑÔ Ò(Ð(ð 1Ð0Ð0Ð0Ð0Ð0àÔ+ð ð �Ø× Ò  ¤¤Õ2BÔ2KÑLÔLÐLØ—’‘
”
�
�
à×Ò˜b œf¥mÑ4Ô4Ð4Ð4Ð4r   )r   N)	Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r    r$   r.   rA   © r   r   r   r      sŠ   € € € € € ðð ð

ð 
ð 
ð 
ð$Vð Vð Vð VðVð Vð Vð Vð0ð 0ð 0ð 0ð0 5ð  5ð  5ð  5ð  5ð  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      sø   ððð ð 3Ð 2Ð 2Ð 2Ð 2Ð 2Ø )Ð )Ð )Ð )Ð )Ð )Ø "Ð "Ð "Ð "Ð "Ð "Ø /Ð /Ð /Ð /Ð /Ð /Ø =Ð =Ð =Ð =Ð =Ð =Ø 6Ð 6Ð 6Ð 6Ð 6Ð 6Ð 6Ð 6Ø +Ð +Ð +Ð +Ð +Ð +Ø +Ð +Ð +Ð +Ð +Ð +Ø 6Ð 6Ð 6Ð 6Ð 6Ð 6ðc5ð c5ð c5ð c5ð c5Ð&ñ c5ô c5ð c5ð c5ð c5r   