diff --git a/tests/graphics.c b/tests/graphics.c
index 544642855c2753a7eda87f4df86ee866825b8e62..0f63ee26a338b876940d19ecece95ee0d2931547 100644
--- a/tests/graphics.c
+++ b/tests/graphics.c
@@ -259,64 +259,6 @@ test_object (Fixture *f,
   g_object_unref (graphics);
 }
 
-/*
- * Test a mock system with hardware graphics stack
- */
-static void
-test_good_graphics (Fixture *f,
-                    gconstpointer context)
-{
-  SrtGraphics *graphics = NULL;
-  SrtGraphicsIssues issues;
-  gchar *messages;
-  gchar *tuple;
-  gchar *renderer;
-  gchar *version;
-  int exit_status;
-  int terminating_signal;
-
-  SrtSystemInfo *info = srt_system_info_new (NULL);
-  srt_system_info_set_helpers_path (info, f->builddir);
-
-  issues = srt_system_info_check_graphics (info,
-                                           "mock-good",
-                                           SRT_WINDOW_SYSTEM_GLX,
-                                           SRT_RENDERING_INTERFACE_GL,
-                                           &graphics);
-  g_assert_cmpint (issues, ==, SRT_GRAPHICS_ISSUES_NONE);
-  g_assert_cmpstr (srt_graphics_get_messages (graphics), ==,
-                   NULL);
-  g_assert_cmpstr (srt_graphics_get_renderer_string (graphics), ==,
-                   SRT_TEST_GOOD_GRAPHICS_RENDERER);
-  g_assert_cmpstr (srt_graphics_get_version_string (graphics), ==,
-                   SRT_TEST_GOOD_GRAPHICS_VERSION);
-  g_assert_cmpint (srt_graphics_get_exit_status (graphics), ==, 0);
-  g_assert_cmpint (srt_graphics_get_terminating_signal (graphics), ==, 0);
-  g_object_get (graphics,
-                "messages", &messages,
-                "multiarch-tuple", &tuple,
-                "issues", &issues,
-                "renderer-string", &renderer,
-                "version-string", &version,
-                "exit-status", &exit_status,
-                "terminating-signal", &terminating_signal,
-                NULL);
-  g_assert_cmpstr (messages, ==, NULL);
-  g_assert_cmpint (issues, ==, SRT_GRAPHICS_ISSUES_NONE);
-  g_assert_cmpstr (tuple, ==, "mock-good");
-  g_assert_cmpstr (renderer, ==, SRT_TEST_GOOD_GRAPHICS_RENDERER);
-  g_assert_cmpstr (version, ==, SRT_TEST_GOOD_GRAPHICS_VERSION);
-  g_assert_cmpint (exit_status, ==, 0);
-  g_assert_cmpint (terminating_signal, ==, 0);
-  g_free (tuple);
-  g_free (renderer);
-  g_free (version);
-  g_free (messages);
-
-  g_object_unref (graphics);
-  g_object_unref (info);
-}
-
 /*
  * Test that the X11 window system is normalized correctly.
  */
@@ -443,412 +385,6 @@ test_normalize_window_system (Fixture *f,
   g_object_unref (info);
 }
 
