From c63cf19d9a8a6ae315a7f9a3fe4ea60c8cf5dece Mon Sep 17 00:00:00 2001 From: Richard Purdie 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(). Signed-off-by: Richard Purdie --- 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..093335d81 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..38f85ca65 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 #include + +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 +void cleanup_snapfiles (const gchar *path); + void create_fake_snap_yaml (const char *snap_path, gboolean is_classic);