Ë
    šÀ¶cI†  ã                   ó¤  — d Z eZddlmZ ddlZddlZddlZddlZddl	Z	ddl
Z
	 ddlmZ ddlZddlmZ ddlmZmZ ddlmZ ddlZddlmZ dd	lmZ dd
lmZmZmZmZmZm Z m!Z! ddlm"Z" dZ# G d„ de
jH                  «      Z% G d„ de
jH                  «      Z& G d„ de
jH                  «      Z' G d„ de
jH                  «      Z( G d„ de
jH                  «      Z) G d„ de
jH                  «      Z* G d„ de
jH                  «      Z+ G d„ de+«      Z, G d„ de+«      Z- G d„ d e
jH                  «      Z. G d!„ d"e
jH                  «      Z/y# e$ r
 ddlmZ Y �Œ$w xY w)#zTests for the Launchpad class.é    )ÚcontextmanagerN)Úpatch)ÚServiceRoot)ÚAccessTokenÚCredentials)Úuris)Ú	Launchpad)ÚUnencryptedFileCredentialStore)Úassert_keyring_not_importedÚBadSaveKeyringÚfake_keyringÚFauxSocketModuleÚInMemoryKeyringÚNoNetworkAuthorizationEngineÚNoNetworkLaunchpad)ÚKeyringCredentialStoreúhttp://api.example.com/c                   ó   — e Zd ZdZd„ Zy)ÚTestResourceTypeClassesz<launchpadlib must know about restfulclient's resource types.c                 ó–   — t         j                  j                  «       D ](  \  }}| j                  t        j                  |   |«       Œ* y ©N)r   ÚRESOURCE_TYPE_CLASSESÚitemsÚassertEqualr	   )ÚselfÚnameÚclss      úC/usr/lib/python3/dist-packages/launchpadlib/tests/test_launchpad.pyÚtest_resource_typesz+TestResourceTypeClasses.test_resource_typesB   sC   € ô %×:Ñ:×@Ñ@ÓBò 	I‰IˆD�#Ø×ÑœY×<Ñ<¸TÑBÀCÕHñ	Ió    N)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   © r    r   r   r   ?   s   „ ÙFóIr    r   c                   ó\   — e Zd ZdZd„ Zed„ «       Zd„ Zd„ Zd„ Z	d„ Z
d„ Zd	„ Zd
„ Zd„ Zd„ Zy)ÚTestNameLookupsz0Test the utility functions in the 'uris' module.c                 ó(   — t        g d¢«      | _        y )N)Ú
productionÚ	qastagingÚstagingÚdogfoodÚdevÚtest_devÚedge)ÚsortedÚaliases©r   s    r   ÚsetUpzTestNameLookups.setUpL   s   € Üòó

ˆ�r    c              #   óZ  K  — t        j                  d¬«      5 }t        j                  d«       d –— | j                  t	        |«      d«       |\  }| j                  t        |j                  t        «      «       | j                  dt        |«      «       d d d «       y # 1 sw Y   y xY w­w)NT©ÚrecordÚalwaysé   zno longer exists)ÚwarningsÚcatch_warningsÚsimplefilterr   ÚlenÚ
assertTrueÚ
issubclassÚcategoryÚDeprecationWarningÚassertInÚstr)r   ÚcaughtÚwarnings      r   Úedge_deprecation_errorz&TestNameLookups.edge_deprecation_errorY   s…   è ø€ ô ×$Ñ$¨DÔ1ð 	<°VÜ×!Ñ! (Ô+Ûà×ÑœS ›[¨!Ô,Ø‰JˆWØ�O‰OœJ w×'7Ñ'7Ô9KÓLÔMØ�M‰MÐ,¬c°'«lÔ;÷	<÷ 	<ñ 	<üs   ‚B+™A=BÂ	B+ÂB(Â$B+c                 ó  — | j                  t        t        j                  j	                  «       «      | j
                  «       | j                  t        t        j                  j	                  «       «      | j
                  «       y r   )r   r0   r   Úservice_rootsÚkeysr1   Ú	web_rootsr2   s    r   Útest_short_namesz TestNameLookups.test_short_namesf   sP   € à×Ñœ¤× 2Ñ 2× 7Ñ 7Ó 9Ó:¸D¿L¹LÔIØ×Ñœ¤§¡× 3Ñ 3Ó 5Ó6¸¿¹ÕEr    c                 ó¾   — | j                  «       5  | j                  t        j                  d«      t        j                  d«      «       d d d «       y # 1 sw Y   y xY w©Nr/   r)   ©rE   r   r   Úlookup_service_rootr2   s    r   Ú$test_edge_service_root_is_productionz4TestNameLookups.test_edge_service_root_is_productionk   sO   € ð ×(Ñ(Ó*ñ 	Ø×ÑÜ×(Ñ(¨Ó0Ü×(Ñ(¨Ó6ô÷	÷ 	ñ 	úó   ‘9AÁAc                 ó¾   — | j                  «       5  | j                  t        j                  d«      t        j                  d«      «       d d d «       y # 1 sw Y   y xY wrL   ©rE   r   r   Úlookup_web_rootr2   s    r   Ú test_edge_web_root_is_productionz0TestNameLookups.test_edge_web_root_is_productiont   sO   € ð ×(Ñ(Ó*ñ 	Ø×ÑÜ×$Ñ$ VÓ,Ü×$Ñ$ \Ó2ô÷	÷ 	ñ 	úrP   c                 óÚ   — | j                  «       5  | j                  t        j                  t        j                  «      t        j                  d«      «       d d d «       y # 1 sw Y   y xY w©Nr)   ©rE   r   r   rN   ÚEDGE_SERVICE_ROOTr2   s    r   Ú-test_edge_service_root_url_becomes_productionz=TestNameLookups.test_edge_service_root_url_becomes_production}   óS   € Ø×(Ñ(Ó*ñ 	Ø×ÑÜ×(Ñ(¬×)?Ñ)?Ó@Ü×(Ñ(¨Ó6ô÷	÷ 	ñ 	úó   ‘AA!Á!A*c                 óÚ   — | j                  «       5  | j                  t        j                  t        j                  «      t        j                  d«      «       d d d «       y # 1 sw Y   y xY wrV   )rE   r   r   rS   ÚEDGE_WEB_ROOTr2   s    r   Ú)test_edge_web_root_url_becomes_productionz9TestNameLookups.test_edge_web_root_url_becomes_production„   sS   € Ø×(Ñ(Ó*ñ 	Ø×ÑÜ×$Ñ$¤T×%7Ñ%7Ó8Ü×$Ñ$ \Ó2ô÷	÷ 	ñ 	úr[   c                 óÚ   — | j                  «       5  | j                  t        j                  t        j                  «      t        j                  d«      «       d d d «       y # 1 sw Y   y xY wrV   rW   r2   s    r   Ú/test_top_level_edge_constant_becomes_productionz?TestNameLookups.test_top_level_edge_constant_becomes_production‹   rZ   r[   c                 ó¾   — | j                  «       5  | j                  t        j                  d«      t        j                  d«      «       d d d «       y # 1 sw Y   y xY w)Nzhttps://api.edge.launchpad.net/r)   rM   r2   s    r   Ú5test_edge_server_equivalent_string_becomes_productionzETestNameLookups.test_edge_server_equivalent_string_becomes_production’   sN   € Ø×(Ñ(Ó*ñ 	Ø×ÑÜ×(Ñ(Ð)JÓKÜ×(Ñ(¨Ó6ô÷	÷ 	ñ 	úrP   c                 ó¾   — | j                  «       5  | j                  t        j                  d«      t        j                  d«      «       d d d «       y # 1 sw Y   y xY w)Nzhttps://edge.launchpad.net/r)   rR   r2   s    r   Ú9test_edge_web_server_equivalent_string_becomes_productionzITestNameLookups.test_edge_web_server_equivalent_string_becomes_production™   sN   € Ø×(Ñ(Ó*ñ 	Ø×ÑÜ×$Ñ$Ð%BÓCÜ×$Ñ$ \Ó2ô÷	÷ 	ñ 	úrP   c                 óê  — | j                  «       5  | j                  D ]8  }| j                  t        j                  |«      t        j
                  |   «       Œ: 	 ddd«       | j                  «       5  | j                  D ]8  }| j                  t        j                  |«      t        j                  |   «       Œ: 	 ddd«       d}| j                  t        j                  |«      |«       | j                  t        j                  |«      |«       d}| j                  t        t        j                  |«       | j                  t        t        j                  |«       y# 1 sw Y   �ŒxY w# 1 sw Y   Œ¯xY w)z=Ensure that short service names turn into long service names.Nzhttp://some-other-server.comz	not-a-url)
