jaraco / jaraco/keyring

test failures in libsecret (and others)

Open
#581 29 comments 1 reaction 0 assignees View on GitHub
Dominant language
Python
Stars
1.5k
Forks
196
PR merge metrics
No merged PRs in 30d

Description

I'm trying to package your module as an rpm package. So I'm using the typical PEP517 based build, install and test cycle used on building packages from non-root account.
- `python3 -sBm build -w --no-isolation`
- because I'm calling `build` with `--no-isolation` I'm using during all processes only locally installed modules
- install .whl file in
- run pytest with PYTHONPATH pointing to sitearch and sitelib inside

Here is pytest output:

```console
+ PYTHONPATH=/home/tkloczko/rpmbuild/BUILDROOT/python-keyring-23.6.0-2.fc35.x86_64/usr/lib64/python3.8/site-packages:/home/tkloczko/rpmbuild/BUILDROOT/python-keyring-23.6.0-2.fc35.x86_64/usr/lib/python3.8/site-packages
+ /usr/bin/pytest -ra
==================================================================== test session starts =====================================================================
platform linux -- Python 3.8.13, pytest-7.1.2, pluggy-1.0.0
rootdir: /home/tkloczko/rpmbuild/BUILD/keyring-23.6.0, configfile: pytest.ini
plugins: cov-3.0.0, flake8-1.1.1
collected 93 items

keyring/core.py . [ 1%]
keyring/credentials.py . [ 2%]
keyring/backends/chainer.py . [ 3%]
keyring/backends/fail.py . [ 4%]
keyring/backends/null.py . [ 5%]
keyring/util/__init__.py . [ 6%]
keyring/util/properties.py .. [ 8%]
tests/test_core.py . [ 9%]
tests/test_errors.py . [ 10%]
tests/test_integration.py ... [ 13%]
tests/test_multiprocess.py xx [ 16%]
tests/test_packaging.py F. [ 18%]
tests/backends/test_SecretService.py sssssssssss. [ 31%]
tests/backends/test_Windows.py ssssssssssssss [ 46%]
tests/backends/test_chainer.py .. [ 48%]
tests/backends/test_kwallet.py ssssssssssssssssssssss [ 72%]
tests/backends/test_libsecret.py FFFFF.FFFF.. [ 84%]
tests/backends/test_macOS.py ssssssssssss [ 97%]
tests/util/test_platform.py .s [100%]

========================================================================== FAILURES ==========================================================================
______________________________________________________________________ test_entry_point ______________________________________________________________________

def test_entry_point():
"""
Keyring provides exactly one 'keyring' console script
that's a callable.
"""
matches = metadata.entry_points(group='console_scripts', name='keyring')
> (script,) = matches
E ValueError: too many values to unpack (expected 1)

tests/test_packaging.py:11: ValueError
_________________________________________________________ TestLibSecretKeyring.test_password_set_get _________________________________________________________

self = , service = 'PxxQoDCh6oM4Q3H2K3CD', username = '5n1qwNLJfMjtnjYIybQ6'

def get_password(self, service, username):
"""Get password of the username for the service"""
attributes = {
"application": self.appid,
"service": service,
"username": username,
}
try:
> items = Secret.password_search_sync(
self.schema, attributes, Secret.SearchFlags.UNLOCK, None
)
E gi.repository.GLib.GError: g-io-error-quark: Cannot autolaunch D-Bus without X11 $DISPLAY (0)

keyring/backends/libsecret.py:62: Error

The above exception was the direct cause of the following exception:

self =

def test_password_set_get(self):
password = random_string(20)
username = random_string(20)
service = random_string(20)
> self.check_set_get(service, username, password)

keyring/testing/backend.py:72:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
keyring/testing/backend.py:58: in check_set_get
assert keyring.get_password(service, username) is None
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _

self = , service = 'PxxQoDCh6oM4Q3H2K3CD', username = '5n1qwNLJfMjtnjYIybQ6'

def get_password(self, service, username):
"""Get password of the username for the service"""
attributes = {
"application": self.appid,
"service": service,
"username": username,
}
try:
items = Secret.password_search_sync(
self.schema, attributes, Secret.SearchFlags.UNLOCK, None
)
except GLib.Error as error:
quark = GLib.quark_try_string('g-io-error-quark')
if error.matches(quark, Gio.IOErrorEnum.FAILED):
> raise KeyringLocked('Failed to unlock the item!') from error
E keyring.errors.KeyringLocked: Failed to unlock the item!

keyring/backends/libsecret.py:68: KeyringLocked
------------------------------------------------------------------- Captured stdout setup --------------------------------------------------------------------
Testing LibSecretKeyring; the following password prompts are for this keyring
_________________________________________________________ TestLibSecretKeyring.test_difficult_chars __________________________________________________________

self = , service = '|``^}!|\x0b(*=[\\@\x0b<@\t$+', username = '{:+:)=>\\)`%\r [-~:\n_~'

def get_password(self, service, username):
"""Get password of the username for the service"""
attributes = {
"application": self.appid,
"service": service,
"username": username,
}
try:
> items = Secret.password_search_sync(
self.schema, attributes, Secret.SearchFlags.UNLOCK, None
)
E gi.repository.GLib.GError: g-io-error-quark: Cannot autolaunch D-Bus without X11 $DISPLAY (0)

keyring/backends/libsecret.py:62: Error

The above exception was the direct cause of the following exception:

self =

def test_difficult_chars(self):
password = random_string(20, self.DIFFICULT_CHARS)
username = random_string(20, self.DIFFICULT_CHARS)
service = random_string(20, self.DIFFICULT_CHARS)
> self.check_set_get(service, username, password)

keyring/testing/backend.py:78:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
keyring/testing/backend.py:58: in check_set_get
assert keyring.get_password(service, username) is None
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _

self = , service = '|``^}!|\x0b(*=[\\@\x0b<@\t$+', username = '{:+:)=>\\)`%\r [-~:\n_~'

def get_password(self, service, username):
"""Get password of the username for the service"""
attributes = {
"application": self.appid,
"service": service,
"username": username,
}
try:
items = Secret.password_search_sync(
self.schema, attributes, Secret.SearchFlags.UNLOCK, None
)
except GLib.Error as error:
quark = GLib.quark_try_string('g-io-error-quark')
if error.matches(quark, Gio.IOErrorEnum.FAILED):
> raise KeyringLocked('Failed to unlock the item!') from error
E keyring.errors.KeyringLocked: Failed to unlock the item!

keyring/backends/libsecret.py:68: KeyringLocked
------------------------------------------------------------------- Captured stdout setup --------------------------------------------------------------------
Testing LibSecretKeyring; the following password prompts are for this keyring
__________________________________________________________ TestLibSecretKeyring.test_delete_present __________________________________________________________

self = , service = '"*[\n=]~.%/>#[!}*~)"/', username = "|:\x0c\\~=<#_+ };)'.\x0c*$\r"
password = '] #|.+?/,{*){!#\\\n<"*'

def set_password(self, service, username, password):
"""Set password for the username of the service"""
attributes = {
"application": self.appid,
"service": service,
"username": username,
}
label = "Password for '{}' on '{}'".format(username, service)
try:
> stored = Secret.password_store_sync(
self.schema, attributes, self.collection, label, password, None
)
E gi.repository.GLib.GError: g-io-error-quark: Cannot autolaunch D-Bus without X11 $DISPLAY (0)

keyring/backends/libsecret.py:88: Error

The above exception was the direct cause of the following exception:

self =

def test_delete_present(self):
password = random_string(20, self.DIFFICULT_CHARS)
username = random_string(20, self.DIFFICULT_CHARS)
service = random_string(20, self.DIFFICULT_CHARS)
> self.keyring.set_password(service, username, password)

keyring/testing/backend.py:84:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _

self = , service = '"*[\n=]~.%/>#[!}*~)"/', username = "|:\x0c\\~=<#_+ };)'.\x0c*$\r"
password = '] #|.+?/,{*){!#\\\n<"*'

def set_password(self, service, username, password):
"""Set password for the username of the service"""
attributes = {
"application": self.appid,
"service": service,
"username": username,
}
label = "Password for '{}' on '{}'".format(username, service)
try:
stored = Secret.password_store_sync(
self.schema, attributes, self.collection, label, password, None
)
except GLib.Error as error:
quark = GLib.quark_try_string('secret-error')
if error.matches(quark, Secret.Error.IS_LOCKED):
raise KeyringLocked("Failed to unlock the collection!") from error
quark = GLib.quark_try_string('g-io-error-quark')
if error.matches(quark, Gio.IOErrorEnum.FAILED):
> raise KeyringLocked("Failed to unlock the collection!") from error
E keyring.errors.KeyringLocked: Failed to unlock the collection!

keyring/backends/libsecret.py:97: KeyringLocked
------------------------------------------------------------------- Captured stdout setup --------------------------------------------------------------------
Testing LibSecretKeyring; the following password prompts are for this keyring
________________________________________________________ TestLibSecretKeyring.test_delete_not_present ________________________________________________________

self = , service = '\x0b\n^\x0c\n@\x0b$@\n<^++~::/ #', username = "'[\\#}\n:|))&>%[=\n,'_*"

def delete_password(self, service, username):
"""Delete the stored password (only the first one)"""
attributes = {
"application": self.appid,
"service": service,
"username": username,
}
try:
> items = Secret.password_search_sync(
self.schema, attributes, Secret.SearchFlags.UNLOCK, None
)
E gi.repository.GLib.GError: g-io-error-quark: Cannot autolaunch D-Bus without X11 $DISPLAY (0)

keyring/backends/libsecret.py:110: Error

The above exception was the direct cause of the following exception:

self =

def test_delete_not_present(self):
username = random_string(20, self.DIFFICULT_CHARS)
service = random_string(20, self.DIFFICULT_CHARS)
with pytest.raises(errors.PasswordDeleteError):
> self.keyring.delete_password(service, username)

keyring/testing/backend.py:92:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _

self = , service = '\x0b\n^\x0c\n@\x0b$@\n<^++~::/ #', username = "'[\\#}\n:|))&>%[=\n,'_*"

def delete_password(self, service, username):
"""Delete the stored password (only the first one)"""
attributes = {
"application": self.appid,
"service": service,
"username": username,
}
try:
items = Secret.password_search_sync(
self.schema, attributes, Secret.SearchFlags.UNLOCK, None
)
except GLib.Error as error:
quark = GLib.quark_try_string('g-io-error-quark')
if error.matches(quark, Gio.IOErrorEnum.FAILED):
> raise KeyringLocked('Failed to unlock the item!') from error
E keyring.errors.KeyringLocked: Failed to unlock the item!

keyring/backends/libsecret.py:116: KeyringLocked
------------------------------------------------------------------- Captured stdout setup --------------------------------------------------------------------
Testing LibSecretKeyring; the following password prompts are for this keyring
_______________________________________________________ TestLibSecretKeyring.test_delete_one_in_group ________________________________________________________

self = , service = '%/\x0b?%`"(;)"(!\\<&-~:-', username = '\n-`:\t^^\x0b?%+)\x0c\t=\t}}["'
password = ']*;:"$_-\'/>(/`\n{%)|>'

def set_password(self, service, username, password):
"""Set password for the username of the service"""
attributes = {
"application": self.appid,
"service": service,
"username": username,
}
label = "Password for '{}' on '{}'".format(username, service)
try:
> stored = Secret.password_store_sync(
self.schema, attributes, self.collection, label, password, None
)
E gi.repository.GLib.GError: g-io-error-quark: Cannot autolaunch D-Bus without X11 $DISPLAY (0)

keyring/backends/libsecret.py:88: Error

The above exception was the direct cause of the following exception:

self =

def test_delete_one_in_group(self):
username1 = random_string(20, self.DIFFICULT_CHARS)
username2 = random_string(20, self.DIFFICULT_CHARS)
password = random_string(20, self.DIFFICULT_CHARS)
service = random_string(20, self.DIFFICULT_CHARS)
> self.keyring.set_password(service, username1, password)

keyring/testing/backend.py:99:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _

self = , service = '%/\x0b?%`"(;)"(!\\<&-~:-', username = '\n-`:\t^^\x0b?%+)\x0c\t=\t}}["'
password = ']*;:"$_-\'/>(/`\n{%)|>'

def set_password(self, service, username, password):
"""Set password for the username of the service"""
attributes = {
"application": self.appid,
"service": service,
"username": username,
}
label = "Password for '{}' on '{}'".format(username, service)
try:
stored = Secret.password_store_sync(
self.schema, attributes, self.collection, label, password, None
)
except GLib.Error as error:
quark = GLib.quark_try_string('secret-error')
if error.matches(quark, Secret.Error.IS_LOCKED):
raise KeyringLocked("Failed to unlock the collection!") from error
quark = GLib.quark_try_string('g-io-error-quark')
if error.matches(quark, Gio.IOErrorEnum.FAILED):
> raise KeyringLocked("Failed to unlock the collection!") from error
E keyring.errors.KeyringLocked: Failed to unlock the collection!

keyring/backends/libsecret.py:97: KeyringLocked
------------------------------------------------------------------- Captured stdout setup --------------------------------------------------------------------
Testing LibSecretKeyring; the following password prompts are for this keyring
__________________________________________________________ TestLibSecretKeyring.test_unicode_chars ___________________________________________________________

self = , service = 'τциבφνעεлекемαдетνωφ', username = 'лаъρиυаьнхаСויютαזзъ'

def get_password(self, service, username):
"""Get password of the username for the service"""
attributes = {
"application": self.appid,
"service": service,
"username": username,
}
try:
> items = Secret.password_search_sync(
self.schema, attributes, Secret.SearchFlags.UNLOCK, None
)
E gi.repository.GLib.GError: g-io-error-quark: Cannot autolaunch D-Bus without X11 $DISPLAY (0)

keyring/backends/libsecret.py:62: Error

The above exception was the direct cause of the following exception:

self =

def test_unicode_chars(self):
password = random_string(20, UNICODE_CHARS)
username = random_string(20, UNICODE_CHARS)
service = random_string(20, UNICODE_CHARS)
> self.check_set_get(service, username, password)

keyring/testing/backend.py:111:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
keyring/testing/backend.py:58: in check_set_get
assert keyring.get_password(service, username) is None
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _

self = , service = 'τциבφνעεлекемαдетνωφ', username = 'лаъρиυаьнхаСויютαזзъ'

def get_password(self, service, username):
"""Get password of the username for the service"""
attributes = {
"application": self.appid,
"service": service,
"username": username,
}
try:
items = Secret.password_search_sync(
self.schema, attributes, Secret.SearchFlags.UNLOCK, None
)
except GLib.Error as error:
quark = GLib.quark_try_string('g-io-error-quark')
if error.matches(quark, Gio.IOErrorEnum.FAILED):
> raise KeyringLocked('Failed to unlock the item!') from error
E keyring.errors.KeyringLocked: Failed to unlock the item!

keyring/backends/libsecret.py:68: KeyringLocked
------------------------------------------------------------------- Captured stdout setup --------------------------------------------------------------------
Testing LibSecretKeyring; the following password prompts are for this keyring
_____________________________________________________ TestLibSecretKeyring.test_unicode_and_ascii_chars ______________________________________________________

self = , service = 'ш.ш1v\x0b;vR6lз%ттшG7[l', username = ",ьа1т.ш|згת1ь.'аgD[G"

def get_password(self, service, username):
"""Get password of the username for the service"""
attributes = {
"application": self.appid,
"service": service,
"username": username,
}
try:
> items = Secret.password_search_sync(
self.schema, attributes, Secret.SearchFlags.UNLOCK, None
)
E gi.repository.GLib.GError: g-io-error-quark: Cannot autolaunch D-Bus without X11 $DISPLAY (0)

keyring/backends/libsecret.py:62: Error

The above exception was the direct cause of the following exception:

self =

def test_unicode_and_ascii_chars(self):
source = (
random_string(10, UNICODE_CHARS)
+ random_string(10)
+ random_string(10, self.DIFFICULT_CHARS)
)
password = random_string(20, source)
username = random_string(20, source)
service = random_string(20, source)
> self.check_set_get(service, username, password)

keyring/testing/backend.py:122:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
keyring/testing/backend.py:58: in check_set_get
assert keyring.get_password(service, username) is None
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _

self = , service = 'ш.ш1v\x0b;vR6lз%ттшG7[l', username = ",ьа1т.ш|згת1ь.'аgD[G"

def get_password(self, service, username):
"""Get password of the username for the service"""
attributes = {
"application": self.appid,
"service": service,
"username": username,
}
try:
items = Secret.password_search_sync(
self.schema, attributes, Secret.SearchFlags.UNLOCK, None
)
except GLib.Error as error:
quark = GLib.quark_try_string('g-io-error-quark')
if error.matches(quark, Gio.IOErrorEnum.FAILED):
> raise KeyringLocked('Failed to unlock the item!') from error
E keyring.errors.KeyringLocked: Failed to unlock the item!

keyring/backends/libsecret.py:68: KeyringLocked
------------------------------------------------------------------- Captured stdout setup --------------------------------------------------------------------
Testing LibSecretKeyring; the following password prompts are for this keyring
__________________________________________________________ TestLibSecretKeyring.test_different_user __________________________________________________________

self = , service = 'service1', username = 'user1', password = 'password1'

def set_password(self, service, username, password):
"""Set password for the username of the service"""
attributes = {
"application": self.appid,
"service": service,
"username": username,
}
label = "Password for '{}' on '{}'".format(username, service)
try:
> stored = Secret.password_store_sync(
self.schema, attributes, self.collection, label, password, None
)
E gi.repository.GLib.GError: g-io-error-quark: Cannot autolaunch D-Bus without X11 $DISPLAY (0)

keyring/backends/libsecret.py:88: Error

The above exception was the direct cause of the following exception:

self =

def test_different_user(self):
"""
Issue #47 reports that WinVault isn't storing passwords for
multiple users. This test exercises that test for each of the
backends.
"""

keyring = self.keyring
> self.set_password('service1', 'user1', 'password1')

keyring/testing/backend.py:132:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
keyring/testing/backend.py:51: in set_password
self.keyring.set_password(service, username, password)
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _

self = , service = 'service1', username = 'user1', password = 'password1'

def set_password(self, service, username, password):
"""Set password for the username of the service"""
attributes = {
"application": self.appid,
"service": service,
"username": username,
}
label = "Password for '{}' on '{}'".format(username, service)
try:
stored = Secret.password_store_sync(
self.schema, attributes, self.collection, label, password, None
)
except GLib.Error as error:
quark = GLib.quark_try_string('secret-error')
if error.matches(quark, Secret.Error.IS_LOCKED):
raise KeyringLocked("Failed to unlock the collection!") from error
quark = GLib.quark_try_string('g-io-error-quark')
if error.matches(quark, Gio.IOErrorEnum.FAILED):
> raise KeyringLocked("Failed to unlock the collection!") from error
E keyring.errors.KeyringLocked: Failed to unlock the collection!

keyring/backends/libsecret.py:97: KeyringLocked
------------------------------------------------------------------- Captured stdout setup --------------------------------------------------------------------
Testing LibSecretKeyring; the following password prompts are for this keyring
____________________________________________________________ TestLibSecretKeyring.test_credential ____________________________________________________________

self = , service = 'service', username = None

def get_credential(self, service, username):
"""Get the first username and password for a service.
Return a Credential instance

The username can be omitted, but if there is one, it will use get_password
and return a SimpleCredential containing the username and password
Otherwise, it will return the first username and password combo that it finds.
"""
query = {"service": service}
if username:
query["username"] = username
try:
> items = Secret.password_search_sync(
self.schema, query, Secret.SearchFlags.UNLOCK, None
)
E gi.repository.GLib.GError: g-io-error-quark: Cannot autolaunch D-Bus without X11 $DISPLAY (0)

keyring/backends/libsecret.py:143: Error

The above exception was the direct cause of the following exception:

self =

def test_credential(self):
keyring = self.keyring

> cred = keyring.get_credential('service', None)

keyring/testing/backend.py:142:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _

self = , service = 'service', username = None

def get_credential(self, service, username):
"""Get the first username and password for a service.
Return a Credential instance

The username can be omitted, but if there is one, it will use get_password
and return a SimpleCredential containing the username and password
Otherwise, it will return the first username and password combo that it finds.
"""
query = {"service": service}
if username:
query["username"] = username
try:
items = Secret.password_search_sync(
self.schema, query, Secret.SearchFlags.UNLOCK, None
)
except GLib.Error as error:
quark = GLib.quark_try_string('g-io-error-quark')
if error.matches(quark, Gio.IOErrorEnum.FAILED):
> raise KeyringLocked('Failed to unlock the item!') from error
E keyring.errors.KeyringLocked: Failed to unlock the item!

keyring/backends/libsecret.py:149: KeyringLocked
------------------------------------------------------------------- Captured stdout setup --------------------------------------------------------------------
Testing LibSecretKeyring; the following password prompts are for this keyring
================================================================== short test summary info ===================================================================
SKIPPED [1] keyring/testing/backend.py:68: SecretStorage package is needed for SecretServiceKeyring
SKIPPED [1] keyring/testing/backend.py:74: SecretStorage package is needed for SecretServiceKeyring
SKIPPED [1] keyring/testing/backend.py:80: SecretStorage package is needed for SecretServiceKeyring
SKIPPED [1] keyring/testing/backend.py:88: SecretStorage package is needed for SecretServiceKeyring
SKIPPED [1] keyring/testing/backend.py:94: SecretStorage package is needed for SecretServiceKeyring
SKIPPED [1] keyring/testing/backend.py:104: SecretStorage package is needed for SecretServiceKeyring
SKIPPED [1] keyring/testing/backend.py:107: SecretStorage package is needed for SecretServiceKeyring
SKIPPED [1] keyring/testing/backend.py:113: SecretStorage package is needed for SecretServiceKeyring
SKIPPED [1] keyring/testing/backend.py:124: SecretStorage package is needed for SecretServiceKeyring
SKIPPED [1] keyring/testing/backend.py:139: SecretStorage package is needed for SecretServiceKeyring
SKIPPED [1] keyring/testing/backend.py:161: SecretStorage package is needed for SecretServiceKeyring
SKIPPED [1] keyring/testing/backend.py:68: Needs Windows
SKIPPED [1] keyring/testing/backend.py:74: Needs Windows
SKIPPED [1] keyring/testing/backend.py:80: Needs Windows
SKIPPED [1] keyring/testing/backend.py:88: Needs Windows
SKIPPED [1] keyring/testing/backend.py:94: Needs Windows
SKIPPED [1] keyring/testing/backend.py:104: Needs Windows
SKIPPED [1] keyring/testing/backend.py:107: Needs Windows
SKIPPED [1] keyring/testing/backend.py:113: Needs Windows
SKIPPED [1] keyring/testing/backend.py:124: Needs Windows
SKIPPED [1] keyring/testing/backend.py:139: Needs Windows
SKIPPED [1] keyring/testing/backend.py:161: Needs Windows
SKIPPED [1] tests/backends/test_Windows.py:50: Needs Windows
SKIPPED [1] tests/backends/test_Windows.py:53: Needs Windows
SKIPPED [1] tests/backends/test_Windows.py:65: condition: sys.platform != "win32"
SKIPPED [2] keyring/testing/backend.py:68: KWallet5 unavailable
SKIPPED [2] keyring/testing/backend.py:74: KWallet5 unavailable
SKIPPED [2] keyring/testing/backend.py:80: KWallet5 unavailable
SKIPPED [2] keyring/testing/backend.py:88: KWallet5 unavailable
SKIPPED [2] keyring/testing/backend.py:94: KWallet5 unavailable
SKIPPED [2] keyring/testing/backend.py:104: KWallet5 unavailable
SKIPPED [2] keyring/testing/backend.py:107: KWallet5 unavailable
SKIPPED [2] keyring/testing/backend.py:113: KWallet5 unavailable
SKIPPED [2] keyring/testing/backend.py:124: KWallet5 unavailable
SKIPPED [2] keyring/testing/backend.py:139: KWallet5 unavailable
SKIPPED [2] keyring/testing/backend.py:161: KWallet5 unavailable
SKIPPED [1] keyring/testing/backend.py:68: macOS backend not viable
SKIPPED [1] keyring/testing/backend.py:74: macOS backend not viable
SKIPPED [1] keyring/testing/backend.py:80: macOS backend not viable
SKIPPED [1] keyring/testing/backend.py:88: macOS backend not viable
SKIPPED [1] keyring/testing/backend.py:94: macOS backend not viable
SKIPPED [1] keyring/testing/backend.py:104: macOS backend not viable
SKIPPED [1] keyring/testing/backend.py:107: macOS backend not viable
SKIPPED [1] keyring/testing/backend.py:113: macOS backend not viable
SKIPPED [1] keyring/testing/backend.py:124: macOS backend not viable
SKIPPED [1] keyring/testing/backend.py:139: macOS backend not viable
SKIPPED [1] keyring/testing/backend.py:161: macOS backend not viable
SKIPPED [1] tests/backends/test_macOS.py:16: macOS backend not viable
SKIPPED [1] tests/util/test_platform.py:12: condition: platform.system() != "Windows"
XFAIL tests/test_multiprocess.py::test_multiprocess_get
#410: keyring discovery fails intermittently
XFAIL tests/test_multiprocess.py::test_multiprocess_get_after_native_get
#410: keyring discovery fails intermittently
FAILED tests/test_packaging.py::test_entry_point - ValueError: too many values to unpack (expected 1)
FAILED tests/backends/test_libsecret.py::TestLibSecretKeyring::test_password_set_get - keyring.errors.KeyringLocked: Failed to unlock the item!
FAILED tests/backends/test_libsecret.py::TestLibSecretKeyring::test_difficult_chars - keyring.errors.KeyringLocked: Failed to unlock the item!
FAILED tests/backends/test_libsecret.py::TestLibSecretKeyring::test_delete_present - keyring.errors.KeyringLocked: Failed to unlock the collection!
FAILED tests/backends/test_libsecret.py::TestLibSecretKeyring::test_delete_not_present - keyring.errors.KeyringLocked: Failed to unlock the item!
FAILED tests/backends/test_libsecret.py::TestLibSecretKeyring::test_delete_one_in_group - keyring.errors.KeyringLocked: Failed to unlock the collection!
FAILED tests/backends/test_libsecret.py::TestLibSecretKeyring::test_unicode_chars - keyring.errors.KeyringLocked: Failed to unlock the item!
FAILED tests/backends/test_libsecret.py::TestLibSecretKeyring::test_unicode_and_ascii_chars - keyring.errors.KeyringLocked: Failed to unlock the item!
FAILED tests/backends/test_libsecret.py::TestLibSecretKeyring::test_different_user - keyring.errors.KeyringLocked: Failed to unlock the collection!
FAILED tests/backends/test_libsecret.py::TestLibSecretKeyring::test_credential - keyring.errors.KeyringLocked: Failed to unlock the item!
==================================================== 10 failed, 21 passed, 60 skipped, 2 xfailed in 1.07s ====================================================
```

Contributor guide

No contributing guide indexed for this repository

Research direction

Start with tests/test_packaging.py and tests/backends/test_libsecret.py, then reproduce the reported PEP517 wheel installation and pytest invocation. Read the related entry-point and libsecret backend code to determine the expected behavior in this environment. Done means the reported packaging and libsecret test failures are resolved and the affected tests pass.

Written by the indexing model from the issue text.

Assessment

Tech stack
python
Domain
backend, build-system, testing-qa
Issue type
Bug
Difficulty
4/5
Estimated time
3-5 days
Activity status
Stale
Clarity
Needs clarification
Newbie friendliness
25/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.