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.tearDowncCstjd|jdd}dSNzhttp://localhost:{0}FZverifyrequestsgetformatr/rresponserrr test_index<s zHTTP01ServerTest.test_indexcCstjd|jdd}dSNzhttp://localhost:{0}/fooFr=r>rBrrrtest_404Bs zHTTP01ServerTest.test_404cCsftjdd}||j\}}ddlm}|j|||d}|rH|j||j j |j d|j |j dSNsxxxxxxxxxxxxxxxx)tokenr)HTTP01RequestHandler)challrC validation localhost)r/rZHTTP01Zresponse_and_validationr,rrIZHTTP01Resourcer$addrCZ simple_verifyrJZ public_keyr/rrNrJrCrKrIresourcerrr _test_http01Gs   zHTTP01ServerTest._test_http01cCsdSr6rr:rrrtest_http01_foundTsz"HTTP01ServerTest.test_http01_foundcCsdSr6rr:rrrtest_http01_not_foundWsz&HTTP01ServerTest.test_http01_not_foundc Csddlm}|dtdd}tj|jd}|tn}|d|j dftj|j d}|| d | }z| tj Wn Yn0Wdn1s0YWdn1s0YdS) Nrr!r g?)r$timeoutr&rLr%g@)rr"r-r0r1r2r4rZconnectr.r8r9is_aliveZ SHUT_RDWR)rr"rZ server_threadclientZ stop_threadZis_hungrrrtest_timely_shutdownZs   z%HTTP01ServerTest.test_timely_shutdownN) rrrrr5r;rDrFrQrRrSrWrrrrr'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)rLr)certschallenge_certsr&) rZload_pyopenssl_private_keyZ load_certr[r\rrZrr0r1r2r3r4)rrZrrrr5us zTLSALPN01ServerTest.setUpcCs"|j|j|jdSr6r7r:rrrr;s  zTLSALPN01ServerTest.tearDowncCs2|jjdd\}}tjd||ddgd}dS)NrYr%s acme-tls/1hostr/rTZalpn_protocols)rrr.r probe_sni)rr_r/Zcertrrrtest_challenge_certss z(TLSALPN01ServerTest.test_challenge_certscCs^|jjdd\}}ttj&tjd||ddgdWdn1sP0YdS)Nr]rYr%sbad-alpnr^) rrr.pytestraisesrErrorrr`)rr_r/rrr test_bad_alpns z!TLSALPN01ServerTest.test_bad_alpnN)rrrrr5r;rarerrrrrXqs  rXc@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__rrrjs    z:BaseDualNetworkedServersTest.SingleProtocolServer.__init__)rrrrrj __classcell__rrrorSingleProtocolServersrrzsocket.socket.bindcCsdddlm}ddlm}t|d|_ttj  }|t j dt j Wdn1sV0YdS)Nr) EADDRINUSEBaseDualNetworkedServerszFake addr in use errorr )errnorsrruOSErrorZ side_effectrbrcrerrorrfrrrr)rZ mock_bindrsruexc_inforrrtest_fail_to_binds   "z.BaseDualNetworkedServersTest.test_fail_to_bindcCsZddlm}|tjdtj}|}d}|D]}|d}|r<|}q,|jD] }|qHdS)Nrrtr r%) rrurfrrrr getsocknamesserversr)rrur|Z socknamesZ prev_portZsocknamer/rrrrtest_ports_equals  z-BaseDualNetworkedServersTest.test_ports_equalN) rrrrrZ TCPServerrrrZpatchrzr}rrrrrfs  rfc@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$rrr|r{r/r2)rrrrrr5s z$HTTP01DualNetworkedServersTest.setUpcCs|jdSr6)r|Zshutdown_and_server_closer:rrrr;sz'HTTP01DualNetworkedServersTest.tearDowncCstjd|jdd}dSr<r>rBrrrrDs z)HTTP01DualNetworkedServersTest.test_indexcCstjd|jdd}dSrEr>rBrrrrFs z'HTTP01DualNetworkedServersTest.test_404cCsftjdd}||j\}}ddlm}|j|||d}|rH|j||j j |j d|j |j dSrGrMrOrrrrQs   z+HTTP01DualNetworkedServersTest._test_http01cCsdSr6rr:rrrrRsz0HTTP01DualNetworkedServersTest.test_http01_foundcCsdSr6rr:rrrrS sz4HTTP01DualNetworkedServersTest.test_http01_not_foundN) rrrrr5r;rDrFrQrRrSrrrrr~s  r~__main__r%)$rZ http.clientrVZ http_clientrrsysr0typingrZunittestrZjosepyr(rbr?ZacmerrrZacme._internal.testsrZTestCaserrZskipIfZ TLSALPN01 is_supportedrXrfr~rexitmainargv__file__rrrrs.       J3:0