예제 #1
0
파일: test_download.py 프로젝트: pypa/pip
def test_keyring_get_credential(monkeypatch, url, expect):
    monkeypatch.setattr(pip._internal.download, 'keyring', KeyringModuleV2())
    auth = MultiDomainBasicAuth(index_urls=["http://example.com/path2"])

    assert auth._get_new_credentials(url, allow_netrc=False,
                                     allow_keyring=True) \
        == expect
예제 #2
0
def test_keyring_get_credential(monkeypatch, url, expect):
    monkeypatch.setattr(pip._internal.download, 'keyring', KeyringModuleV2())
    auth = MultiDomainBasicAuth(index_urls=["http://example.com/path2"])

    assert auth._get_new_credentials(url, allow_netrc=False,
                                     allow_keyring=True) \
        == expect
예제 #3
0
def test_get_credentials_uses_cached_credentials():
    auth = MultiDomainBasicAuth()
    auth.passwords['example.com'] = ('user', 'pass')

    got = auth._get_url_and_credentials("http://*****:*****@example.com/path")
    expected = ('http://example.com/path', 'user', 'pass')
    assert got == expected
예제 #4
0
def test_parse_credentials():
    auth = MultiDomainBasicAuth()
    assert auth.parse_credentials("foo:[email protected]") == ('foo', 'bar')
    assert auth.parse_credentials("*****@*****.**") == ('foo', None)
    assert auth.parse_credentials("example.com") == (None, None)

    # URL-encoded reserved characters:
    assert auth.parse_credentials("user%3Aname:%23%40%[email protected]") \
        == ("user:name", "#@^")
예제 #5
0
def test_keyring_get_password_after_prompt(monkeypatch):
    monkeypatch.setattr('pip._internal.download.keyring', KeyringModuleV1())
    auth = MultiDomainBasicAuth()

    def ask_input(prompt):
        assert prompt == "User for example.com: "
        return "user"

    monkeypatch.setattr('pip._internal.download.ask_input', ask_input)
    actual = auth._prompt_for_password("example.com")
    assert actual == ("user", "user!netloc", False)
예제 #6
0
파일: test_download.py 프로젝트: pypa/pip
def test_keyring_get_password_after_prompt(monkeypatch):
    monkeypatch.setattr('pip._internal.download.keyring', KeyringModuleV1())
    auth = MultiDomainBasicAuth()

    def ask_input(prompt):
        assert prompt == "User for example.com: "
        return "user"

    monkeypatch.setattr('pip._internal.download.ask_input', ask_input)
    actual = auth._prompt_for_password("example.com")
    assert actual == ("user", "user!netloc", False)
예제 #7
0
def test_keyring_set_password(monkeypatch, response_status, creds,
                              expect_save):
    keyring = KeyringModuleV1()
    monkeypatch.setattr('pip._internal.download.keyring', keyring)
    auth = MultiDomainBasicAuth(prompting=True)
    monkeypatch.setattr(auth, '_get_url_and_credentials', lambda u:
                        (u, None, None))
    monkeypatch.setattr(auth, '_prompt_for_password', lambda *a: creds)
    if creds[2]:
        # when _prompt_for_password indicates to save, we should save
        def should_save_password_to_keyring(*a):
            return True
    else:
        # when _prompt_for_password indicates not to save, we should
        # never call this function
        def should_save_password_to_keyring(*a):
            assert False, ("_should_save_password_to_keyring should not be " +
                           "called")

    monkeypatch.setattr(auth, '_should_save_password_to_keyring',
                        should_save_password_to_keyring)

    req = MockRequest("https://example.com")
    resp = MockResponse(b"")
    resp.url = req.url
    connection = MockConnection()

    def _send(sent_req, **kwargs):
        assert sent_req is req
        assert "Authorization" in sent_req.headers
        r = MockResponse(b"")
        r.status_code = response_status
        return r

    connection._send = _send

    resp.request = req
    resp.status_code = 401
    resp.connection = connection

    auth.handle_401(resp)

    if expect_save:
        assert keyring.saved_passwords == [("example.com", creds[0], creds[1])]
    else:
        assert keyring.saved_passwords == []