rE   r1   r   r   rN   rG   rS   rI   ÚassertRaisesÚ
ValueError)r   ÚaliasÚ
other_rootÚ	not_a_urls       r   Útest_lookupszTestNameLookups.test_lookups    s2  € ð
 ×(Ñ(Ó*ñ 	ØŸ™ò �Ø× Ñ Ü×,Ñ,¨UÓ3´T×5GÑ5GÈÑ5Nõñ÷	ð ×(Ñ(Ó*ñ 	ØŸ™ò �Ø× Ñ Ü×(Ñ(¨Ó/´·±ÀÑ1Fõñ÷	ð 4ˆ
Ø×Ñœ×1Ñ1°*Ó=¸zÔJØ×Ñœ×-Ñ-¨jÓ9¸:ÔFð  ˆ	Ø×Ñœ*¤d×&>Ñ&>À	ÔJØ×Ñœ*¤d×&:Ñ&:¸IÕF÷+	ñ 	ú÷	ð 	ús   ‘AEÁ2AE)ÅE&Å)E2N)r!   r"   r#   r$   r3   r   rE   rJ   rO   rT   rY   r^   r`   rb   rd   rk   r%   r    r   r'   r'   I   sM   „ Ù:ò
ð ñ
<ó ð
<òFò
òòòòòòóGr    r'   c                   ó   — e Zd ZdZd„ Zy)Ú"TestServiceNameWithEmbeddedVersiona3  Reject service roots that include the version at the end of the URL.

    If the service root is "http://api.launchpad.net/beta/" and the
    version is "beta", the launchpadlib constructor will raise an
    exception.

    This happens with scripts that were written against old versions
    of launchpadlib. The alternative is to try to silently fix it (the
    fix will eventually break as new versions of the web service are
    released) or to go ahead and make a request to
    http://api.launchpad.net/beta/beta/, and cause an unhelpful 404
    error.
    c           	      óÄ  — d}t         j                  d   |z   }	 t        d d d ||¬«       t        d«      ‚# t        $ r3}| j                  t        |«      j                  d«      «       Y d }~nd }~ww xY w|dz  }| j                  t        t        d d d ||¬«       t        j                  }t         j                  d   |z   dz   }| j                  t        t        d d d |¬«       y )Nzversion-foor+   )Úservice_rootÚversionz*Expected a ValueError that was not thrown!zoIt looks like you're using a service root that incorporates the name of the web service version ("version-foo")ú/©ro   )r   rG   r	   ÚAssertionErrorrg   r=   rB   Ú
startswithrf   r   ÚDEFAULT_VERSION)r   rp   ÚrootÚeÚdefault_versions        r   Ú'test_service_name_with_embedded_versionzJTestServiceNameWithEmbeddedVersion.test_service_name_with_embedded_versionÌ   sö   € ð  ˆÜ×!Ñ! )Ñ,¨wÑ6ˆð	OÜ�d˜D $°TÀ7ÕKô !Ð!MÓNÐNøô ò 	Ø�O‰OÜ�A“×!Ñ!ð&ó÷ñ ûð	úð 	�‰ˆØ×ÑÜÜØØØØØð 	ô 	
ô -×<Ñ<ˆÜ×!Ñ! )Ñ,¨Ñ>ÀÑDˆØ×ÑÜœ	 4¨¨tÀ$ð 	õ 	
s   š5 µ	A1¾)A,Á,A1N)r!   r"   r#   r$   ry   r%   r    r   rm   rm   ½   s   „ ñó&
r    rm   c                   ó(   — e Zd ZdZd„ Zd„ Zd„ Zd„ Zy)Ú#TestRequestTokenAuthorizationEnginez4Tests for the RequestTokenAuthorizationEngine class.c                 óB   — | j                  t        t        t        «       y r   ©rf   rg   r   ÚSERVICE_ROOTr2   s    r   Útest_app_must_be_identifiedz?TestRequestTokenAuthorizationEngine.test_app_must_be_identifiedø   s   € Ø×ÑÜÔ4´lõ	
r    c                 ó&   — t        t        d¬«       y ©Nr   ©Úapplication_name©r   r~   r2   s    r   Ú$test_application_name_identifies_appzHTestRequestTokenAuthorizationEngine.test_application_name_identifies_appý   s   € Ü$¤\ÀFÖKr    c                 ó&   — t        t        d¬«       y ©Nr   ©Úconsumer_namer„   r2   s    r   Ú!test_consumer_name_identifies_appzETestRequestTokenAuthorizationEngine.test_consumer_name_identifies_app   s   € Ü$¤\ÀÖHr    c                 óŒ   — | j                  t        t        t        dd¬«       | j                  t        t        t        dd¬«       y )NÚname1Úname2)rƒ   r‰   r   r}   r2   s    r   Ú#test_conflicting_app_identificationzGTestRequestTokenAuthorizationEngine.test_conflicting_app_identification  sH   € à×ÑÜÜ(ÜØ$Ø!ð 	ô 	
ð 	×ÑÜÜ(ÜØ#Ø ð 	õ 	
r    N)r!   r"   r#   r$   r   r…   rŠ   rŽ   r%   r    r   r{   r{   õ   s   „ Ù>ò
ò
LòIó
r    r{   c                   ó   — e Zd ZdZd„ Zd„ Zy)Ú%TestLaunchpadLoginWithCredentialsFilez9Tests for Launchpad.login_with() with a credentials file.c                 ó<  — t        j                  «       \  }}t        j                  d|¬«      }t	        j
                  |«      }| j                  |j                  j                  |j                  j                  j                  «       t        j                  |«       y )Núnot important)rƒ   Úcredentials_file)ÚtempfileÚmkstempr   Ú
