Ë
    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 ddlmZ dd	lmZ dd
lmZmZmZ  G d„ de«      Z G d„ de«      Z G d„ de«      Zy)z!
Tests for L{twisted.web.vhost}.
é    )ÚgatherResults)ÚTestCase)Ú	NOT_FOUND)Ú
NoResource)ÚSite)ÚData)Ú_render)ÚDummyRequest)ÚNameVirtualHostÚVHostMonsterResourceÚ_HostResourcec                   ó   — e Zd ZdZd„ Zy)ÚHostResourceTestsz%
    Tests for L{_HostResource}.
    c                 ó&  — t        dd«      }t        dd«      }t        dd«      }|j                  d|«       |j                  d|«       t        «       }t        «       }t        dd«      |_        |j                  d|«       t        ddg«      }g d	¢|_        t        |«      |_	        d
„ |_
        d|_        |j                  d|«      }| j                  |t         «       t        ddg«      }|j                  d|«      }| j                  |t        «       y)zØ
        L{_HostResource.getChild} returns the proper I{Resource} for the vhost
        embedded in the URL.  Verify that returning the proper I{Resource}
        required changing the I{Host} in the header.
        s	   root dataÚ s   uri datas	   test datas   tests   uris   default dataó   baz.com)s   baró   httpr   c                   ó   — y)NF© r   ó    ú=/usr/lib/python3/dist-packages/twisted/web/test/test_vhost.pyú<lambda>z1HostResourceTests.test_getChild.<locals>.<lambda>-   s   � r   r   N)r   ÚputChildr   r   ÚdefaultÚaddHostr
   Úprepathr   ÚsiteÚisSecureÚhostÚgetChildÚassertIsInstancer   )ÚselfÚbazrootÚbazuriÚbaztestÚhrÚrootÚrequestÚsteps           r   Útest_getChildzHostResourceTests.test_getChild   sð   € ô �| RÓ(ˆÜ�k 2Ó&ˆÜ�| RÓ(ˆØ�‰˜ Ô)Ø×Ñ˜ Ô(Ü‹_ˆäÓ ˆÜ˜O¨RÓ0ˆŒØ�‰�Z Ô)ä ¨Ð0Ó1ˆÚ7ˆŒÜ˜D“zˆŒÙ(ˆÔØˆŒà�{‰{˜: wÓ/ˆØ×Ñ˜d¤DÔ)ä ¨Ð0Ó1ˆØ�}‰}˜V WÓ-ˆØ×Ñ˜d¤JÕ/r   N©Ú__name__Ú
__module__Ú__qualname__Ú__doc__r*   r   r   r   r   r      s   „ ñó0r   r   c                   ó:   — e Zd ZdZd„ Zd„ Zd„ Zd„ Zd„ Zd„ Z	d„ Z
y	)
ÚNameVirtualHostTestsz'
    Tests for L{NameVirtualHost}.
    c                 ó”   — t        «       }t        dd«      |_        t        dg«      }| j	                  |j                  |«      d«       y)z¹
        L{NameVirtualHost.render} returns the result of rendering the
        instance's C{default} if it is not L{None} and there is no I{Host}
        header in the request.
        s   correct resultr   r   N)r   r   r   r
   ÚassertEqualÚrender©r"   ÚvirtualHostResourcer(   s      r   Útest_renderWithoutHostz+NameVirtualHostTests.test_renderWithoutHost=   sG   € ô .Ó/ÐÜ&*Ð+<¸bÓ&AÐÔ#Ü ˜uÓ%ˆØ×ÑÐ,×3Ñ3°GÓ<Ð>OÕPr   c                 ó|   ‡ ‡— t        «       }t        dg«      Št        |‰«      }ˆˆ fd„}|j                  |«       |S )zÃ
        L{NameVirtualHost.render} returns a response with a status of I{NOT
        FOUND} if the instance's C{default} is L{None} and there is no I{Host}
        header in the request.
        r   c                 óF   •— ‰j                  ‰j                  t        «       y ©N©r3   ÚresponseCoder   ©Úignoredr(   r"   s    €€r   Ú
cbRenderedzHNameVirtualHostTests.test_renderWithoutHostNoDefault.<locals>.cbRenderedR   ó   ø€ Ø×Ñ˜W×1Ñ1´9Õ=r   )r   r
   r	   ÚaddCallback©r"   r6   Údr?   r(   s   `   @r   Útest_renderWithoutHostNoDefaultz4NameVirtualHostTests.test_renderWithoutHostNoDefaultH   s?   ù€ ô .Ó/ÐÜ ˜uÓ%ˆÜÐ'¨Ó1ˆõ	>ð 	
