From 5e1f9173c397a04eca97a11d962fce824a2234a3 Mon Sep 17 00:00:00 2001 From: Matthias Clasen Date: Mon, 20 May 2013 06:38:41 -0400 Subject: [PATCH] Convert some gio tests to installed tests --- gio/tests/Makefile.am | 220 +++++++++++++++++++------------ gio/tests/{ => cert-tests}/cert-key.pem | 0 gio/tests/{ => cert-tests}/cert-list.pem | 0 gio/tests/{ => cert-tests}/cert1.pem | 0 gio/tests/{ => cert-tests}/cert2.pem | 0 gio/tests/{ => cert-tests}/cert3.pem | 0 gio/tests/{ => cert-tests}/key-cert.pem | 0 gio/tests/{ => cert-tests}/key.pem | 0 gio/tests/{ => cert-tests}/key8.pem | 0 gio/tests/{ => cert-tests}/nothing.pem | 0 gio/tests/contexts.c | 16 ++- gio/tests/g-icon.c | 14 +- gio/tests/gschema-compile.c | 17 ++- gio/tests/gsettings.c | 49 ++++--- gio/tests/resources.c | 42 ++++-- gio/tests/tls-certificate.c | 100 ++++++++++---- 16 files changed, 312 insertions(+), 146 deletions(-) rename gio/tests/{ => cert-tests}/cert-key.pem (100%) rename gio/tests/{ => cert-tests}/cert-list.pem (100%) rename gio/tests/{ => cert-tests}/cert1.pem (100%) rename gio/tests/{ => cert-tests}/cert2.pem (100%) rename gio/tests/{ => cert-tests}/cert3.pem (100%) rename gio/tests/{ => cert-tests}/key-cert.pem (100%) rename gio/tests/{ => cert-tests}/key.pem (100%) rename gio/tests/{ => cert-tests}/key8.pem (100%) rename gio/tests/{ => cert-tests}/nothing.pem (100%) diff --git a/gio/tests/Makefile.am b/gio/tests/Makefile.am index f7d7fe3..b877577 100644 --- a/gio/tests/Makefile.am +++ b/gio/tests/Makefile.am @@ -4,6 +4,8 @@ BUILT_SOURCES = include $(top_srcdir)/Makefile.decl +insttestdir = $(pkglibexecdir)/installed-tests + SUBDIRS = gdbus-object-manager-example services AM_CPPFLAGS = \ @@ -28,7 +30,7 @@ LDADD = \ $(top_builddir)/gmodule/libgmodule-2.0.la \ $(top_builddir)/gio/libgio-2.0.la -TEST_PROGS += \ +test_progs = \ io-stream \ memory-input-stream \ memory-output-stream \ @@ -70,6 +72,8 @@ TEST_PROGS += \ credentials \ $(NULL) +TEST_PROGS += $(test_progs) + if HAVE_DBUS_DAEMON TEST_PROGS += \ actions \ @@ -289,84 +293,105 @@ gapplication_SOURCES = gapplication.c gdbus-sessionbus.h gdbus-sessionbus.c gdbu gmenumodel_SOURCES = gmenumodel.c gdbus-sessionbus.h gdbus-sessionbus.c +TESTS_ENVIRONMENT = \ + GLIB_MKENUMS=../../gobject/glib-mkenums \ + GLIB_COMPILE_SCHEMAS=../glib-compile-schemas + schema_tests = \ - schema-tests/array-default-not-in-choices.gschema.xml \ - schema-tests/bad-choice.gschema.xml \ - schema-tests/bad-key.gschema.xml \ - schema-tests/bad-key2.gschema.xml \ - schema-tests/bad-key3.gschema.xml \ - schema-tests/bad-key4.gschema.xml \ - schema-tests/bad-type.gschema.xml \ - schema-tests/bare-alias.gschema.xml \ - schema-tests/choice-alias.gschema.xml \ - schema-tests/choice-bad.gschema.xml \ - schema-tests/choice-badtype.gschema.xml \ - schema-tests/choice-invalid-alias.gschema.xml \ - schema-tests/choice-missing-value.gschema.xml \ - schema-tests/choice-shadowed-alias.gschema.xml \ - schema-tests/choice-upside-down.gschema.xml \ - schema-tests/choice.gschema.xml \ - schema-tests/choices-wrong-type.gschema.xml \ - schema-tests/default-in-aliases.gschema.xml \ - schema-tests/default-not-in-choices.gschema.xml \ - schema-tests/default-out-of-range.gschema.xml \ - schema-tests/empty-key.gschema.xml \ - schema-tests/enum-with-aliases.gschema.xml \ - schema-tests/enum-with-bad-default.gschema.xml \ - schema-tests/enum-with-chained-alias.gschema.xml \ - schema-tests/enum-with-choice.gschema.xml \ - schema-tests/enum-with-invalid-alias.gschema.xml \ - schema-tests/enum-with-repeated-alias.gschema.xml \ - schema-tests/enum-with-repeated-nick.gschema.xml \ - schema-tests/enum-with-repeated-value.gschema.xml \ - schema-tests/enum-with-shadow-alias.gschema.xml \ - schema-tests/enum.gschema.xml \ - schema-tests/flags-aliased-default.gschema.xml \ - schema-tests/flags-bad-default.gschema.xml \ - schema-tests/flags-more-than-one-bit.gschema.xml \ - schema-tests/flags-with-enum-attr.gschema.xml \ - schema-tests/flags-with-enum-tag.gschema.xml \ - schema-tests/extend-and-shadow-indirect.gschema.xml \ - schema-tests/extend-and-shadow.gschema.xml \ - schema-tests/extend-missing.gschema.xml \ - schema-tests/extend-nonlist.gschema.xml \ - schema-tests/extend-self.gschema.xml \ - schema-tests/extend-wrong-list-indirect.gschema.xml \ - schema-tests/extend-wrong-list.gschema.xml \ - schema-tests/extending.gschema.xml \ - schema-tests/from-docs.gschema.xml \ - schema-tests/incomplete-list.gschema.xml \ - schema-tests/inherit-gettext-domain.gschema.xml \ - schema-tests/invalid-path.gschema.xml \ - schema-tests/key-in-list-indirect.gschema.xml \ - schema-tests/key-in-list.gschema.xml \ - schema-tests/list-of-missing.gschema.xml \ - schema-tests/missing-quotes.gschema.xml \ - schema-tests/no-default.gschema.xml \ - schema-tests/overflow.gschema.xml \ - schema-tests/override-missing.gschema.xml \ - schema-tests/override-range-error.gschema.xml \ - schema-tests/override-then-key.gschema.xml \ - schema-tests/override-twice.gschema.xml \ - schema-tests/override-type-error.gschema.xml \ - schema-tests/override.gschema.xml \ - schema-tests/range-badtype.gschema.xml \ - schema-tests/range-default-high.gschema.xml \ - schema-tests/range-default-low.gschema.xml \ - schema-tests/range-high-default.gschema.xml \ - schema-tests/range-low-default.gschema.xml \ - schema-tests/range-missing-max.gschema.xml \ - schema-tests/range-missing-min.gschema.xml \ - schema-tests/range-parse-error.gschema.xml \ - schema-tests/range-wrong-type.gschema.xml \ - schema-tests/range.gschema.xml \ - schema-tests/wrong-category.gschema.xml + array-default-not-in-choices.gschema.xml \ + bad-choice.gschema.xml \ + bad-key.gschema.xml \ + bad-key2.gschema.xml \ + bad-key3.gschema.xml \ + bad-key4.gschema.xml \ + bad-type.gschema.xml \ + bare-alias.gschema.xml \ + choice-alias.gschema.xml \ + choice-bad.gschema.xml \ + choice-badtype.gschema.xml \ + choice-invalid-alias.gschema.xml \ + choice-missing-value.gschema.xml \ + choice-shadowed-alias.gschema.xml \ + choice-upside-down.gschema.xml \ + choice.gschema.xml \ + choices-wrong-type.gschema.xml \ + default-in-aliases.gschema.xml \ + default-not-in-choices.gschema.xml \ + default-out-of-range.gschema.xml \ + empty-key.gschema.xml \ + enum-with-aliases.gschema.xml \ + enum-with-bad-default.gschema.xml \ + enum-with-chained-alias.gschema.xml \ + enum-with-choice.gschema.xml \ + enum-with-invalid-alias.gschema.xml \ + enum-with-repeated-alias.gschema.xml \ + enum-with-repeated-nick.gschema.xml \ + enum-with-repeated-value.gschema.xml \ + enum-with-shadow-alias.gschema.xml \ + enum.gschema.xml \ + flags-aliased-default.gschema.xml \ + flags-bad-default.gschema.xml \ + flags-more-than-one-bit.gschema.xml \ + flags-with-enum-attr.gschema.xml \ + flags-with-enum-tag.gschema.xml \ + extend-and-shadow-indirect.gschema.xml \ + extend-and-shadow.gschema.xml \ + extend-missing.gschema.xml \ + extend-nonlist.gschema.xml \ + extend-self.gschema.xml \ + extend-wrong-list-indirect.gschema.xml \ + extend-wrong-list.gschema.xml \ + extending.gschema.xml \ + from-docs.gschema.xml \ + incomplete-list.gschema.xml \ + inherit-gettext-domain.gschema.xml \ + invalid-path.gschema.xml \ + key-in-list-indirect.gschema.xml \ + key-in-list.gschema.xml \ + list-of-missing.gschema.xml \ + missing-quotes.gschema.xml \ + no-default.gschema.xml \ + overflow.gschema.xml \ + override-missing.gschema.xml \ + override-range-error.gschema.xml \ + override-then-key.gschema.xml \ + override-twice.gschema.xml \ + override-type-error.gschema.xml \ + override.gschema.xml \ + range-badtype.gschema.xml \ + range-default-high.gschema.xml \ + range-default-low.gschema.xml \ + range-high-default.gschema.xml \ + range-low-default.gschema.xml \ + range-missing-max.gschema.xml \ + range-missing-min.gschema.xml \ + range-parse-error.gschema.xml \ + range-wrong-type.gschema.xml \ + range.gschema.xml \ + wrong-category.gschema.xml \ + $(NULL) + +schema_test_files = $(addprefix schema-tests/,$(schema_tests)) proxy_LDADD = $(LDADD) \ $(top_builddir)/gthread/libgthread-2.0.la tls_certificate_SOURCES = tls-certificate.c gtesttlsbackend.c gtesttlsbackend.h +cert_tests = \ + cert1.pem \ + cert2.pem \ + cert3.pem \ + cert-key.pem \ + cert-list.pem \ + key8.pem \ + key-cert.pem \ + key.pem \ + nothing.pem \ + $(NULL) + +cert_test_files = $(addprefix cert-tests/,$(cert_tests)) + # ----------------------------------------------------------------------------- if OS_UNIX @@ -395,22 +420,14 @@ EXTRA_DIST += \ testenum.h \ enums.xml.template \ de.po \ - $(schema_tests) \ + $(schema_test_files) \ org.gtk.schemasourcecheck.gschema.xml \ appinfo-test.desktop \ appinfo-test2.desktop \ appinfo-test-gnome.desktop \ appinfo-test-notgnome.desktop \ test-codegen.xml \ - cert1.pem \ - cert2.pem \ - cert3.pem \ - key.pem \ - key8.pem \ - key-cert.pem \ - cert-key.pem \ - cert-list.pem \ - nothing.pem \ + $(cert_test_files) \ test.gresource.xml \ test1.txt \ test2.gresource.xml \ @@ -446,10 +463,14 @@ plugin_resources.c: test4.gresource.xml Makefile $(shell $(glib_compile_resource test.gresource: test.gresource.xml Makefile $(shell $(glib_compile_resources) --sourcedir=$(srcdir) --generate-dependencies $(srcdir)/test.gresource.xml) $(AM_V_GEN) $(glib_compile_resources) --target=$@ --sourcedir=$(srcdir) $< +if BUILDOPT_INSTALL_TESTS +insttest_LTLIBRARIES = libresourceplugin.la +else noinst_LTLIBRARIES = libresourceplugin.la +endif libresourceplugin_la_SOURCES = resourceplugin.c plugin_resources.c -libresourceplugin_la_LDFLAGS = -avoid-version -module $(no_undefined) -rpath $(libdir) +libresourceplugin_la_LDFLAGS = -avoid-version -module $(no_undefined) -rpath $(insttestdir) libresourceplugin_la_LIBADD = $(LDADD) CLEANFILES = gdbus-test-codegen-generated.[ch] gdbus-test-codegen-generated-doc-*.xml test_resources2.[ch] plugin_resources.c @@ -467,3 +488,36 @@ DISTCLEANFILES = \ distclean-local: rm -rf xdgdatahome xdgdatadir + +test_files = \ + contexts.c \ + g-icon.c \ + enums.xml.template \ + testenum.h \ + org.gtk.test.gschema.xml \ + org.gtk.schemasourcecheck.gschema.xml \ + test.gresource \ + $(NULL) + +if BUILDOPT_INSTALL_TESTS +insttest_PROGRAMS = $(test_progs) + +schematestdir = $(insttestdir)/schema-tests +schematest_DATA = $(schema_test_files) + +certtestdir = $(insttestdir)/cert-tests +certtest_DATA = $(cert_test_files) + +testdatadir = $(insttestdir) +testdata_DATA = $(test_files) + +testmetadir = $(datadir)/installed-tests/$(PACKAGE) +testmeta_DATA = $(test_progs:=.test) + +%.test: % Makefile + $(AM_V_GEN) (echo '[Test]' > $@.tmp; \ + echo 'Type=session' >> $@.tmp; \ + echo 'Exec=env G_TEST_DATA=$(pkglibexecdir)/installed-tests $(pkglibexecdir)/installed-tests/$<' >> $@.tmp; \ + mv $@.tmp $@) + +endif diff --git a/gio/tests/cert-key.pem b/gio/tests/cert-tests/cert-key.pem similarity index 100% rename from gio/tests/cert-key.pem rename to gio/tests/cert-tests/cert-key.pem diff --git a/gio/tests/cert-list.pem b/gio/tests/cert-tests/cert-list.pem similarity index 100% rename from gio/tests/cert-list.pem rename to gio/tests/cert-tests/cert-list.pem diff --git a/gio/tests/cert1.pem b/gio/tests/cert-tests/cert1.pem similarity index 100% rename from gio/tests/cert1.pem rename to gio/tests/cert-tests/cert1.pem diff --git a/gio/tests/cert2.pem b/gio/tests/cert-tests/cert2.pem similarity index 100% rename from gio/tests/cert2.pem rename to gio/tests/cert-tests/cert2.pem diff --git a/gio/tests/cert3.pem b/gio/tests/cert-tests/cert3.pem similarity index 100% rename from gio/tests/cert3.pem rename to gio/tests/cert-tests/cert3.pem diff --git a/gio/tests/key-cert.pem b/gio/tests/cert-tests/key-cert.pem similarity index 100% rename from gio/tests/key-cert.pem rename to gio/tests/cert-tests/key-cert.pem diff --git a/gio/tests/key.pem b/gio/tests/cert-tests/key.pem similarity index 100% rename from gio/tests/key.pem rename to gio/tests/cert-tests/key.pem diff --git a/gio/tests/key8.pem b/gio/tests/cert-tests/key8.pem similarity index 100% rename from gio/tests/key8.pem rename to gio/tests/cert-tests/key8.pem diff --git a/gio/tests/nothing.pem b/gio/tests/cert-tests/nothing.pem similarity index 100% rename from gio/tests/nothing.pem rename to gio/tests/cert-tests/nothing.pem diff --git a/gio/tests/contexts.c b/gio/tests/contexts.c index 14175b4..a69e46c 100644 --- a/gio/tests/contexts.c +++ b/gio/tests/contexts.c @@ -2,7 +2,9 @@ #include #include -#define TEST_FILE (SRCDIR "/Makefile.am") +static const gchar *datapath; +static const gchar *test_file; + char *test_file_buffer; gsize test_file_size; static char async_read_buffer[8192]; @@ -105,7 +107,7 @@ test1_thread (gpointer user_data) g_main_context_push_thread_default (context); g_assert (g_main_context_get_thread_default () == context); - file = g_file_new_for_path (TEST_FILE); + file = g_file_new_for_path (test_file); g_assert (g_file_supports_thread_contexts (file)); loop = g_main_loop_new (context, FALSE); @@ -146,7 +148,7 @@ test_context_independence (void) g_main_context_push_thread_default (context); g_assert (g_main_context_get_thread_default () == context); - file = g_file_new_for_path (TEST_FILE); + file = g_file_new_for_path (test_file); g_assert (g_file_supports_thread_contexts (file)); /* Add a timeout to the main loop, to fail immediately if it gets run */ @@ -185,9 +187,15 @@ main (int argc, char **argv) GError *error = NULL; int ret; + if (g_getenv ("G_TEST_DATA")) + datapath = g_getenv ("G_TEST_DATA"); + else + datapath = SRCDIR; + g_test_init (&argc, &argv, NULL); - g_file_get_contents (TEST_FILE, &test_file_buffer, + test_file = g_strconcat (datapath, "/contexts.c", NULL); + g_file_get_contents (test_file, &test_file_buffer, &test_file_size, &error); g_assert_no_error (error); diff --git a/gio/tests/g-icon.c b/gio/tests/g-icon.c index 0fdc58e..8e18a25 100644 --- a/gio/tests/g-icon.c +++ b/gio/tests/g-icon.c @@ -27,6 +27,8 @@ #include #include +static const gchar *datapath; + static void test_g_icon_to_string (void) { @@ -465,8 +467,11 @@ test_file_icon (void) GError *error; GInputStream *stream; gchar *str; + gchar *path; + + path = g_strconcat (datapath, "/g-icon.c", NULL); - file = g_file_new_for_path (SRCDIR "/g-icon.c"); + file = g_file_new_for_path (path); icon = g_file_icon_new (file); g_object_unref (file); @@ -484,12 +489,19 @@ test_file_icon (void) g_object_unref (icon); g_object_unref (icon2); + + g_free (path); } int main (int argc, char *argv[]) { + if (g_getenv ("G_TEST_DATA")) + datapath = g_getenv ("G_TEST_DATA"); + else + datapath = SRCDIR; + g_test_init (&argc, &argv, NULL); g_test_add_func ("/icons/to-string", test_g_icon_to_string); diff --git a/gio/tests/gschema-compile.c b/gio/tests/gschema-compile.c index e29137d..ab4adf7 100644 --- a/gio/tests/gschema-compile.c +++ b/gio/tests/gschema-compile.c @@ -5,6 +5,9 @@ #include #include +const gchar *datapath; +const gchar *glib_compile_schemas; + typedef struct { const gchar *name; const gchar *opt; @@ -16,9 +19,9 @@ test_schema_do_compile (gpointer data) { SchemaTest *test = (SchemaTest *) data; gchar *filename = g_strconcat (test->name, ".gschema.xml", NULL); - gchar *path = g_build_filename (SRCDIR, "schema-tests", filename, NULL); + gchar *path = g_build_filename (datapath, "schema-tests", filename, NULL); gchar *argv[] = { - "../glib-compile-schemas", + (gchar*)glib_compile_schemas, "--strict", "--dry-run", "--schema-file", path, @@ -139,6 +142,16 @@ main (int argc, char *argv[]) setlocale (LC_ALL, ""); + if (g_getenv ("G_TEST_DATA")) + datapath = g_getenv ("G_TEST_DATA"); + else + datapath = SRCDIR; + + if (g_getenv ("GLIB_COMPILE_SCHEMAS")) + glib_compile_schemas = g_getenv ("GLIB_COMPILE_SCHEMAS"); + else + glib_compile_schemas = "/usr/bin/glib-compile-schemas"; + g_test_init (&argc, &argv, NULL); for (i = 0; i < G_N_ELEMENTS (tests); ++i) diff --git a/gio/tests/gsettings.c b/gio/tests/gsettings.c index 3135234..61e13e8 100644 --- a/gio/tests/gsettings.c +++ b/gio/tests/gsettings.c @@ -8,6 +8,7 @@ #include "testenum.h" +static const gchar *datapath; static gboolean backend_set; /* These tests rely on the schemas in org.gtk.test.gschema.xml @@ -2247,40 +2248,58 @@ main (int argc, char *argv[]) setlocale (LC_ALL, ""); + if (g_getenv ("G_TEST_DATA")) + datapath = g_getenv ("G_TEST_DATA"); + else + datapath = SRCDIR; + g_test_init (&argc, &argv, NULL); if (!g_test_subprocess ()) { + const gchar *glib_mkenums; + const gchar *glib_compile_schemas; + gchar *cmdline; + backend_set = g_getenv ("GSETTINGS_BACKEND") != NULL; - g_setenv ("XDG_DATA_DIRS", ".", TRUE); + g_setenv ("XDG_DATA_DIRS", datapath, TRUE); g_setenv ("GSETTINGS_SCHEMA_DIR", ".", TRUE); if (!backend_set) g_setenv ("GSETTINGS_BACKEND", "memory", TRUE); - g_remove ("org.gtk.test.enums.xml"); - g_assert (g_spawn_command_line_sync ("../../gobject/glib-mkenums " - "--template " SRCDIR "/enums.xml.template " - SRCDIR "/testenum.h", - &enums, NULL, &result, NULL)); + if (g_getenv ("GLIB_MKENUMS")) + glib_mkenums = g_getenv ("GLIB_MKENUMS"); + else + glib_mkenums = "glib-mkenums"; + + cmdline = g_strdup_printf ("%s --template %s/enums.xml.template %s/testenum.h", glib_mkenums, datapath, datapath); + + g_assert (g_spawn_command_line_sync (cmdline, &enums, NULL, &result, NULL)); g_assert (result == 0); g_assert (g_file_set_contents ("org.gtk.test.enums.xml", enums, -1, NULL)); g_free (enums); - g_remove ("gschemas.compiled"); - g_assert (g_spawn_command_line_sync ("../glib-compile-schemas --targetdir=. " - "--schema-file=org.gtk.test.enums.xml " - "--schema-file=" SRCDIR "/org.gtk.test.gschema.xml", - NULL, NULL, &result, NULL)); + g_free (cmdline); + + if (g_getenv ("GLIB_COMPILE_SCHEMAS")) + glib_compile_schemas = g_getenv ("GLIB_COMPILE_SCHEMAS"); + else + glib_compile_schemas = "glib-compile-schemas"; + + cmdline = g_strdup_printf ("%s --targetdir=. --schema-file=org.gtk.test.enums.xml --schema-file=%s/org.gtk.test.gschema.xml", glib_compile_schemas, datapath); + g_assert (g_spawn_command_line_sync (cmdline, NULL, NULL, &result, NULL)); g_assert (result == 0); + g_free (cmdline); - g_remove ("schema-source/gschemas.compiled"); g_mkdir ("schema-source", 0777); - g_assert (g_spawn_command_line_sync ("../glib-compile-schemas --targetdir=schema-source " - "--schema-file=" SRCDIR "/org.gtk.schemasourcecheck.gschema.xml", - NULL, NULL, &result, NULL)); + g_remove ("schema-source/gschemas.compiled"); + + cmdline = g_strdup_printf ("%s --targetdir=schema-source --schema-file=%s/org.gtk.schemasourcecheck.gschema.xml", glib_compile_schemas, datapath); + g_assert (g_spawn_command_line_sync (cmdline, NULL, NULL, &result, NULL)); g_assert (result == 0); + g_free (cmdline); } g_test_add_func ("/gsettings/basic", test_basic); diff --git a/gio/tests/resources.c b/gio/tests/resources.c index f7a7e83..63ace3d 100644 --- a/gio/tests/resources.c +++ b/gio/tests/resources.c @@ -23,6 +23,8 @@ #include "gconstructor.h" #include "test_resources2.h" +const gchar *datapath; + static void test_resource (GResource *resource) { @@ -143,15 +145,18 @@ test_resource_file (void) { GResource *resource; GError *error = NULL; + gchar *path; resource = g_resource_load ("not-there", &error); g_assert (resource == NULL); g_assert_error (error, G_FILE_ERROR, G_FILE_ERROR_NOENT); g_clear_error (&error); - resource = g_resource_load ("test.gresource", &error); + path = g_build_filename (datapath, "test.gresource", NULL); + resource = g_resource_load (path, &error); g_assert (resource != NULL); g_assert_no_error (error); + g_free (path); test_resource (resource); g_resource_unref (resource); @@ -166,10 +171,12 @@ test_resource_data (void) char *content; gsize content_size; GBytes *data; + gchar *path; - loaded_file = g_file_get_contents ("test.gresource", &content, &content_size, - NULL); + path = g_build_filename (datapath, "test.gresource", NULL); + loaded_file = g_file_get_contents (path, &content, &content_size, NULL); g_assert (loaded_file); + g_free (path); data = g_bytes_new_take (content, content_size); resource = g_resource_new_from_data (data, &error); @@ -194,10 +201,13 @@ test_resource_registered (void) char **children; GInputStream *in; char buffer[128]; + gchar *path; - resource = g_resource_load ("test.gresource", &error); + path = g_build_filename (datapath, "test.gresource", NULL); + resource = g_resource_load (path, &error); g_assert (resource != NULL); g_assert_no_error (error); + g_free (path); found = g_resources_get_info ("/test1.txt", G_RESOURCE_LOOKUP_FLAGS_NONE, @@ -396,14 +406,11 @@ test_resource_module (void) if (g_module_supported ()) { - char *dir, *path; - - dir = g_get_current_dir (); + char *path; - path = g_strconcat (dir, G_DIR_SEPARATOR_S "libresourceplugin", NULL); + path = g_build_filename (datapath, "libresourceplugin", NULL); module = g_io_module_new (path); g_free (path); - g_free (dir); error = NULL; @@ -456,11 +463,13 @@ test_uri_query_info (void) GBytes *data; GFile *file; GFileInfo *info; + gchar *path; const char *content_type; - loaded_file = g_file_get_contents ("test.gresource", &content, &content_size, - NULL); + path = g_build_filename (datapath, "test.gresource", NULL); + loaded_file = g_file_get_contents (path, &content, &content_size, NULL); g_assert (loaded_file); + g_free (path); data = g_bytes_new_take (content, content_size); resource = g_resource_new_from_data (data, &error); @@ -507,10 +516,12 @@ test_uri_file (void) gchar buf[1024]; gboolean ret; gssize skipped; + gchar *path; - loaded_file = g_file_get_contents ("test.gresource", &content, &content_size, - NULL); + path = g_build_filename (datapath, "test.gresource", NULL); + loaded_file = g_file_get_contents (path, &content, &content_size, NULL); g_assert (loaded_file); + g_free (path); data = g_bytes_new_take (content, content_size); resource = g_resource_new_from_data (data, &error); @@ -630,6 +641,11 @@ int main (int argc, char *argv[]) { + if (g_getenv ("G_TEST_DATA")) + datapath = g_getenv ("G_TEST_DATA"); + else + datapath = SRCDIR; + g_test_init (&argc, &argv, NULL); _g_test2_register_resource (); diff --git a/gio/tests/tls-certificate.c b/gio/tests/tls-certificate.c index 4db07b3..d186d90 100644 --- a/gio/tests/tls-certificate.c +++ b/gio/tests/tls-certificate.c @@ -26,6 +26,8 @@ #include "gtesttlsbackend.h" +gchar *datapath; + typedef struct { gchar *cert_pems[3]; @@ -40,12 +42,15 @@ pem_parser (const Reference *ref) gchar *pem; gchar *parsed_cert_pem = NULL; const gchar *parsed_key_pem = NULL; + gchar *path; GError *error = NULL; /* Check PEM parsing in certificate, private key order. */ - g_file_get_contents (SRCDIR "/cert-key.pem", &pem, NULL, &error); + path = g_build_filename (datapath, "cert-key.pem", NULL); + g_file_get_contents (path, &pem, NULL, &error); g_assert_no_error (error); g_assert (pem); + g_free (path); cert = g_tls_certificate_new_from_pem (pem, -1, &error); g_assert_no_error (error); @@ -70,9 +75,11 @@ pem_parser (const Reference *ref) g_free (pem); /* Check PEM parsing in private key, certificate order */ - g_file_get_contents (SRCDIR "/key-cert.pem", &pem, NULL, &error); + path = g_build_filename (datapath, "key-cert.pem", NULL); + g_file_get_contents (path, &pem, NULL, &error); g_assert_no_error (error); g_assert (pem); + g_free (path); cert = g_tls_certificate_new_from_pem (pem, -1, &error); g_assert_no_error (error); @@ -92,9 +99,11 @@ pem_parser (const Reference *ref) g_object_unref (cert); /* Check certificate only PEM */ - g_file_get_contents (SRCDIR "/cert1.pem", &pem, NULL, &error); + path = g_build_filename (datapath, "cert1.pem", NULL); + g_file_get_contents (path, &pem, NULL, &error); g_assert_no_error (error); g_assert (pem); + g_free (path); cert = g_tls_certificate_new_from_pem (pem, -1, &error); g_assert_no_error (error); @@ -113,9 +122,11 @@ pem_parser (const Reference *ref) g_object_unref (cert); /* Check error with private key only PEM */ - g_file_get_contents (SRCDIR "/key.pem", &pem, NULL, &error); + path = g_build_filename (datapath, "key.pem", NULL); + g_file_get_contents (path, &pem, NULL, &error); g_assert_no_error (error); g_assert (pem); + g_free (path); cert = g_tls_certificate_new_from_pem (pem, -1, &error); g_assert_error (error, G_TLS_ERROR, G_TLS_ERROR_BAD_CERTIFICATE); @@ -130,11 +141,14 @@ from_file (const Reference *ref) GTlsCertificate *cert; gchar *parsed_cert_pem = NULL; const gchar *parsed_key_pem = NULL; + gchar *path; GError *error = NULL; - cert = g_tls_certificate_new_from_file (SRCDIR "/key-cert.pem", &error); + path = g_build_filename (datapath, "key-cert.pem", NULL); + cert = g_tls_certificate_new_from_file (path, &error); g_assert_no_error (error); g_assert (cert); + g_free (path); g_object_get (cert, "certificate-pem", &parsed_cert_pem, @@ -155,13 +169,16 @@ from_files (const Reference *ref) GTlsCertificate *cert; gchar *parsed_cert_pem = NULL; const gchar *parsed_key_pem = NULL; + gchar *path, *path2; GError *error = NULL; - cert = g_tls_certificate_new_from_files (SRCDIR "/cert1.pem", - SRCDIR "/key.pem", - &error); + path = g_build_filename (datapath, "cert1.pem", NULL); + path2 = g_build_filename (datapath, "key.pem", NULL); + cert = g_tls_certificate_new_from_files (path, path2, &error); g_assert_no_error (error); g_assert (cert); + g_free (path); + g_free (path2); g_object_get (cert, "certificate-pem", &parsed_cert_pem, @@ -176,29 +193,32 @@ from_files (const Reference *ref) g_object_unref (cert); /* Missing private key */ - cert = g_tls_certificate_new_from_files (SRCDIR "/cert1.pem", - SRCDIR "/cert2.pem", - &error); + path = g_build_filename (datapath, "cert1.pem", NULL); + path2 = g_build_filename (datapath, "cert2.pem", NULL); + cert = g_tls_certificate_new_from_files (path, path2, &error); g_assert_error (error, G_TLS_ERROR, G_TLS_ERROR_BAD_CERTIFICATE); g_clear_error (&error); g_assert (cert == NULL); + g_free (path); + g_free (path2); /* Missing certificate */ - cert = g_tls_certificate_new_from_files (SRCDIR "/key.pem", - SRCDIR "/key.pem", - &error); + path = g_build_filename (datapath, "key.pem", NULL); + cert = g_tls_certificate_new_from_files (path, path, &error); g_assert_error (error, G_TLS_ERROR, G_TLS_ERROR_BAD_CERTIFICATE); g_clear_error (&error); g_assert (cert == NULL); + g_free (path); /* Using this method twice with a file containing both private key and - * certificate as a way to inforce private key presence is a fair use */ - cert = g_tls_certificate_new_from_files (SRCDIR "/key-cert.pem", - SRCDIR "/key-cert.pem", - &error); + * certificate as a way to inforce private key presence is a fair use + */ + path = g_build_filename (datapath, "key-cert.pem", NULL); + cert = g_tls_certificate_new_from_files (path, path, &error); g_assert_no_error (error); g_assert (cert); g_object_unref (cert); + g_free (path); } @@ -208,13 +228,16 @@ from_files_pkcs8 (const Reference *ref) GTlsCertificate *cert; gchar *parsed_cert_pem = NULL; const gchar *parsed_key_pem = NULL; + gchar *path, *path2; GError *error = NULL; - cert = g_tls_certificate_new_from_files (SRCDIR "/cert1.pem", - SRCDIR "/key8.pem", - &error); + path = g_build_filename (datapath, "cert1.pem", NULL); + path2 = g_build_filename (datapath, "key8.pem", NULL); + cert = g_tls_certificate_new_from_files (path, path2, &error); g_assert_no_error (error); g_assert (cert); + g_free (path); + g_free (path2); g_object_get (cert, "certificate-pem", &parsed_cert_pem, @@ -234,11 +257,14 @@ list_from_file (const Reference *ref) { GList *list, *l; GError *error = NULL; + gchar *path; int i; - list = g_tls_certificate_list_new_from_file (SRCDIR "/cert-list.pem", &error); + path = g_build_filename (datapath, "cert-list.pem", NULL); + list = g_tls_certificate_list_new_from_file (path, &error); g_assert_no_error (error); g_assert_cmpint (g_list_length (list), ==, 3); + g_free (path); l = list; for (i = 0; i < 3; i++) @@ -256,9 +282,11 @@ list_from_file (const Reference *ref) g_list_free_full (list, g_object_unref); /* Empty list is not an error */ - list = g_tls_certificate_list_new_from_file (SRCDIR "/nothing.pem", &error); + path = g_build_filename (datapath, "nothing.pem", NULL); + list = g_tls_certificate_list_new_from_file (path, &error); g_assert_no_error (error); g_assert_cmpint (g_list_length (list), ==, 0); + g_free (path); } int @@ -268,27 +296,43 @@ main (int argc, int rtv; Reference ref; GError *error = NULL; + gchar *path; + + if (g_getenv ("G_TEST_DATA")) + datapath = g_build_filename (g_getenv ("G_TEST_DATA"), "cert-tests", NULL); + else + datapath = g_build_filename (SRCDIR, "cert-tests", NULL); g_test_init (&argc, &argv, NULL); _g_test_tls_backend_get_type (); /* Load reference PEM */ - g_file_get_contents (SRCDIR "/cert1.pem", &ref.cert_pems[0], NULL, &error); + path = g_build_filename (datapath, "cert1.pem", NULL); + g_file_get_contents (path, &ref.cert_pems[0], NULL, &error); g_assert_no_error (error); g_assert (ref.cert_pems[0]); - g_file_get_contents (SRCDIR "/cert2.pem", &ref.cert_pems[1], NULL, &error); + g_free (path); + path = g_build_filename (datapath, "cert2.pem", NULL); + g_file_get_contents (path, &ref.cert_pems[1], NULL, &error); g_assert_no_error (error); g_assert (ref.cert_pems[1]); - g_file_get_contents (SRCDIR "/cert3.pem", &ref.cert_pems[2], NULL, &error); + g_free (path); + path = g_build_filename (datapath, "cert3.pem", NULL); + g_file_get_contents (path, &ref.cert_pems[2], NULL, &error); g_assert_no_error (error); g_assert (ref.cert_pems[2]); - g_file_get_contents (SRCDIR "/key.pem", &ref.key_pem, NULL, &error); + g_free (path); + path = g_build_filename (datapath, "key.pem", NULL); + g_file_get_contents (path, &ref.key_pem, NULL, &error); g_assert_no_error (error); g_assert (ref.key_pem); - g_file_get_contents (SRCDIR "/key8.pem", &ref.key8_pem, NULL, &error); + g_free (path); + path = g_build_filename (datapath, "key8.pem", NULL); + g_file_get_contents (path, &ref.key8_pem, NULL, &error); g_assert_no_error (error); g_assert (ref.key8_pem); + g_free (path); g_test_add_data_func ("/tls-certificate/pem-parser", &ref, (GTestDataFunc)pem_parser); -- 2.7.4