login_withr   Úload_from_pathr   ÚconsumerÚkeyÚcredentialsÚosÚremove)r   ÚignoreÚfilenameÚ	launchpadrš   s        r   Útest_filenamez3TestLaunchpadLoginWithCredentialsFile.test_filename  s{   € Ü#×+Ñ+Ó-Ñˆ�Ü&×1Ñ1Ø,¸xô
ˆ	ô "×0Ñ0°Ó:ˆØ×ÑØ× Ñ ×$Ñ$ i×&;Ñ&;×&DÑ&D×&HÑ&Hô	
ô 	�	‰	�(Õr    c                 óÀ   — t        j                  «       \  }}t        «       }| j                  t        t
        j                  d||¬«       t        j                  |«       y )Nr’   )rƒ   r“   Úcredential_store)	r”   r•   r   rf   rg   r   r–   r›   rœ   )r   r�   rž   Ústores       r   Ú+test_cannot_specify_both_filename_and_storezQTestLaunchpadLoginWithCredentialsFile.test_cannot_specify_both_filename_and_store)  sS   € Ü#×+Ñ+Ó-Ñˆ�Ü&Ó(ˆØ×ÑÜÜ×)Ñ)Ø,Ø%Ø"ð 	ô 	
ô 	�	‰	�(Õr    N)r!   r"   r#   r$   r    r¤   r%   r    r   r�   r�     s   „ ÙCòó
r    r�   c                   ó   — e Zd Zd„ Zy)Ú4TestLaunchpadLoginWithCredentialsFileFromEnvVariablec                 óâ  — t        j                  «       \  }}|t        j                  d<   t	        j
                  d¬«      }| j                  |j                  t        «       | j                  |j                  j                  |«       t        j                  d«       t        j                  d= | j                  t        j                  j                  d«      «       t        j                  |«       y )NÚLP_CREDENTIALS_FILEr’   r‚   )r”   r•   r›   Úenvironr   r–   ÚassertIsInstancer¢   r
   r   rž   ÚunsetenvÚassertIsNoneÚgetrœ   )r   r�   rž   rŸ   s       r   r    zBTestLaunchpadLoginWithCredentialsFileFromEnvVariable.test_filename:  s³   € Ü#×+Ñ+Ó-Ñˆ�Ø,4Œ�
‰
Ð(Ñ)ä&×1Ñ1Ø,ô
ˆ	ð 	×ÑØ×&Ñ&Ô(Fô	
ð 	×Ñ˜×3Ñ3×<Ñ<¸hÔGä
�‰Ð)Ô*Ü�J‰JÐ,Ð-Ø×Ñœ"Ÿ*™*Ÿ.™.Ð)>Ó?Ô@ä
�	‰	�(Õr    N)r!   r"   r#   r    r%   r    r   r¦   r¦   6  s   „ ór    r¦   c                   ó   — e Zd ZdZd„ Zd„ Zy)ÚKeyringTestz*Base class for tests that use the keyring.c                 óR   — t        «        t        «       t        j                  _        y r   )r   r   Úlaunchpadlibrš   Úkeyringr2   s    r   r3   zKeyringTest.setUpR  s   € ä#Ô%ô ,;Ó+<Œ× Ñ Õ(r    c                 ó$   — t         j                  `y r   )r±   rš   r²   r2   s    r   ÚtearDownzKeyringTest.tearDownY  s   € ä×$Ñ$Ñ,r    N)r!   r"   r#   r$   r3   r´   r%   r    r   r¯   r¯   O  s   „ Ù4ò=ó-r    r¯   c                   óª   ‡ — e Zd ZdZˆ fd„Zˆ fd„Zd„ Zd„ Zd„ Zd„ Z	d„ Z
d	„ Zd
„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zˆ xZS )ÚTestLaunchpadLoginWithz!Tests for Launchpad.login_with().c                 ó\   •— t         t        | �  «        t        j                  «       | _        y r   )Úsuperr¶   r3   r”   ÚmkdtempÚtemp_dir©r   Ú	__class__s    €r   r3   zTestLaunchpadLoginWith.setUpa  s!   ø€ ÜÔ$ dÑ1Ô3Ü ×(Ñ(Ó*ˆ�r    c                 óh   •— t         t        | �  «        t        j                  | j
                  «       y r   )r¸   r¶   r´   ÚshutilÚrmtreerº   r»   s    €r   r´   zTestLaunchpadLoginWith.tearDowne  s!   ø€ ÜÔ$ dÑ4Ô6Ü�‰�d—m‘mÕ$r    c                 ó¼  — t         j                  j                  | j                  d«      }t	        j
                  dt        |¬«       | j                  t         j                  j                  |«      «       t         j                  j                  |d«      }| j                  t         j                  j                  |«      «       | j                  t         j                  j                  t         j                  j                  |d«      «      «       t         j                  j                  |d«      }| j                  t         j                  j                  |«      «       y )Nr±   r’   ©ro   Úlaunchpadlib_dirúapi.example.comÚcacherš   )