-/*
- * Test a mock system with no graphics stack
- */
-static void
-test_bad_graphics (Fixture *f,
-                   gconstpointer context)
-{
-  SrtGraphics *graphics = NULL;
-  SrtGraphicsIssues issues;
-  SrtGraphicsLibraryVendor library_vendor;
-  gboolean vendor_neutral;
-  gchar *messages;
-  gchar *tuple;
-  gchar *renderer;
-  gchar *version;
-  int exit_status;
-  int terminating_signal;
-
-  SrtSystemInfo *info = srt_system_info_new (NULL);
-  srt_system_info_set_helpers_path (info, f->builddir);
-
-  issues = srt_system_info_check_graphics (info,
-                                           "mock-bad",
-                                           SRT_WINDOW_SYSTEM_GLX,
-                                           SRT_RENDERING_INTERFACE_GL,
-                                           &graphics);
-  g_assert_cmpint (issues, ==, SRT_GRAPHICS_ISSUES_CANNOT_LOAD);
-  g_assert_cmpstr (srt_graphics_get_renderer_string (graphics), ==,
-                   NULL);
-  g_assert_cmpstr (srt_graphics_get_version_string (graphics), ==,
-                   NULL);
-  g_assert_cmpstr (srt_graphics_get_messages (graphics), ==,
-                   "warning: this warning should always be logged\n"
-                   "Waffle error: 0x2 WAFFLE_ERROR_UNKNOWN: XOpenDisplay failed\n"
-                  "info: you used LIBGL_DEBUG=verbose\n");
-  g_assert_cmpint (srt_graphics_get_exit_status (graphics), ==, 1);
-  g_assert_cmpint (srt_graphics_get_terminating_signal (graphics), ==, 0);
-
-  /* We used "mock-bad" for the architecture so, when checking the library vendor,
-   * we will not be able to call the helper `mock-bad-check-library`.
-   * For this reason we expect %SRT_GRAPHICS_LIBRARY_VENDOR_UNKNOWN */
-  vendor_neutral = srt_graphics_library_is_vendor_neutral (graphics, &library_vendor);
-  g_assert_cmpint (library_vendor, ==, SRT_GRAPHICS_LIBRARY_VENDOR_UNKNOWN);
-  g_assert_false (vendor_neutral);
-  g_object_get (graphics,
-                "messages", &messages,
-                "multiarch-tuple", &tuple,
-                "issues", &issues,
-                "library-vendor", &library_vendor,
-                "renderer-string", &renderer,
-                "version-string", &version,
-                "exit-status", &exit_status,
-                "terminating-signal", &terminating_signal,
-                NULL);
-  g_assert_cmpint (issues, ==, SRT_GRAPHICS_ISSUES_CANNOT_LOAD);
-  g_assert_cmpint (library_vendor, ==, SRT_GRAPHICS_LIBRARY_VENDOR_UNKNOWN);
-  g_assert_cmpstr (messages, ==,
-                   "warning: this warning should always be logged\n"
-                   "Waffle error: 0x2 WAFFLE_ERROR_UNKNOWN: XOpenDisplay failed\n"
-                  "info: you used LIBGL_DEBUG=verbose\n");
-  g_assert_cmpstr (tuple, ==, "mock-bad");
-  g_assert_cmpstr (renderer, ==, NULL);
-  g_assert_cmpstr (version, ==, NULL);
-  g_assert_cmpint (exit_status, ==, 1);
-  g_assert_cmpint (terminating_signal, ==, 0);
-  g_free (messages);
-  g_free (tuple);
-  g_free (renderer);
-  g_free (version);
-
-  g_object_unref (graphics);
-  g_object_unref (info);
-}
-
-/*
- * Test a mock system with timeout
- */
-static void
-test_timeout_graphics (Fixture *f,
-                   gconstpointer context)
-{
-  SrtGraphics *graphics = NULL;
-  SrtGraphicsIssues issues;
-  gchar *tuple;
-  gchar *renderer;
-  gchar *version;
-  int exit_status;
-  int terminating_signal;
-
-  SrtSystemInfo *info = srt_system_info_new (NULL);
-  srt_system_info_set_helpers_path (info, f->builddir);
-  srt_system_info_set_test_flags (info, SRT_TEST_FLAGS_TIME_OUT_SOONER);
-
-  issues = srt_system_info_check_graphics (info,
-                                           "mock-hanging",
-                                           SRT_WINDOW_SYSTEM_GLX,
-                                           SRT_RENDERING_INTERFACE_GL,
-                                           &graphics);
-  g_debug ("issues is 0x%x", issues);
-  g_assert_cmphex ((issues & SRT_GRAPHICS_ISSUES_CANNOT_LOAD), ==, SRT_GRAPHICS_ISSUES_CANNOT_LOAD);
-  g_assert_cmphex ((issues & SRT_GRAPHICS_ISSUES_TIMEOUT), ==, SRT_GRAPHICS_ISSUES_TIMEOUT);
-  g_assert_cmpstr (srt_graphics_get_renderer_string (graphics), ==,
-                   NULL);
-  g_assert_cmpstr (srt_graphics_get_version_string (graphics), ==,
-                   NULL);
-  // Timeout has exit code 124
-  g_assert_cmpint (srt_graphics_get_exit_status (graphics), ==, 124);
-  g_assert_cmpint (srt_graphics_get_terminating_signal (graphics), ==, 0);
-  g_object_get (graphics,
-                "multiarch-tuple", &tuple,
-                "issues", &issues,
-                "renderer-string", &renderer,
-                "version-string", &version,
-                "exit-status", &exit_status,
-                "terminating-signal", &terminating_signal,
-                NULL);
-  g_assert_cmphex ((issues & SRT_GRAPHICS_ISSUES_CANNOT_LOAD), ==, SRT_GRAPHICS_ISSUES_CANNOT_LOAD);
-  g_assert_cmphex ((issues & SRT_GRAPHICS_ISSUES_TIMEOUT), ==, SRT_GRAPHICS_ISSUES_TIMEOUT);
-  g_assert_cmpstr (tuple, ==, "mock-hanging");
-  g_assert_cmpstr (renderer, ==, NULL);
-  g_assert_cmpstr (version, ==, NULL);
-  g_assert_cmpint (exit_status, ==, 124);
-  g_assert_cmpint (terminating_signal, ==, 0);
-  g_free (tuple);
-  g_free (renderer);
-  g_free (version);
-
-  g_object_unref (graphics);
-  g_object_unref (info);
-}
-
-/*
- * Test a mock system with software rendering
- */
-static void
-test_software_rendering (Fixture *f,
-                         gconstpointer context)
-{
-  SrtGraphics *graphics = NULL;
-  SrtGraphicsIssues issues;
-  gchar *messages;
-  gchar *tuple;
-  gchar *renderer;
-  gchar *version;
-  int exit_status;
-  int terminating_signal;
-
-  SrtSystemInfo *info = srt_system_info_new (NULL);
-  srt_system_info_set_helpers_path (info, f->builddir);
-
-  issues = srt_system_info_check_graphics (info,
-                                           "mock-software",
-                                           SRT_WINDOW_SYSTEM_GLX,
-                                           SRT_RENDERING_INTERFACE_GL,
-                                           &graphics);
-  g_assert_cmpint (issues, ==, SRT_GRAPHICS_ISSUES_SOFTWARE_RENDERING);
-  g_assert_cmpstr (srt_graphics_get_messages (graphics), ==,
-                   "warning: this warning should always be logged\n"
-                   "info: you used LIBGL_DEBUG=verbose\n");
-  g_assert_cmpstr (srt_graphics_get_renderer_string (graphics), ==,
-                   SRT_TEST_SOFTWARE_GRAPHICS_RENDERER);
-  g_assert_cmpstr (srt_graphics_get_version_string (graphics), ==,
-                   SRT_TEST_SOFTWARE_GRAPHICS_VERSION);
-  g_assert_cmpint (srt_graphics_get_exit_status (graphics), ==, 0);
-  g_assert_cmpint (srt_graphics_get_terminating_signal (graphics), ==, 0);
-
-  g_object_get (graphics,
-                "messages", &messages,
-                "multiarch-tuple", &tuple,
-                "issues", &issues,
-                "renderer-string", &renderer,
-                "version-string", &version,
-                "exit-status", &exit_status,
-                "terminating-signal", &terminating_signal,
-                NULL);
-  g_assert_cmpint (issues, ==, SRT_GRAPHICS_ISSUES_SOFTWARE_RENDERING);
-  g_assert_cmpstr (tuple, ==, "mock-software");
-  g_assert_cmpstr (renderer, ==, SRT_TEST_SOFTWARE_GRAPHICS_RENDERER);
-  g_assert_cmpstr (version, ==, SRT_TEST_SOFTWARE_GRAPHICS_VERSION);
-  g_assert_cmpint (exit_status, ==, 0);
-  g_assert_cmpint (terminating_signal, ==, 0);
-  g_assert_cmpstr (messages, ==,
-                   "warning: this warning should always be logged\n"
-                   "info: you used LIBGL_DEBUG=verbose\n");
-
-  g_free (tuple);
-  g_free (renderer);
-  g_free (version);
-  g_free (messages);
-
-  g_object_unref (graphics);
-  g_object_unref (info);
-}
-
-/*
- * Test a mock system with good vulkan drivers
- */
-static void
-test_good_vulkan (Fixture *f,
-                  gconstpointer context)
-{
-  SrtGraphics *graphics = NULL;
-  SrtGraphicsIssues issues;
-  gchar *tuple;
-  gchar *renderer;
-  gchar *version;
-  int exit_status;
-  int terminating_signal;
-
-  SrtSystemInfo *info = srt_system_info_new (NULL);
-  srt_system_info_set_helpers_path (info, f->builddir);
-
-  issues = srt_system_info_check_graphics (info,
-                                           "mock-good",
-                                           SRT_WINDOW_SYSTEM_X11,
-                                           SRT_RENDERING_INTERFACE_VULKAN,
-                                           &graphics);
-  g_assert_cmpint (issues, ==, SRT_GRAPHICS_ISSUES_NONE);
-  g_assert_cmpstr (srt_graphics_get_renderer_string (graphics), ==,
-                   SRT_TEST_GOOD_GRAPHICS_RENDERER);
-  g_assert_cmpstr (srt_graphics_get_version_string (graphics), ==,
-                   SRT_TEST_GOOD_VULKAN_VERSION);
-  g_assert_cmpint (srt_graphics_get_exit_status (graphics), ==, 0);
-  g_assert_cmpint (srt_graphics_get_terminating_signal (graphics), ==, 0);
-
-  g_object_get (graphics,
-                "multiarch-tuple", &tuple,
-                "issues", &issues,
-                "renderer-string", &renderer,
-                "version-string", &version,
-                "exit-status", &exit_status,
-                "terminating-signal", &terminating_signal,
-                NULL);
-  g_assert_cmpint (issues, ==, SRT_GRAPHICS_ISSUES_NONE);
-  g_assert_cmpstr (tuple, ==, "mock-good");
-  g_assert_cmpstr (renderer, ==, SRT_TEST_GOOD_GRAPHICS_RENDERER);
-  g_assert_cmpstr (version, ==, SRT_TEST_GOOD_VULKAN_VERSION);
-  g_assert_cmpint (exit_status, ==, 0);
-  g_assert_cmpint (terminating_signal, ==, 0);
-  g_free (tuple);
-  g_free (renderer);
-  g_free (version);
-
-  g_object_unref (graphics);
-  g_object_unref (info);
-}
-
-/*
- * Test a mock system with no vulkan graphics driver
- */
-static void
-test_bad_vulkan (Fixture *f,
-                 gconstpointer context)
-{
-  SrtGraphics *graphics = NULL;
-  SrtGraphicsIssues issues;
-  gchar *tuple;
-  gchar *renderer;
-  gchar *version;
-  int exit_status;
-  int terminating_signal;
-
-  SrtSystemInfo *info = srt_system_info_new (NULL);
-  srt_system_info_set_helpers_path (info, f->builddir);
-
-  issues = srt_system_info_check_graphics (info,
-                                           "mock-bad",
-                                           SRT_WINDOW_SYSTEM_X11,
-                                           SRT_RENDERING_INTERFACE_VULKAN,
-                                           &graphics);
-  g_assert_cmpint (issues, ==, SRT_GRAPHICS_ISSUES_CANNOT_LOAD);
-  g_assert_cmpstr (srt_graphics_get_renderer_string (graphics), ==,
-                   NULL);
-  g_assert_cmpstr (srt_graphics_get_version_string (graphics), ==,
-                   NULL);
-  g_assert_cmpint (srt_graphics_get_exit_status (graphics), ==, 1);
-  g_assert_cmpint (srt_graphics_get_terminating_signal (graphics), ==, 0);
-
-  g_object_get (graphics,
-                "multiarch-tuple", &tuple,
-                "issues", &issues,
-                "renderer-string", &renderer,
-                "version-string", &version,
-                "exit-status", &exit_status,
-                "terminating-signal", &terminating_signal,
-                NULL);
-  g_assert_cmpint (issues, ==, SRT_GRAPHICS_ISSUES_CANNOT_LOAD);
-  g_assert_cmpstr (tuple, ==, "mock-bad");
-  g_assert_cmpstr (renderer, ==, NULL);
-  g_assert_cmpstr (version, ==, NULL);
-  g_assert_cmpint (exit_status, ==, 1);
-  g_assert_cmpint (terminating_signal, ==, 0);
-  g_free (tuple);
-  g_free (renderer);
-  g_free (version);
-
-  g_object_unref (graphics);
-  g_object_unref (info);
-}
-
-/*
- * Test a mock system with vulkan driver but check-vulkan failure
- */
-static void
-test_mixed_vulkan (Fixture *f,
-                 gconstpointer context)
-{
-  SrtGraphics *graphics = NULL;
-  SrtGraphicsIssues issues;
-  gchar *tuple;
-  gchar *renderer;
-  gchar *version;
-  int exit_status;
-  int terminating_signal;
-
-  SrtSystemInfo *info = srt_system_info_new (NULL);
-  srt_system_info_set_helpers_path (info, f->builddir);
-
-  issues = srt_system_info_check_graphics (info,
-                                           "mock-mixed",
-                                           SRT_WINDOW_SYSTEM_X11,
-                                           SRT_RENDERING_INTERFACE_VULKAN,
-                                           &graphics);
-  g_assert_cmpint (issues, ==, SRT_GRAPHICS_ISSUES_CANNOT_DRAW);
-  g_assert_cmpstr (srt_graphics_get_renderer_string (graphics), ==,
-                   SRT_TEST_GOOD_GRAPHICS_RENDERER);
-  g_assert_cmpstr (srt_graphics_get_version_string (graphics), ==,
-                   SRT_TEST_GOOD_VULKAN_VERSION);
-  g_assert_cmpint (srt_graphics_get_exit_status (graphics), ==, 1);
-  g_assert_cmpint (srt_graphics_get_terminating_signal (graphics), ==, 0);
-
-  g_object_get (graphics,
-                "multiarch-tuple", &tuple,
-                "issues", &issues,
-                "renderer-string", &renderer,
-                "version-string", &version,
-                "exit-status", &exit_status,
-                "terminating-signal", &terminating_signal,
-                NULL);
-  g_assert_cmpstr (srt_graphics_get_messages (graphics), ==,
-                   "failed to create window surface!\n");
-
-  g_assert_cmpint (issues, ==, SRT_GRAPHICS_ISSUES_CANNOT_DRAW);
-  g_assert_cmpstr (tuple, ==, "mock-mixed");
-  g_assert_cmpstr (renderer, ==, SRT_TEST_GOOD_GRAPHICS_RENDERER);
-  g_assert_cmpstr (version, ==, SRT_TEST_GOOD_VULKAN_VERSION);
-  g_assert_cmpint (exit_status, ==, 1);
-  g_assert_cmpint (terminating_signal, ==, 0);
-
-  g_free (tuple);
-  g_free (renderer);
-  g_free (version);
-
-  g_object_unref (graphics);
-  g_object_unref (info);
-}
-
-/*
- * Test a mock system with gl driver but check-gl failure
- */
-static void
-test_mixed_gl (Fixture *f,
-               gconstpointer context)
-{
-  SrtGraphics *graphics = NULL;
-  SrtGraphicsIssues issues;
-  gchar *tuple;
-  gchar *renderer;
-  gchar *version;
-
-  SrtSystemInfo *info = srt_system_info_new (NULL);
-  srt_system_info_set_helpers_path (info, f->builddir);
-
-  issues = srt_system_info_check_graphics (info,
-                                           "mock-mixed",
-                                           SRT_WINDOW_SYSTEM_GLX,
-                                           SRT_RENDERING_INTERFACE_GL,
-                                           &graphics);
-  g_assert_cmpint (issues, ==, SRT_GRAPHICS_ISSUES_CANNOT_DRAW);
-  g_assert_cmpstr (srt_graphics_get_renderer_string (graphics), ==,
-                   SRT_TEST_GOOD_GRAPHICS_RENDERER);
-  g_assert_cmpstr (srt_graphics_get_version_string (graphics), ==,
-                   SRT_TEST_GOOD_GRAPHICS_VERSION);
-  g_object_get (graphics,
-                "multiarch-tuple", &tuple,
-                "issues", &issues,
-                "renderer-string", &renderer,
-                "version-string", &version,
-                NULL);
-  g_assert_cmpint (issues, ==, SRT_GRAPHICS_ISSUES_CANNOT_DRAW);
-  g_assert_cmpstr (tuple, ==, "mock-mixed");
-  g_assert_cmpstr (renderer, ==, SRT_TEST_GOOD_GRAPHICS_RENDERER);
-  g_assert_cmpstr (version, ==, SRT_TEST_GOOD_GRAPHICS_VERSION);
-  g_assert_cmpstr (srt_graphics_get_messages (graphics), ==,
-                   "warning: this warning should always be logged\n"
-                   "Waffle error: 0x2 WAFFLE_ERROR_UNKNOWN: XOpenDisplay failed\n"
-                   "info: you used LIBGL_DEBUG=verbose\n");
-
-  g_free (tuple);
-  g_free (renderer);
-  g_free (version);
-
-  g_object_unref (graphics);
-  g_object_unref (info);
-}
-
 /*
  * Test a mock system with sigusr terminating signal
  */
