diff --git a/tests/integration/conftest.py b/tests/integration/conftest.py index 8a8aebe6..9cb4b7b1 100644 --- a/tests/integration/conftest.py +++ b/tests/integration/conftest.py @@ -28,7 +28,30 @@ def check_internet(): return True +def check_github_ssh(): + res = False + try: + # `ssh -T git@github.com` will return successfully with return_code==1 + # and message 'Hi ! You've successfully authenticated, but + # GitHub does not provide shell access.' if ssh keys are available and + # registered with GitHub. Otherwise, the command will fail with + # return_code=255 and say 'Permission denied (publickey).' + c = delegator.run('ssh -T git@github.com') + res = True if c.return_code == 1 else False + except Exception: + pass + if not res: + warnings.warn( + 'Cannot connect to GitHub via SSH', ResourceWarning + ) + warnings.warn( + 'Will skip tests requiring SSH access to GitHub', ResourceWarning + ) + return res + + WE_HAVE_INTERNET = check_internet() +WE_HAVE_GITHUB_SSH_KEYS = check_github_ssh() TESTS_ROOT = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) PYPI_VENDOR_DIR = os.path.join(TESTS_ROOT, 'pypi') @@ -38,6 +61,8 @@ prepare_pypi_packages(PYPI_VENDOR_DIR) def pytest_runtest_setup(item): if item.get_marker('needs_internet') is not None and not WE_HAVE_INTERNET: pytest.skip('requires internet') + if item.get_marker('needs_github_ssh') is not None and not WE_HAVE_GITHUB_SSH_KEYS: + pytest.skip('requires github ssh') class _PipenvInstance(object): diff --git a/tests/integration/test_install_uri.py b/tests/integration/test_install_uri.py index 4973b3cb..c51db6ad 100644 --- a/tests/integration/test_install_uri.py +++ b/tests/integration/test_install_uri.py @@ -43,10 +43,9 @@ def test_git_vcs_install(PipenvInstance, pip_src_dir, pypi): @pytest.mark.vcs @pytest.mark.install -@pytest.mark.needs_ssh_keys +@pytest.mark.needs_github_ssh @pytest.mark.needs_internet @flaky -@pytest.mark.skip(reason="must set valid SSH keys in testing environment") def test_ssh_vcs_install(PipenvInstance, pip_src_dir, pypi): with PipenvInstance(pypi=pypi, chdir=True) as p: c = p.pipenv("install git+ssh://git@github.com/benjaminp/six.git@1.11.0#egg=six")