r›   ÚpathÚjoinrº   r   r–   r~   r=   ÚisdirÚassertFalse)r   rÂ   Úservice_pathÚcredentials_paths       r   Útest_dirs_createdz(TestLaunchpadLoginWith.test_dirs_createdi  sÜ   € ô Ÿ7™7Ÿ<™<¨¯©°~ÓFÐÜ×%Ñ%ØÜ%Ø-õ	
ð 	�‰œŸ™Ÿ™Ð&6Ó7Ô8ä—w‘w—|‘|Ð$4Ð6GÓHˆØ�‰œŸ™Ÿ™ lÓ3Ô4ð 	�‰œŸ™Ÿ™¤b§g¡g§l¡l°<ÀÓ&IÓJÔKô Ÿ7™7Ÿ<™<¨°mÓDÐØ×ÑœŸ™Ÿ™Ð'7Ó8Õ9r    c                 ó  — t         j                  j                  | j                  d«      }t        j                  |«       t        j
                  |d«       | j                  t         j                  j                  |«      «       t        j                  |«      }t        j                  |j                  «      }| j                  |t        j                  t        j                  z  t        j                  z  «       t        j                   dt"        |¬«       t        j                  |«      }t        j                  |j                  «      }| j%                  |t        j                  t        j                  z  t        j                  z  «       y )Nr±   ií  r’   rÁ   )r›   rÅ   rÆ   rº   ÚmkdirÚchmodr=   rÇ   ÚstatÚS_IMODEÚst_modeÚassertNotEqualÚS_IWRITEÚS_IREADÚS_IEXECr   r–   r~   r   ©r   rÂ   ÚstatinfoÚmodes       r   Ú'test_dirs_created_are_changed_to_securez>TestLaunchpadLoginWith.test_dirs_created_are_changed_to_secure€  sü   € ÜŸ7™7Ÿ<™<¨¯©°~ÓFÐä
�‰Ð!Ô"Ü
�‰Ð! 5Ô)Ø�‰œŸ™Ÿ™Ð&6Ó7Ô8Ü—7‘7Ð+Ó,ˆÜ�|‰|˜H×,Ñ,Ó-ˆØ×Ñ˜D¤$§-¡-´$·,±,Ñ">ÄÇÁÑ"MÔNÜ×%Ñ%ØÜ%Ø-õ	
ô —7‘7Ð+Ó,ˆÜ�|‰|˜H×,Ñ,Ó-ˆØ×Ñ˜œtŸ}™}¬t¯|©|Ñ;¼d¿l¹lÑJÕKr    c                 óØ  — t         j                  j                  | j                  d«      }t	        j
                  dt        |¬«       | j                  t         j                  j                  |«      «       t        j                  |«      }t        j                  |j                  «      }| j                  |t        j                  t        j                  z  t        j                  z  «       y )Nr±   r’   rÁ   )r›   rÅ   rÆ   rº   r   r–   r~   r=   rÇ   rÏ   rÐ   rÑ   r   rÓ   rÔ   rÕ   rÖ   s       r   Útest_dirs_created_are_securez3TestLaunchpadLoginWith.test_dirs_created_are_secure“  s—   € ÜŸ7™7Ÿ<™<¨¯©°~ÓFÐÜ×%Ñ%ØÜ%Ø-õ	
ð
 	�‰œŸ™Ÿ™Ð&6Ó7Ô8ä—7‘7Ð+Ó,ˆÜ�|‰|˜H×,Ñ,Ó-ˆØ×Ñ˜œtŸ}™}¬t¯|©|Ñ;¼d¿l¹lÑJÕKr    c                 óH  — t         j                  j                  | j                  d«      }t	        j
                  dt        |d¬«      }| j                  |j                  d   d«       t	        j
                  dt        |d¬«      }| j                  |j                  d   d«       y )Nr±   r’   Úfoo)ro   rÂ   rp   rp   Úbar)	r›   rÅ   rÆ   rº   r   r–   r~   r   Úpassed_in_args©r   rÂ   rŸ   s      r   Útest_version_is_propagatedz1TestLaunchpadLoginWith.test_version_is_propagated   s‘   € ô Ÿ7™7Ÿ<™<¨¯©°~ÓFÐÜ&×1Ñ1ØÜ%Ø-Øô	
ˆ	ð 	×Ñ˜×1Ñ1°)Ñ<¸eÔDô '×1Ñ1ØÜ%Ø-Øô	
ˆ	ð 	×Ñ˜×1Ñ1°)Ñ<¸eÕDr    c                 óˆ  — t         j                  j                  | j                  d«      }t	        j
                  dt        |¬«      }| j                  |j                  j                  j                  d«       t	        j
                  dt        |¬«      }| j                  |j                  j                  j                  d«       y )Nr±   zvery importantrÁ   )r›   rÅ   rÆ   rº   r   r–   r~   r   rš   r˜   rƒ   rà   s      r   Ú#test_application_name_is_propagatedz:TestLaunchpadLoginWith.test_application_name_is_propagated¹  s¡   € ô
 Ÿ7™7Ÿ<™<¨¯©°~ÓFÐÜ&×1Ñ1ØÜ%Ø-ô
ˆ	ð
 	×ÑØ×!Ñ!×*Ñ*×;Ñ;Ð=Mô	
ô '×1Ñ1ØÜ%Ø-ô
ˆ	ð
 	×ÑØ×!Ñ!×*Ñ*×;Ñ;Ð=Mõ	
