File: C:/Users/fred/anaconda3/Lib/site-packages/anaconda_project/internal/test/test_keyring.py
# -*- coding: utf-8 -*-
# -----------------------------------------------------------------------------
# Copyright (c) 2016, Anaconda, Inc. All rights reserved.
#
# Licensed under the terms of the BSD 3-Clause License.
# The full license is in the file LICENSE.txt, distributed with this software.
# -----------------------------------------------------------------------------
from __future__ import absolute_import, print_function
from anaconda_project.internal import keyring
def _with_fallback_keyring(f):
try:
keyring.enable_fallback_keyring()
f()
finally:
keyring.disable_fallback_keyring()
def _monkeypatch_keyring(monkeypatch):
keyring.reset_keyring_module()
passwords = dict(anaconda=dict())
def mock_set_password(system, username, password):
passwords[system][username] = password
monkeypatch.setattr('keyring.set_password', mock_set_password)
def mock_get_password(system, username):
return passwords[system].get(username, None)
monkeypatch.setattr('keyring.get_password', mock_get_password)
def mock_delete_password(system, username):
if username in passwords[system]:
del passwords[system][username]
monkeypatch.setattr('keyring.delete_password', mock_delete_password)
return passwords
def _monkeypatch_broken_keyring(monkeypatch):
keyring.reset_keyring_module()
def mock_set_password(system, username, password):
raise RuntimeError("keyring system is busted")
monkeypatch.setattr('keyring.set_password', mock_set_password)
def mock_get_password(system, username):
raise RuntimeError("keyring system is busted")
monkeypatch.setattr('keyring.get_password', mock_get_password)
def mock_delete_password(system, username):
raise RuntimeError("keyring system is busted")
monkeypatch.setattr('keyring.delete_password', mock_delete_password)
def test_get_set_using_fallback():
def check():
keyring.set("abc", "FOO", "bar")
assert "bar" == keyring.get("abc", "FOO")
_with_fallback_keyring(check)
keyring.reset_keyring_module()
def test_get_set_using_mock(monkeypatch):
passwords = _monkeypatch_keyring(monkeypatch)
keyring.set("abc", "FOO", "bar")
assert "bar" == keyring.get("abc", "FOO")
assert dict(anaconda={'abc/FOO': 'bar'}) == passwords
keyring.reset_keyring_module()
def test_unset_using_fallback():
def check():
keyring.set("abc", "FOO", "bar")
assert "bar" == keyring.get("abc", "FOO")
keyring.unset("abc", "FOO")
assert keyring.get("abc", "FOO") is None
_with_fallback_keyring(check)
keyring.reset_keyring_module()
def test_unset_using_mock(monkeypatch):
passwords = _monkeypatch_keyring(monkeypatch)
keyring.set("abc", "FOO", "bar")
assert "bar" == keyring.get("abc", "FOO")
keyring.unset("abc", "FOO")
assert keyring.get("abc", "FOO") is None
assert dict(anaconda=dict()) == passwords
keyring.reset_keyring_module()
expected_broken_message = ("Unable to use system keyring to store passwords.\n" +
" (Exception %s a password: keyring system is busted)\n")
def test_set_get_using_broken(monkeypatch, capsys):
_monkeypatch_broken_keyring(monkeypatch)
keyring.set("abc", "FOO", "bar")
assert "bar" == keyring.get("abc", "FOO")
(out, err) = capsys.readouterr()
assert '' == out
assert (expected_broken_message % "setting") == err
keyring.reset_keyring_module()
def test_get_using_broken(monkeypatch, capsys):
_monkeypatch_broken_keyring(monkeypatch)
assert keyring.get("abc", "FOO") is None
(out, err) = capsys.readouterr()
assert '' == out
assert (expected_broken_message % "getting") == err
keyring.reset_keyring_module()
def test_unset_using_broken(monkeypatch, capsys):
_monkeypatch_broken_keyring(monkeypatch)
keyring.unset("abc", "FOO")
(out, err) = capsys.readouterr()
assert '' == out
assert (expected_broken_message % "deleting") == err
keyring.reset_keyring_module()