@@ -2493,110 +2029,209 @@ test_vdpau (Fixture *f,
     }
 }
 
-static void
-test_good_vdpau (Fixture *f,
-                 gconstpointer context)
+typedef struct
 {
-  SrtGraphics *graphics = NULL;
+  const gchar *description;
+  SrtWindowSystem window_system;
+  SrtRenderingInterface rendering_interface;
+  SrtGraphicsLibraryVendor library_vendor;
   SrtGraphicsIssues issues;
-  gchar *tuple;
-  gchar *renderer;
-  gchar *version;
-  gchar *messages;
+  SrtTestFlags test_flags;
+  const gchar *multiarch_tuple;
+  const gchar *renderer_string;
+  const gchar *version_string;
+  const gchar *messages;
   int exit_status;
-  int terminating_signal;
+  gboolean vendor_neutral;
+} GraphicsTest;
 
-  SrtSystemInfo *info = srt_system_info_new (NULL);
-  srt_system_info_set_helpers_path (info, f->builddir);
+static const GraphicsTest graphics_test[] =
+{
+  {
+    .description = "good vdpau",
+    .window_system = SRT_WINDOW_SYSTEM_X11,
+    .rendering_interface = SRT_RENDERING_INTERFACE_VDPAU,
+    .issues = SRT_GRAPHICS_ISSUES_NONE,
+    .multiarch_tuple = "mock-good",
+    .renderer_string = SRT_TEST_GOOD_VDPAU_RENDERER,
+    .vendor_neutral = TRUE,
+  },
 
-  issues = srt_system_info_check_graphics (info,
-                                           "mock-good",
-                                           SRT_WINDOW_SYSTEM_X11,
-                                           SRT_RENDERING_INTERFACE_VDPAU,
-                                           &graphics);
-  g_assert_cmpint (issues, ==, SRT_GRAPHICS_ISSUES_NONE);
-  g_assert_cmpstr (srt_graphics_get_renderer_string (graphics), ==, SRT_TEST_GOOD_VDPAU_RENDERER);
-  g_assert_cmpstr (srt_graphics_get_version_string (graphics), ==, NULL);
-  g_assert_cmpstr (srt_graphics_get_messages (graphics), ==, NULL);
-  g_assert_cmpint (srt_graphics_get_exit_status (graphics), ==, 0);
-  g_assert_cmpint (srt_graphics_get_terminating_signal (graphics), ==, 0);
+  {
+    .description = "bad vdpau",
+    .window_system = SRT_WINDOW_SYSTEM_X11,
+    .rendering_interface = SRT_RENDERING_INTERFACE_VDPAU,
+    .issues = SRT_GRAPHICS_ISSUES_CANNOT_DRAW,
+    .multiarch_tuple = "mock-bad",
+    .messages = SRT_TEST_BAD_VDPAU_MESSAGES,
+    .exit_status = 1,
+    .vendor_neutral = TRUE,
+  },
 
-  g_object_get (graphics,
-                "multiarch-tuple", &tuple,
-                "issues", &issues,
-                "renderer-string", &renderer,
-                "version-string", &version,
-                "messages", &messages,
-                "exit-status", &exit_status,
-                "terminating-signal", &terminating_signal,
-                NULL);
-  g_assert_cmpint (issues, ==, SRT_GRAPHICS_ISSUES_NONE);
-  g_assert_cmpstr (tuple, ==, "mock-good");
-  g_assert_cmpstr (renderer, ==, SRT_TEST_GOOD_VDPAU_RENDERER);
-  g_assert_cmpstr (version, ==, NULL);
-  g_assert_cmpstr (messages, ==, NULL);
-  g_assert_cmpint (exit_status, ==, 0);
-  g_assert_cmpint (terminating_signal, ==, 0);
-  g_free (tuple);
-  g_free (renderer);
-  g_free (version);
-  g_free (messages);
+  {
+    .description = "good gl",
+    .window_system = SRT_WINDOW_SYSTEM_GLX,
+    .rendering_interface = SRT_RENDERING_INTERFACE_GL,
+    .issues = SRT_GRAPHICS_ISSUES_NONE,
+    .multiarch_tuple = "mock-good",
+    .renderer_string = SRT_TEST_GOOD_GRAPHICS_RENDERER,
+    .version_string = SRT_TEST_GOOD_GRAPHICS_VERSION,
+  },
 
-  g_object_unref (graphics);
-  g_object_unref (info);
-}
+  {
+    .description = "no graphics stack",
+    .window_system = SRT_WINDOW_SYSTEM_GLX,
+    .rendering_interface = SRT_RENDERING_INTERFACE_GL,
+    .issues = SRT_GRAPHICS_ISSUES_CANNOT_LOAD,
+    .multiarch_tuple = "mock-bad",
+    .messages = "warning: this warning should always be logged\n"
+                "Waffle error: 0x2 WAFFLE_ERROR_UNKNOWN: XOpenDisplay failed\n"
+                "info: you used LIBGL_DEBUG=verbose\n",
+    /* We used "mock-bad" for the architecture so, when checking the library vendor,
+     * we will not be able to call the helper `mock-bad-check-library`.
+     * For this reason we expect %SRT_GRAPHICS_LIBRARY_VENDOR_UNKNOWN */
+    .library_vendor = SRT_GRAPHICS_LIBRARY_VENDOR_UNKNOWN,
+    .exit_status = 1,
+  },
 
