From ddd9bdd2e9fcc6009e54a17751d1002a039d180a Mon Sep 17 00:00:00 2001 From: Stef Walter Date: Mon, 25 Feb 2013 13:56:32 +0100 Subject: [PATCH] Fix introspection for secret_value_get() to return a uint8 This works around a crash in pygobject. https://bugzilla.gnome.org/show_bug.cgi?id=694448 --- libsecret/secret-value.c | 4 ++-- libsecret/tests/test-unstable.py | 34 +++++++++++++++++++++++++++++--- 2 files changed, 33 insertions(+), 5 deletions(-) diff --git a/libsecret/secret-value.c b/libsecret/secret-value.c index 7bd7bc2..a6fc5b8 100644 --- a/libsecret/secret-value.c +++ b/libsecret/secret-value.c @@ -151,13 +151,13 @@ secret_value_new_full (gchar *secret, /** * secret_value_get: * @value: the value - * @length: (out): the length of the secret + * @length: the length of the secret * * Get the secret data in the #SecretValue. The value is not necessarily * null-terminated unless it was created with secret_value_new() or a * null-terminated string was passed to secret_value_new_full(). * - * Returns: (array length=length): the secret data + * Returns: (array length=length) (element-type guint8): the secret data */ const gchar * secret_value_get (SecretValue *value, diff --git a/libsecret/tests/test-unstable.py b/libsecret/tests/test-unstable.py index 7f611e7..2aa6d2b 100644 --- a/libsecret/tests/test-unstable.py +++ b/libsecret/tests/test-unstable.py @@ -14,22 +14,50 @@ import unittest from gi.repository import MockService as Mock -from gi.repository import SecretUnstable as Secret, GLib +from gi.repository import SecretUnstable, Secret, GLib + +EXAMPLE_SCHEMA = Secret.Schema.new('org.mock.type.Store', + Secret.SchemaFlags.NONE, + { + 'number': Secret.SchemaAttributeType.INTEGER, + 'string': Secret.SchemaAttributeType.STRING, + 'even': Secret.SchemaAttributeType.BOOLEAN, + } +) + +attributes = { + 'number': '8', + 'string': 'eight', + 'even': 'true' +} class TestStore(unittest.TestCase): def setUp(self): Mock.start("mock-service-normal.py") def tearDown(self): - Secret.Service.disconnect() + SecretUnstable.Service.disconnect() Mock.stop() def testSynchronous(self): - service = Secret.Service.get_sync(Secret.ServiceFlags.NONE, None); + service = SecretUnstable.Service.get_sync(SecretUnstable.ServiceFlags.NONE, None); path = service.read_alias_dbus_path_sync("default", None); # Just running this without error is good enough for us to test the unstable gir self.assertNotEqual(path, None); + def testValueGet(self): + Secret.password_store_sync(EXAMPLE_SCHEMA, attributes, Secret.COLLECTION_DEFAULT, + 'the label', 'the password', None) + + service = SecretUnstable.Service.get_sync(SecretUnstable.ServiceFlags.NONE, None) + items = service.search_sync(EXAMPLE_SCHEMA, { 'even': 'true' }, + SecretUnstable.SearchFlags.ALL | SecretUnstable.SearchFlags.LOAD_SECRETS, + None) + + item = items[0] + item_secret = item.get_secret() + self.assertEqual(item_secret.get(), "the password") + if __name__ == '__main__': unittest.main()