r    c                 óÀ   — t        t        d«      }t        j                  |¬«       | j	                  |j
                  d«       | j	                  |j                  d«       y )Núapplication name©Úauthorization_enginer8   )r   r~   r   r–   r   Úrequest_tokens_obtainedÚaccess_tokens_obtained©r   Úengines     r   Ú'test_authorization_engine_is_propagatedz>TestLaunchpadLoginWith.test_authorization_engine_is_propagatedÖ  sK   € ô .¬lÐ<NÓOˆÜ×%Ñ%¸6ÕBØ×Ñ˜×7Ñ7¸Ô;Ø×Ñ˜×6Ñ6¸Õ:r    c                 óL   — | j                  t        t        j                  «       y r   )rf   rg   r   r–   r2   s    r   Ú)test_login_with_must_identify_applicationz@TestLaunchpadLoginWith.test_login_with_must_identify_applicationß  s   € ð 	×Ñœ*Ô&8×&CÑ&CÕDr    c                 ó0   — t        j                  d¬«       y r�   ©r   r–   r2   s    r   r…   z;TestLaunchpadLoginWith.test_application_name_identifies_appä  s   € ô 	×%Ñ%°vÖ>r    c                 ó0   — t        j                  d¬«       y r‡   rð   r2   s    r   rŠ   z8TestLaunchpadLoginWith.test_consumer_name_identifies_appé  s   € ô 	×%Ñ%°FÖ;r    c                 ór   — t        t        d«      }| j                  t        t        j
                  d|¬«       y)ú;Catch an attempt to specify inconsistent application_names.zapplication name1zapplication name2ræ   N©r   r~   rf   rg   r   r–   rê   s     r   Ú+test_inconsistent_application_name_rejectedzBTestLaunchpadLoginWith.test_inconsistent_application_name_rejectedî  s9   € ä-ÜÐ-ó
ˆð 	×ÑÜÜ×)Ñ)ØØ!'ð	 	õ 	
r    c                 óv   — t        t        dd¬«      }| j                  t        t        j
                  d|¬«       y)ró   NÚconsumer_name1rˆ   Úconsumer_name2ræ   rô   rê   s     r   Ú(test_inconsistent_consumer_name_rejectedz?TestLaunchpadLoginWith.test_inconsistent_consumer_name_rejectedú  s;   € ä-Ü˜$Ð.>ô
ˆð 	×ÑÜÜ×)Ñ)ØØ!'ð	 	õ 	
r    c                 ó~   — t        t        ddg¬«      }| j                  t        t        j
                  dddg|¬«       y)z=Catch an attempt to specify inconsistent allow_access_levels.r˜   ÚFOO©r‰   Úallow_access_levelsNÚBAR)r‰   rý   rç   rô   rê   s     r   Ú.test_inconsistent_allow_access_levels_rejectedzETestLaunchpadLoginWith.test_inconsistent_allow_access_levels_rejected  sD   € ä-Ü¨
ÈÈô
ˆð 	×ÑÜÜ×)Ñ)ØØ$Ø!& Ø!'ð 	õ 	
r    c                 óx   — d„ }t        |¬«      }d„ }| j                  t        t        j                  d||¬«       y )Nc                   ó   — y r   r%   r%   r    r   Ú	callback1zRTestLaunchpadLoginWith.test_inconsistent_credential_save_failed.<locals>.callback1  ó   € Ør    )Úcredential_save_failedc                   ó   — y r   r%   r%   r    r   Ú	callback2zRTestLaunchpadLoginWith.test_inconsistent_credential_save_failed.<locals>.callback2  r  r    úapp name)r¢   r  )r   rf   rg   r   r–   )r   r  r£   r  s       r   Ú(test_inconsistent_credential_save_failedz?TestLaunchpadLoginWith.test_inconsistent_credential_save_failed  sB   € ò	ô '¸iÔHˆò	ð 	×ÑÜÜ×)Ñ)ØØ"Ø#,ð 	õ 	
r    c                 óB  — t        j                  ddg¬«      }| j                  |j                  j                  j
                  d«       | j                  |j                  j                  j                  d «       | j                  |j                  j                  dg«       y )Nr˜   rû   rü   )	r   r–   r   rš   r˜   r™   rƒ   rç   rý   ©r   rŸ   s     r   Útest_non_desktop_integrationz3TestLaunchpadLoginWith.test_non_desktop_integration)  s‚   € ô '×1Ñ1Ø$¸5¸'ô
ˆ	ð 	×Ñ˜×.Ñ.×7Ñ7×;Ñ;¸ZÔHØ×Ñ˜×.Ñ.×7Ñ7×HÑHÈ$ÔOØ×ÑØ×*Ñ*×>Ñ>ÀÀõ	
r    c                 ó‚   — t        j                  ddg¬«      }| j                  |j                  j                  dg«       y )Nrå   rû   )rý   ÚDESKTOP_INTEGRATION)r   r–   r   rç   rý   r
  s     r   Ú<test_desktop_integration_doesnt_happen_without_consumer_namezSTestLaunchpadLoginWith.test_desktop_integration_doesnt_happen_without_consumer_name6  s@   € ô
 '×1Ñ1Ø°U°Gô
ˆ	ð 	×ÑØ×*Ñ*×>Ñ>Ø"Ð#õ	
r    c                 ót  — t        «       }t        «       }t        j                  d| j                  t        ||¬«      }| j                  |j                  j                  j                  t        j                  «       | j                  |j                  j                  j                  d«       | j                  |j                  j                  dg«       t        t        t         j"                  j%                  | j                  dd«      ||t        j&                  ¬«      }| j                  |j(                  |«       y )Nr  )rÂ   ro   ÚtimeoutÚ
proxy_infor  rÃ   rÄ   )ro   rÄ   r  r  rp   )Úobjectr   r–   rº   r~   r   rš   Úaccess_tokenr™   r   ÚACCESS_TOKEN_KEYr˜   rƒ   rç   rý   Údictr›   rÅ   rÆ   ru   rß   )r   r  r  rŸ   Úexpected_argumentss        r   Ú*test_no_credentials_creates_new_credentialzATestLaunchpadLoginWith.test_no_credentials_creates_new_credentialC  sþ   € ä“(ˆÜ“Xˆ
Ü&×1Ñ1ØØ!Ÿ]™]Ü%ØØ!ô
ˆ	ð 	×ÑØ×!Ñ!×.Ñ.×2Ñ2Ü(×9Ñ9ô	
ð 	×ÑØ×!Ñ!×*Ñ*×;Ñ;¸Zô	
ð 	×ÑØ×*Ñ*×>Ñ>Ø"Ð#ô	
ô "Ü%Ü—'‘'—,‘,˜tŸ}™}Ð.?ÀÓIØØ!Ü&×6Ñ6ô
Ðð 	×Ñ˜×1Ñ1Ð3EÕFr    c                 óÄ  — t        j                  d| j                  t        ¬«      }| j	                  |j
                  j                  j                  d«       | j	                  |j
                  j                  j                  d«       t        j                  j                  | j                  ddd«      }| j                  t        j                  j                  |«      «       y)z)Test the anonymous login helper function.zanonymous access)rÂ   ro   Ú rÃ   rš   N)r   Úlogin_anonymouslyrº   r~   r   rš   r  r™   Úsecretr›   rÅ   rÆ   rÈ   Úexists)r   rŸ   rÊ   s      r   Útest_anonymous_loginz+TestLaunchpadLoginWith.test_anonymous_logine  s§   € ä&×8Ñ8ØØ!Ÿ]™]Ü%ô
