From d72aac4be901e2d721fe6cd477faf9a2ad5b5b72 Mon Sep 17 00:00:00 2001 From: Richard Purdie Date: Sat, 27 May 2023 16:07:31 +0100 Subject: glib: Fix ptest race issue gio/tests/portal: Fix 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 we sometimes 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. There are probably better ways to handle this but this patch should at least let us check this is the issue. I've tried to report upstream but their issue tracker account creation is struggling and I can't get my account to work. (From OE-Core rev: bff17171841fd15fb6084262e397c736005f7e3b) Signed-off-by: Richard Purdie --- .../recipes-core/glib-2.0/glib-2.0/fix-ptest.patch | 166 +++++++++++++++++++++ meta/recipes-core/glib-2.0/glib-2.0_2.76.2.bb | 1 + 2 files changed, 167 insertions(+) create mode 100644 meta/recipes-core/glib-2.0/glib-2.0/fix-ptest.patch (limited to 'meta') diff --git a/meta/recipes-core/glib-2.0/glib-2.0/fix-ptest.patch b/meta/recipes-core/glib-2.0/glib-2.0/fix-ptest.patch new file mode 100644 index 0000000000..1ae98be707 --- /dev/null +++ b/meta/recipes-core/glib-2.0/glib-2.0/fix-ptest.patch @@ -0,0 +1,166 @@ +gio/tests/portal: Fix 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 we sometimes 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. There are probably better ways to handle this but this patch should +at least let us check this is the issue. + +I've tried to report upstream but their issue tracker account creation is struggling +and I can't get my account to work. + +Upstream-Status: Pending + +Index: glib-2.76.2/gio/tests/portal-support-snap-classic.c +=================================================================== +--- glib-2.76.2.orig/gio/tests/portal-support-snap-classic.c ++++ glib-2.76.2/gio/tests/portal-support-snap-classic.c +@@ -89,6 +89,9 @@ test_portal_support_snap_none (SetupData + g_assert_false (glib_should_use_portal ()); + g_assert_true (glib_network_available_in_sandbox ()); + g_assert_true (glib_has_dconf_access_in_sandbox ()); ++ ++ cleanup_snapfiles (setup->snap_path); ++ cleanup_snapfiles (setup->bin_path); + } + + static void +@@ -101,6 +104,9 @@ test_portal_support_snap_all (SetupData + g_assert_false (glib_should_use_portal ()); + g_assert_true (glib_network_available_in_sandbox ()); + g_assert_true (glib_has_dconf_access_in_sandbox ()); ++ ++ cleanup_snapfiles (setup->snap_path); ++ cleanup_snapfiles (setup->bin_path); + } + + int +Index: glib-2.76.2/gio/tests/portal-support-snap.c +=================================================================== +--- glib-2.76.2.orig/gio/tests/portal-support-snap.c ++++ glib-2.76.2/gio/tests/portal-support-snap.c +@@ -80,6 +80,8 @@ test_portal_support_snap_no_snapctl (Set + g_assert_false (glib_should_use_portal ()); + g_assert_false (glib_network_available_in_sandbox ()); + g_assert_false (glib_has_dconf_access_in_sandbox ()); ++ ++ cleanup_snapfiles (setup->snap_path); + } + + static void +@@ -92,6 +94,9 @@ test_portal_support_snap_none (SetupData + g_assert_false (glib_should_use_portal ()); + g_assert_false (glib_network_available_in_sandbox ()); + g_assert_false (glib_has_dconf_access_in_sandbox ()); ++ ++ cleanup_snapfiles (setup->snap_path); ++ cleanup_snapfiles (setup->bin_path); + } + + static void +@@ -104,6 +109,9 @@ test_portal_support_snap_all (SetupData + g_assert_true (glib_should_use_portal ()); + g_assert_true (glib_network_available_in_sandbox ()); + g_assert_true (glib_has_dconf_access_in_sandbox ()); ++ ++ cleanup_snapfiles (setup->snap_path); ++ cleanup_snapfiles (setup->bin_path); + } + + static void +@@ -116,6 +124,9 @@ test_portal_support_snap_desktop_only (S + g_assert_true (glib_should_use_portal ()); + g_assert_true (glib_network_available_in_sandbox ()); + g_assert_false (glib_has_dconf_access_in_sandbox ()); ++ ++ cleanup_snapfiles (setup->snap_path); ++ cleanup_snapfiles (setup->bin_path); + } + + static void +@@ -128,6 +139,9 @@ test_portal_support_snap_network_only (S + g_assert_false (glib_should_use_portal ()); + g_assert_true (glib_network_available_in_sandbox ()); + g_assert_false (glib_has_dconf_access_in_sandbox ()); ++ ++ cleanup_snapfiles (setup->snap_path); ++ cleanup_snapfiles (setup->bin_path); + } + + static void +@@ -140,6 +154,9 @@ test_portal_support_snap_gsettings_only + g_assert_false (glib_should_use_portal ()); + g_assert_false (glib_network_available_in_sandbox ()); + g_assert_true (glib_has_dconf_access_in_sandbox ()); ++ ++ cleanup_snapfiles (setup->snap_path); ++ cleanup_snapfiles (setup->bin_path); + } + + static void +@@ -182,6 +199,9 @@ test_portal_support_snap_updates_dynamic + g_assert_false (glib_should_use_portal ()); + g_assert_false (glib_network_available_in_sandbox ()); + g_assert_false (glib_has_dconf_access_in_sandbox ()); ++ ++ cleanup_snapfiles (setup->snap_path); ++ cleanup_snapfiles (setup->bin_path); + } + + int +Index: glib-2.76.2/gio/tests/portal-support-utils.c +=================================================================== +--- glib-2.76.2.orig/gio/tests/portal-support-utils.c ++++ glib-2.76.2/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) +Index: glib-2.76.2/gio/tests/portal-support-utils.h +=================================================================== +--- glib-2.76.2.orig/gio/tests/portal-support-utils.h ++++ glib-2.76.2/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); + diff --git a/meta/recipes-core/glib-2.0/glib-2.0_2.76.2.bb b/meta/recipes-core/glib-2.0/glib-2.0_2.76.2.bb index f3a716eb9d..7a0ed6b603 100644 --- a/meta/recipes-core/glib-2.0/glib-2.0_2.76.2.bb +++ b/meta/recipes-core/glib-2.0/glib-2.0_2.76.2.bb @@ -15,6 +15,7 @@ SRC_URI = "${GNOME_MIRROR}/glib/${SHRT_VER}/glib-${PV}.tar.xz \ file://0001-meson-Run-atomics-test-on-clang-as-well.patch \ file://0001-gio-tests-resources.c-comment-out-a-build-host-only-.patch \ file://0001-Avoid-having-g_futex_simple-inadvertently-modify-err.patch \ + file://fix-ptest.patch \ " SRC_URI:append:class-native = " file://relocate-modules.patch" -- cgit v1.2.3-54-g00ecf