a ‚oeMã@sâdZddlZddlZddlmZddlZddlmZddlZddlZ ddl Z ddl m Z ddl mZe d¡Ze d¡Ze d ¡ZGd d „d ejƒZGd d „d ejƒZGdd„dejƒZGdd„dejƒZGdd„dejƒZGdd„dejƒZGdd„dejƒZGdd„dejƒZGdd„dejƒZGdd„dejƒZGdd„dejƒZ Gd d!„d!ejƒZ!Gd"d#„d#ejƒZ"Gd$d%„d%ejƒZ#Gd&d'„d'ejƒZ$Gd(d)„d)ejƒZ%Gd*d+„d+ejƒZ&e'd,k�rÞe (e  )ej*d-d…e+g¡¡dS).zTests for acme.messages.éN)ÚDict)Úmock)Ú challenges)Ú test_utilzcert.derzcsr.derzrsa512_key.pemc@speZdZdZdd„Zdd„Zdd„Zdd „Zd d „Zd d „Z dd„Z dd„Z dd„Z dd„Z dd„Zdd„ZdS)Ú ErrorTestzTests for acme.messages.Error.cCsªddlm}ddlm}ddlm}ddlm}|jdddd �|_dd |dd œ|_|d d d�|_||dd�|_ |jdd d|j d�|_ |jddd|j gd�|_ |ƒ|_ dS)Nr©ÚError)Ú ERROR_PREFIX©Ú Identifier©ÚIDENTIFIER_FQDNÚ malformedÚfooÚtitle©Údetailrz some title)rrÚtypeZcustomÚbar)Útyprú example.com©rÚvalueZcaa)rrÚ identifier)rrÚ subproblems) Ú acme.messagesrr r r Ú with_codeÚerrorÚjobjÚ error_customrÚ subproblemÚerror_with_subproblemsÚ empty_error)Úselfrr r r ©r$úCC:\Program Files\Certbot\pkgs\acme\_internal\tests\messages_test.pyÚsetUps    ýzErrorTest.setUpcCs ddlm}|ƒjdksJ‚dS)Nrrz about:blank)rrr©r#rr$r$r%Útest_default_typ(s zErrorTest.test_default_typcCs$ddlm}|ƒ| d¡ks J‚dS)Nrrú{})rrÚ from_jsonr'r$r$r%Útest_from_json_empty,s zErrorTest.test_from_json_emptycCs$ddlm}t| |j ¡¡ƒdS)Nrr)rrÚhashr*rÚto_jsonr'r$r$r%Útest_from_json_hashable0s z!ErrorTest.test_from_json_hashablecCsFddlm}| |j ¡¡}dt|jƒks.J‚|j|jdksBJ‚dS)Nrré)rrr*r!r-Úlenrr )r#rZ parsed_errorr$r$r%Útest_from_json_with_subproblems4s z)ErrorTest.test_from_json_with_subproblemscCs$d|jjksJ‚|jjdus J‚dS)Nz!The request message was malformed)rÚ descriptionr©r#r$r$r%Útest_description<szErrorTest.test_descriptioncCs@ddlm}d|jjksJ‚|jjdus,J‚|ƒjdus.MockConstantÚPOSSIBLE_NAMESN)rGrHrIrMrÚ__annotations__r$r$r$r%Ú MockConstantys rOÚaÚb)rrLrOÚconst_aÚconst_b)r#rLrOr$r$r%r&vs   zConstantTest.setUpcCs(d|j ¡ksJ‚d|j ¡ks$J‚dS)NrPrQ)rRÚto_partial_jsonrSr3r$r$r%Útest_to_partial_json€sz!ConstantTest.test_to_partial_jsoncCsR|j|j d¡ksJ‚t tj¡�|j d¡Wdƒn1sD0YdS)NrPÚc)rRrOr*r<r=ÚjoseZDeserializationErrorr3r$r$r%Útest_from_json„szConstantTest.test_from_jsoncCst|j d¡ƒdS©NrP)r,rOr*r3r$r$r%r.‰sz$ConstantTest.test_from_json_hashablecCs(dt|jƒksJ‚dt|jƒks$J‚dS)NzMockConstant(a)zMockConstant(b))ÚreprrRrSr3r$r$r%Ú test_reprŒszConstantTest.test_reprcCsJ| d¡}|j|jksJ‚|j|ks(J‚|j|jks8J‚|j|ksFJ‚dSrY)rOrRrS)r#Z const_a_primer$r$r%Ú test_equality�s  zConstantTest.test_equalityN) rGrHrIrJr&rUrXr.r[r\r$r$r$r%rKss rKc@sXeZdZdZdd„Zdd„Zdd„Zdd „Zd d „Zd d „Z dd„Z dd„Z dd„Z dS)Ú DirectoryTestz"Tests for acme.messages.Directory.cCs0ddlm}|dd|jdddgd�d œƒ|_dS) Nr©Ú DirectoryÚregÚcertúhttps://example.com/acme/termsúhttps://www.example.com/r)Úterms_of_serviceÚwebsiteZcaa_identities©ÚnewRegZnewCertÚmeta)rr_ZMetaÚdir©r#r_r$r$r%r&œs ýýzDirectoryTest.setUpcCsddlm}|ddiƒdS©Nrr^rr)rr_rjr$r$r%Ú!test_init_wrong_key_value_success¨s z/DirectoryTest.test_init_wrong_key_value_successcCsd|jdksJ‚dS)Nr`rg)rir3r$r$r%Ú test_getitem¬szDirectoryTest.test_getitemcCs:t t¡�|j d¡Wdƒn1s,0YdS©Nr)r<r=ÚKeyErrorriÚ __getitem__r3r$r$r%Ú!test_getitem_fails_with_key_error¯s z/DirectoryTest.test_getitem_fails_with_key_errorcCsd|jjksJ‚dS)Nr`)rirgr3r$r$r%Ú test_getattr³szDirectoryTest.test_getattrcCs:t t¡�|j d¡Wdƒn1s,0YdSrn)r<r=ÚAttributeErrorriÚ __getattr__r3r$r$r%Ú'test_getattr_fails_with_attribute_error¶s z5DirectoryTest.test_getattr_fails_with_attribute_errorcCs(|j ¡dddddgdœdœks$J‚dS)Nr`rarbrcr)ZtermsOfServicereZ caaIdentitiesrf)rir-r3r$r$r%Ú test_to_jsonºsýýzDirectoryTest.test_to_jsoncCsddlm}| ddi¡dSrk)rr_r*rjr$r$r%Ú2test_from_json_deserialization_unknown_key_successÅs z@DirectoryTest.test_from_json_deserialization_unknown_key_successcCs6d}|jjD]}|dkr |jj|dk}q |s2J‚dS)NFrdrb)rirh)r#ÚresultÚkr$r$r%Útest_iter_metaÉs  zDirectoryTest.test_iter_metaN) rGrHrIrJr&rlrmrqrrrurvrwrzr$r$r$r%r]™s  r]c@seZdZdd„Zdd„ZdS)ÚExternalAccountBindingTestcCs>ddlm}tjjt ¡d�|_d|_d|_ |ddiƒ|_ dS)Nrr^©Úkeyúkid-for-testingúhmac-key-for-testingÚ newAccountúhttp://url/acme/new-account) rr_rWÚjwkÚJWKRSAÚKEYÚ public_keyr}ÚkidÚhmac_keyrirjr$r$r%r&Òs ÿz ExternalAccountBindingTest.setUpcCsTddlm}| |j|j|j|j¡}t|ƒdks4J‚t|  ¡ƒtgd¢ƒksPJ‚dS)Nr©ÚExternalAccountBindingé©Z protectedZpayloadZ signature) rr‰Ú from_datar}r†r‡rir0ÚsortedÚkeys)r#r‰Úeabr$r$r%Útest_from_dataÛs z)ExternalAccountBindingTest.test_from_dataN)rGrHrIr&r�r$r$r$r%r{Ñs r{c@sXeZdZdZdd„Zdd„Zdd„Zdd „Zd d „Zd d „Z dd„Z dd„Z dd„Z dS)ÚRegistrationTestz%Tests for acme.messages.Registration.cCsjtjjt ¡d�}d}d}ddlm}||||d�|_|ƒ|_|||dœ|_ |j   ¡|_ |  ¡|j d<dS) Nr|)úmailto:admin@foo.comútel:1234zhttps://letsencrypt.org/termsr©Ú Registration)r}ÚcontactÚ agreement)r–r—r}r}) rWr‚rƒr„r…rr•r`Zreg_noneÚjobj_toÚcopyÚ jobj_fromr-)r#r}r–r—r•r$r$r%r&æs ý zRegistrationTest.setUpcCs,ddlm}|jddd�}|jdks(J‚dS)Nrr”Ú1234ú admin@foo.com)ZphoneÚemail)r“r’)rr•rŒr–)r#r•r`r$r$r%r�ús zRegistrationTest.test_from_datac Cs˜ddlm}ddlm}ddlm}tjjt ¡d�}d}d}|dd iƒ}|  ||||¡}|j d |d �} | j d ksvJ‚t | j   ¡ƒt gd ¢ƒks”J‚dS)Nrr^rˆ©ÚNewRegistrationr|r~rr€r�rœ)r�Úexternal_account_binding)r’r‹)rr_r‰rŸrWr‚rƒr„r…rŒr–r�r rŽ) r#r_r‰rŸr}r†r‡Z directoryr�r`r$r$r%Ú(test_new_registration_from_data_with_eabs   ÿ  ÿz9RegistrationTest.test_new_registration_from_data_with_eabcCsd|jjksJ‚dS)N)r›)r`Zphonesr3r$r$r%Ú test_phonesszRegistrationTest.test_phonescCsd|jjksJ‚dS)N)rœ)r`Zemailsr3r$r$r%Ú test_emailsszRegistrationTest.test_emailscCs|j|j ¡ksJ‚dS©N)r˜r`rTr3r$r$r%rUsz%RegistrationTest.test_to_partial_jsoncCs&ddlm}|j| |j¡ks"J‚dS©Nrr”)rr•r`r*rš©r#r•r$r$r%rXs zRegistrationTest.test_from_jsoncCs ddlm}t| |j¡ƒdSr¥)rr•r,r*ršr¦r$r$r%r.!s z(RegistrationTest.test_from_json_hashablecCs|ddlm}|ƒ}|dd�}|jdks*J‚|jdks8J‚d| ¡vsHJ‚d| ¡vsXJ‚d| ¡vshJ‚d| ¡vsxJ‚dS)Nrržr$)r–r–)rrŸr–rTZfields_to_partial_json)r#rŸZ empty_new_regZnew_reg_with_contactr$r$r%Útest_default_not_transmitted%s  z-RegistrationTest.test_default_not_transmittedN) rGrHrIrJr&r�r¡r¢r£rUrXr.r§r$r$r$r%r‘ãsr‘c@seZdZdZdd„ZdS)ÚUpdateRegistrationTestz+Tests for acme.messages.UpdateRegistration.cCs:ddlm}d}d|ƒ ¡ks"J‚|ƒ| |¡ks6J‚dS)Nr)ÚUpdateRegistrationz{"resource": "reg"}r))rr©Ú json_dumpsZ json_loads)r#r©Zjstringr$r$r%Ú test_empty6s z!UpdateRegistrationTest.test_emptyN)rGrHrIrJr«r$r$r$r%r¨3sr¨c@s eZdZdZdd„Zdd„ZdS)ÚRegistrationResourceTestz-Tests for acme.messages.RegistrationResource.cCs,ddlm}|tjjtjjtjjd�|_dS)Nr)ÚRegistrationResource©ÚbodyÚurird)rr­rÚsentinelr¯r°rdÚregr)r#r­r$r$r%r&@s   þzRegistrationResourceTest.setUpcCs*|j ¡tjjtjjtjjdœks&J‚dS)Nr®)r²r-rr±r¯r°rdr3r$r$r%rUFs ýz-RegistrationResourceTest.test_to_partial_jsonN©rGrHrIrJr&rUr$r$r$r%r¬=sr¬c@seZdZdZdd„ZdS)ÚChallengeResourceTestz*Tests for acme.messages.ChallengeResource.cCs.ddlm}d|tjdd�dd�jks*J‚dS)Nr)ÚChallengeResourceú http://challb©r°z http://authz)r¯Z authzr_uri)rrµrZ MagicMockr°)r#rµr$r$r%Útest_uriQs  ÿÿzChallengeResourceTest.test_uriN)rGrHrIrJr¸r$r$r$r%r´Nsr´c@s@eZdZdZdd„Zdd„Zdd„Zdd „Zd d „Zd d „Z dS)ÚChallengeBodyTestz&Tests for acme.messages.ChallengeBody.cCs tjt d¡d�|_ddlm}ddlm}ddlm}||_ |j ddd �}|d |j|j |d �|_ d |j d d|d œ|_ |j   ¡|_d|jd<dddœ|jd<dS)Nú+evaGxfADs6pSRb2LAv9IZf17Dt3juxGJ-PCt92wr-oA©Útokenr©Ú ChallengeBodyr)ÚSTATUS_INVALIDZserverInternalz%Unable to communicate with DNS server)rr¶)r°ÚchallÚstatusrZdns)ÚurlrÁrr¼rZinvalidrÁz)urn:ietf:params:acme:error:serverInternal)rrr)rÚDNSrWÚ b64decoderÀrr¾rr¿rÁrÚchallbr˜r™rš)r#r¾rr¿rr$r$r%r&Zs.ÿ     þû  þzChallengeBodyTest.setUpcCs|j d¡|jjksJ‚dS)Nr°)rÅÚencoder°r3r$r$r%Ú test_encodeuszChallengeBodyTest.test_encodecCs|j|j ¡ksJ‚dSr¤)r˜rÅrTr3r$r$r%rUxsz&ChallengeBodyTest.test_to_partial_jsoncCs&ddlm}|j| |j¡ks"J‚dS©Nrr½)rr¾rÅr*rš©r#r¾r$r$r%rX{s z ChallengeBodyTest.test_from_jsoncCs ddlm}t| |j¡ƒdSrÈ)rr¾r,r*ršrÉr$r$r%r.s z)ChallengeBodyTest.test_from_json_hashablecCst d¡|jjksJ‚dS)Nrº)rWrÄrÅr¼r3r$r$r%Ú test_proxyƒs ÿÿzChallengeBodyTest.test_proxyN) rGrHrIrJr&rÇrUrXr.rÊr$r$r$r%r¹Wsr¹c@s(eZdZdZdd„Zdd„Zdd„ZdS) ÚAuthorizationTestz&Tests for acme.messages.Authorization.cCs¦ddlm}ddlm}|d|tjdd�d�|d|tjd d�d�f|_dd lm}dd lm}dd lm }||d d�}|||jd�|_ |  ¡dd„|jDƒdœ|_ dS)Nrr½)Ú STATUS_VALIDúhttp://challb1óIlirfxKKXAsHtmzK29Pj8Ar»©r°rÁrÀúhttp://challb2óDGyRejmCefe7v4NfDGDKfA©Ú Authorizationr r rr©rrcSsg|] }| ¡‘qSr$)r-©Ú.0rÅr$r$r%Ú ¡óz+AuthorizationTest.setUp..) rr¾rÌrÚHTTP01rÃÚchallbsrÓr r Úauthzr-rš)r#r¾rÌrÓr r rr$r$r%r&‹s,   þÿÿü    ÿþzAuthorizationTest.setUpcCsddlm}| |j¡dS©NrrÒ)rrÓr*rš©r#rÓr$r$r%rX¤s z AuthorizationTest.test_from_jsoncCs ddlm}t| |j¡ƒdSrÜ)rrÓr,r*ršrÝr$r$r%r.¨s z)AuthorizationTest.test_from_json_hashableN)rGrHrIrJr&rXr.r$r$r$r%rˈsrËc@seZdZdZdd„ZdS)ÚAuthorizationResourceTestz.Tests for acme.messages.AuthorizationResource.cCs4ddlm}|tjjtjjd�}t|tjƒs0J‚dS)Nr©ÚAuthorizationResource©r°r¯) rràrr±r°r¯Ú isinstancerWÚJSONDeSerializable)r#ràZauthzrr$r$r%Útest_json_de_serializable°s  þz3AuthorizationResourceTest.test_json_de_serializableN)rGrHrIrJrär$r$r$r%rÞ­srÞc@s eZdZdZdd„Zdd„ZdS)ÚCertificateRequestTestz+Tests for acme.messages.CertificateRequest.cCsddlm}|td�|_dS)Nr©ÚCertificateRequest)Zcsr)rrçÚCSRÚreq©r#rçr$r$r%r&»s zCertificateRequestTest.setUpcCs<t|jtjƒsJ‚ddlm}|j| |j ¡¡ks8J‚dS)Nrræ)rârérWrãrrçr*r-rêr$r$r%rä¿s z0CertificateRequestTest.test_json_de_serializableN©rGrHrIrJr&rär$r$r$r%rå¸sråc@s eZdZdZdd„Zdd„ZdS)ÚCertificateResourceTestz0Tests for acme.messages.CertificateResourceTest.cCs*ddlm}|ttjjdtjjd�|_dS)Nr©ÚCertificateResourcer$)r¯r°ZauthzrsÚcert_chain_uri)rrîÚCERTrr±r°rïÚcertr©r#rîr$r$r%r&Ès   þzCertificateResourceTest.setUpcCs<t|jtjƒsJ‚ddlm}|j| |j ¡¡ks8J‚dS)Nrrí)rârñrWrãrrîr*r-ròr$r$r%räÎs z1CertificateResourceTest.test_json_de_serializableNrër$r$r$r%rìÅsrìc@s eZdZdZdd„Zdd„ZdS)ÚRevocationTestz'Tests for acme.messages.RevocationTest.cCsddlm}|td�|_dS)Nr©Ú Revocation)Z certificate)rrõrðÚrev©r#rõr$r$r%r&×s zRevocationTest.setUpcCs$ddlm}t| |j ¡¡ƒdS)Nrrô)rrõr,r*rör-r÷r$r$r%r.Ûs z&RevocationTest.test_from_json_hashableN)rGrHrIrJr&r.r$r$r$r%róÔsróc@s(eZdZdZdd„Zdd„Zdd„ZdS) ÚOrderResourceTestz&Tests for acme.messages.OrderResource.cCs&ddlm}|tjjtjjd�|_dS)Nr©Ú OrderResource)r¯r°)rrúrr±r¯r°r²)r#rúr$r$r%r&ãs  ÿzOrderResourceTest.setUpcCs&|j ¡tjjtjjddœks"J‚dS)N)r¯r°Úauthorizations)r²r-rr±r¯r°r3r$r$r%rUès ýz&OrderResourceTest.test_to_partial_jsoncCsöddlm}ddlm}|d|tjdd�d�|d|tjd d�d�f}dd lm}dd lm}dd lm}dd lm }||dd�}|d|||d�d�} ddlm } | |f|t dd„|Dƒƒd�} ddlm } | d| d| fd�} |  | |  |  ¡¡¡dS)Nrr½)ÚSTATUS_PENDINGrÍrÎr»rÏrÐrÑrÒrßr r rrz http://authz1rÔrá)ÚOrdercss|] }|jVqdSr¤r·rÕr$r$r%Ú rØz>OrderResourceTest.test_json_de_serializable..)Ú identifiersrÁrûrùz http://order1s test blob)r°r¯Zcsr_pemrû)rr¾rürrÙrÃrÓràr r rýÚtuplerúZ assertEqualr*r-)r#r¾rürÚrÓràr r rrÛrýr¯rúZorderrr$r$r%räïsF   þÿÿü     þÿ ÿ þ ÿz+OrderResourceTest.test_json_de_serializableN)rGrHrIrJr&rUrär$r$r$r%røàsrøc@s eZdZdZdd„Zdd„ZdS)Ú NewOrderTestz!Tests for acme.messages.NewOrder.cCs ddlm}|tjjd�|_dS)Nr)ÚNewOrder)rÿ)rrrr±rÿr`)r#rr$r$r%r&s ÿzNewOrderTest.setUpcCs|j ¡dtjjiksJ‚dS)Nrÿ)r`r-rr±rÿr3r$r$r%rUsÿz!NewOrderTest.test_to_partial_jsonNr³r$r$r$r%rsrc@seZdZdZdd„ZdS)ÚJWSPayloadRFC8555CompliantzFTest for RFC8555 compliance of JWS generated from resources/challengescCs2ddlm}|ƒ}|jdd� ¡}|dks.J‚dS)Nr)ÚNewAuthorizationé)Úindents{})rrrªrÆ)r#rZ new_orderrr$r$r%Útest_message_payloads z/JWSPayloadRFC8555Compliant.test_message_payloadN)rGrHrIrJrr$r$r$r%rsrÚ__main__r/),rJÚ contextlibÚsysÚtypingrZunittestrÚwarningsZjosepyrWr<ZacmerZacme._internal.testsrZload_comparable_certrðZload_comparable_csrrèZload_rsa_private_keyr„ZTestCaserrKr]r{r‘r¨r¬r´r¹rËrÞrårìrórørrrGÚexitÚmainÚargvÚ__file__r$r$r$r%Ús@       _&8P  1%   .