-static void
-test_bad_vdpau (Fixture *f,
-                gconstpointer context)
-{
-  SrtGraphics *graphics = NULL;
-  SrtGraphicsIssues issues;
-  gchar *tuple;
-  gchar *renderer;
-  gchar *version;
-  gchar *messages;
-  int exit_status;
-  int terminating_signal;
+  {
+    .description = "graphics timeout",
+    .window_system = SRT_WINDOW_SYSTEM_GLX,
+    .rendering_interface = SRT_RENDERING_INTERFACE_GL,
+    .issues = (SRT_GRAPHICS_ISSUES_CANNOT_LOAD | SRT_GRAPHICS_ISSUES_TIMEOUT),
+    .test_flags = SRT_TEST_FLAGS_TIME_OUT_SOONER,
+    .multiarch_tuple = "mock-hanging",
+    // Timeout has exit code 124
+    .exit_status = 124,
+  },
 
-  SrtSystemInfo *info = srt_system_info_new (NULL);
-  srt_system_info_set_helpers_path (info, f->builddir);
+  {
+    .description = "software rendering",
+    .window_system = SRT_WINDOW_SYSTEM_GLX,
+    .rendering_interface = SRT_RENDERING_INTERFACE_GL,
+    .issues = SRT_GRAPHICS_ISSUES_SOFTWARE_RENDERING,
+    .multiarch_tuple = "mock-software",
+    .renderer_string = SRT_TEST_SOFTWARE_GRAPHICS_RENDERER,
+    .version_string = SRT_TEST_SOFTWARE_GRAPHICS_VERSION,
+    .messages = "warning: this warning should always be logged\n"
+                "info: you used LIBGL_DEBUG=verbose\n",
+  },
 
-  issues = srt_system_info_check_graphics (info,
-                                           "mock-bad",
-                                           SRT_WINDOW_SYSTEM_X11,
-                                           SRT_RENDERING_INTERFACE_VDPAU,
-                                           &graphics);
-  g_assert_cmpint (issues, ==, SRT_GRAPHICS_ISSUES_CANNOT_DRAW);
-  g_assert_cmpstr (srt_graphics_get_renderer_string (graphics), ==, NULL);
-  g_assert_cmpstr (srt_graphics_get_version_string (graphics), ==, NULL);
-  g_assert_cmpstr (srt_graphics_get_messages (graphics), ==, SRT_TEST_BAD_VDPAU_MESSAGES);
-  g_assert_cmpint (srt_graphics_get_exit_status (graphics), ==, 1);
-  g_assert_cmpint (srt_graphics_get_terminating_signal (graphics), ==, 0);
+  {
+    .description = "gl driver ok but check-gl fails",
+    .window_system = SRT_WINDOW_SYSTEM_GLX,
+    .rendering_interface = SRT_RENDERING_INTERFACE_GL,
+    .issues = SRT_GRAPHICS_ISSUES_CANNOT_DRAW,
+    .multiarch_tuple = "mock-mixed",
+    .renderer_string = SRT_TEST_GOOD_GRAPHICS_RENDERER,
+    .version_string = SRT_TEST_GOOD_GRAPHICS_VERSION,
+    .messages = "warning: this warning should always be logged\n"
+                "Waffle error: 0x2 WAFFLE_ERROR_UNKNOWN: XOpenDisplay failed\n"
+                "info: you used LIBGL_DEBUG=verbose\n",
+    .exit_status = 1,
+  },
 
-  g_object_get (graphics,
-                "multiarch-tuple", &tuple,
-                "issues", &issues,
-                "renderer-string", &renderer,
-                "version-string", &version,
-                "messages", &messages,
-                "exit-status", &exit_status,
-                "terminating-signal", &terminating_signal,
-                NULL);
-  g_assert_cmpint (issues, ==, SRT_GRAPHICS_ISSUES_CANNOT_DRAW);
-  g_assert_cmpstr (tuple, ==, "mock-bad");
-  g_assert_cmpstr (renderer, ==, NULL);
-  g_assert_cmpstr (version, ==, NULL);
-  g_assert_cmpstr (messages, ==, SRT_TEST_BAD_VDPAU_MESSAGES);
-  g_assert_cmpint (exit_status, ==, 1);
-  g_assert_cmpint (terminating_signal, ==, 0);
-  g_free (tuple);
-  g_free (renderer);
-  g_free (version);
-  g_free (messages);
+  {
+    .description = "good vulkan",
+    .window_system = SRT_WINDOW_SYSTEM_X11,
+    .rendering_interface = SRT_RENDERING_INTERFACE_VULKAN,
+    .issues = SRT_GRAPHICS_ISSUES_NONE,
+    .multiarch_tuple = "mock-good",
+    .renderer_string = SRT_TEST_GOOD_GRAPHICS_RENDERER,
+    .version_string = SRT_TEST_GOOD_VULKAN_VERSION,
+    .vendor_neutral = TRUE,
+  },
 
-  g_object_unref (graphics);
-  g_object_unref (info);
+  {
+    .description = "bad vulkan",
+    .window_system = SRT_WINDOW_SYSTEM_X11,
+    .rendering_interface = SRT_RENDERING_INTERFACE_VULKAN,
+    .issues = SRT_GRAPHICS_ISSUES_CANNOT_LOAD,
+    .multiarch_tuple = "mock-bad",
+    .messages = "/build/vulkan-tools/src/Vulkan-Tools-1.1.114/vulkaninfo/vulkaninfo.c:5884: failed with VK_ERROR_INITIALIZATION_FAILED\n",
+    .exit_status = 1,
+    .vendor_neutral = TRUE,
+  },
+
+  {
+    .description = "good vulkan driver but check-vulkan failure",
+    .window_system = SRT_WINDOW_SYSTEM_X11,
+    .rendering_interface = SRT_RENDERING_INTERFACE_VULKAN,
+    .issues = SRT_GRAPHICS_ISSUES_CANNOT_DRAW,
+    .multiarch_tuple = "mock-mixed",
+    .renderer_string = SRT_TEST_GOOD_GRAPHICS_RENDERER,
+    .version_string = SRT_TEST_GOOD_VULKAN_VERSION,
+    .messages = "failed to create window surface!\n",
+    .exit_status = 1,
+    .vendor_neutral = TRUE,
+  },
+
+};
+
+static void
+test_check_graphics (Fixture *f,
+                     gconstpointer context)
+{
+  for (gsize i = 0; i < G_N_ELEMENTS (graphics_test); i++)
+    {
+      const GraphicsTest *test = &graphics_test[i];
+      SrtGraphics *graphics = NULL;
+      SrtGraphicsIssues issues;
+      gchar *tuple;
+      gchar *renderer;
+      gchar *version;
+      gchar *messages;
+      int exit_status;
+      int terminating_signal;
+      gboolean vendor_neutral;
+      SrtGraphicsLibraryVendor library_vendor;
+
+      g_test_message ("%s", test->description);
+
+      SrtSystemInfo *info = srt_system_info_new (NULL);
+      srt_system_info_set_helpers_path (info, f->builddir);
+      srt_system_info_set_test_flags (info, test->test_flags);
+
+      issues = srt_system_info_check_graphics (info,
+                                               test->multiarch_tuple,
+                                               test->window_system,
+                                               test->rendering_interface,
+                                               &graphics);
+      g_assert_cmpint (issues, ==, test->issues);
+      g_assert_cmpstr (srt_graphics_get_renderer_string (graphics), ==, test->renderer_string);
+      g_assert_cmpstr (srt_graphics_get_version_string (graphics), ==, test->version_string);
+      g_assert_cmpstr (srt_graphics_get_messages (graphics), ==, test->messages);
+      g_assert_cmpint (srt_graphics_get_exit_status (graphics), ==, test->exit_status);
+      g_assert_cmpint (srt_graphics_get_terminating_signal (graphics), ==, 0);
+
+      vendor_neutral = srt_graphics_library_is_vendor_neutral (graphics, &library_vendor);
+      g_assert_cmpint (library_vendor, ==, test->library_vendor);
+      g_assert_cmpint (vendor_neutral, ==, test->vendor_neutral);
+
+      g_object_get (graphics,
+                    "multiarch-tuple", &tuple,
+                    "issues", &issues,
+                    "renderer-string", &renderer,
+                    "version-string", &version,
+                    "messages", &messages,
+                    "exit-status", &exit_status,
+                    "terminating-signal", &terminating_signal,
+                    NULL);
+      g_assert_cmpint (issues, ==, test->issues);
+      g_assert_cmpstr (tuple, ==, test->multiarch_tuple);
+      g_assert_cmpstr (renderer, ==, test->renderer_string);
+      g_assert_cmpstr (version, ==, test->version_string);
+      g_assert_cmpstr (messages, ==, test->messages);
+      g_assert_cmpint (exit_status, ==, test->exit_status);
+      g_assert_cmpint (terminating_signal, ==, 0);
+      g_free (tuple);
+      g_free (renderer);
+      g_free (version);
+      g_free (messages);
+
+      g_object_unref (graphics);
+      g_object_unref (info);
+    }
 }
 
 static gint
