Commit f462b7f8 by Lakin Wecker Committed by GitHub

password_manager: do not try to use keyring when disabled ("null" keyring) (#5251)

* when disabled, keyring uses a "null" keyring
* Fix the mock for the chainer tests
parent a9d05f5f
...@@ -94,7 +94,7 @@ class KeyRing: ...@@ -94,7 +94,7 @@ class KeyRing:
backend = keyring.get_keyring() backend = keyring.get_keyring()
name = backend.name.split(" ")[0] name = backend.name.split(" ")[0]
if name == "fail": if name in ("fail", "null"):
logger.debug("No suitable keyring backend found") logger.debug("No suitable keyring backend found")
self._is_available = False self._is_available = False
elif "plaintext" in backend.name.lower(): elif "plaintext" in backend.name.lower():
...@@ -107,7 +107,7 @@ class KeyRing: ...@@ -107,7 +107,7 @@ class KeyRing:
backends = keyring.backend.get_all_keyring() backends = keyring.backend.get_all_keyring()
self._is_available = any( self._is_available = any(
b.name.split(" ")[0] not in ["chainer", "fail"] b.name.split(" ")[0] not in ["chainer", "fail", "null"]
and "plaintext" not in b.name.lower() and "plaintext" not in b.name.lower()
for b in backends for b in backends
) )
......
...@@ -116,10 +116,31 @@ def with_fail_keyring() -> None: ...@@ -116,10 +116,31 @@ def with_fail_keyring() -> None:
@pytest.fixture() @pytest.fixture()
def with_chained_keyring(mocker: MockerFixture) -> None: def with_null_keyring() -> None:
import keyring
from keyring.backends.null import Keyring
keyring.set_keyring(Keyring())
@pytest.fixture()
def with_chained_fail_keyring(mocker: MockerFixture) -> None:
from keyring.backends.fail import Keyring from keyring.backends.fail import Keyring
mocker.patch("keyring.backend.get_all_keyring", [Keyring()]) mocker.patch("keyring.backend.get_all_keyring", lambda: [Keyring()])
import keyring
from keyring.backends.chainer import ChainerBackend
keyring.set_keyring(ChainerBackend())
@pytest.fixture()
def with_chained_null_keyring(mocker: MockerFixture) -> None:
from keyring.backends.null import Keyring
mocker.patch("keyring.backend.get_all_keyring", lambda: [Keyring()])
import keyring import keyring
from keyring.backends.chainer import ChainerBackend from keyring.backends.chainer import ChainerBackend
......
...@@ -187,8 +187,32 @@ def test_keyring_raises_errors_on_keyring_errors( ...@@ -187,8 +187,32 @@ def test_keyring_raises_errors_on_keyring_errors(
key_ring.delete_password("foo", "bar") key_ring.delete_password("foo", "bar")
def test_keyring_with_chainer_backend_and_not_compatible_only_should_be_unavailable( def test_keyring_with_chainer_backend_and_fail_keyring_should_be_unavailable(
with_chained_keyring: None, with_chained_fail_keyring: None,
):
key_ring = KeyRing("poetry")
assert not key_ring.is_available()
def test_keyring_with_chainer_backend_and_null_keyring_should_be_unavailable(
with_chained_null_keyring: None,
):
key_ring = KeyRing("poetry")
assert not key_ring.is_available()
def test_null_keyring_should_be_unavailable(
with_null_keyring: None,
):
key_ring = KeyRing("poetry")
assert not key_ring.is_available()
def test_fail_keyring_should_be_unavailable(
with_fail_keyring: None,
): ):
key_ring = KeyRing("poetry") key_ring = KeyRing("poetry")
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment