From 29f34cf23ca03586cbee8194e7830a92bcd18eb9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marco=20Trevisan=20=28Trevi=C3=B1o=29?= Date: Wed, 2 Dec 2020 19:26:39 +0100 Subject: [PATCH] tests/fprintd: Do not hang if we error on name appeared callback But instead only wait for name to appear and do the tests in the main function so that we can properly check the exception and depending on its type skip the test or raise it so that it can be caught by the test suite --- tests/fprintd.py | 36 ++++++++++++++++++++++++------------ 1 file changed, 24 insertions(+), 12 deletions(-) diff --git a/tests/fprintd.py b/tests/fprintd.py index ae0768e..33ad85d 100644 --- a/tests/fprintd.py +++ b/tests/fprintd.py @@ -493,28 +493,40 @@ class FPrintdManagerPreStartTests(FPrintdTest): self.manager.GetDefaultDevice() def test_manager_get_devices_on_name_appeared(self): - self._appeared_res = [] + self._appeared_name = None def on_name_appeared(connection, name, name_owner): - self._appeared_res.append(connection.call_sync('net.reactivated.Fprint', - '/net/reactivated/Fprint/Manager', - 'net.reactivated.Fprint.Manager', - 'GetDefaultDevice', None, None, - Gio.DBusCallFlags.NO_AUTO_START, 500, None)) + self._appeared_name = name + + def on_name_vanished(connection, name): + self._appeared_name = 'NAME_VANISHED' id = Gio.bus_watch_name_on_connection(self.dbus, 'net.reactivated.Fprint', Gio.BusNameWatcherFlags.NONE, - on_name_appeared, None) + on_name_appeared, on_name_vanished) + self.addCleanup(Gio.bus_unwatch_name, id) self.daemon_start() - while not self._appeared_res: + while not self._appeared_name: ctx.iteration(True) - self.assertIsNotNone(self._appeared_res[0]) - dev_path = self._appeared_res[0][0] - self.assertTrue(dev_path.startswith('/net/reactivated/Fprint/Device/')) + self.assertEqual(self._appeared_name, 'net.reactivated.Fprint') - Gio.bus_unwatch_name(id) + try: + appeared_device = self.dbus.call_sync( + 'net.reactivated.Fprint', + '/net/reactivated/Fprint/Manager', + 'net.reactivated.Fprint.Manager', + 'GetDefaultDevice', None, None, + Gio.DBusCallFlags.NO_AUTO_START, 500, None) + except GLib.GError as e: + if 'net.reactivated.Fprint.Error.NoSuchDevice' in e.message: + self.skipTest("Need virtual_image device to run the test") + raise(e) + + self.assertIsNotNone(appeared_device) + [dev_path] = appeared_device + self.assertTrue(dev_path.startswith('/net/reactivated/Fprint/Device/')) class FPrintdVirtualDeviceTest(FPrintdVirtualDeviceBaseTest):