tests: Factor out creation of dytc device

This commit is contained in:
Bastien Nocera 2020-10-28 17:34:53 +01:00
parent d9beb68863
commit 169a8cd788

View file

@ -107,9 +107,13 @@ class Tests(dbusmock.DBusTestCase):
self.log = None
self.daemon = None
# Used for dytc devices
self.tp_acpi = None
def tearDown(self):
del self.testbed
self.stop_daemon()
del self.tp_acpi
# on failures, print daemon log
errors = [x[1] for x in self._outcome.errors if x[1]]
@ -208,6 +212,12 @@ class Tests(dbusmock.DBusTestCase):
return f.read()
return None
def create_dytc_device(self):
self.tp_acpi = self.testbed.add_device('platform', 'thinkpad_acpi', None,
['dytc_lapmode', '0', 'dytc_perfmode', 'H'],
[ 'DEVPATH', '/devices/platform/thinkpad_acpi' ]
)
def assertEventually(self, condition, message=None, timeout=50):
'''Assert that condition function eventually returns True.
@ -254,11 +264,7 @@ class Tests(dbusmock.DBusTestCase):
def test_inhibited_transition(self):
'''Test that transitions work as expected when inhibited'''
tp_acpi = self.testbed.add_device('platform', 'thinkpad_acpi', None,
['dytc_lapmode', '0', 'dytc_perfmode', 'H'],
[ 'DEVPATH', '/devices/platform/thinkpad_acpi' ]
)
self.create_dytc_device()
self.start_daemon()
profiles = self.get_dbus_property('Profiles')
@ -269,7 +275,7 @@ class Tests(dbusmock.DBusTestCase):
self.assertEqual(self.get_dbus_property('ActiveProfile'), 'performance')
# Inhibit
self.testbed.set_attribute(tp_acpi, 'dytc_lapmode', '1')
self.testbed.set_attribute(self.tp_acpi, 'dytc_lapmode', '1')
self.assertEventually(lambda: self.have_text_in_log('dytc_lapmode is now on'))
self.assertEqual(self.get_dbus_property('PerformanceInhibited'), 'lap-detected')
self.assertEqual(self.get_dbus_property('ActiveProfile'), 'balanced')
@ -330,11 +336,7 @@ class Tests(dbusmock.DBusTestCase):
self.stop_daemon()
# Verify that the Lenovo DYTC driver still gets preferred
tp_acpi = self.testbed.add_device('platform', 'thinkpad_acpi', None,
['dytc_lapmode', '0', 'dytc_perfmode', 'H'],
[ 'DEVPATH', '/devices/platform/thinkpad_acpi' ]
)
self.create_dytc_device()
self.start_daemon()
profiles = self.get_dbus_property('Profiles')
@ -380,11 +382,7 @@ class Tests(dbusmock.DBusTestCase):
def test_dytc_performance_driver(self):
'''Lenovo DYTC performance driver'''
tp_acpi = self.testbed.add_device('platform', 'thinkpad_acpi', None,
['dytc_lapmode', '0', 'dytc_perfmode', 'H'],
[ 'DEVPATH', '/devices/platform/thinkpad_acpi' ]
)
self.create_dytc_device()
self.start_daemon()
profiles = self.get_dbus_property('Profiles')
@ -396,41 +394,41 @@ class Tests(dbusmock.DBusTestCase):
self.assertEqual(self.get_dbus_property('ActiveProfile'), 'balanced')
# Verify that perfmode got reset
self.assertEventually(lambda: self.read_sysfs_attr(tp_acpi, 'dytc_perfmode') == b'M')
self.assertEventually(lambda: self.read_sysfs_attr(self.tp_acpi, 'dytc_perfmode') == b'M')
# lapmode detected, but performance wasn't selected anyway
self.testbed.set_attribute(tp_acpi, 'dytc_lapmode', '1')
self.testbed.set_attribute(self.tp_acpi, 'dytc_lapmode', '1')
self.assertEventually(lambda: self.get_dbus_property('PerformanceInhibited') == 'lap-detected')
self.assertEqual(self.get_dbus_property('ActiveProfile'), 'balanced')
# Reset lapmode
self.testbed.set_attribute(tp_acpi, 'dytc_lapmode', '0')
self.testbed.set_attribute(self.tp_acpi, 'dytc_lapmode', '0')
self.assertEventually(lambda: self.get_dbus_property('PerformanceInhibited') == '')
# Set performance mode
self.set_dbus_property('ActiveProfile', GLib.Variant.new_string('performance'))
self.assertEqual(self.get_dbus_property('ActiveProfile'), 'performance')
self.assertEventually(lambda: self.read_sysfs_attr(tp_acpi, 'dytc_perfmode') == b'H')
self.assertEventually(lambda: self.read_sysfs_attr(self.tp_acpi, 'dytc_perfmode') == b'H')
# And turn on lapmode
self.testbed.set_attribute(tp_acpi, 'dytc_lapmode', '1')
self.assertEventually(lambda: self.read_sysfs_attr(tp_acpi, 'dytc_perfmode') == b'M')
self.testbed.set_attribute(self.tp_acpi, 'dytc_lapmode', '1')
self.assertEventually(lambda: self.read_sysfs_attr(self.tp_acpi, 'dytc_perfmode') == b'M')
self.assertEqual(self.get_dbus_property('ActiveProfile'), 'balanced')
self.assertEqual(self.get_dbus_property('PerformanceInhibited'), 'lap-detected')
# Turn off lapmode, profile stays balanced
self.testbed.set_attribute(tp_acpi, 'dytc_lapmode', '0')
self.testbed.set_attribute(self.tp_acpi, 'dytc_lapmode', '0')
self.assertEventually(lambda: self.get_dbus_property('PerformanceInhibited') == '')
self.assertEqual(self.read_sysfs_attr(tp_acpi, 'dytc_perfmode'), b'M')
self.assertEqual(self.read_sysfs_attr(self.tp_acpi, 'dytc_perfmode'), b'M')
# Switch to power-saver mode
self.set_dbus_property('ActiveProfile', GLib.Variant.new_string('power-saver'))
self.assertEventually(lambda: self.read_sysfs_attr(tp_acpi, 'dytc_perfmode') == b'L')
self.assertEventually(lambda: self.read_sysfs_attr(self.tp_acpi, 'dytc_perfmode') == b'L')
self.assertEqual(self.get_dbus_property('ActiveProfile'), 'power-saver')
# And mimick a user pressing a Fn+H
with open(os.path.join(self.testbed.get_root_dir() + tp_acpi, "dytc_perfmode"), 'w') as perfmode:
with open(os.path.join(self.testbed.get_root_dir() + self.tp_acpi, "dytc_perfmode"), 'w') as perfmode:
perfmode.write('H')
self.assertEventually(lambda: self.get_dbus_property('ActiveProfile') == 'performance')