[gnome-settings-daemon/benzea/brightness: 4/5] power: Switch brightness test to use the logind interface
- From: Benjamin Berg <bberg src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gnome-settings-daemon/benzea/brightness: 4/5] power: Switch brightness test to use the logind interface
- Date: Wed, 23 Mar 2022 14:39:32 +0000 (UTC)
commit 5671b3c3b5e00d45f6462b657f6dc83bdcb01763
Author: Benjamin Berg <bberg redhat com>
Date: Tue Mar 22 16:57:25 2022 +0100
power: Switch brightness test to use the logind interface
plugins/power/gsd-backlight.c | 36 +++++++++++++++---------------
plugins/power/test-backlight-helper | 5 -----
plugins/power/test.py | 44 +++++--------------------------------
tests/gsdtestcase.py | 9 +++++++-
4 files changed, 31 insertions(+), 63 deletions(-)
---
diff --git a/plugins/power/gsd-backlight.c b/plugins/power/gsd-backlight.c
index 8aca2c6c..dbf538a6 100644
--- a/plugins/power/gsd-backlight.c
+++ b/plugins/power/gsd-backlight.c
@@ -348,7 +348,6 @@ gsd_backlight_run_set_helper (GsdBacklight *backlight, GTask *task)
{
GSubprocess *proc = NULL;
BacklightHelperData *data = g_task_get_task_data (task);
- const gchar *gsd_backlight_helper = NULL;
GError *error = NULL;
g_assert (backlight->active_task == NULL);
@@ -359,21 +358,12 @@ gsd_backlight_run_set_helper (GsdBacklight *backlight, GTask *task)
/* This is solely for use by the test environment. If given, execute
* this helper instead of the internal helper using pkexec */
- gsd_backlight_helper = g_getenv ("GSD_BACKLIGHT_HELPER");
- if (!gsd_backlight_helper) {
- proc = g_subprocess_new (G_SUBPROCESS_FLAGS_STDOUT_SILENCE,
- &error,
- "pkexec",
- LIBEXECDIR "/gsd-backlight-helper",
- g_udev_device_get_sysfs_path (backlight->udev_device),
- data->value_str, NULL);
- } else {
- proc = g_subprocess_new (G_SUBPROCESS_FLAGS_STDOUT_SILENCE,
- &error,
- gsd_backlight_helper,
- g_udev_device_get_sysfs_path (backlight->udev_device),
- data->value_str, NULL);
- }
+ proc = g_subprocess_new (G_SUBPROCESS_FLAGS_STDOUT_SILENCE,
+ &error,
+ "pkexec",
+ LIBEXECDIR "/gsd-backlight-helper",
+ g_udev_device_get_sysfs_path (backlight->udev_device),
+ data->value_str, NULL);
if (proc == NULL) {
gsd_backlight_set_helper_return (backlight, task, -1, error);
@@ -884,8 +874,18 @@ gsd_backlight_initable_init (GInitable *initable,
g_clear_error (&logind_error);
g_clear_object (&backlight->logind_proxy);
} else {
- /* Fail on anything else */
- g_clear_object (&backlight->logind_proxy);
+ /* python-dbusmock throws a TypeError here as of 0.27.3
+ * https://github.com/martinpitt/python-dbusmock/pull/117
+ */
+ g_autofree char *dbus_error = NULL;
+
+ dbus_error = g_dbus_error_get_remote_error (logind_error);
+ if (g_strcmp0 (dbus_error, "org.freedesktop.DBus.Python.TypeError") == 0) {
+ g_clear_error (&logind_error);
+ } else {
+ /* Fail on anything else */
+ g_clear_object (&backlight->logind_proxy);
+ }
}
}
diff --git a/plugins/power/test.py b/plugins/power/test.py
index beb88b42..0dd7a68b 100755
--- a/plugins/power/test.py
+++ b/plugins/power/test.py
@@ -88,15 +88,15 @@ class PowerPluginBase(gsdtestcase.GSDTestCase):
os.environ['GSD_MOCK_EXTERNAL_MONITOR_FILE'] = self.mock_external_monitor_file
self.addCleanup(self.delete_external_monitor_file)
- self.check_logind_gnome_session()
- self.start_logind()
- self.addCleanup(self.stop_logind)
-
# Setup umockdev testbed
self.testbed = UMockdev.Testbed.new()
self.addCleanup(self.cleanup_testbed)
os.environ['UMOCKDEV_DIR'] = self.testbed.get_root_dir()
+ self.check_logind_gnome_session()
+ self.start_logind()
+ self.addCleanup(self.stop_logind)
+
# Create a mock backlight device
# Note that this function creates a different or even no backlight
# device based on the name of the test.
@@ -156,8 +156,6 @@ class PowerPluginBase(gsdtestcase.GSDTestCase):
# Disable PulseAudio output from libcanberra
env['CANBERRA_DRIVER'] = 'null'
- # Use dummy script as testing backlight helper
- env['GSD_BACKLIGHT_HELPER'] = os.path.join (project_root, 'plugins', 'power',
'test-backlight-helper')
if 'POWER_LD_PRELOAD' in env:
if 'LD_PRELOAD' in env and env['LD_PRELOAD']:
env['LD_PRELOAD'] = ':'.join((env['POWER_LD_PRELOAD'], env['LD_PRELOAD']))
@@ -1110,12 +1108,9 @@ class PowerPluginTest8(PowerPluginBase):
obj_gsd_power_screen_iface.StepUp()
self.assertEqual(self.get_brightness(), 70)
stop = time.time()
- # This needs to take more than 0.8 seconds as each write is delayed by
- # 0.2 seconds by the test backlight helper
- self.assertGreater(stop - start, 0.8)
# Now, the same thing should work fine if we step multiple times,
- # even if we are so quick that compression will happen.
+ # even if we are really quick in submitting multiple requests.
# Use a list to keep rack of replies (as integer is immutable and would
# not be modified in the outer scope)
replies = [0]
@@ -1144,35 +1139,6 @@ class PowerPluginTest8(PowerPluginBase):
self.assertEqual(replies[0], 4)
# Four steps down, so back at 50%
self.assertEqual(self.get_brightness(), 50)
- # And compression must have happened, so it should take less than 0.8s
- self.assertLess(stop - start, 0.8)
-
- def test_brightness_compression(self):
- '''Check that compression also happens when setting the property'''
-
- if self.skip_sysfs_backlight:
- self.skipTest("sysfs backlight support required for test")
-
- # Now test that the compression works correctly.
- # NOTE: Relies on the implementation detail, that the property setter
- # returns immediately rather than waiting for the brightness to
- # be updated.
- # Should this ever be fixed, then this will need to be changed to use
- # async dbus calls similar to the stepping code
-
- obj_gsd_power = self.session_bus_con.get_object(
- 'org.gnome.SettingsDaemon.Power', '/org/gnome/SettingsDaemon/Power')
- obj_gsd_power_prop_iface = dbus.Interface(obj_gsd_power, dbus.PROPERTIES_IFACE)
-
- # Quickly ramp the brightness up
- for brightness in range(70, 91):
- obj_gsd_power_prop_iface.Set('org.gnome.SettingsDaemon.Power.Screen', 'Brightness', brightness)
-
- # The brightness of 80 should be in effect after slightly more than
- # 0.4 seconds. If compression does not work as expected, this would take
- # more than 5 seconds for the 20 steps.
- time.sleep(2.0)
- self.assertEqual(self.get_brightness(), 90)
def test_brightness_uevent(self):
if self.skip_sysfs_backlight:
diff --git a/tests/gsdtestcase.py b/tests/gsdtestcase.py
index 51f18250..96a57efd 100644
--- a/tests/gsdtestcase.py
+++ b/tests/gsdtestcase.py
@@ -225,7 +225,14 @@ class GSDTestCase(X11SessionTestCase):
self.logind_obj.AddMethod('org.freedesktop.login1.Manager', 'SuspendThenHibernate', 'b', '', '')
self.logind_obj.AddMethod('org.freedesktop.login1.Manager', 'CanSuspendThenHibernate', '', 's', 'ret
= "%s"' % parameters.get('CanSuspendThenHibernate', 'yes'))
- self.logind_obj.AddMethod('org.freedesktop.login1.Session', 'SetBrightness', 'ssu', '', '')
+ # add "auto" session, it is all we really need
+ self.logind_obj.AddSession('session_test', 'seat_test', 1234, 'testuser', True)
+ obj = self.logind_obj.AddSession('auto', 'seat_test', 1234, 'testuser', True)
+ bus = self.get_dbus(True)
+ obj = bus.get_object("org.freedesktop.login1", obj)
+
+ # Monkey patch in our SetBrightness method; and make it take a little bit of time to open a window
for race conditions
+ obj.AddMethod('org.freedesktop.login1.Session', 'SetBrightness', 'ssu', '', 'import time;
time.sleep(0.1); open(os.path.join("/sys/class/" + args[0] + "/" + args[1] + "/brightness"), "w",
encoding="ascii").write(str(args[2]))')
def stop_logind(self):
'''stop mock logind'''
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]