1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76
|
import unittest
from unittest.mock import patch
import keyring
import keyring.errors
import keyring.backend
from Orange.widgets.credentials import CredentialManager
# minimal in-memory keyring implementation so the test is not dependent on
# the system config/services.
class Keyring(keyring.backend.KeyringBackend):
priority = 0
def __init__(self):
self.__store = {}
def set_password(self, service, username, password=None):
self.__store[(service, username)] = password
def get_password(self, service, username):
return self.__store.get((service, username), None)
def delete_password(self, service, username):
try:
del self.__store[service, username]
except KeyError:
raise keyring.errors.PasswordDeleteError()
class TestCredentialManager(unittest.TestCase):
def setUp(self):
self._ring = keyring.get_keyring()
keyring.set_keyring(Keyring())
self.cm = CredentialManager('Orange')
def tearDown(self):
keyring.set_keyring(self._ring)
def test_credential_manager(self):
cm = CredentialManager('Orange')
cm.key = 'Foo'
self.assertEqual(cm.key, 'Foo')
del cm.key
self.assertEqual(cm.key, None)
def test_set_password(self):
"""
Handle error when setting password fails.
GH-2354
"""
with patch("keyring.set_password", side_effect=Exception), \
patch("Orange.widgets.credentials.log.exception") as log:
self.cm.key = ""
log.assert_called()
def test_delete_password(self):
"""
Handling error when deleting password fails
GH-2354
"""
with patch("keyring.delete_password", side_effect=Exception), \
patch("Orange.widgets.credentials.log.exception") as log:
del self.cm.key
log.assert_called()
def test_get_password(self):
"""
Handling errors when getting password fails.
GH-2354
"""
with patch("keyring.get_password", side_effect=Exception), \
patch("Orange.widgets.credentials.log.exception") as log:
self.assertEqual(self.cm.key, None)
log.assert_called()
|