Blob Blame History Raw
From e5b0e0948a422e5cc241efe0b55a1e841e2ca29c Mon Sep 17 00:00:00 2001
From: Benjamin Berg <bberg@redhat.com>
Date: Thu, 26 Aug 2021 14:26:40 +0200
Subject: [PATCH 1/3] tests: Set G_MESSAGES_DEBUG=all for daemon as it is
 needed

Otherwise executing the test script outside of the meson environment
will fail as the inhibitor test relies on being able to parse the log.
---
 tests/fprintd.py | 2 ++
 1 file changed, 2 insertions(+)

diff --git a/tests/fprintd.py b/tests/fprintd.py
index 8fa615f..801ee81 100644
--- a/tests/fprintd.py
+++ b/tests/fprintd.py
@@ -237,6 +237,8 @@ class FPrintdTest(dbusmock.DBusTestCase):
         env['G_DEBUG'] = 'fatal-criticals'
         env['STATE_DIRECTORY'] = (self.state_dir + ':' + '/hopefully/a/state_dir_path/that/shouldnt/be/writable')
         env['RUNTIME_DIRECTORY'] = self.run_dir
+        # The tests parses the debug output for suspend inhibitor debugging
+        env['G_MESSAGES_DEBUG'] = 'all'
 
         argv = [self.paths['daemon'], '-t']
         valgrind = os.getenv('VALGRIND')
-- 
GitLab


From 8ca81d5166b47300e99ba5637f4b3c7fa9a00cd4 Mon Sep 17 00:00:00 2001
From: Benjamin Berg <bberg@redhat.com>
Date: Thu, 26 Aug 2021 14:23:15 +0200
Subject: [PATCH 2/3] tests: Use dbusmock start_system_bus instead of GLib
 server

---
 tests/fprintd.py | 11 ++---------
 1 file changed, 2 insertions(+), 9 deletions(-)

diff --git a/tests/fprintd.py b/tests/fprintd.py
index 801ee81..6754a56 100644
--- a/tests/fprintd.py
+++ b/tests/fprintd.py
@@ -211,14 +211,8 @@ class FPrintdTest(dbusmock.DBusTestCase):
             n = os.path.basename(f)[:-4]
             cls.prints[n] = load_image(f)
 
-
-        cls.test_bus = Gio.TestDBus.new(Gio.TestDBusFlags.NONE)
-        cls.test_bus.up()
-        cls.addClassCleanup(cls.test_bus.down)
-        cls.test_bus.unset()
-        addr = cls.test_bus.get_bus_address()
-        os.environ['DBUS_SYSTEM_BUS_ADDRESS'] = addr
-        cls.dbus = Gio.DBusConnection.new_for_address_sync(addr,
+        cls.start_system_bus()
+        cls.dbus = Gio.DBusConnection.new_for_address_sync(os.environ['DBUS_SYSTEM_BUS_ADDRESS'],
             Gio.DBusConnectionFlags.MESSAGE_BUS_CONNECTION |
             Gio.DBusConnectionFlags.AUTHENTICATION_CLIENT, None, None)
         assert cls.dbus.is_closed() == False
@@ -229,7 +223,6 @@ class FPrintdTest(dbusmock.DBusTestCase):
         dbusmock.DBusTestCase.tearDownClass()
 
         del cls.dbus
-        del cls.test_bus
 
     def daemon_start(self, driver='Virtual image device for debugging'):
         timeout = get_timeout('daemon_start')  # seconds
-- 
GitLab


From 84ad711d48952e129abfad3bd2f509d30af65eb6 Mon Sep 17 00:00:00 2001
From: Benjamin Berg <bberg@redhat.com>
Date: Thu, 26 Aug 2021 14:25:12 +0200
Subject: [PATCH 3/3] tests: Better cleanup helper processes and objects

We were leaking the bus connections for the proxy objects. Also, now the
subprocesses will be forcefully killed at shutdown.
---
 tests/fprintd.py | 20 +++++++++++++++-----
 1 file changed, 15 insertions(+), 5 deletions(-)

diff --git a/tests/fprintd.py b/tests/fprintd.py
index 6754a56..f828b27 100644
--- a/tests/fprintd.py
+++ b/tests/fprintd.py
@@ -243,6 +243,7 @@ class FPrintdTest(dbusmock.DBusTestCase):
             self.valgrind = True
         self.kill_daemon = False
         self.daemon_log = OutputChecker()
+        self.addCleanup(self.daemon_log.force_close)
         self.daemon = subprocess.Popen(argv,
                                        env=env,
                                        stdout=self.daemon_log.fd,
@@ -330,14 +331,23 @@ class FPrintdTest(dbusmock.DBusTestCase):
 
         self._polkitd, self._polkitd_obj = self.spawn_server_template(
             polkitd_template, {}, stdout=subprocess.PIPE)
+        self.addCleanup(self.stop_server, '_polkitd', '_polkitd_obj')
 
         return self._polkitd
 
-    def polkitd_stop(self):
-        if self._polkitd is None:
+    def stop_server(self, proc_attr, obj_attr):
+        proc = getattr(self, proc_attr, None)
+        if proc is None:
             return
-        self._polkitd.terminate()
-        self._polkitd.wait()
+
+        proc.terminate()
+        try:
+            proc.wait(timeout=1)
+        except subprocess.TimeoutExpired as e:
+            proc.kill()
+
+        delattr(self, proc_attr)
+        delattr(self, obj_attr)
 
     def polkitd_allow_all(self):
         self._polkitd_obj.SetAllowed([FprintDevicePermission.set_username,
@@ -593,7 +603,6 @@ class FPrintdVirtualDeviceBaseTest(FPrintdVirtualImageDeviceBaseTests):
         self.manager = None
         self.device = None
         self.polkitd_start()
-        self.addCleanup(self.polkitd_stop)
 
         fifo_path = os.path.join(self.tmpdir, 'logind_inhibit_fifo')
         os.mkfifo(fifo_path)
@@ -608,6 +617,7 @@ class FPrintdVirtualDeviceBaseTest(FPrintdVirtualImageDeviceBaseTests):
                                   'ret = os.open("%s", os.O_WRONLY)\n' % fifo_path +
                                   'from gi.repository import GLib\n' +
                                   'GLib.idle_add(lambda fd: os.close(fd), ret)')
+        self.addCleanup(self.stop_server, 'logind', 'logind_obj')
         self.daemon_start(self.driver_name)
 
         self.wait_got_delay_inhibitor(timeout=5)
-- 
GitLab