ˆ	ð
 	×Ñ˜×.Ñ.×;Ñ;×?Ñ?ÀÔDØ×Ñ˜×.Ñ.×;Ñ;×BÑBÀBÔGô Ÿ7™7Ÿ<™<Ø�M‰MÐ,¨mÐ=Oó
Ðð 	×ÑœŸ™Ÿ™Ð(8Ó9Õ:r    c                 ó”  — t        j                  t         j                  j                  | j                  dd«      «       t         j                  j                  | j                  ddd«      }t        ddt        dd«      ¬«      }|j                  |«       t        «       }t        «       }d}t        j                  d| j                  t        |||¬	«      }t        t        |||t         j                  j                  | j                  dd
«      ¬«      }|j                  «       D ]&  \  }}	|j                  |   }
| j                  |
|	«       Œ( y )NrÃ   rš   r  zconsumer_secret:42zaccess_key:84zaccess_secret:168)Úconsumer_secretr  rÝ   )rÂ   ro   r  r  rp   rÄ   )ro   r  r  rp   rÄ   )r›   ÚmakedirsrÅ   rÆ   rº   r   r   Úsave_to_pathr  r   r–   r~   r  r   rß   r   )r   Úcredentials_file_pathrš   r  r  rp   rŸ   r  r™   ÚexpectedÚactuals              r   Ú-test_existing_credentials_arguments_passed_onzDTestLaunchpadLoginWith.test_existing_credentials_arguments_passed_onu  s#  € ô 	�‰Ü�G‰G�L‰L˜Ÿ™Ð(9¸=ÓIô	
ô !#§¡§¡Ø�M‰MÐ,¨m¸Zó!
Ðô "ØØ0Ü$ _Ð6IÓJô
ˆð
 	× Ñ Ð!6Ô7ä“(ˆÜ“Xˆ
ØˆÜ&×1Ñ1ØØ!Ÿ]™]Ü%ØØ!Øô
ˆ	ô "Ü%ØØ!ØÜ—'‘'—,‘,˜tŸ}™}Ð.?ÀÓIô
Ðð 0×5Ñ5Ó7ò 	/‰MˆC�Ø×-Ñ-¨cÑ2ˆFØ×Ñ˜V XÕ.ñ	/r    c           	      ó¨  — t         j                  j                  d«      }| j                  t         j                  d<   t	        j
                  dt        ¬«      }|�|t         j                  d<   nt         j                  d= |j                  d   }t         j                  j                  t         j                  j                  |dd«      «      }| j                  |t         j                  j                  | j                  d«      «       | j                  t         j                  j                  t         j                  j                  |dd«      «      «       y )NÚHOMEr  rr   rÄ   z..z.launchpadlibrÃ   )r›   r©   r­   rº   r   r–   r~   rß   rÅ   ÚabspathrÆ   r   r=   r  )r   Úold_homerŸ   Ú	cache_dirrÂ   s        r   Útest_None_launchpadlib_dirz1TestLaunchpadLoginWith.test_None_launchpadlib_dir›  sí   € ô —:‘:—>‘> &Ó)ˆØ!Ÿ]™]Œ�
‰
�6ÑÜ&×1Ñ1Ø¤\ô
ˆ	ð ÐØ!)ŒB�J‰J�vÒä—
‘
˜6Ð"à×,Ñ,¨WÑ5ˆ	ÜŸ7™7Ÿ?™?¬2¯7©7¯<©<¸	À4ÈÓ+NÓOÐØ×ÑØœbŸg™gŸl™l¨4¯=©=¸/ÓJô	
ð 	�‰Ü�G‰G�N‰NÜ—‘—‘Ð-Ð/@À'ÓJóõ	
r    c                 ól  — t        j                  dd«      }| j                  |j                  d   d«       t        j                  dt        j
                  d   «      }| j                  |j                  d   t        j
                  d   «       d}| j                  t        t         j                  dd«       y )Nr  r+   ro   z"https://api.staging.launchpad.net/)r  zhttps://rÝ   )r   r–   r   rß   r   rG   rf   rg   r
  s     r   Útest_short_service_namez.TestLaunchpadLoginWith.test_short_service_name´  s¦   € ä&×1Ñ1°*¸iÓHˆ	Ø×ÑØ×$Ñ$ ^Ñ4Ø0ô	
ô '×1Ñ1Øœ×*Ñ*¨9Ñ5ó
ˆ	ð 	×ÑØ×$Ñ$ ^Ñ4Ü×Ñ˜yÑ)ô	
ð -ˆ	Ø×ÑÜÔ*×5Ñ5°zÀ5õ	
r    c                 ó2   — t        j                  dd¬«       y )Nr’   é   )Úmax_failed_attemptsrð   r2   s    r   Ú!test_max_failed_attempts_acceptedz8TestLaunchpadLoginWith.test_max_failed_attempts_acceptedÍ  s   € ô 	×%Ñ% oÈ1ÖMr    )r!   r"   r#   r$   r3   r´   rË   rÙ   rÛ   rá   rã   rì   rî   r…   rŠ   rõ   rù   rÿ   r  r  r  r  r  r%  r+  r-  r1  Ú__classcell__)r¼   s   @r   r¶   r¶   ^  s�   ø„ Ù+ô+ô%ò:ò.Lò&LòEò2
ò:;òEò
?ò
<ò


