a ‚oeÈ&ã@s4dZddlmZddlZddlZddlZddlZddlm Z ddl Z ddl m Z ddl Z ddlZddlZddlmZddlmZddlmZddlmZGd d „d e jƒZGd d „d e jƒZe  ej ¡ d ¡Gdd„de jƒƒZGdd„de jƒZGdd„de jƒZedk�r0e  e !ej"dd…e#g¡¡dS)zTests for acme.standalone.éN)ÚSet)Úmock)Ú challenges)Ú crypto_util)Úerrors)Ú test_utilc@s eZdZdZdd„Zdd„ZdS)Ú TLSServerTestz$Tests for acme.standalone.TLSServer.cCs(ddlm}|dtjdd�}| ¡dS)Nr©Ú TLSServer©ÚrT)Úbind_and_activate)Úacme.standaloner Ú socketserverÚBaseRequestHandlerÚ server_close©Úselfr Úserver©rúEC:\Program Files\Certbot\pkgs\acme\_internal\tests\standalone_test.pyÚ test_binds  ÿzTLSServerTest.test_bindcCs0tjr,ddlm}|dtjddd�}| ¡dS)Nrr r T)r Úipv6)ÚsocketZhas_ipv6rr rrrrrrrÚ test_ipv6s   ÿzTLSServerTest.test_ipv6N)Ú__name__Ú __module__Ú __qualname__Ú__doc__rrrrrrrsrc@sPeZdZdZdd„Zdd„Zdd„Zdd „Zd d „Zd d „Z dd„Z dd„Z dS)ÚHTTP01ServerTestz'Tests for acme.standalone.HTTP01Server.cCsjtj t d¡¡|_tƒ|_ddlm }|d|jd�|_ |j j   ¡d|_ tj|j jd�|_|j ¡dS)Núrsa1024_key.pemr©Ú HTTP01Serverr ©Ú resourcesé©Útarget)ÚjoseÚJWKÚloadrÚ load_vectorÚ account_keyÚsetr$rr"rrÚ getsocknameÚportÚ threadingÚThreadÚ serve_foreverÚthreadÚstart)rr"rrrÚsetUp+sÿ zHTTP01ServerTest.setUpcCs"|j ¡|j ¡|j ¡dS©N©rÚshutdownr3Újoinr©rrrrÚtearDown7s  zHTTP01ServerTest.tearDowncCs2tjd |j¡dd�}|jdks$J‚|js.J‚dS©Nzhttp://localhost:{0}F©Zverifyz'ACME client standalone challenge solver©ÚrequestsÚgetÚformatr/ÚtextÚok©rÚresponserrrÚ test_index<s  ÿzHTTP01ServerTest.test_indexcCs*tjd |j¡dd�}|jtjks&J‚dS©Nzhttp://localhost:{0}/fooFr=©r?r@rAr/Z status_codeÚ http_clientZ NOT_FOUNDrDrrrÚtest_404Bs ÿzHTTP01ServerTest.test_404cCsftjdd�}| |j¡\}}ddlm}|j|||d�}|rH|j |¡|j j |j d|j  ¡|j d�S©Nsxxxxxxxxxxxxxxxx)Útokenr)ÚHTTP01RequestHandler)ÚchallrEÚ validationÚ localhost)r/©rZHTTP01Zresponse_and_validationr,rrMZHTTP01Resourcer$ÚaddrEZ simple_verifyrNZ public_keyr/©rrRrNrErOrMÚresourcerrrÚ _test_http01Gs  ÿ þzHTTP01ServerTest._test_http01cCs|jdd�sJ‚dS©NT©rR©rUr:rrrÚtest_http01_foundTsz"HTTP01ServerTest.test_http01_foundcCs|jdd�rJ‚dS©NFrWrXr:rrrÚtest_http01_not_foundWsz&HTTP01ServerTest.test_http01_not_foundc Csèddlm}|dtƒdd��¸}tj|jd�}| ¡t ¡�z}| d|j  ¡df¡tj|j d�}| ¡|  d ¡|  ¡}z|  tj ¡Wn Yn0|r¨Jd ƒ‚Wdƒn1s¼0YWdƒn1sÚ0YdS) Nrr!r gš™™™™™©?)r$Útimeoutr&rPr%g@z"Server shutdown should not be hung)rr"r-r0r1r2r4rZconnectr.r8r9Úis_aliveZ SHUT_RDWR)rr"rZ server_threadÚclientZ stop_threadZis_hungrrrÚtest_timely_shutdownZs   z%HTTP01ServerTest.test_timely_shutdownN) rrrrr5r;rFrJrUrYr[r_rrrrr's  rzpyOpenSSL too oldc@s0eZdZdZdd„Zdd„Zdd„Zdd „Zd S) ÚTLSALPN01ServerTestz)Test for acme.standalone.TLSALPN01Server.cCstdt d¡t d¡fi|_dt d¡t d¡fi|_ddlm}|d|j|jd �|_tj |jj d �|_ |j   ¡dS) Nó localhostzrsa2048_key.pemzrsa2048_cert.pemzrsa4096_key.pemzrsa4096_cert.pemr)ÚTLSALPN01Server)rPr)ÚcertsÚchallenge_certsr&) rZload_pyopenssl_private_keyZ load_certrcrdrrbrr0r1r2r3r4)rrbrrrr5usþþ ÿzTLSALPN01ServerTest.setUpcCs"|j ¡|j ¡|j ¡dSr6r7r:rrrr;†s  zTLSALPN01ServerTest.tearDowncCsT|jj ¡dd…\}}tjd||ddgd�}t |¡t |jdd¡ksPJ‚dS)Nérar%s acme-tls/1©Úhostr/r\Zalpn_protocols)rrr.rÚ probe_snir(ZComparableX509rd)rrgr/ZcertrrrÚtest_challenge_certs”sþÿz(TLSALPN01ServerTest.test_challenge_certscCs^|jj ¡dd…\}}t tj¡�&tjd||ddgd�Wdƒn1sP0YdS)Nrerar%sbad-alpnrf) rrr.ÚpytestÚraisesrÚErrorrrh)rrgr/rrrÚ test_bad_alpn�s þz!TLSALPN01ServerTest.test_bad_alpnN)rrrrr5r;rirmrrrrr`qs  r`c@s<eZdZdZGdd„dejƒZe d¡dd„ƒZ dd„Z d S) ÚBaseDualNetworkedServersTestz2Test for acme.standalone.BaseDualNetworkedServers.cs eZdZdZ‡fdd„Z‡ZS)z1BaseDualNetworkedServersTest.SingleProtocolServerzUServer that only serves on a single protocol. FreeBSD has this behavior for AF_INET6.csŽ| dd¡}|r"tj|_d|d<ntj|_tƒj|i|¤Ž|rŠttddƒ}|j |tj d¡z|  ¡|  ¡Wn|  ¡‚Yn0dS)NrFr Z IPPROTO_IPV6é)r%) ÚpoprZAF_INET6Zaddress_familyZAF_INETÚsuperÚ__init__ÚgetattrZ setsockoptZ IPV6_V6ONLYZ server_bindZserver_activater)rÚargsÚkwargsrÚlevel©Ú __class__rrrrªs    z:BaseDualNetworkedServersTest.SingleProtocolServer.__init__)rrrrrrÚ __classcell__rrrwrÚSingleProtocolServer¨srzzsocket.socket.bindcCsvddlm}ddlm}t |d¡|_t tj¡� }|t j dt j ƒWdƒn1sX0Y|j j|ksrJ‚dS)Nr)Ú EADDRINUSE©ÚBaseDualNetworkedServerszFake addr in use errorr )Úerrnor{rr}rÚerrorZ side_effectrjrkrnrzrrÚvalue)rZ mock_bindr{r}Úexc_inforrrÚtest_fail_to_bind¾s  þ"z.BaseDualNetworkedServersTest.test_fail_to_bindcCsfddlm}|tjdtjƒ}| ¡}d}|D] }|d}|rH||ksHJ‚|}q,|jD] }| ¡qTdS)Nrr|r r%) rr}rnrzrrÚ getsocknamesÚserversr)rr}r„Z socknamesZ prev_portZsocknamer/rrrrÚtest_ports_equalÍs ý  z-BaseDualNetworkedServersTest.test_ports_equalN) rrrrrZ TCPServerrzrZpatchr‚r…rrrrrn¥s  rnc@sHeZdZdZdd„Zdd„Zdd„Zdd „Zd d „Zd d „Z dd„Z dS)ÚHTTP01DualNetworkedServersTestz5Tests for acme.standalone.HTTP01DualNetworkedServers.cCsZtj t d¡¡|_tƒ|_ddlm }|d|jd�|_ |j   ¡dd|_ |j   ¡dS)Nr r)ÚHTTP01DualNetworkedServersr r#r%)r(r)r*rr+r,r-r$rr‡r„rƒr/r2)rr‡rrrr5âsÿ z$HTTP01DualNetworkedServersTest.setUpcCs|j ¡dSr6)r„Zshutdown_and_server_closer:rrrr;ísz'HTTP01DualNetworkedServersTest.tearDowncCs2tjd |j¡dd�}|jdks$J‚|js.J‚dSr<r>rDrrrrFðs  ÿz)HTTP01DualNetworkedServersTest.test_indexcCs*tjd |j¡dd�}|jtjks&J‚dSrGrHrDrrrrJös ÿz'HTTP01DualNetworkedServersTest.test_404cCsftjdd�}| |j¡\}}ddlm}|j|||d�}|rH|j |¡|j j |j d|j  ¡|j d�SrKrQrSrrrrUûs  ÿ þz+HTTP01DualNetworkedServersTest._test_http01cCs|jdd�sJ‚dSrVrXr:rrrrYsz0HTTP01DualNetworkedServersTest.test_http01_foundcCs|jdd�rJ‚dSrZrXr:rrrr[ sz4HTTP01DualNetworkedServersTest.test_http01_not_foundN) rrrrr5r;rFrJrUrYr[rrrrr†ßs  r†Ú__main__r%)$rZ http.clientr^rIrrÚsysr0ÚtypingrZunittestrZjosepyr(rjr?ZacmerrrZacme._internal.testsrZTestCaserrZskipIfZ TLSALPN01Ú is_supportedr`rnr†rÚexitÚmainÚargvÚ__file__rrrrÚs.       J3:0