�‰�jÔ!Øˆr   c                 ó–  ‡ — t        «       }|j                  dt        dd«      «       t        dg«      }|j                  j                  dd«       t        ||«      }ˆ fd„}|j                  ||«       t        dg«      }|j                  j                  dd«       t        ||«      }ˆ fd„}|j                  ||«       t        ||g«      S )	zö
        L{NameVirtualHost.render} returns the result of rendering the resource
        which is the value in the instance's C{host} dictionary corresponding
        to the key indicated by the value of the I{Host} header in the request.
        s   example.orgó   winnerr   r   ó   hostc                 ó\   •— ‰j                  dj                  |j                  «      d«       y ©Nr   rF   ©r3   ÚjoinÚwrittenr=   s     €r   r?   z<NameVirtualHostTests.test_renderWithHost.<locals>.cbRenderede   s    ø€ Ø×Ñ˜SŸX™X g§o¡oÓ6¸	ÕBr   s   example.org:8000c                 ó\   •— ‰j                  dj                  |j                  «      d«       y rI   rJ   )r>   ÚrequestWithPortr"   s     €r   r?   z<NameVirtualHostTests.test_renderWithHost.<locals>.cbRenderedo   s"   ø€ Ø×Ñ˜SŸX™X o×&=Ñ&=Ó>À	ÕJr   )	r   r   r   r
   ÚrequestHeadersÚaddRawHeaderr	   rA   r   )r"   r6   r(   rC   r?   rN   Ú	dWithPorts   `      r   Útest_renderWithHostz(NameVirtualHostTests.test_renderWithHostX   sÃ   ø€ ô .Ó/ÐØ×#Ñ# N´D¸ÀBÓ4GÔHä ˜uÓ%ˆØ×Ñ×+Ñ+¨G°^ÔDÜÐ'¨Ó1ˆô	Cð 	
�‰�j 'Ô*ô '¨ uÓ-ˆØ×&Ñ&×3Ñ3°GÐ=PÔQÜÐ/°ÓAˆ	ô	Kð 	×Ñ˜j¨/Ô:ä˜a ˜^Ó,Ð,r   c                 óÖ   ‡ ‡— t        «       }t        dd«      |_        t        dg«      Š‰j                  j                  dd«       t        |‰«      }ˆˆ fd„}|j                  |«       |S )zØ
        L{NameVirtualHost.render} returns the result of rendering the
        instance's C{default} if it is not L{None} and there is no host
        matching the value of the I{Host} header in the request.
        ó   correct datar   r   rG   ó   example.comc                 ó\   •— ‰j                  dj                  ‰j                  «      d«       y )Nr   rT   rJ   r=   s    €€r   r?   zCNameVirtualHostTests.test_renderWithUnknownHost.<locals>.cbRendered‚   s    ø€ Ø×Ñ˜SŸX™X g§o¡oÓ6¸ÕHr   )r   r   r   r
   rO   rP   r	   rA   rB   s   `   @r   Útest_renderWithUnknownHostz/NameVirtualHostTests.test_renderWithUnknownHostv   sf   ù€ ô .Ó/ÐÜ&*¨?¸BÓ&?ÐÔ#Ü ˜uÓ%ˆØ×Ñ×+Ñ+¨G°^ÔDÜÐ'¨Ó1ˆõ	Ið 	
�‰�jÔ!Øˆr   c                 ó´   ‡ ‡— t        «       }t        dg«      Š‰j                  j                  dd«       t	        |‰«      }ˆˆ fd„}|j                  |«       |S )zâ
        L{NameVirtualHost.render} returns a response with a status of I{NOT
        FOUND} if the instance's C{default} is L{None} and there is no host
        matching the value of the I{Host} header in the request.
        r   rG   rU   c                 óF   •— ‰j                  ‰j                  t        «       y r:   r;   r=   s    €€r   r?   zLNameVirtualHostTests.test_renderWithUnknownHostNoDefault.<locals>.cbRendered“   r@   r   )r   r
   rO   rP   r	   rA   rB   s   `   @r   Ú#test_renderWithUnknownHostNoDefaultz8NameVirtualHostTests.test_renderWithUnknownHostNoDefaultˆ   sU   ù€ ô .Ó/ÐÜ ˜uÓ%ˆØ×Ñ×+Ñ+¨G°^ÔDÜÐ'¨Ó1ˆõ	>ð 	