ò
ò
ò
ò&
ò
ò GòD;ò $/òL
ò2
ö2Nr    r¶   c                   ó   — e Zd ZdZd„ Zd„ Zy)ÚTestDeprecatedLoginMethodsz2Make sure the deprecated login methods still work.c                 ób  — t        j                  d¬«      5 }t        j                  d«       t        j                  dt        «       t	        j
                  ddd«       | j                  t        |«      d«       | j                  |d	   j                  t        «       d d d «       y # 1 sw Y   y xY w)
NTr5   r7   r�   r˜   Útokenr  r8   r   )
r9   r:   r;   ÚPendingDeprecationWarningr   Úloginr   r<   r?   r@   ©r   rC   s     r   Útest_login_is_deprecatedz3TestDeprecatedLoginMethods.test_login_is_deprecatedÖ  s‹   € ä×$Ñ$¨DÔ1ð 	E°VÜ×!Ñ! (Ô+Ü×!Ñ! (Ô,EÔFÜ×$Ñ$ Z°¸(ÔCØ×ÑœS ›[¨!Ô,Ø×Ñ˜V A™Y×/Ñ/Ô1CÔD÷	E÷ 	Eñ 	Eús   —BB%Â%B.c                 ó¤  — t        j                  d¬«      5 }t        j                  d«       t        j                  dt        «       t        j                  dd«       t        j                  d«       | j                  t        |d   j                  «      d«       | j                  |d   j                  t        «       d d d «       y # 1 sw Y   y xY w)	NTr5   r7   r�   z.*next release of cryptographyr˜   r   z¬The Launchpad.get_token_and_login() method is deprecated. You should use Launchpad.login_anonymous() for anonymous access and Launchpad.login_with() for all other purposes.)r9   r:   r;   r7  Úfilterwarningsr   Úget_token_and_loginr   rB   Úmessager?   r@   r9  s     r   Ú&test_get_token_and_login_is_deprecatedzATestDeprecatedLoginMethods.test_get_token_and_login_is_deprecatedß  s±   € ä×$Ñ$¨DÔ1ð 	E°VÜ×!Ñ! (Ô+Ü×!Ñ! (Ô,EÔFÜ×#Ñ#ØÐ;ôô ×2Ñ2°:Ô>Ø×ÑÜ�F˜1‘I×%Ñ%Ó&ðLôð ×Ñ˜V A™Y×/Ñ/Ô1CÔD÷	E÷ 	Eñ 	Eús   —B&CÃCN)r!   r"   r#   r$   r:  r?  r%   r    r   r4  r4  Ó  s   „ Ù<òEóEr    r4  c                   óÞ   — e Zd Zd„ Zd„ Z ej                  ed ed„ «      «      d„ «       Z	 ej                  ed ed„ «      «      d„ «       Z
 ej                  ed ed„ «      «      d	„ «       Zy
)Ú!TestCredenitialSaveFailedCallbackc                 óp   — t        «       t        j                  _        t	        j
                  «       | _        y r   ©r   r±   rŸ   Úsocketr”   r¹   rº   r2   s    r   r3   z'TestCredenitialSaveFailedCallback.setUpõ  ó%   € ô )9Ó(:Œ×ÑÔ%Ü ×(Ñ(Ó*ˆ�r    c                 ót   — t         t        j                  _         t        j                  | j
                  «       y r   ©rD  r±   rŸ   r¾   r¿   rº   r2   s    r   r´   z*TestCredenitialSaveFailedCallback.tearDownü  ó    € Ü(.Œ×ÑÔ%Ü�‰�d—m‘mÕ$r    Ú_is_sudoc                   ó   — y©NFr%   r%   r    r   ú<lambda>z*TestCredenitialSaveFailedCallback.<lambda>   ó   � r    c                 ó$  ‡— g Šˆfd„}t         j                  j                  | j                  d«      }d}t	        t        «       «      5  t        j                  d|||¬«       | j                  t        ‰«      d«       d d d «       y # 1 sw Y   y xY w)Nc                  ó(   •— ‰ j                  d «       y r   )Úappend)Úcallback_calleds   €r   ÚcallbackzPTestCredenitialSaveFailedCallback.test_credentials_save_failed.<locals>.callback  s   ø€ ð ×"Ñ" 4Õ(r    r±   r   r’   )ro   rÂ   r  r8   )
r›   rÅ   rÆ   rº   r   r   r   r–   r   r<   )r   rR  rÂ   ro   rQ  s       @r   Útest_credentials_save_failedz>TestCredenitialSaveFailedCallback.test_credentials_save_failed   s€   ø€ ð
 ˆô	)ô
 Ÿ7™7Ÿ<™<¨¯©°~ÓFÐØ0ˆÜœ.Ó*Ó+ñ 	6Ü×)Ñ)ØØ)Ø!1Ø'/õ	ð ×ÑœS Ó1°1Ô5÷	6÷ 	6ñ 	6ús   Á5BÂBc                   ó   — yrK  r%   r%   r    r   rL  z*TestCredenitialSaveFailedCallback.<lambda>  rM  r    c                 óü   — t         j                  j                  | j                  d«      }d}t	        t        «       «      5  | j                  t        t        j                  d||¬«       d d d «       y # 1 sw Y   y xY w©Nr±   r   r’   rÁ   )
