| From f47503cc5ae10de6dee319ba6cff257eddabf33e Mon Sep 17 00:00:00 2001 |
| From: Richard Purdie <richard.purdie@linuxfoundation.org> |
| Date: Tue, 30 May 2023 11:52:38 +0100 |
| Subject: [PATCH] gio/tests/portal-support: Fix snap test ordering race |
| |
| When the gnome test runner executes the tests, the test appear to execute in disk |
| order. This means it sometimes works and sometimes we see breakage in portal-support-snap |
| and portal-support-snap-classic. |
| |
| The issue is that some tests create config files but some don't. If they run |
| in the wrong order, tests see config files they shouldn't and break. |
| |
| Fix this by deleting the files after each test run, properly cleaning up after |
| themselves. The cleanup code is based upon gtestutils.c:rm_rf(). |
| |
| Upstream-Status: Backport [https://gitlab.gnome.org/GNOME/glib/-/commit/c63cf19d9a8a6ae315a7f9a3fe4ea60c8cf5dece] |
| |
| Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org> |
| --- |
| gio/tests/portal-support-snap-classic.c | 3 +++ |
| gio/tests/portal-support-snap.c | 3 +++ |
| gio/tests/portal-support-utils.c | 27 +++++++++++++++++++++++++ |
| gio/tests/portal-support-utils.h | 2 ++ |
| 4 files changed, 35 insertions(+) |
| |
| diff --git a/gio/tests/portal-support-snap-classic.c b/gio/tests/portal-support-snap-classic.c |
| index 8c0ed90c2..5b67865e7 100644 |
| --- a/gio/tests/portal-support-snap-classic.c |
| +++ b/gio/tests/portal-support-snap-classic.c |
| @@ -66,6 +66,9 @@ tests_teardown (SetupData *setup_data, |
| else |
| g_unsetenv ("SNAP"); |
| |
| + cleanup_snapfiles (setup_data->snap_path); |
| + cleanup_snapfiles (setup_data->bin_path); |
| + |
| g_clear_pointer (&setup_data->old_path, g_free); |
| g_clear_pointer (&setup_data->old_snap, g_free); |
| } |
| diff --git a/gio/tests/portal-support-snap.c b/gio/tests/portal-support-snap.c |
| index 7dd14d82f..cd904678f 100644 |
| --- a/gio/tests/portal-support-snap.c |
| +++ b/gio/tests/portal-support-snap.c |
| @@ -67,6 +67,9 @@ tests_teardown (SetupData *setup_data, |
| else |
| g_unsetenv ("SNAP"); |
| |
| + cleanup_snapfiles (setup_data->snap_path); |
| + cleanup_snapfiles (setup_data->bin_path); |
| + |
| g_clear_pointer (&setup_data->old_path, g_free); |
| g_clear_pointer (&setup_data->old_snap, g_free); |
| } |
| diff --git a/gio/tests/portal-support-utils.c b/gio/tests/portal-support-utils.c |
| index ae7073a3a..b7ee22630 100644 |
| --- a/gio/tests/portal-support-utils.c |
| +++ b/gio/tests/portal-support-utils.c |
| @@ -26,6 +26,33 @@ |
| #include <glib.h> |
| #include <glib/gstdio.h> |
| |
| + |
| +void |
| +cleanup_snapfiles (const gchar *path) |
| +{ |
| + GDir *dir = NULL; |
| + const gchar *entry; |
| + |
| + dir = g_dir_open (path, 0, NULL); |
| + if (dir == NULL) |
| + { |
| + /* Assume it’s a file. Ignore failure. */ |
| + (void) g_remove (path); |
| + return; |
| + } |
| + |
| + while ((entry = g_dir_read_name (dir)) != NULL) |
| + { |
| + gchar *sub_path = g_build_filename (path, entry, NULL); |
| + cleanup_snapfiles (sub_path); |
| + g_free (sub_path); |
| + } |
| + |
| + g_dir_close (dir); |
| + |
| + g_rmdir (path); |
| +} |
| + |
| void |
| create_fake_snapctl (const char *path, |
| const char *supported_op) |
| diff --git a/gio/tests/portal-support-utils.h b/gio/tests/portal-support-utils.h |
| index 40c035b43..defbdcd4e 100644 |
| --- a/gio/tests/portal-support-utils.h |
| +++ b/gio/tests/portal-support-utils.h |
| @@ -23,6 +23,8 @@ |
| |
| #include <glib.h> |
| |
| +void cleanup_snapfiles (const gchar *path); |
| + |
| void create_fake_snap_yaml (const char *snap_path, |
| gboolean is_classic); |
| |
| -- |
| 2.39.2 |
| |