�‰�jÔ!Øˆr   c              ƒ   óò   K  — t        «       }t        dg«      }|j                  j                  dd«       t	        ||«      ƒ d{  –—†  | j                  ddj                  |j                  «      «       y7 Œ0­w)zs
        L{NameVirtualHost.render} doesn't echo unescaped HTML when present in
        the I{Host} header.
        r   rG   s   <b>example</b>.comNs   <b>)r   r
   rO   rP   r	   ÚassertNotInrK   rL   r5   s      r   Útest_renderWithHTMLHostz,NameVirtualHostTests.test_renderWithHTMLHost™   sg   è ø€ ô
 .Ó/ÐÜ ˜uÓ%ˆØ×Ñ×+Ñ+¨GÐ5JÔKäÐ)¨7Ó3×3Ð3à×Ñ˜ §¡¨'¯/©/Ó!:Õ;ð 	4ús   ‚AA7ÁA5Á1A7c                 óÖ  — t        «       }t        dd«      }d|_        t        dd«      }|j                  d|«       |j                  d|«       t	        g «      }|j
                  j                  dd«       dg|_        | j                  |j                  d|«      t        «       | j                  |j                  dg«       | j                  |j                  g «       t	        g «      }|j
                  j                  dd«       dg|_        | j                  |j                  d|«      t        «       | j                  |j                  g «       | j                  |j                  dg«       y	)
zµ
        L{NameVirtualHost.getChild} returns correct I{Resource} based off
        the header and modifies I{Request} to ensure proper prepath and
        postpath are set.
        s	   leaf datar   Ts	   norm datas   leaf.example.orgs   norm.example.orgrG   r   N)r   r   ÚisLeafr   r
   rO   rP   r   r!   r    r   r3   Úpostpath)r"   r6   ÚleafResourceÚnormResourcer(   s        r   r*   z"NameVirtualHostTests.test_getChild¦   s7  € ô .Ó/ÐÜ˜L¨"Ó-ˆØ"ˆÔÜ˜L¨"Ó-ˆØ×#Ñ#Ð$7¸ÔFØ×#Ñ#Ð$7¸ÔFä˜rÓ"ˆØ×Ñ×+Ñ+¨GÐ5HÔIØ˜%ˆŒà×ÑÐ1×:Ñ:¸3ÀÓHÌ*ÔUØ×Ñ˜Ÿ™¨3¨%Ô0Ø×Ñ˜×)Ñ)¨2Ô.ä˜rÓ"ˆØ×Ñ×+Ñ+¨GÐ5HÔIØ˜%ˆŒà×ÑÐ1×:Ñ:¸3ÀÓHÌ$ÔOØ×Ñ˜Ÿ™¨"Ô-Ø×Ñ˜×)Ñ)¨C¨5Õ1r   N)r,   r-   r.   r/   r7   rD   rR   rW   rZ   r]   r*   r   r   r   r1   r1   8   s+   „ ñò	Qòò -ò<ò$ò"<ó2r   r1   c                   ó   — e Zd ZdZd„ Zy)ÚVHostMonsterResourceTestsz,
    Tests for L{VHostMonsterResource}.
    c                 óX  — t        «       }t        g «      }| j                  |j                  d|«      t        «       | j                  |j                  «       «       t        g «      }| j                  |j                  d|«      t        «       | j                  |j                  «       «       y)z�
        L{VHostMonsterResource.getChild} returns I{_HostResource} and modifies
        I{Request} with correct L{Request.isSecure}.
        r   s   httpsN)r   r
   r!   r    r   ÚassertFalser   Ú
assertTrue)r"   Úvhmr(   s      r   r*   z'VHostMonsterResourceTests.test_getChildÉ   s‚   € ô
 #Ó$ˆÜ˜rÓ"ˆØ×Ñ˜cŸl™l¨7°GÓ<¼mÔLØ×Ñ˜×)Ñ)Ó+Ô,ä˜rÓ"ˆØ×Ñ˜cŸl™l¨8°WÓ=¼}ÔMØ�‰˜×(Ñ(Ó*Õ+r   Nr+   r   r   r   rd   rd   Ä   s   „ ñó,r   rd   N)r/   Útwisted.internet.deferr   Útwisted.trial.unittestr   Útwisted.web.httpr   Útwisted.web.resourcer   Útwisted.web.serverr   Útwisted.web.staticr   Útwisted.web.test._utilr	   Útwisted.web.test.test_webr
   Útwisted.web.vhostr   r   r   r   r1   rd   r   r   r   ú<module>rr      sR   ðñõ
 1Ý +Ý &Ý +Ý #Ý #Ý *Ý 2ß RÑ Rô!0˜ô !0ôHI2˜8ô I2ôX, õ ,r   