예제 #8
0
파일: test_download.py 프로젝트: pypa/pip
def test_keyring_set_password(monkeypatch, response_status, creds,
                              expect_save):
    keyring = KeyringModuleV1()
    monkeypatch.setattr('pip._internal.download.keyring', keyring)
    auth = MultiDomainBasicAuth(prompting=True)
    monkeypatch.setattr(auth, '_get_url_and_credentials',
                        lambda u: (u, None, None))
    monkeypatch.setattr(auth, '_prompt_for_password', lambda *a: creds)
    if creds[2]:
        # when _prompt_for_password indicates to save, we should save
        def should_save_password_to_keyring(*a):
            return True
    else:
        # when _prompt_for_password indicates not to save, we should
        # never call this function
        def should_save_password_to_keyring(*a):
            assert False, ("_should_save_password_to_keyring should not be " +
                           "called")
    monkeypatch.setattr(auth, '_should_save_password_to_keyring',
                        should_save_password_to_keyring)

    req = MockRequest("https://example.com")
    resp = MockResponse(b"")
    resp.url = req.url
    connection = MockConnection()

    def _send(sent_req, **kwargs):
        assert sent_req is req
        assert "Authorization" in sent_req.headers
        r = MockResponse(b"")
        r.status_code = response_status
        return r

    connection._send = _send

    resp.request = req
    resp.status_code = 401
    resp.connection = connection

    auth.handle_401(resp)

    if expect_save:
        assert keyring.saved_passwords == [("example.com", creds[0], creds[1])]
    else:
        assert keyring.saved_passwords == []
예제 #9
0
def test_keyring_get_password_username_in_index(monkeypatch):
    monkeypatch.setattr('pip._internal.download.keyring', KeyringModuleV1())
    auth = MultiDomainBasicAuth(index_urls=["http://[email protected]/path2"])
    get = functools.partial(auth._get_new_credentials,
                            allow_netrc=False,
                            allow_keyring=True)

    assert get("http://example.com/path2/path3") == ("user", "user!url")
    assert get("http://example.com/path4/path1") == (None, None)
예제 #10
0
def test_get_index_url_credentials():
    auth = MultiDomainBasicAuth(index_urls=["http://*****:*****@example.com/path"])
    get = functools.partial(auth._get_new_credentials,
                            allow_netrc=False,
                            allow_keyring=False)

    # Check resolution of indexes
    assert get("http://example.com/path/path2") == ('foo', 'bar')
    assert get("http://example.com/path3/path2") == (None, None)
예제 #11
0
def test_get_credentials_parses_correctly(input_url, url, username, password):
    auth = MultiDomainBasicAuth()
    get = auth._get_url_and_credentials

    # Check URL parsing
    assert get(input_url) == (url, username, password)
    assert (
        # There are no credentials in the URL
        (username is None and password is None) or
        # Credentials were found and "cached" appropriately
        auth.passwords['example.com'] == (username, password))
예제 #12
0
def test_get_credentials():
    auth = MultiDomainBasicAuth()
    get = auth._get_url_and_credentials

    # Check URL parsing
    assert get("http://*****:*****@example.com/path") \
        == ('http://example.com/path', 'foo', 'bar')
    assert auth.passwords['example.com'] == ('foo', 'bar')

    auth.passwords['example.com'] = ('user', 'pass')
    assert get("http://*****:*****@example.com/path") \
        == ('http://example.com/path', 'user', 'pass')
예제 #13
0
def test_parse_credentials():
    auth = MultiDomainBasicAuth()
    assert auth.parse_credentials("foo:[email protected]") == ('foo', 'bar')
    assert auth.parse_credentials("*****@*****.**") == ('foo', None)
    assert auth.parse_credentials("example.com") == (None, None)

    # URL-encoded reserved characters:
    assert auth.parse_credentials("user%3Aname:%23%40%[email protected]") \
        == ("user:name", "#@^")
예제 #14
0
def test_get_env_credentials_only_password(request, caplog):
    def reset_env():
        del os.environ['PIP_PASSWORD']

    request.addfinalizer(reset_env)

    os.environ['PIP_PASSWORD'] = '******'

    auth = MultiDomainBasicAuth()
    get = functools.partial(auth._get_new_credentials,
                            allow_netrc=False,
                            allow_keyring=False)

    # Check resolution of credentials from env
    assert get("http://envexample.com/pathx") == (None, None)

    assert "but not 'PIP_USERNAME'" in caplog.text
예제 #15
0
def test_get_env_credentials(request, caplog):
    def reset_env():
        del os.environ['PIP_USERNAME']
        del os.environ['PIP_PASSWORD']

    request.addfinalizer(reset_env)

    os.environ['PIP_USERNAME'] = '******'
    os.environ['PIP_PASSWORD'] = '******'

    with caplog.at_level(logging.DEBUG):
        auth = MultiDomainBasicAuth()
        get = functools.partial(auth._get_new_credentials,
                                allow_netrc=False,
                                allow_keyring=False)

        # Check resolution of credentials from env
        assert get("http://envexample.com/pathx") == ('foo', 'bar')

    assert "Found credentials in environment" in caplog.text