mirror of
https://gitlab.gnome.org/GNOME/libsecret.git
synced 2024-12-22 04:38:55 +00:00
parent
3bc89a8971
commit
d0df587f08
7
.gitignore
vendored
7
.gitignore
vendored
@ -12,6 +12,7 @@
|
|||||||
*.pc
|
*.pc
|
||||||
*.tar.gz
|
*.tar.gz
|
||||||
*.typelib
|
*.typelib
|
||||||
|
*.vapi
|
||||||
.deps
|
.deps
|
||||||
.cproject
|
.cproject
|
||||||
.libs
|
.libs
|
||||||
@ -39,7 +40,8 @@ stamp*
|
|||||||
.cproject
|
.cproject
|
||||||
|
|
||||||
/build/coverage*
|
/build/coverage*
|
||||||
/build/m4
|
/build/m4/*
|
||||||
|
!/build/m4/vapigen.m4
|
||||||
/build/valgrind-suppressions
|
/build/valgrind-suppressions
|
||||||
|
|
||||||
/docs/reference/libsecret/version.xml
|
/docs/reference/libsecret/version.xml
|
||||||
@ -67,8 +69,11 @@ stamp*
|
|||||||
/library/secret-dbus-generated.[ch]
|
/library/secret-dbus-generated.[ch]
|
||||||
/library/secret-enum-types.[ch]
|
/library/secret-enum-types.[ch]
|
||||||
/library/tests/test-*
|
/library/tests/test-*
|
||||||
|
/library/tests/*.metadata
|
||||||
!/library/tests/test-*.c
|
!/library/tests/test-*.c
|
||||||
!/library/tests/test-*.js
|
!/library/tests/test-*.js
|
||||||
!/library/tests/test-*.py
|
!/library/tests/test-*.py
|
||||||
|
!/library/tests/test-*.vala
|
||||||
|
/library/tests/test-vala-lang.c
|
||||||
|
|
||||||
/tool/secret-tool
|
/tool/secret-tool
|
||||||
|
96
build/m4/vapigen.m4
Normal file
96
build/m4/vapigen.m4
Normal file
@ -0,0 +1,96 @@
|
|||||||
|
dnl vapigen.m4
|
||||||
|
dnl
|
||||||
|
dnl Copyright 2012 Evan Nemerson
|
||||||
|
dnl
|
||||||
|
dnl This library is free software; you can redistribute it and/or
|
||||||
|
dnl modify it under the terms of the GNU Lesser General Public
|
||||||
|
dnl License as published by the Free Software Foundation; either
|
||||||
|
dnl version 2.1 of the License, or (at your option) any later version.
|
||||||
|
dnl
|
||||||
|
dnl This library is distributed in the hope that it will be useful,
|
||||||
|
dnl but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
dnl MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||||
|
dnl Lesser General Public License for more details.
|
||||||
|
dnl
|
||||||
|
dnl You should have received a copy of the GNU Lesser General Public
|
||||||
|
dnl License along with this library; if not, write to the Free Software
|
||||||
|
dnl Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
||||||
|
|
||||||
|
# VAPIGEN_CHECK([VERSION], [API_VERSION], [FOUND-INTROSPECTION], [DEFAULT])
|
||||||
|
# --------------------------------------
|
||||||
|
# Check vapigen existence and version
|
||||||
|
#
|
||||||
|
# See http://live.gnome.org/Vala/UpstreamGuide for detailed documentation
|
||||||
|
AC_DEFUN([VAPIGEN_CHECK],
|
||||||
|
[
|
||||||
|
AC_BEFORE([GOBJECT_INTROSPECTION_CHECK],[$0])
|
||||||
|
AC_BEFORE([GOBJECT_INTROSPECTION_REQUIRE],[$0])
|
||||||
|
|
||||||
|
AC_ARG_ENABLE([vala],
|
||||||
|
[AS_HELP_STRING([--enable-vala[=@<:@no/auto/yes@:>@]],[build Vala bindings @<:@default=]ifelse($4,,auto,$4)[@:>@])],,[
|
||||||
|
AS_IF([test "x$4" = "x"], [
|
||||||
|
enable_vala=auto
|
||||||
|
], [
|
||||||
|
enable_vala=$4
|
||||||
|
])
|
||||||
|
])
|
||||||
|
|
||||||
|
AS_CASE([$enable_vala], [no], [enable_vala=no],
|
||||||
|
[yes], [
|
||||||
|
AS_IF([test "x$3" != "xyes" -a "x$found_introspection" != "xyes"], [
|
||||||
|
AC_MSG_ERROR([Vala bindings require GObject Introspection])
|
||||||
|
])
|
||||||
|
], [auto], [
|
||||||
|
AS_IF([test "x$3" != "xyes" -a "x$found_introspection" != "xyes"], [
|
||||||
|
enable_vala=no
|
||||||
|
])
|
||||||
|
], [
|
||||||
|
AC_MSG_ERROR([Invalid argument passed to --enable-vala, should be one of @<:@no/auto/yes@:>@])
|
||||||
|
])
|
||||||
|
|
||||||
|
AS_IF([test "x$2" = "x"], [
|
||||||
|
vapigen_pkg_name=vapigen
|
||||||
|
], [
|
||||||
|
vapigen_pkg_name=vapigen-$2
|
||||||
|
])
|
||||||
|
AS_IF([test "x$1" = "x"], [
|
||||||
|
vapigen_pkg="$vapigen_pkg_name"
|
||||||
|
], [
|
||||||
|
vapigen_pkg="$vapigen_pkg_name >= $1"
|
||||||
|
])
|
||||||
|
|
||||||
|
PKG_PROG_PKG_CONFIG
|
||||||
|
|
||||||
|
PKG_CHECK_EXISTS([$vapigen_pkg], [
|
||||||
|
AS_IF([test "$enable_vala" = "auto"], [
|
||||||
|
enable_vala=yes
|
||||||
|
])
|
||||||
|
], [
|
||||||
|
AS_CASE([$enable_vala], [yes], [
|
||||||
|
AC_MSG_ERROR([$vapigen_pkg not found])
|
||||||
|
], [auto], [
|
||||||
|
enable_vala=no
|
||||||
|
])
|
||||||
|
])
|
||||||
|
|
||||||
|
AC_MSG_CHECKING([for vapigen])
|
||||||
|
|
||||||
|
AS_CASE([$enable_vala],
|
||||||
|
[yes], [
|
||||||
|
VAPIGEN=`$PKG_CONFIG --variable=vapigen vapigen`
|
||||||
|
VAPIGEN_MAKEFILE=`$PKG_CONFIG --variable=datadir vapigen`/vala/Makefile.vapigen
|
||||||
|
AS_IF([test "x$2" = "x"], [
|
||||||
|
VAPIGEN_VAPIDIR=`$PKG_CONFIG --variable=vapidir vapigen`
|
||||||
|
], [
|
||||||
|
VAPIGEN_VAPIDIR=`$PKG_CONFIG --variable=vapidir_versioned vapigen`
|
||||||
|
])
|
||||||
|
])
|
||||||
|
|
||||||
|
AC_MSG_RESULT([$enable_vala])
|
||||||
|
|
||||||
|
AC_SUBST([VAPIGEN])
|
||||||
|
AC_SUBST([VAPIGEN_VAPIDIR])
|
||||||
|
AC_SUBST([VAPIGEN_MAKEFILE])
|
||||||
|
|
||||||
|
AM_CONDITIONAL(ENABLE_VAPIGEN, test "x$enable_vala" = "xyes")
|
||||||
|
])
|
12
configure.ac
12
configure.ac
@ -71,6 +71,18 @@ GTK_DOC_CHECK(1.9)
|
|||||||
GOBJECT_INTROSPECTION_CHECK([1.29])
|
GOBJECT_INTROSPECTION_CHECK([1.29])
|
||||||
AC_PATH_PROG(GLIB_MKENUMS, glib-mkenums)
|
AC_PATH_PROG(GLIB_MKENUMS, glib-mkenums)
|
||||||
|
|
||||||
|
# --------------------------------------------------------------------
|
||||||
|
# Vala
|
||||||
|
|
||||||
|
VALA_REQUIRED=0.17.2.12
|
||||||
|
|
||||||
|
VAPIGEN_CHECK($VALA_REQUIRED)
|
||||||
|
|
||||||
|
if test "$enable_vala" != "no"; then
|
||||||
|
AC_PATH_PROG([VALAC], [valac], [])
|
||||||
|
fi
|
||||||
|
AM_CONDITIONAL(HAVE_VALAC, test "x$VALAC" != "x")
|
||||||
|
|
||||||
# --------------------------------------------------------------------
|
# --------------------------------------------------------------------
|
||||||
# libgcrypt
|
# libgcrypt
|
||||||
|
|
||||||
|
@ -614,4 +614,172 @@
|
|||||||
|
|
||||||
</chapter>
|
</chapter>
|
||||||
|
|
||||||
|
<chapter id="vala-examples">
|
||||||
|
<title>Vala examples</title>
|
||||||
|
|
||||||
|
<section id="vala-schema-example">
|
||||||
|
<title>Vala example: Define a password schema</title>
|
||||||
|
|
||||||
|
<para>Each stored password has a set of attributes which are later
|
||||||
|
used to lookup the password. The names and types of the attributes
|
||||||
|
are defined in a schema. The schema is usually defined once globally.
|
||||||
|
Here's how to define a schema:</para>
|
||||||
|
|
||||||
|
<informalexample><programlisting language="vala"><![CDATA[
|
||||||
|
var example = new Secret.Schema ("org.example.Password", Secret.SchemaFlags.NONE,
|
||||||
|
"number", Secret.SchemaAttributeType.INTEGER,
|
||||||
|
"string", Secret.SchemaAttributeType.STRING,
|
||||||
|
"even", Secret.SchemaAttributeType.BOOLEAN);
|
||||||
|
]]></programlisting></informalexample>
|
||||||
|
|
||||||
|
<para>See the <link linkend="vala-store-example">other examples</link> for how
|
||||||
|
to use the schema.</para>
|
||||||
|
</section>
|
||||||
|
|
||||||
|
<section id="vala-store-example">
|
||||||
|
<title>Vala example: Store a password</title>
|
||||||
|
|
||||||
|
<para>Here's how to store a password in the running secret service,
|
||||||
|
like gnome-keyring or ksecretservice.</para>
|
||||||
|
|
||||||
|
<para>Each stored password has a set of attributes which are later
|
||||||
|
used to lookup the password. The attributes should not contain
|
||||||
|
secrets, as they are not stored in an encrypted fashion.</para>
|
||||||
|
|
||||||
|
<para>These examples use <link linkend="vala-schema-example">the example
|
||||||
|
schema</link>.</para>
|
||||||
|
|
||||||
|
<para>This first example stores a password asynchronously, and is
|
||||||
|
appropriate for GUI applications so that the UI does not block.</para>
|
||||||
|
|
||||||
|
<informalexample><programlisting language="vala"><![CDATA[
|
||||||
|
var attributes = new GLib.HashTable<string,string> ();
|
||||||
|
attributes["number"] = "8";
|
||||||
|
attributes["string"] = "eight";
|
||||||
|
attributes["even"] = "true";
|
||||||
|
|
||||||
|
Secret.password_storev.begin (example_schema, attributes, Secret.COLLECTION_DEFAULT,
|
||||||
|
"The label", "the password", null, (obj, async_res) => {
|
||||||
|
bool res = Secret.password_store.end (async_res);
|
||||||
|
/* ... do something now that the password has been stored */
|
||||||
|
});
|
||||||
|
]]></programlisting></informalexample>
|
||||||
|
|
||||||
|
<para>If you are already inside of an async function, you can also
|
||||||
|
use the yield keyword:</para>
|
||||||
|
|
||||||
|
<informalexample><programlisting language="vala"><![CDATA[
|
||||||
|
var attributes = new GLib.HashTable<string,string> ();
|
||||||
|
attributes["number"] = "8";
|
||||||
|
attributes["string"] = "eight";
|
||||||
|
attributes["even"] = "true";
|
||||||
|
|
||||||
|
bool res = yield Secret.password_storev (example_schema, attributes,
|
||||||
|
Secret.COLLECTION_DEFAULT, "The label",
|
||||||
|
"the password", null);
|
||||||
|
]]></programlisting></informalexample>
|
||||||
|
|
||||||
|
<para>If you would like to avoid creating a hash table for the
|
||||||
|
attributes you can just use the variadic version:</para>
|
||||||
|
|
||||||
|
<informalexample><programlisting language="vala"><![CDATA[
|
||||||
|
bool res = yield Secret.password_store (example_schema, Secret.COLLECTION_DEFAULT, "The label",
|
||||||
|
"the password", null, "number", 8, "string", "eight",
|
||||||
|
"even", true);
|
||||||
|
]]></programlisting></informalexample>
|
||||||
|
|
||||||
|
<para>This next example stores a password synchronously. The function
|
||||||
|
call will block until the password is stored. So this is appropriate for
|
||||||
|
non GUI applications.</para>
|
||||||
|
|
||||||
|
<informalexample><programlisting language="vala"><![CDATA[
|
||||||
|
Secret.password_store_sync (example_schema, attributes, Secret.COLLECTION_DEFAULT,
|
||||||
|
"The label", "the password", null,
|
||||||
|
"number", 9, "string", "nine", "even", false);
|
||||||
|
]]></programlisting></informalexample>
|
||||||
|
</section>
|
||||||
|
|
||||||
|
<section id="vala-lookup-example">
|
||||||
|
<title>Vala example: Lookup a password</title>
|
||||||
|
|
||||||
|
<para>Here's how to lookup a password in the running secret service,
|
||||||
|
like gnome-keyring or ksecretservice.</para>
|
||||||
|
|
||||||
|
<para>Each stored password has a set of attributes which are
|
||||||
|
used to lookup the password. If multiple passwords match the
|
||||||
|
lookup attributes, then the one stored most recently is returned.</para>
|
||||||
|
|
||||||
|
<para>These examples use <link linkend="vala-schema-example">the example
|
||||||
|
schema</link>.</para>
|
||||||
|
|
||||||
|
<para>This first example looks up a password asynchronously, and is
|
||||||
|
appropriate for GUI applications so that the UI does not block.</para>
|
||||||
|
|
||||||
|
<informalexample><programlisting language="vala"><![CDATA[
|
||||||
|
var attributes = new GLib.HashTable<string,string> ();
|
||||||
|
attributes["number"] = "8";
|
||||||
|
attributes["string"] = "eight";
|
||||||
|
attributes["even"] = "true";
|
||||||
|
|
||||||
|
Secret.password_lookupv.begin (example_schema, attributes, null, (obj, async_res) => {
|
||||||
|
string password = Secret.password_lookup.end (async_res);
|
||||||
|
});
|
||||||
|
]]></programlisting></informalexample>
|
||||||
|
|
||||||
|
<para>This next example looks up a password synchronously. The function
|
||||||
|
call will block until the lookup completes. So this is appropriate for
|
||||||
|
non GUI applications.</para>
|
||||||
|
|
||||||
|
<informalexample><programlisting language="vala"><![CDATA[
|
||||||
|
string password = Secret.password_lookup_sync (example_schema, attributes, null,
|
||||||
|
"number", 9, "string", "nine", "even", false);
|
||||||
|
/* password will be null, if no matching password found */
|
||||||
|
]]></programlisting></informalexample>
|
||||||
|
</section>
|
||||||
|
|
||||||
|
<section id="vala-remove-example">
|
||||||
|
<title>Vala example: Remove a password</title>
|
||||||
|
|
||||||
|
<para>Here's how to remove a password from the running secret service,
|
||||||
|
like gnome-keyring or ksecretservice.</para>
|
||||||
|
|
||||||
|
<para>Each stored password has a set of attributes which are
|
||||||
|
used to find which password to remove. If multiple passwords match the
|
||||||
|
attributes, then the one stored most recently is removed.</para>
|
||||||
|
|
||||||
|
<para>These examples use <link linkend="vala-schema-example">the example
|
||||||
|
schema</link>.</para>
|
||||||
|
|
||||||
|
<para>This first example removes a password asynchronously, and is
|
||||||
|
appropriate for GUI applications so that the UI does not block.</para>
|
||||||
|
|
||||||
|
<informalexample><programlisting language="vala"><![CDATA[
|
||||||
|
var attributes = new GLib.HashTable<string,string> ();
|
||||||
|
attributes["number"] = "8";
|
||||||
|
attributes["string"] = "eight";
|
||||||
|
attributes["even"] = "true";
|
||||||
|
|
||||||
|
Secret.password_removev.begin (example_schema, attributes, null, (obj, async_res) => {
|
||||||
|
bool removed = Secret.password_removev.end (async_res);
|
||||||
|
});
|
||||||
|
]]></programlisting></informalexample>
|
||||||
|
|
||||||
|
<para>This next example removes a password synchronously. The function
|
||||||
|
call will block until the removal completes. So this is appropriate for
|
||||||
|
non GUI applications.</para>
|
||||||
|
|
||||||
|
<informalexample><programlisting language="vala"><![CDATA[
|
||||||
|
var attributes = new GLib.HashTable<string,string> ();
|
||||||
|
attributes["number"] = "8";
|
||||||
|
attributes["string"] = "eight";
|
||||||
|
attributes["even"] = "true";
|
||||||
|
|
||||||
|
bool removed = Secret.password_remove_sync (example_schema, null,
|
||||||
|
"number", 8, "string", "eight", "even", true);
|
||||||
|
/* removed will be true if the password was removed */
|
||||||
|
]]></programlisting></informalexample>
|
||||||
|
</section>
|
||||||
|
|
||||||
|
</chapter>
|
||||||
|
|
||||||
</part>
|
</part>
|
||||||
|
@ -94,6 +94,8 @@ secret-enum-types.h: secret-enum-types.h.template $(HEADER_FILES)
|
|||||||
secret-enum-types.c: secret-enum-types.c.template $(HEADER_FILES)
|
secret-enum-types.c: secret-enum-types.c.template $(HEADER_FILES)
|
||||||
$(AM_V_GEN) $(GLIB_MKENUMS) --template $^ > $@
|
$(AM_V_GEN) $(GLIB_MKENUMS) --template $^ > $@
|
||||||
|
|
||||||
|
CLEANFILES =
|
||||||
|
|
||||||
# ------------------------------------------------------------------
|
# ------------------------------------------------------------------
|
||||||
# INTROSPECTION
|
# INTROSPECTION
|
||||||
|
|
||||||
@ -121,7 +123,24 @@ gir_DATA = $(INTROSPECTION_GIRS)
|
|||||||
typelibsdir = $(libdir)/girepository-1.0
|
typelibsdir = $(libdir)/girepository-1.0
|
||||||
typelibs_DATA = $(INTROSPECTION_GIRS:.gir=.typelib)
|
typelibs_DATA = $(INTROSPECTION_GIRS:.gir=.typelib)
|
||||||
|
|
||||||
endif
|
if ENABLE_VAPIGEN
|
||||||
|
include $(VAPIGEN_MAKEFILE)
|
||||||
|
|
||||||
|
libsecret-@SECRET_MAJOR@.vapi: Secret-@SECRET_MAJOR@.gir Secret-@SECRET_MAJOR@.metadata
|
||||||
|
|
||||||
|
VAPIGEN_VAPIS = libsecret-@SECRET_MAJOR@.vapi
|
||||||
|
|
||||||
|
libsecret_@SECRET_MAJOR@_vapi_DEPS = gio-2.0
|
||||||
|
libsecret_@SECRET_MAJOR@_vapi_METADATADIRS = $(srcdir)
|
||||||
|
libsecret_@SECRET_MAJOR@_vapi_FILES = Secret-@SECRET_MAJOR@.gir
|
||||||
|
|
||||||
|
vapidir = $(datadir)/vala/vapi
|
||||||
|
vapi_DATA = $(VAPIGEN_VAPIS)
|
||||||
|
|
||||||
|
CLEANFILES += $(VAPIGEN_VAPIS)
|
||||||
|
|
||||||
|
endif # ENABLE_VAPIGEN
|
||||||
|
endif # HAVE_INTROSPECTION
|
||||||
|
|
||||||
# ------------------------------------------------------------------
|
# ------------------------------------------------------------------
|
||||||
# PKG CONFIG
|
# PKG CONFIG
|
||||||
@ -139,9 +158,10 @@ EXTRA_DIST = \
|
|||||||
secret-enum-types.h.template \
|
secret-enum-types.h.template \
|
||||||
secret-enum-types.c.template \
|
secret-enum-types.c.template \
|
||||||
org.freedesktop.Secrets.xml \
|
org.freedesktop.Secrets.xml \
|
||||||
|
Secret-@SECRET_MAJOR@.metadata \
|
||||||
$(NULL)
|
$(NULL)
|
||||||
|
|
||||||
CLEANFILES = \
|
CLEANFILES += \
|
||||||
$(pkgconfig_DATA) \
|
$(pkgconfig_DATA) \
|
||||||
$(gir_DATA) \
|
$(gir_DATA) \
|
||||||
$(typelibs_DATA) \
|
$(typelibs_DATA) \
|
||||||
|
26
library/Secret-0.metadata
Normal file
26
library/Secret-0.metadata
Normal file
@ -0,0 +1,26 @@
|
|||||||
|
// Metadata file for Vala API generation.
|
||||||
|
// See https://live.gnome.org/Vala/UpstreamGuide for more information
|
||||||
|
|
||||||
|
Service
|
||||||
|
.lookup skip=false
|
||||||
|
.lookupv finish_name="secret_service_lookup_finish"
|
||||||
|
.remove skip=false
|
||||||
|
.removev finish_name="secret_service_remove_finish"
|
||||||
|
.store skip=false
|
||||||
|
.storev finish_name="secret_service_store_finish"
|
||||||
|
|
||||||
|
Schema
|
||||||
|
.new skip=false
|
||||||
|
|
||||||
|
password_lookup skip=false
|
||||||
|
password_lookup_sync skip=false throws="GLib.Error"
|
||||||
|
.error skip
|
||||||
|
password_lookupv finish_name="secret_password_lookup_finish"
|
||||||
|
password_remove skip=false
|
||||||
|
password_remove_sync skip=false throws="GLib.Error"
|
||||||
|
.error skip
|
||||||
|
password_removev finish_name="secret_password_remove_finish"
|
||||||
|
password_store skip=false
|
||||||
|
password_store_sync skip=false throws="GLib.Error"
|
||||||
|
.error skip
|
||||||
|
password_storev finish_name="secret_password_store_finish"
|
@ -10,7 +10,8 @@ INCLUDES = \
|
|||||||
noinst_LTLIBRARIES = libmock_service.la
|
noinst_LTLIBRARIES = libmock_service.la
|
||||||
|
|
||||||
libmock_service_la_SOURCES = \
|
libmock_service_la_SOURCES = \
|
||||||
mock-service.c mock-service.h \
|
mock-service.c \
|
||||||
|
mock-service.h \
|
||||||
$(NULL)
|
$(NULL)
|
||||||
|
|
||||||
libmock_service_la_CFLAGS = \
|
libmock_service_la_CFLAGS = \
|
||||||
@ -30,7 +31,7 @@ LDADD = \
|
|||||||
libmock_service.la \
|
libmock_service.la \
|
||||||
$(NULL)
|
$(NULL)
|
||||||
|
|
||||||
TEST_PROGS = \
|
C_TESTS = \
|
||||||
test-value \
|
test-value \
|
||||||
test-prompt \
|
test-prompt \
|
||||||
test-service \
|
test-service \
|
||||||
@ -41,6 +42,10 @@ TEST_PROGS = \
|
|||||||
test-collection \
|
test-collection \
|
||||||
$(NULL)
|
$(NULL)
|
||||||
|
|
||||||
|
TEST_PROGS = \
|
||||||
|
$(C_TESTS) \
|
||||||
|
$(NULL)
|
||||||
|
|
||||||
check_PROGRAMS = \
|
check_PROGRAMS = \
|
||||||
$(TEST_PROGS)
|
$(TEST_PROGS)
|
||||||
|
|
||||||
@ -63,8 +68,36 @@ PY_TESTS = \
|
|||||||
|
|
||||||
PY_ENV = $(JS_ENV)
|
PY_ENV = $(JS_ENV)
|
||||||
|
|
||||||
test-c: $(TEST_PROGS)
|
if HAVE_VALAC
|
||||||
@gtester --verbose -m $(TEST_MODE) --g-fatal-warnings $(TEST_PROGS)
|
|
||||||
|
VALA_V = $(VALA_V_$(V))
|
||||||
|
VALA_V_ = $(VALA_V_$(AM_DEFAULT_VERBOSITY))
|
||||||
|
VALA_V_0 = @echo " VALAC " $^;
|
||||||
|
|
||||||
|
VALA_TESTS = \
|
||||||
|
test-vala-lang \
|
||||||
|
$(NULL)
|
||||||
|
|
||||||
|
test-vala-lang.c: test-vala-lang.vala libsecret-@SECRET_MAJOR@.vapi mock-service-0.vapi
|
||||||
|
$(VALA_V)$(VALAC) -C --pkg gio-2.0 $^
|
||||||
|
|
||||||
|
TEST_PROGS += $(VALA_TESTS)
|
||||||
|
|
||||||
|
test_vala_lang_CFLAGS = -w
|
||||||
|
|
||||||
|
DISTCLEANFILES = test-vala-lang.c
|
||||||
|
|
||||||
|
test-vala: $(VALA_TESTS)
|
||||||
|
@gtester --verbose -m $(TEST_MODE) --g-fatal-warnings $(VALA_TESTS)
|
||||||
|
|
||||||
|
else
|
||||||
|
|
||||||
|
test-vala:
|
||||||
|
|
||||||
|
endif # HAVE_VALAC
|
||||||
|
|
||||||
|
test-c: $(C_TESTS)
|
||||||
|
@gtester --verbose -m $(TEST_MODE) --g-fatal-warnings $(C_TESTS)
|
||||||
|
|
||||||
test-js:
|
test-js:
|
||||||
@for js in $(JS_TESTS); do echo "TEST: $$js"; $(JS_ENV) gjs $(srcdir)/$$js; done
|
@for js in $(JS_TESTS); do echo "TEST: $$js"; $(JS_ENV) gjs $(srcdir)/$$js; done
|
||||||
@ -72,7 +105,7 @@ test-js:
|
|||||||
test-py:
|
test-py:
|
||||||
@for py in $(PY_TESTS); do echo "TEST: $$py"; $(PY_ENV) python $(srcdir)/$$py; done
|
@for py in $(PY_TESTS); do echo "TEST: $$py"; $(PY_ENV) python $(srcdir)/$$py; done
|
||||||
|
|
||||||
test: test-c test-py test-js
|
test: test-c test-py test-js test-vala
|
||||||
|
|
||||||
# ------------------------------------------------------------------
|
# ------------------------------------------------------------------
|
||||||
# INTROSPECTION
|
# INTROSPECTION
|
||||||
@ -91,7 +124,7 @@ MockService_0_gir_PACKAGES = gobject-2.0 gio-2.0
|
|||||||
MockService_0_gir_EXPORT_PACKAGES = mock-service-0
|
MockService_0_gir_EXPORT_PACKAGES = mock-service-0
|
||||||
MockService_0_gir_INCLUDES = GObject-2.0 Gio-2.0
|
MockService_0_gir_INCLUDES = GObject-2.0 Gio-2.0
|
||||||
MockService_0_gir_LIBS = libmock_service.la
|
MockService_0_gir_LIBS = libmock_service.la
|
||||||
MockService_0_gir_CFLAGS = -I$(top_srcdir) -I$(top_builddir)
|
MockService_0_gir_CFLAGS = -I$(top_srcdir) -I$(top_builddir) -I$(srcdir)
|
||||||
MockService_0_gir_FILES = $(libmock_service_la_SOURCES)
|
MockService_0_gir_FILES = $(libmock_service_la_SOURCES)
|
||||||
MockService_0_gir_SCANNERFLAGS = --c-include "mock-service.h"
|
MockService_0_gir_SCANNERFLAGS = --c-include "mock-service.h"
|
||||||
|
|
||||||
@ -99,7 +132,40 @@ noinst_DATA = \
|
|||||||
$(INTROSPECTION_GIRS) \
|
$(INTROSPECTION_GIRS) \
|
||||||
$(INTROSPECTION_GIRS:.gir=.typelib)
|
$(INTROSPECTION_GIRS:.gir=.typelib)
|
||||||
|
|
||||||
endif
|
if ENABLE_VAPIGEN
|
||||||
|
include $(VAPIGEN_MAKEFILE)
|
||||||
|
|
||||||
|
mock-service-0.vapi: MockService-0.gir libsecret-@SECRET_MAJOR@.vapi
|
||||||
|
|
||||||
|
VAPIGEN_VAPIS = mock-service-0.vapi
|
||||||
|
|
||||||
|
mock_service_0_vapi_DEPS = gio-2.0 libsecret-@SECRET_MAJOR@
|
||||||
|
mock_service_0_vapi_METADATADIRS = $(builddir)
|
||||||
|
mock_service_0_vapi_VAPIDIRS = $(builddir)
|
||||||
|
mock_service_0_vapi_FILES = MockService-0.gir
|
||||||
|
|
||||||
|
vapidir = $(datadir)/vala/vapi
|
||||||
|
vapi_DATA = mock-service-0.vapi
|
||||||
|
|
||||||
|
# We have to make a version of the VAPI which references the
|
||||||
|
# uninstalled C headers.
|
||||||
|
|
||||||
|
VAPIGEN_VAPIS += libsecret-@SECRET_MAJOR@.vapi
|
||||||
|
|
||||||
|
Secret-@SECRET_MAJOR@.metadata: $(top_srcdir)/library/Secret-@SECRET_MAJOR@.metadata
|
||||||
|
$(AM_V_GEN) echo "* cheader_filename=\"secret-collection.h,secret-item.h,secret-password.h,secret-prompt.h,secret-schema.h,secret-schemas.h,secret-service.h,secret-types.h,secret-value.h\"" > $@ && \
|
||||||
|
cat < $^ >> $@
|
||||||
|
|
||||||
|
libsecret-@SECRET_MAJOR@.vapi: Secret-@SECRET_MAJOR@.metadata $(top_builddir)/library/Secret-@SECRET_MAJOR@.gir
|
||||||
|
|
||||||
|
libsecret_@SECRET_MAJOR@_vapi_DEPS = gio-2.0
|
||||||
|
libsecret_@SECRET_MAJOR@_vapi_METADATADIRS = $(srcdir)
|
||||||
|
libsecret_@SECRET_MAJOR@_vapi_FILES = $(top_builddir)/library/Secret-@SECRET_MAJOR@.gir
|
||||||
|
|
||||||
|
noinst_DATA += $(VAPIGEN_VAPIS)
|
||||||
|
|
||||||
|
endif # ENABLE_VAPIGEN
|
||||||
|
endif # HAVE_INTROSPECTION
|
||||||
|
|
||||||
#--------------------------------------------------------------------
|
#--------------------------------------------------------------------
|
||||||
|
|
||||||
@ -110,6 +176,8 @@ EXTRA_DIST = \
|
|||||||
mock-service-normal.py \
|
mock-service-normal.py \
|
||||||
mock-service-only-plain.py \
|
mock-service-only-plain.py \
|
||||||
mock-service-prompt.py \
|
mock-service-prompt.py \
|
||||||
|
Secret-@SECRET_MAJOR@.metadata \
|
||||||
|
test-vala-lang.vala \
|
||||||
$(JS_TESTS) \
|
$(JS_TESTS) \
|
||||||
$(PY_TESTS) \
|
$(PY_TESTS) \
|
||||||
$(NULL)
|
$(NULL)
|
||||||
|
172
library/tests/test-vala-lang.vala
Normal file
172
library/tests/test-vala-lang.vala
Normal file
@ -0,0 +1,172 @@
|
|||||||
|
Secret.Schema schema;
|
||||||
|
Secret.Schema no_name_schema;
|
||||||
|
|
||||||
|
private void test_lookup_sync () {
|
||||||
|
try {
|
||||||
|
string? password = Secret.password_lookup_sync (schema, null, "even", false, "string", "one", "number", 1);
|
||||||
|
GLib.assert (password == "111");
|
||||||
|
} catch ( GLib.Error e ) {
|
||||||
|
GLib.error (e.message);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public async void test_lookup_async_ex () {
|
||||||
|
try {
|
||||||
|
string? password = yield Secret.password_lookup (schema, null, "even", false, "string", "one", "number", 1);
|
||||||
|
GLib.assert (password == "111");
|
||||||
|
} catch ( GLib.Error e ) {
|
||||||
|
GLib.error (e.message);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void test_lookup_async () {
|
||||||
|
var loop = new GLib.MainLoop ();
|
||||||
|
test_lookup_async_ex.begin ((obj, async_res) => {
|
||||||
|
loop.quit ();
|
||||||
|
});
|
||||||
|
loop.run ();
|
||||||
|
}
|
||||||
|
|
||||||
|
private void test_lookup_no_name () {
|
||||||
|
try {
|
||||||
|
string? password = Secret.password_lookup_sync (schema, null, "number", 5);
|
||||||
|
GLib.assert (password == null);
|
||||||
|
|
||||||
|
password = Secret.password_lookup_sync (no_name_schema, null, "number", 5);
|
||||||
|
GLib.assert (password == "555");
|
||||||
|
} catch ( GLib.Error e ) {
|
||||||
|
GLib.error (e.message);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void test_store_sync () {
|
||||||
|
try {
|
||||||
|
var attributes = new GLib.HashTable<string,string> (GLib.str_hash, GLib.str_equal);
|
||||||
|
attributes["even"] = "false";
|
||||||
|
attributes["string"] = "nine";
|
||||||
|
attributes["number"] = "9";
|
||||||
|
|
||||||
|
string? password = Secret.password_lookupv_sync (schema, attributes);
|
||||||
|
GLib.assert (password == null);
|
||||||
|
|
||||||
|
bool stored = Secret.password_storev_sync (schema, attributes, Secret.COLLECTION_DEFAULT, "The number ", "999");
|
||||||
|
GLib.assert (stored);
|
||||||
|
|
||||||
|
password = Secret.password_lookupv_sync (schema, attributes);
|
||||||
|
GLib.assert (password == "999");
|
||||||
|
} catch ( GLib.Error e ) {
|
||||||
|
GLib.error (e.message);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private async void test_store_async_ex () {
|
||||||
|
var attributes = new GLib.HashTable<string,string> (GLib.str_hash, GLib.str_equal);
|
||||||
|
attributes["even"] = "true";
|
||||||
|
attributes["string"] = "eight";
|
||||||
|
attributes["number"] = "8";
|
||||||
|
|
||||||
|
try {
|
||||||
|
string? password = yield Secret.password_lookupv (schema, attributes, null);
|
||||||
|
GLib.assert (password == null);
|
||||||
|
|
||||||
|
bool stored = yield Secret.password_storev (schema, attributes, Secret.COLLECTION_DEFAULT, "The number nine", "999", null);
|
||||||
|
GLib.assert (stored);
|
||||||
|
|
||||||
|
password = yield Secret.password_lookupv (schema, attributes, null);
|
||||||
|
GLib.assert (password == "999");
|
||||||
|
} catch ( GLib.Error e ) {
|
||||||
|
GLib.error (e.message);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void test_store_async () {
|
||||||
|
var loop = new GLib.MainLoop ();
|
||||||
|
test_store_async_ex.begin ((obj, async_res) => {
|
||||||
|
loop.quit ();
|
||||||
|
});
|
||||||
|
loop.run ();
|
||||||
|
}
|
||||||
|
|
||||||
|
private void test_remove_sync () {
|
||||||
|
try {
|
||||||
|
var attributes = new GLib.HashTable<string,string> (GLib.str_hash, GLib.str_equal);
|
||||||
|
attributes["even"] = "false";
|
||||||
|
attributes["string"] = "nine";
|
||||||
|
attributes["number"] = "9";
|
||||||
|
|
||||||
|
string? password = Secret.password_lookupv_sync (schema, attributes);
|
||||||
|
GLib.assert (password == "999");
|
||||||
|
|
||||||
|
bool removed = Secret.password_removev_sync (schema, attributes, null);
|
||||||
|
GLib.assert (removed);
|
||||||
|
|
||||||
|
password = Secret.password_lookupv_sync (schema, attributes);
|
||||||
|
GLib.assert (password == null);
|
||||||
|
} catch ( GLib.Error e ) {
|
||||||
|
GLib.error (e.message);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private async void test_remove_async_ex () {
|
||||||
|
var attributes = new GLib.HashTable<string,string> (GLib.str_hash, GLib.str_equal);
|
||||||
|
attributes["even"] = "true";
|
||||||
|
attributes["string"] = "eight";
|
||||||
|
attributes["number"] = "8";
|
||||||
|
|
||||||
|
try {
|
||||||
|
string? password = yield Secret.password_lookupv (schema, attributes, null);
|
||||||
|
GLib.assert (password == "999");
|
||||||
|
|
||||||
|
bool removed = yield Secret.password_removev (schema, attributes, null);
|
||||||
|
GLib.assert (removed);
|
||||||
|
|
||||||
|
password = yield Secret.password_lookupv (schema, attributes, null);
|
||||||
|
GLib.assert (password == null);
|
||||||
|
} catch ( GLib.Error e ) {
|
||||||
|
GLib.error (e.message);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void test_remove_async () {
|
||||||
|
var loop = new GLib.MainLoop ();
|
||||||
|
test_remove_async_ex.begin ((obj, async_res) => {
|
||||||
|
loop.quit ();
|
||||||
|
});
|
||||||
|
loop.run ();
|
||||||
|
}
|
||||||
|
|
||||||
|
private static int main (string[] args) {
|
||||||
|
GLib.Test.init (ref args);
|
||||||
|
|
||||||
|
try {
|
||||||
|
MockService.start ("mock-service-normal.py");
|
||||||
|
} catch ( GLib.Error e ) {
|
||||||
|
GLib.error ("Unable to start mock service: %s", e.message);
|
||||||
|
}
|
||||||
|
|
||||||
|
{
|
||||||
|
schema = new Secret.Schema ("org.mock.Schema", Secret.SchemaFlags.NONE,
|
||||||
|
"number", Secret.SchemaAttributeType.INTEGER,
|
||||||
|
"string", Secret.SchemaAttributeType.STRING,
|
||||||
|
"even", Secret.SchemaAttributeType.BOOLEAN);
|
||||||
|
|
||||||
|
no_name_schema = new Secret.Schema ("unused.Schema.Name", Secret.SchemaFlags.DONT_MATCH_NAME,
|
||||||
|
"number", Secret.SchemaAttributeType.INTEGER,
|
||||||
|
"string", Secret.SchemaAttributeType.STRING);
|
||||||
|
}
|
||||||
|
|
||||||
|
GLib.Test.add_data_func ("/vala/lookup/sync", test_lookup_sync);
|
||||||
|
GLib.Test.add_data_func ("/vala/lookup/async", test_lookup_async);
|
||||||
|
GLib.Test.add_data_func ("/vala/lookup/no-name", test_lookup_no_name);
|
||||||
|
GLib.Test.add_data_func ("/vala/store/sync", test_store_sync);
|
||||||
|
GLib.Test.add_data_func ("/vala/store/async", test_store_async);
|
||||||
|
GLib.Test.add_data_func ("/vala/remove/sync", test_remove_sync);
|
||||||
|
GLib.Test.add_data_func ("/vala/remove/async", test_remove_async);
|
||||||
|
|
||||||
|
var res = GLib.Test.run ();
|
||||||
|
|
||||||
|
MockService.stop ();
|
||||||
|
schema = null;
|
||||||
|
|
||||||
|
return res;
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user