def test_install_with_client_cert(): client_path = "path/to/client.pem" pool = Pool() default = LegacyRepository("default", "https://foo.bar", client_cert=Path(client_path)) pool.add_repository(default, default=True) null_env = NullEnv() installer = PipInstaller(null_env, NullIO(), pool) foo = Package( "foo", "0.0.0", source_type="legacy", source_reference=default.name, source_url=default.url, ) installer.install(foo) assert len(null_env.executed) == 1 cmd = null_env.executed[0] assert "--client-cert" in cmd cert_index = cmd.index("--client-cert") # Need to do the str(Path()) bit because Windows paths get modified by Path assert cmd[cert_index + 1] == str(Path(client_path))
def test_install_with_non_pypi_default_repository(pool: Pool, installer: PipInstaller): default = LegacyRepository("default", "https://default.com") another = LegacyRepository("another", "https://another.com") pool.add_repository(default, default=True) pool.add_repository(another) foo = Package( "foo", "0.0.0", source_type="legacy", source_reference=default.name, source_url=default.url, ) bar = Package( "bar", "0.1.0", source_type="legacy", source_reference=another.name, source_url=another.url, ) installer.install(foo) installer.install(bar)
def test_install_with_certs(mocker: MockerFixture, key: str, option: str): client_path = "path/to/client.pem" mocker.patch( "poetry.utils.authenticator.Authenticator.get_certs_for_url", return_value={key: client_path}, ) default = LegacyRepository("default", "https://foo.bar") pool = Pool() pool.add_repository(default, default=True) null_env = NullEnv() installer = PipInstaller(null_env, NullIO(), pool) foo = Package( "foo", "0.0.0", source_type="legacy", source_reference=default.name, source_url=default.url, ) installer.install(foo) assert len(null_env.executed) == 1 cmd = null_env.executed[0] assert f"--{option}" in cmd cert_index = cmd.index(f"--{option}") # Need to do the str(Path()) bit because Windows paths get modified by Path assert cmd[cert_index + 1] == str(Path(client_path))
def test_install_with_trusted_host(config: Config): config.merge({"certificates": {"default": {"cert": False}}}) default = LegacyRepository("default", "https://foo.bar") pool = Pool() pool.add_repository(default, default=True) null_env = NullEnv() installer = PipInstaller(null_env, NullIO(), pool) foo = Package( "foo", "0.0.0", source_type="legacy", source_reference=default.name, source_url=default.url, ) installer.install(foo) assert len(null_env.executed) == 1 cmd = null_env.executed[0] assert "--trusted-host" in cmd cert_index = cmd.index("--trusted-host") assert cmd[cert_index + 1] == "foo.bar"
def test_uninstall_git_package_nspkg_pth_cleanup(mocker, tmp_venv, pool): # this test scenario requires a real installation using the pip installer installer = PipInstaller(tmp_venv, NullIO(), pool) # use a namepspace package package = Package( "namespace-package-one", "1.0.0", source_type="git", source_url="https://github.com/demo/namespace-package-one.git", source_reference="master", ) # we do this here because the virtual env might not be usable if failure case is triggered pth_file_candidate = tmp_venv.site_packages.path / "{}-nspkg.pth".format( package.name) # in order to reproduce the scenario where the git source is removed prior to proper # clean up of nspkg.pth file, we need to make sure the fixture is copied and not # symlinked into the git src directory def copy_only(source, dest): if dest.exists(): dest.unlink() if source.is_dir(): shutil.copytree(str(source), str(dest)) else: shutil.copyfile(str(source), str(dest)) mocker.patch("tests.helpers.copy_or_symlink", new=copy_only) # install package and then remove it installer.install(package) installer.remove(package) assert not Path(pth_file_candidate).exists() # any command in the virtual environment should trigger the error message output = tmp_venv.run("python", "-m", "site") assert "Error processing line 1 of {}".format( pth_file_candidate) not in output
def test_uninstall_git_package_nspkg_pth_cleanup( mocker: MockerFixture, tmp_venv: VirtualEnv, pool: Pool ): # this test scenario requires a real installation using the pip installer installer = PipInstaller(tmp_venv, NullIO(), pool) # use a namepspace package package = Package( "namespace-package-one", "1.0.0", source_type="git", source_url="https://github.com/demo/namespace-package-one.git", source_reference="master", ) # in order to reproduce the scenario where the git source is removed prior to proper # clean up of nspkg.pth file, we need to make sure the fixture is copied and not # symlinked into the git src directory def copy_only(source: Path, dest: Path) -> None: if dest.exists(): dest.unlink() if source.is_dir(): shutil.copytree(str(source), str(dest)) else: shutil.copyfile(str(source), str(dest)) mocker.patch("tests.helpers.copy_or_symlink", new=copy_only) # install package and then remove it installer.install(package) installer.remove(package) pth_file = f"{package.name}-nspkg.pth" assert not tmp_venv.site_packages.exists(pth_file) # any command in the virtual environment should trigger the error message output = tmp_venv.run("python", "-m", "site") assert not re.match(rf"Error processing line 1 of .*{pth_file}", output)
def test_install_with_non_pypi_default_repository(): pool = Pool() default = LegacyRepository("default", "https://default.com") another = LegacyRepository("another", "https://another.com") pool.add_repository(default, default=True) pool.add_repository(another) installer = PipInstaller(NullEnv(), NullIO(), pool) foo = Package("foo", "0.0.0") foo.source_type = "legacy" foo.source_reference = default._name foo.source_url = default._url bar = Package("bar", "0.1.0") bar.source_type = "legacy" bar.source_reference = another._name bar.source_url = another._url installer.install(foo) installer.install(bar)