a }|g&@s4dZddlmZddlZddlZddlZddlZddlm Z ddl Z ddl m Z ddl Z ddlZddlZddlmZddlmZddlmZddlmZGd d d e jZGd d d e jZe ej d Gddde jZGddde jZGddde jZedkr0e e!ej"dde#gdS)zTests for acme.standalone.N)Set)mock) challenges) crypto_util)errors) test_utilc@s eZdZdZddZddZdS) TLSServerTestz$Tests for acme.standalone.TLSServer.cCs(ddlm}|dtjdd}|dS)Nr TLSServerrT)bind_and_activate)acme.standaloner socketserverBaseRequestHandler server_closeselfr serverrH/usr/lib/python3.9/site-packages/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@sPeZdZdZddZddZddZdd Zd d Zd d Z ddZ ddZ dS)HTTP01ServerTestz'Tests for acme.standalone.HTTP01Server.cCsjtjtd|_t|_ddlm }|d|jd|_ |j j d|_ tj|j jd|_|jdS)Nrsa1024_key.pemr HTTP01Serverr  resourcestarget)joseJWKloadr load_vector account_keysetr$rr"rr getsocknameport threadingThread serve_foreverthreadstart)rr"rrrsetUp+s zHTTP01ServerTest.setUpcCs"|j|j|jdSNrshutdownr3joinrrrrrtearDown7s  zHTTP01ServerTest.tearDowncCs2tjd|jdd}|jdks$J|js.JdSNzhttp://localhost:{0}FZverifyz'ACME client standalone challenge solverrequestsgetformatr/textokrresponserrr test_index<s  zHTTP01ServerTest.test_indexcCs*tjd|jdd}|jtjks&JdSNzhttp://localhost:{0}/fooFr=r?r@rAr/Z status_code http_clientZ NOT_FOUNDrDrrrtest_404Bs zHTTP01ServerTest.test_404cCsftjdd}||j\}}ddlm}|j|||d}|rH|j||j j |j d|j |j dSNsxxxxxxxxxxxxxxxx)tokenr)HTTP01RequestHandler)challrE validation localhost)r/rZHTTP01Zresponse_and_validationr,rrMZHTTP01Resourcer$addrEZ simple_verifyrNZ public_keyr/rrRrNrErOrMresourcerrr _test_http01Gs   zHTTP01ServerTest._test_http01cCs|jddsJdSNTrRrUr:rrrtest_http01_foundTsz"HTTP01ServerTest.test_http01_foundcCs|jddrJdSNFrWrXr:rrrtest_http01_not_foundWsz&HTTP01ServerTest.test_http01_not_foundc Csddlm}|dtdd}tj|jd}|tz}|d|j dftj|j d}|| d | }z| tj Wn Yn0|rJd Wdn1s0YWdn1s0YdS) Nrr!r g?)r$timeoutr&rPr%g@z"Server shutdown should not be hung)rr"r-r0r1r2r4rZconnectr.r8r9is_aliveZ SHUT_RDWR)rr"rZ server_threadclientZ stop_threadZis_hungrrrtest_timely_shutdownZs   z%HTTP01ServerTest.test_timely_shutdownN) rrrrr5r;rFrJrUrYr[r_rrrrr's  rzpyOpenSSL too oldc@s0eZdZdZddZddZddZdd Zd S) TLSALPN01ServerTestz)Test for acme.standalone.TLSALPN01Server.cCstdtdtdfi|_dtdtdfi|_ddlm}|d|j|jd |_tj |jj d |_ |j dS) N localhostzrsa2048_key.pemzrsa2048_cert.pemzrsa4096_key.pemzrsa4096_cert.pemr)TLSALPN01Server)rPr)certschallenge_certsr&) rZload_pyopenssl_private_keyZ load_certrcrdrrbrr0r1r2r3r4)rrbrrrr5us zTLSALPN01ServerTest.setUpcCs"|j|j|jdSr6r7r:rrrr;s  zTLSALPN01ServerTest.tearDowncCsT|jjdd\}}tjd||ddgd}t|t|jddksPJdS)Nrar%s acme-tls/1hostr/r\Zalpn_protocols)rrr.r probe_snir(ZComparableX509rd)rrgr/Zcertrrrtest_challenge_certssz(TLSALPN01ServerTest.test_challenge_certscCs^|jjdd\}}ttj&tjd||ddgdWdn1sP0YdS)Nrerar%sbad-alpnrf) rrr.pytestraisesrErrorrrh)rrgr/rrr test_bad_alpns z!TLSALPN01ServerTest.test_bad_alpnN)rrrrr5r;rirmrrrrr`qs  r`c@s<eZdZdZGdddejZedddZ ddZ d S) BaseDualNetworkedServersTestz2Test for acme.standalone.BaseDualNetworkedServers.cs eZdZdZfddZZS)z1BaseDualNetworkedServersTest.SingleProtocolServerzUServer that only serves on a single protocol. FreeBSD has this behavior for AF_INET6.cs|dd}|r"tj|_d|d<ntj|_tj|i||rttdd}|j|tj dz| | Wn| Yn0dS)NrFr Z IPPROTO_IPV6)r%) poprZAF_INET6Zaddress_familyZAF_INETsuper__init__getattrZ setsockoptZ IPV6_V6ONLYZ server_bindZserver_activater)rargskwargsrlevel __class__rrrrs    z:BaseDualNetworkedServersTest.SingleProtocolServer.__init__)rrrrrr __classcell__rrrwrSingleProtocolServersrzzsocket.socket.bindcCstddlm}ddlm}t|d|_ttj  }|t j dt j Wdn1sV0Y|jj|kspJdS)Nr) EADDRINUSEBaseDualNetworkedServerszFake addr in use errorr )errnor{rr}OSErrorZ side_effectrjrkrerrorrnrzrrvalue)rZ mock_bindr{r}exc_inforrrtest_fail_to_binds   "z.BaseDualNetworkedServersTest.test_fail_to_bindcCsfddlm}|tjdtj}|}d}|D] }|d}|rH||ksHJ|}q,|jD] }|qTdS)Nrr|r r%) rr}rnrzrr getsocknamesserversr)rr}rZ socknamesZ prev_portZsocknamer/rrrrtest_ports_equals   z-BaseDualNetworkedServersTest.test_ports_equalN) rrrrrZ TCPServerrzrZpatchrrrrrrrns  rnc@sHeZdZdZddZddZddZdd Zd d Zd d Z ddZ dS)HTTP01DualNetworkedServersTestz5Tests for acme.standalone.HTTP01DualNetworkedServers.cCsZtjtd|_t|_ddlm }|d|jd|_ |j dd|_ |j dS)Nr r)HTTP01DualNetworkedServersr r#r%)r(r)r*rr+r,r-r$rrrrr/r2)rrrrrr5s z$HTTP01DualNetworkedServersTest.setUpcCs|jdSr6)rZshutdown_and_server_closer:rrrr;sz'HTTP01DualNetworkedServersTest.tearDowncCs2tjd|jdd}|jdks$J|js.JdSr<r>rDrrrrFs  z)HTTP01DualNetworkedServersTest.test_indexcCs*tjd|jdd}|jtjks&JdSrGrHrDrrrrJs z'HTTP01DualNetworkedServersTest.test_404cCsftjdd}||j\}}ddlm}|j|||d}|rH|j||j j |j d|j |j dSrKrQrSrrrrUs   z+HTTP01DualNetworkedServersTest._test_http01cCs|jddsJdSrVrXr:rrrrYsz0HTTP01DualNetworkedServersTest.test_http01_foundcCs|jddrJdSrZrXr:rrrr[ sz4HTTP01DualNetworkedServersTest.test_http01_not_foundN) rrrrr5r;rFrJrUrYr[rrrrrs  r__main__r%)$rZ http.clientr^rIrrsysr0typingrZunittestrZjosepyr(rjr?ZacmerrrZacme._internal.testsrZTestCaserrZskipIfZ TLSALPN01 is_supportedr`rnrrexitmainargv__file__rrrrs.       J3:0