r›   rÅ   rÆ   rº   r   r   rf   ÚRuntimeErrorr   r–   ©r   rÂ   ro   s      r   Ú:test_default_credentials_save_failed_is_to_raise_exceptionz\TestCredenitialSaveFailedCallback.test_default_credentials_save_failed_is_to_raise_exception  sj   € ô Ÿ7™7Ÿ<™<¨¯©°~ÓFÐØ0ˆÜœ.Ó*Ó+ñ 	Ø×ÑÜÜ"×-Ñ-ØØ)Ø!1ð ô ÷	÷ 	ñ 	ús   Á )A2Á2A;c                   ó   — y)NTr%   r%   r    r   rL  z*TestCredenitialSaveFailedCallback.<lambda>&  rM  r    c                 óÜ   — t         j                  j                  | j                  d«      }d}t	        t        «       «      5  t        j                  d||¬«       d d d «       y # 1 sw Y   y xY wrV  )r›   rÅ   rÆ   rº   r   r   r   r–   rX  s      r   Ú>test_credentials_save_fail_under_sudo_does_not_raise_exceptionz`TestCredenitialSaveFailedCallback.test_credentials_save_fail_under_sudo_does_not_raise_exception&  sY   € ô Ÿ7™7Ÿ<™<¨¯©°~ÓFÐØ0ˆÜœ.Ó*Ó+ñ 	Ü×)Ñ)ØØ)Ø!1õ÷	÷ 	ñ 	ús   Á A"Á"A+N)r!   r"   r#   r3   r´   r   r  r   ÚstaticmethodrS  rY  r\  r%   r    r   rA  rA  ñ  sŠ   „ ò+ò%ð €U‡\�\Ð$ j±,¹}Ó2MÓNñ6ó Oð6ð, €U‡\�\Ð$ j±,¹}Ó2MÓNñó Oðð €U‡\�\Ð$ j±,¹|Ó2LÓMñ
ó Nñ
r    rA  c                   óœ   — e Zd Zd„ Zd„ Z ej                  ed ed„ «      «      d„ «       Z	 ej                  ed ed„ «      «      d„ «       Z
y)	ÚTestMultipleSitesc                 óp   — t        «       t        j                  _        t	        j
                  «       | _        y r   rC  r2   s    r   r3   zTestMultipleSites.setUp9  rE  r    c                 ót   — t         t        j                  _         t        j                  | j
                  «       y r   rG  r2   s    r   r´   zTestMultipleSites.tearDown@  rH  r    rI  c                   ó   — yrK  r%   r%   r    r   rL  zTestMultipleSites.<lambda>D  rM  r    c                 óî  — t         j                  j                  | j                  d«      }t	        «       }d}d}t        |«      5  t        j                  |||¬«      }|j                  j                  j                  }d d d «       t        |j                  j                  «       «      d   d   }| j                  ||«       | j                  |«       | j                  ||dz   |z   «       y # 1 sw Y   ŒoxY w)Nr±   r   zSuper App 3000rÁ   r   r8   ú@)r›   rÅ   rÆ   rº   r   r   r   r–   rš   r˜   r™   ÚlistÚdatarH   rA   r   )r   rÂ   r²   ro   rƒ   rŸ   r‰   Úapplication_keys           r   Ú"test_components_of_application_keyz4TestMultipleSites.test_components_of_application_keyD  sÚ   € äŸ7™7Ÿ<™<¨¯©°~ÓFÐÜ!Ó#ˆØ0ˆØ+ÐÜ˜'Ó"ñ 	?Ü*×5Ñ5Ø Ø)Ø!1ôˆIð
 &×1Ñ1×:Ñ:×>Ñ>ˆM÷	?ô ˜wŸ|™|×0Ñ0Ó2Ó3°AÑ6°qÑ9ˆð
 	�‰�l OÔ4Ø�‰�m _Ô5ð
 	×Ñ˜¨-¸#Ñ*=ÀÑ*LÕM÷'	?ð 	?ús   Á9C+Ã+C4c                   ó   — yrK  r%   r%   r    r   rL  zTestMultipleSites.<lambda>_  rM  r    c                 óJ  — t         j                  j                  | j                  d«      }t	        «       }|j
                  rJ d«       ‚t        |«      5  t        j                  dd|¬«       t        j                  dd|¬«       d d d «       t        |j
                  j                  «       «      dk(  sJ ‚t        |j
                  j                  «       «      d   d	   }t        |j
                  j                  «       «      d	   d	   }| j                  ||«       y # 1 sw Y   Œ–xY w)
Nr±   z$oops, a fresh keyring has data in itrå   zhttp://alpha.example.com/rÁ   zhttp://beta.example.com/é   r   r8   )r›   rÅ   rÆ   rº   r   rf  r   r   r–   r<   rH   re  rÒ   )r   rÂ   r²   Úapplication_key_1Úapplication_key_2s        r   Útest_same_app_different_serversz1TestMultipleSites.test_same_app_different_servers_  sý   € äŸ7™7Ÿ<™<¨¯©°~ÓFÐÜ!Ó#ˆà—<’<ÐGÐ!GÓGÐÜ˜'Ó"ñ 	ô ×)Ñ)Ø"Ø8Ø!1õô
 ×)Ñ)Ø"Ø7Ø!1õ÷	ô  �7—<‘<×$Ñ$Ó&Ó'¨1Ò,Ð,Ð,ä  §¡×!2Ñ!2Ó!4Ó5°aÑ8¸Ñ;ÐÜ  §¡×!2Ñ!2Ó!4Ó5°aÑ8¸Ñ;ÐØ×ÑÐ-Ð/@ÕA÷)	ð 	ús   Á1DÄD"N)r!   r"   r#   r3   r´   r   r  r   r]  rh  rn  r%   r    r   r_  r_  4  sd   „ ò
+ò%ð €U‡\�\Ð$ j±,¹}Ó2MÓNñNó OðNð4 €U‡\�\Ð$ j±,¹}Ó2MÓNñBó OñBr    r_  )0r$   ÚtypeÚ__metaclass__Ú
contextlibr   r›   r¾   rD  rÏ   r”   ÚunittestÚunittest.mockr   ÚImportErrorÚmockr9   Úlazr.restfulclient.resourcer   Úlaunchpadlib.credentialsr   r   r±   r   Úlaunchpadlib.launchpadr	   r
   Úlaunchpadlib.testing.helpersr   r   r   r   r   r   r   r   r~   ÚTestCaser   r'   rm   r{   r�   r¦   r¯   r¶   r4  rA  r_  r%   r    r   ú<module>r{     sK  ðñ" %à€å %Û 	Û Û Û Û Û ðÝ#ó å 3÷õ
 Û Ý ,Ý C÷÷ ñ õð
 )€ôI˜h×/Ñ/ô IôqG�h×'Ñ'ô qGôh5
¨×):Ñ):ô 5
ôp 
¨(×*;Ñ*;ô  
ôF¨H×,=Ñ,=ô ô<¸8×;LÑ;Lô ô2-�(×#Ñ#ô -ôrN˜[ô rNôjE ô Eô<@¨×(9Ñ(9ô @ôFEB˜×)Ñ)õ EBøðk ò ßÐðús   ¤E  Å EÅE