@@ -2720,28 +2355,11 @@ main (int argc,
   g_test_init (&argc, &argv, NULL);
   g_test_add ("/graphics/object", Fixture, NULL,
               setup, test_object, teardown);
-  g_test_add ("/graphics/good", Fixture, NULL,
-              setup, test_good_graphics, teardown);
-  g_test_add ("/graphics/bad", Fixture, NULL,
-              setup, test_bad_graphics, teardown);
-  g_test_add ("/graphics/hanging", Fixture, NULL,
-              setup, test_timeout_graphics, teardown);
-  g_test_add ("/graphics/software", Fixture, NULL,
-              setup, test_software_rendering, teardown);
   g_test_add ("/graphics/normalize_window_system", Fixture, NULL,
               setup, test_normalize_window_system, teardown);
-  g_test_add ("/graphics/gl-mixed", Fixture, NULL,
-              setup, test_mixed_gl, teardown);
   g_test_add ("/graphics/sigusr", Fixture, NULL,
               setup, test_sigusr, teardown);
 
-  g_test_add ("/graphics/vulkan", Fixture, NULL,
-              setup, test_good_vulkan, teardown);
-  g_test_add ("/graphics/vulkan-bad", Fixture, NULL,
-              setup, test_bad_vulkan, teardown);
-  g_test_add ("/graphics/vulkan-mixed", Fixture, NULL,
-              setup, test_mixed_vulkan, teardown);
-
   g_test_add ("/graphics/icd/egl/basic", Fixture, NULL,
               setup, test_icd_egl, teardown);
   g_test_add ("/graphics/icd/egl/dirs", Fixture, &dir_config,
@@ -2778,10 +2396,9 @@ main (int argc,
 
   g_test_add ("/graphics/vdpau/basic", Fixture, NULL,
               setup, test_vdpau, teardown);
-  g_test_add ("/graphics/vdpau/good", Fixture, NULL,
-              setup, test_good_vdpau, teardown);
-  g_test_add ("/graphics/vdpau/bad", Fixture, NULL,
-              setup, test_bad_vdpau, teardown);
+
+  g_test_add ("/graphics/check", Fixture, NULL,
+              setup, test_check_graphics, teardown);
 
   g_test_add ("/graphics/glx/debian", Fixture, NULL,
               setup, test_glx_debian, teardown);