From: Simon McVittie <smcv@debian.org>
Date: Wed, 13 Dec 2023 10:34:02 +0000
Subject: Mark several additional tests as flaky

Most of these have never been reliable on Debian buildds, especially
on ARM, so having them fail is not a regression. They usually succeed
after a few retries, but that's time-consuming and unsuitable to be a
QA gate.

The input-capture test frequently hangs until it times out, so put that
one in a separate suite so that we don't need to run it at all.

Signed-off-by: Simon McVittie <smcv@debian.org>
Forwarded: no
---
 src/tests/clutter/conform/gesture.c   | 24 ++++++++++++++++++++++++
 src/tests/clutter/conform/grab.c      |  6 ++++++
 src/tests/clutter/conform/meson.build |  8 +++++++-
 src/tests/meson.build                 | 16 ++++++++++++++--
 4 files changed, 51 insertions(+), 3 deletions(-)

diff --git a/src/tests/clutter/conform/gesture.c b/src/tests/clutter/conform/gesture.c
index f3901a2..c0affef 100644
--- a/src/tests/clutter/conform/gesture.c
+++ b/src/tests/clutter/conform/gesture.c
@@ -133,6 +133,12 @@ gesture_state_machine_move_to_waiting (void)
   ClutterGesture *gesture = CLUTTER_GESTURE (g_object_new (TEST_TYPE_GESTURE, NULL));
   gboolean was_updated;
 
+  if (g_getenv ("DEB_ALLOW_FLAKY_TESTS") == NULL)
+    {
+      g_test_skip ("https://gitlab.gnome.org/GNOME/mutter/-/issues/3521");
+      return;
+    }
+
   virtual_pointer = clutter_seat_create_virtual_device (seat, CLUTTER_POINTER_DEVICE);
   now_us = g_get_monotonic_time ();
 
@@ -193,6 +199,12 @@ gesture_state_machine_move_to_cancelled_while_possible (void)
   gboolean was_updated;
   ClutterGestureState gesture_state_change;
 
+  if (g_getenv ("DEB_ALLOW_FLAKY_TESTS") == NULL)
+    {
+      g_test_skip ("https://gitlab.gnome.org/GNOME/mutter/-/issues/3521");
+      return;
+    }
+
   virtual_pointer = clutter_seat_create_virtual_device (seat, CLUTTER_POINTER_DEVICE);
   now_us = g_get_monotonic_time ();
 
@@ -240,6 +252,12 @@ gesture_state_machine_move_to_cancelled_on_sequence_cancel (void)
   gboolean was_updated;
   ClutterGestureState gesture_state_change;
 
+  if (g_getenv ("DEB_ALLOW_FLAKY_TESTS") == NULL)
+    {
+      g_test_skip ("https://gitlab.gnome.org/GNOME/mutter/-/issues/3521");
+      return;
+    }
+
   virtual_pointer = clutter_seat_create_virtual_device (seat, CLUTTER_POINTER_DEVICE);
   now_us = g_get_monotonic_time ();
 
@@ -297,6 +315,12 @@ gesture_multiple_mouse_buttons (void)
   ClutterGesture *gesture = CLUTTER_GESTURE (g_object_new (TEST_TYPE_GESTURE, NULL));
   gboolean was_updated;
 
+  if (g_getenv ("DEB_ALLOW_FLAKY_TESTS") == NULL)
+    {
+      g_test_skip ("https://gitlab.gnome.org/GNOME/mutter/-/issues/3521");
+      return;
+    }
+
   virtual_pointer = clutter_seat_create_virtual_device (seat, CLUTTER_POINTER_DEVICE);
   now_us = g_get_monotonic_time ();
 
diff --git a/src/tests/clutter/conform/grab.c b/src/tests/clutter/conform/grab.c
index 93a8cf4..9018a53 100644
--- a/src/tests/clutter/conform/grab.c
+++ b/src/tests/clutter/conform/grab.c
@@ -620,6 +620,12 @@ grab_input_only (void)
   ClutterSeat *seat;
   g_autoptr (ClutterVirtualInputDevice) pointer = NULL;
 
+  if (g_getenv ("DEB_ALLOW_FLAKY_TESTS") == NULL)
+    {
+      g_test_skip ("https://gitlab.gnome.org/GNOME/mutter/-/issues/3205");
+      return;
+    }
+
   seat = clutter_test_get_default_seat ();
   pointer = clutter_seat_create_virtual_device (seat, CLUTTER_POINTER_DEVICE);
 
diff --git a/src/tests/clutter/conform/meson.build b/src/tests/clutter/conform/meson.build
index 488db05..f32892e 100644
--- a/src/tests/clutter/conform/meson.build
+++ b/src/tests/clutter/conform/meson.build
@@ -68,6 +68,12 @@ test_env.set('CLUTTER_ENABLE_DIAGNOSTIC', '0')
 test_env.set('GSETTINGS_SCHEMA_DIR', locally_compiled_schemas_dir)
 
 foreach test : clutter_conform_tests
+  extra_suites = []
+
+  if test == 'timeline' or test == 'timeline-interpolate'
+    extra_suites += 'flaky'
+  endif
+
   test_executable = executable('@0@'.format(test),
     sources: [
       '@0@.c'.format(test),
@@ -83,7 +89,7 @@ foreach test : clutter_conform_tests
   )
 
   test(test, test_executable,
-    suite: ['clutter', 'clutter/conform'],
+    suite: ['clutter', 'clutter/conform'] + extra_suites,
     env: test_env,
     is_parallel: false,
   )
diff --git a/src/tests/meson.build b/src/tests/meson.build
index c58f70b..e095e0d 100644
--- a/src/tests/meson.build
+++ b/src/tests/meson.build
@@ -514,6 +514,7 @@ test_cases += [
     'name': 'input-capture',
     'suite': 'backends/native',
     'sources': [ 'input-capture-tests.c' ],
+    'broken': true,
   },
   {
     'name': 'thread',
@@ -905,9 +906,20 @@ foreach test_case: test_cases
 
   args = test_case.get('args', [])
 
+
+  extra_suites = []
+
+  if test_case.get('flaky', false)
+    extra_suites += 'flaky'
+  endif
+
+  if test_case.get('broken', false)
+    extra_suites += 'broken'
+  endif
+
   message('test @0@ args: @1@'.format(test_case['name'], args))
   test(test_case['name'], test_executable,
-    suite: ['core', 'mutter/' + test_case['suite']],
+    suite: ['core', 'mutter/' + test_case['suite']] + extra_suites,
     args: args,
     env: test_env,
     depends: test_depends,
@@ -970,7 +982,7 @@ stacking_tests = [
 
 foreach stacking_test: stacking_tests
   test(stacking_test, test_runner,
-    suite: ['core', 'mutter/stacking'],
+    suite: ['core', 'mutter/stacking', 'flaky'],
     env: test_env,
     args: [
       files('stacking' / stacking_test + '.metatest'),
