3 F\@sddlZddlZddlZddlZddlZddlZddlZddlZddlZddl Z ddl Z ddl Z ddl Z ddl Z ddl mZddlZddlmZddlmZddlmZddlmZejjejjedddZGdd d ejZGd d d ejZGd d d ejZGdddejZ Gdddej!Z"Gdddej!Z#Gdddej!Z$Gdddej!Z%Gddde j&Z'Gdddej!Z(Gdddej!Z)Gdddej!Z*Gd d!d!ej!Z+Gd"d#d#ej!Z,Gd$d%d%ej!Z-Gd&d'd'ej!Z.d(d)Z/dS)*N)matchers) wheelfile)git) packaging)basez..csFeZdZdZfddZfddZd ddZd d Zd d ZZ S)TestRepozA git repo for testing with. Use of TempHomeDir with this fixture is strongly recommended as due to the lack of config --local in older gits, it will write to the users global configuration without TempHomeDir. cstt|j||_dS)N)superr__init___basedir)selfbasedir) __class__m/private/var/folders/pf/wv4htv3x0qs2c2mp0dnn0kchsvlck3/T/pip-install-emcbgzcf/pbr/pbr/tests/test_packaging.pyr LszTestRepo.__init__csBtt|jtjdddg|jtjtjdddg|jdS)Nrinit.add)rrsetUpr_run_cmdr Z _config_git)r )r rrrPszTestRepo.setUp test commitcCsZttj|j}|jd|}t|djtjdd|g|jtjddd|g|jdS)Nz/%dwtrrcommitz-m)lenoslistdirr opencloserr)r message_contentfilespathrrrrVs zTestRepo.commitcCstjddddg|jdS)Nrresetz--hardzHEAD^)rrr )r rrruncommit]szTestRepo.uncommitcCstjdddd|g|jdS)Nrtagz-smztest tag)rrr )r versionrrrr"`sz TestRepo.tag)r) __name__ __module__ __qualname____doc__r rrr!r" __classcell__rr)r rrDs    rcs eZdZdZfddZZS) GPGKeyFixturezxCreates a GPG key for testing. It's recommended that this be used in concert with a unique home directory. cs*tt|j|jtj}tjd}tj ddg|j }xZ|dj dD]<}|j |}|rHt |jdt |jdt |jdf}PqHW|dkrd}|j d }t|d }z0|ddkr|ddkr|jd |jd Wd|jX|ddkrd }n|ddkr d}nd}tj ddd||g|j dS)Nz#^gpg\s.*\s([\d+])\.([\d+])\.([\d+])Zgpgz --versionr z /key-configrzO %no-protection %transient-key a %no-ask-passphrase Key-Type: RSA Name-Real: Example Key Name-Comment: N/A Name-Email: example@example.com Expire-Date: 2d Preferences: (setpref) %commit z--quick-randomz--debug-quick-randomz --gen-keyz--batch)rrr)rr)r useFixturefixturesTempDirrecompilerrrsplitmatchintgrouprwriter)r tempdirZgnupg_version_reZ gnupg_versionline config_filefZ gnupg_random)r rrrls<          zGPGKeyFixture.setUp)r$r%r&r'rr(rr)r rr)esr)c@s&eZdZdZfdfddZddZdS)VenvzCreate a virtual environment for testing with. :attr path: The path to the environment root. :attr python: The path to the python binary in the environment. NcCsF||_|fkr dt}dd|g}||_|dkrTestPackagingInGitRepoWithCommit.test_install_writes_changelog)r$r%r&dict scenariosrrvrxrzr{r|rrr(rr)r rri s    ric@seZdZddZdS)TestExtrafileInstallationcCsF|jdd|jddd\}}}|j|tjd|j|tjddS)Nr@z--rootrF)rozcopying data_files/a.txtzcopying data_files/b.txt)rrrrrr)r rrrrrtest_install_globLs z+TestExtrafileInstallation.test_install_globN)r$r%r&rrrrrrKsrcs,eZdZfddZddZddZZS)#TestPackagingInGitRepoWithoutCommitcs0tt|j|jt|j|jddddS)NrnF)ro)rrrr/rrlrr)r )r rrrXsz)TestPackagingInGitRepoWithoutCommit.setUpc Cs:ttjj|jdd}|j}WdQRX|jd|dS)Nrprqr*)rrrrKrlrs assertEqual)r r<rurrrrv]sz0TestPackagingInGitRepoWithoutCommit.test_authorsc Cs:ttjj|jdd}|j}WdQRX|jd|dS)NrwrqzCHANGES ======= )rrrrKrlrsr)r r<rurrrrxcsz2TestPackagingInGitRepoWithoutCommit.test_changelog)r$r%r&rrvrxr(rr)r rrVs rcs,eZdZfddZddZddZZS)TestPackagingWheelscstt|j|jt|j|jdddtjj |jd}tj |d}tjj ||}t j |}|j jd}tjj |||_|j|j|jdS)N bdist_wheelF)rodistrZnamever)rrrr/rrlrrrrrKrrZ WheelFileZparsed_filenamer7extracted_wheel_dir extractallr)r Zdist_dirZrelative_wheel_filenameZabsolute_wheel_filename wheel_file wheel_name)r rrrls   zTestPackagingWheels.setUpcCs`tjj|jd}|jtjj|tj|}|jd||jd||jd||jd|dS)Nz pbr_testpackage-0.0.data/scriptsZ pbr_test_wsgiZpbr_test_wsgi_with_classZ pbr_test_cmdZpbr_test_cmd_with_class) rrrKr assertTruerUrryZ assertNotIn)r Z scripts_dirscriptsrrr$test_data_directory_has_wsgi_scripts~s     z8TestPackagingWheels.test_data_directory_has_wsgi_scriptscCs^tjj|jd}d}t}|r(dj|}tjj||}|jtjj||jtjj|dS)Npbr_testpackagez testext.soztestext.{0}.so)rrrKr get_soabirdrrU)r Zbuilt_package_dirZstatic_object_filenamesoabiZstatic_object_pathrrrtest_generates_c_extensionss  z/TestPackagingWheels.test_generates_c_extensions)r$r%r&rrrr(rr)r rrjs  rc@seZdZddZddZdS)TestPackagingHelperscCs@d}tjddd d}d}d}tj||||}d}|j||dS) Nconsole_scriptsztest-epz pbr.packagingLocalInstallScripts)name module_nameattrsz#!/usr/bin/env fake-header z=%(group)s %(module_name)s %(import_target)s %(invoke_target)sz`#!/usr/bin/env fake-header console_scripts pbr.packaging LocalInstallScripts LocalInstallScripts)r) pkg_resources EntryPointrgenerate_scriptr)r r7 entry_pointheadertemplateZgenerated_scriptZexpected_scriptrrrtest_generate_scripts z)TestPackagingHelpers.test_generate_scriptcCsZd}tjddd}d}d}|jttj||||tjddd d }|jttj||||dS) Nrztest-epz pbr.packaging)rrz#!/usr/bin/env fake-header z=%(group)s %(module_name)s %(import_target)s %(invoke_target)sattr1attr2attr3)rrr)rrr)rr assertRaisesrXrr)r r7rrrrrr+test_generate_script_validates_expectationss   z@TestPackagingHelpers.test_generate_script_validates_expectationsN)r$r%r&rrrrrrrsrcs4eZdZfddZddZddZddZZS) TestPackagingInPlainDirectorycstt|jdS)N)rrr)r )r rrrsz#TestPackagingInPlainDirectory.setUpcCs4|jdddtjj|jd}|jtjj|dS)NrnF)rorp)rrrrrKrl assertFalserU)r filenamerrrrvsz*TestPackagingInPlainDirectory.test_authorscCs4|jdddtjj|jd}|jtjj|dS)NrnF)rorw)rrrrrKrlrrU)r rrrrrxsz,TestPackagingInPlainDirectory.test_changelogcCs:|jdd|jddd\}}}|j|tjtjddS)Nr@z--rootrF)rozGenerating ChangeLog)rrrrrr~r)r rrrrrtest_install_no_ChangeLogs  z7TestPackagingInPlainDirectory.test_install_no_ChangeLog)r$r%r&rrvrxrr(rr)r rrs rc@seZdZddZddZdS)TestPresenceOfGitc Cs4tjjtd}d|_|jdtjWdQRXdS)N_run_shell_commandzgit version 1.8.4.1T)mockpatchobjectrZ return_valuer_git_is_installed)r _commandrrrtestGitIsInstalledsz$TestPresenceOfGit.testGitIsInstalledc Cs4tjjtd}t|_|jdtjWdQRXdS)NrF)rrrrOSError side_effectrr)r rrrrtestGitIsNotInstalledsz'TestPresenceOfGit.testGitIsNotInstalledN)r$r%r&rrrrrrrsrc@s<eZdZddZddZddZddZd d Zd d Zd S)ParseRequirementsTestcCstjg}|jg|dS)N)rparse_requirementsr)r actualrrrtest_empty_requirementss z-ParseRequirementsTest.test_empty_requirementscCsntj}tjj|d}t|d}|jdWdQRXtjj t d|ft j }WdQRX|j dg|dS)z/Ensure default files used if no files provided.zrequirements.txtwrFNZREQUIREMENTS_FILES) tempfilemkdtemprrrKrr8rrrrrr)r r9 requirementsr<resultrrrtest_default_requirementss   z/ParseRequirementsTest.test_default_requirementsc Cs\tjddd\}}t|d}|jdWdQRX|jtjd||jdd gtj dS) z6Ensure environment variable used if no files provided. openstackz.setup)prefixsuffixrzfoo barNPBR_REQUIREMENTS_FILESfoobar) rmkstemprr8r/r0EnvironmentVariablerrr)r rtmp_filefhrrrtest_override_with_envs  z,ParseRequirementsTest.test_override_with_envc Cs`tjddd\}}t|d}|jdWdQRX|jtjdd||jdd gtj dS) Nrz.setup)rrrzfoo barrz no-such-file,rr) rrrr8r/r0rrrr)r rrrrrr%test_override_with_env_multiple_filess   z;ParseRequirementsTest.test_override_with_env_multiple_filesc Cs|tj}tjj|d}t|d8}|jd|jd|jd|jd|jdWdQRXtj|g}|j dg|dS) Nzrequirements.txtrz-i https://myindex.local z$ --index-url https://myindex.local z) --extra-index-url https://myindex.local z#--find-links https://myindex.local zarequirement>=1.0 zarequirement>=1.0) rrrrrKrr8rrr)r r9rr<rrrrtest_index_presents      z(ParseRequirementsTest.test_index_presentcCstj}tjj|d}tjj|d}t|d}|jd|WdQRXt|d}|jdWdQRXtj|g}|j dg|dS)Nzrequirements.txtz nested.txtrz-r rF) rrrrrKrr8rrr)r r9rnestedr<rrrrtest_nested_requirementss   z.ParseRequirementsTest.test_nested_requirementsN) r$r%r&rrrrrrrrrrrs    rc@seZdZdddgdfdddgdfgZdd difd d difgZd d d dgdfddd dgdfddgdfgZeejdddifdddifdddifgeeZeejddddfgdddifdddifgeeZdd Zd!S)"ParseRequirementsTestScenariosz non-versionedFr) versionedexpectedrTz bar>=1.2.3znon-subdirectoryhas_subdirectoryzhas-subdirectorynormalzfoo barr)urlrZnormal_with_commentsz-# this is a comment foo # and another one barZremoves_index_linesz -f foobarZ ssh_egg_urlrz!git+ssh://foo.com/zipball#egg=barZgit_https_egg_urlz#git+https://foo.com/zipball#egg=barZ http_egg_urlzhttps://foo.com/zipball#egg=barZ git_egg_urlzgit://foo.com/zipball#egg=bar)rrz non-editableeditablec Cstj}|j}t|dr&|jr&d|}t|dr>|jr>d|}t|drV|jrVd|}t|jd}|j |WdQRX|j |j t j |jgdS)Nrz-e %srz%s-1.2.3rz%s&subdirectory=bazr)rNamedTemporaryFilerhasattrrrrrrr8rrrr)r r req_stringrrrrtest_parse_requirementsNsz6ParseRequirementsTestScenarios.test_parse_requirementsN) r$r%r&Zversioned_scenariosZsubdirectory_scenariosr testscenariosZmultiply_scenariosrrrrrr*s*          rcs,eZdZfddZddZddZZS)ParseDependencyLinksTestcs&tt|jtjddd\}|_dS)Nrz.setup)rr)rrrrrr)r r)r rrr_szParseDependencyLinksTest.setUpc Cs>t|jd}|jdWdQRX|jdgtj|jgdS)Nrzhttp://test.com zhttp://test.com)rrr8rrparse_dependency_links)r rrrrtest_parse_dependency_normalds z5ParseDependencyLinksTest.test_parse_dependency_normalc Cs>t|jd}|jdWdQRX|jdgtj|jgdS)Nrz -e git://foo.com/zipball#egg=barzgit://foo.com/zipball#egg=bar)rrr8rrr)r rrrr&test_parse_dependency_with_git_egg_urlks z?ParseDependencyLinksTest.test_parse_dependency_with_git_egg_url)r$r%r&rrrr(rr)r rr]s rcseZdZdeddfdeddfgZfddZdd Zd d Zd d ZddZ ddZ ddZ ddZ ddZ ddZddZddZddZd d!Zd"d#Zd$d%Zd&d'Zd(d)Zd*d+Zfd,d-ZZS). TestVersionsrjT)rjrkFcsBtt|j|jt|j|_|jt|jtj |jdS)N) rrrr/rrlrmr)rZDiveDir)r )r rrrzs zTestVersions.setUpcCsptj}tjd|<tjd&}tjjdddig|_tjd}WdQRXWdQRX|j |j |j |dS)Nzpbr.packaging.openzemail.message_from_fileZTestNamer) rZ mock_openremailerrors MessageErrorrrZ_get_version_from_pkg_metadatarcalledZ assertIsNone)r Z mocked_openmessage_from_filer#rrr%test_email_parsing_errors_are_handleds    z2TestVersions.test_email_parsing_errors_are_handledcCs@|jj|jjd|jjdtj}|j|tjddS)Nz1.2.3zSem-Ver: api-breakz 2.0.0.dev1)rmrr"r_get_version_from_gitr}r StartsWith)r r#rrrtest_capitalized_headerss    z%TestVersions.test_capitalized_headerscCs@|jj|jjd|jjdtj}|j|tjddS)Nz1.2.3zSem-ver: api-breakz 2.0.0.dev1)rmrr"rrr}rr)r r#rrr test_capitalized_headers_partials    z-TestVersions.test_capitalized_headers_partialcCs0|jj|jjdtjd}|jd|dS)Nz1.2.3)rmrr"rrr)r r#rrr#test_tagged_version_has_tag_versions   z0TestVersions.test_tagged_version_has_tag_versioncCs@|jj|jjd|jjdtj}|j|tjddS)Nz1.4zSem-Ver: api-breakz 2.0.0.dev1)rmrr"rrr}rr)r r#rrr&test_non_canonical_tagged_version_bumps    z3TestVersions.test_non_canonical_tagged_version_bumpcCs>|jj|jjd|jjtj}|j|tjddS)Nz1.2.3z 1.2.4.dev1)rmrr"rrr}rr)r r#rrr1test_untagged_version_has_dev_version_postversions    z>TestVersions.test_untagged_version_has_dev_version_postversioncCs>|jj|jjd|jjtj}|j|tjddS)Nz 1.2.3.0a1z1.2.3.0a2.dev1)rmrr"rrr}rr)r r#rrr9test_untagged_pre_release_has_pre_dev_version_postversions    zFTestVersions.test_untagged_pre_release_has_pre_dev_version_postversioncCs@|jj|jjd|jjdtj}|j|tjddS)Nz1.2.3zsem-ver: deprecationz 1.3.0.dev1)rmrr"rrr}rr)r r#rrr test_untagged_version_minor_bumps    z-TestVersions.test_untagged_version_minor_bumpcCs@|jj|jjd|jjdtj}|j|tjddS)Nz1.2.3zsem-ver: api-breakz 2.0.0.dev1)rmrr"rrr}rr)r r#rrr test_untagged_version_major_bumps    z-TestVersions.test_untagged_version_major_bumpcCs@|jj|jjd|jjtjd}|j|tjddS)Nz1.2.3z1.2.5z 1.2.5.dev1)rmrr"rrr}rr)r r#rrr0test_untagged_version_has_dev_version_preversions     z=TestVersions.test_untagged_version_has_dev_version_preversioncCs@|jj|jjd|jjtjd}|j|tjddS)Nz 1.2.3.0a1z1.2.5z 1.2.5.dev1)rmrr"rrr}rr)r r#rrr:test_untagged_version_after_pre_has_dev_version_preversions     zGTestVersions.test_untagged_version_after_pre_has_dev_version_preversioncCs@|jj|jjd|jjtjd}|j|tjddS)Nz 1.2.3.0a1z1.2.3z1.2.3.0a2.dev1)rmrr"rrr}rr)r r#rrr9test_untagged_version_after_rc_has_dev_version_preversions     zFTestVersions.test_untagged_version_after_rc_has_dev_version_preversioncCsL|jj|jjd|jj|jttjd}|j|jdt j ddS)Nz1.2.3rz git history) rmrr"rrXrrr}argsrr)r errrrrtest_preversion_too_low_simples     z+TestVersions.test_preversion_too_low_simplecCsN|jj|jjd|jjd|jttjd}|j|jdt j ddS)Nz1.2.3zsem-ver: featurez1.2.4rz git history) rmrr"rrXrrr}rrr)r rrrr&test_preversion_too_low_semver_headerss     z3TestVersions.test_preversion_too_low_semver_headerscsFjjdfddfdd}|djjd|ddS)Nz/.gitcs tj|S)N)rZ_get_increment_kwargs)r")git_dirrrsz;TestVersions.test_get_kwargs_corner_cases..csjjjt|jjdjt|jjdjtdd|jjjjdjtdd|jjjjdjtdd|jjdjtddd|dS) Nzsem-ver: bugfixzsem-ver: featureT)minorzsem-ver: deprecationzsem-ver: api-break)major)rr)rmrrrr!)r") get_kwargsr rr_check_combinationss        zFTestVersions.test_get_kwargs_corner_cases.._check_combinationsr.z1.2.3)rmr r")r rr)rrr rtest_get_kwargs_corner_casess    z)TestVersions.test_get_kwargs_corner_casescCs|jj|jjd|jj|jjdtj}|j|tjd|jjtj}|j|tjd|jj|jjd|jj|jjdtj}|j|tjd|jj|jjd|jj|jjd tj}|j|tjd |jj|jjd |jj|jjd tj}|j|tjd |jj|jjd|jj|jjdtj}|j|tjddS)N1Zbadverz 1.0.1.dev1z 1.0.1.dev2z1.2Zbadver2z 1.2.1.dev1z1.2.3Zbadver3z 1.2.4.dev1z 1.2.4.0a1Zbadver4z1.2.4.0a2.dev12znon-release-tag/2014.12.16-1z 2.0.1.dev1)rmrr"rrr}rr)r r#rrrtest_invalid_tag_ignored sB                     z%TestVersions.test_invalid_tag_ignoredcCs.|jj|jjdtj}|jd|dS)Nz 1.3.0.0a1)rmrr"rrr)r r#rrrtest_valid_tag_honoured4s  z$TestVersions.test_valid_tag_honouredcCs:|jj|jjddtjd<tjd}|jd|dS)Nz1.2.3rSKIP_WRITE_GIT_CHANGELOG)rmrr"renvironrrr)r r#rrrtest_skip_write_git_changelog=s     z*TestVersions.test_skip_write_git_changelogcs tt|jtjjdddS)Nr )rrtearDownrr rb)r )r rrr EszTestVersions.tearDown)r$r%r&rrrrrrrrrrrrrrrrrrrrr r r(rr)r rrss,     + rc@seZdZddZdS)TestRequirementParsingc Csdtjdtjddi}|jt|j}|d}ddgdgdd gd gd d gd }|jtd}|j}|j|dd|dtj j |d}tj j |d}t |d} t t j| } WdQRXx@|jD]4\} } dd| D} dd| | D}|j| |qWdS)NZ test_reqparseaD bar quux<1.0; python_version=='2.6' requests-aws>=0.1.4 # BSD License (3 clause) Routes>=1.12.3,!=2.0,!=2.1;python_version=='2.7' requests-kerberos>=0.6;python_version=='2.7' # MIT aP [metadata] name = test_reqparse [extras] test = foo baz>3.2 :python_version=='2.7' # MIT bar>3.3 :python_version=='2.7' # MIT # Apache )zrequirements.txtz setup.cfgrzrequests-aws>=0.1.4zquux<1.0zRoutes!=2.0,!=2.1,>=1.12.3zrequests-kerberos>=0.6rzbaz>3.2zbar>3.3)Nz:(python_version=='2.6')z:(python_version=='2.7')testztest:(python_version=='2.7')ZreqParsesetup.pyrF)rocwdztest_reqparse.egg-infoz requires.txtrtcSsg|]}tjj|qSr)r Requirementparse).0srrr szCTestRequirementParsing.test_requirement_parsing..cSsg|]}tjj|qSr)rrr)rrrrrrs)rr)rerfr/rQr`r=rIrrrrKrrrsplit_sectionsitemsr)r pkgsZpkg_dirsZpkg_dirZexpected_requirementsvenvZ bin_pythonegg_infoZ requires_txtrequiresZgenerated_requirementssectionrZ exp_parsedZ gen_parsedrrrtest_requirement_parsingLs8     z/TestRequirementParsing.test_requirement_parsingN)r$r%r&rrrrrr Jsr c Csd}ytjd}tjd}Wntk r0YnX|rR|rRdtjkrRd||f}|dkrdtjkrx:tjD].\}}}|jdrp|jdrp|jdd}PqpW|S) NSOABI MULTIARCHZpypyz%s-%sz.pypyz.sorr+) sysconfigget_config_varIOErrorget_scheme_namesimpZ get_suffixesrVendswithr4)rarchrrrrrrs  r)0rZ email.errorsr%rr2r!rrer0rrrgrZ testtoolsrrJr?rrFrrZ pbr.testsrrrSrK__file__rBZFixturerr)r=rQZ BaseTestCaserirrrZTestCaserrrrrrrr rrrrr)sL     !8+AB .*@3XB