From efee22ef9fb57a1cc741631a7156837e0af98fc0 Mon Sep 17 00:00:00 2001 From: Ognjen Galic Date: Sat, 24 Mar 2018 13:15:59 +0100 Subject: [PATCH v2] test: add test cases for Lenovo ThinkPad systems on Linux 4.17+ The new 4.17 kernel (tbd) is defining a state of "Not Charging". for ACPI batteries on Lenovo ThinkPad systems. When such, the DisplayDevice must behave as defined in these test cases. --- src/linux/integration-test | 121 ++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 120 insertions(+), 1 deletion(-) diff --git a/src/linux/integration-test b/src/linux/integration-test index 81064dd..9bd383c 100755 --- a/src/linux/integration-test +++ b/src/linux/integration-test @@ -60,7 +60,8 @@ BATTERY_IFACE = 'org.bluez.Battery1' UP_DEVICE_STATE_CHARGING, UP_DEVICE_STATE_DISCHARGING, UP_DEVICE_STATE_EMPTY, - UP_DEVICE_STATE_FULLY_CHARGED) = (0, 1, 2, 3, 4) + UP_DEVICE_STATE_FULLY_CHARGED, + UP_DEVICE_STATE_PENDING_CHARGE) = (0, 1, 2, 3, 4, 5) (UP_DEVICE_LEVEL_UNKNOWN, UP_DEVICE_LEVEL_NONE, @@ -446,6 +447,124 @@ class Tests(dbusmock.DBusTestCase): self.assertEqual(self.get_dbus_display_property('WarningLevel'), UP_DEVICE_LEVEL_CRITICAL) self.stop_daemon() + def test_battery_thinkpad(self): + """ Test a single battery on a Lenovo ThinkPad system """ + + bat0 = self.testbed.add_device('power_supply', 'BAT0', None, + ['type', 'Battery', + 'present', '1', + 'status', 'Not Charging', + 'energy_full', '100000', + 'energy_full_design', '100000', + 'energy_now', '75000', # 75% + 'voltage_now', '12000000'], []) + + self.start_daemon() + self.assertNotEqual(self.get_dbus_display_property("State"), UP_DEVICE_STATE_UNKNOWN) + self.assertEqual(self.get_dbus_display_property("State"), UP_DEVICE_STATE_FULLY_CHARGED) + self.stop_daemon() + + self.testbed.set_attribute(bat0, "status", "Charging") + + self.start_daemon() + self.assertNotEqual(self.get_dbus_display_property("State"), UP_DEVICE_STATE_UNKNOWN) + self.assertEqual(self.get_dbus_display_property("State"), UP_DEVICE_STATE_CHARGING) + self.stop_daemon() + + self.testbed.set_attribute(bat0, "status", "Full") + + self.start_daemon() + self.assertNotEqual(self.get_dbus_display_property("State"), UP_DEVICE_STATE_UNKNOWN) + self.assertEqual(self.get_dbus_display_property("State"), UP_DEVICE_STATE_FULLY_CHARGED) + self.stop_daemon() + + def test_multiple_batteries_thinkpad(self): + """ Test multiple batteries on a Lenovo ThinkPad system """ + + bat0 = self.testbed.add_device('power_supply', 'BAT0', None, + ['type', 'Battery', + 'present', '1', + 'status', 'Not Charging', + 'energy_full', '100000', + 'energy_full_design', '100000', + 'energy_now', '75000', # 75% + 'voltage_now', '12000000'], []) + + bat1 = self.testbed.add_device('power_supply', 'BAT1', None, + ['type', 'Battery', + 'present', '1', + 'status', 'Not Charging', + 'energy_full', '100000', + 'energy_full_design', '100000', + 'energy_now', '75000', # 75% + 'voltage_now', '12000000'], []) + + # Both BAT1 and BAT0 are pending a charge + # DisplayDevice -> Fully charged + self.start_daemon() + self.assertNotEqual(self.get_dbus_display_property("State"), UP_DEVICE_STATE_UNKNOWN) + self.assertEqual(self.get_dbus_display_property("State"), UP_DEVICE_STATE_FULLY_CHARGED) + self.stop_daemon() + + self.testbed.set_attribute(bat0, "status", "Charging") + + # BAT0 is charging, BAT1 is pending a charge + # DisplayDevice -> Charging + self.start_daemon() + self.assertNotEqual(self.get_dbus_display_property("State"), UP_DEVICE_STATE_UNKNOWN) + self.assertEqual(self.get_dbus_display_property("State"), UP_DEVICE_STATE_CHARGING) + self.stop_daemon() + + self.testbed.set_attribute(bat0, "status", "Not Charging") + self.testbed.set_attribute(bat1, "status", "Charging") + + # BAT0 is pending a charge, BAT1 is charging + # DisplayDevice -> Charging + self.start_daemon() + self.assertNotEqual(self.get_dbus_display_property("State"), UP_DEVICE_STATE_UNKNOWN) + self.assertEqual(self.get_dbus_display_property("State"), UP_DEVICE_STATE_CHARGING) + self.stop_daemon() + + self.testbed.set_attribute(bat0, "status", "Charging") + self.testbed.set_attribute(bat1, "status", "Charging") + + # BAT0 is charging, BAT1 is charging + # DisplayDevice -> Charging + self.start_daemon() + self.assertNotEqual(self.get_dbus_display_property("State"), UP_DEVICE_STATE_UNKNOWN) + self.assertEqual(self.get_dbus_display_property("State"), UP_DEVICE_STATE_CHARGING) + self.stop_daemon() + + self.testbed.set_attribute(bat0, "status", "Full") + self.testbed.set_attribute(bat1, "status", "Full") + + # BAT0 is full and BAT1 is full + # DisplayDevice -> Fully charged + self.start_daemon() + self.assertNotEqual(self.get_dbus_display_property("State"), UP_DEVICE_STATE_UNKNOWN) + self.assertEqual(self.get_dbus_display_property("State"), UP_DEVICE_STATE_FULLY_CHARGED) + self.stop_daemon() + + self.testbed.set_attribute(bat0, "status", "Not Charging") + self.testbed.set_attribute(bat1, "status", "Full") + + # BAT0 is pending a charge, BAT1 is full + # DisplayDevice -> Fully charged + self.start_daemon() + self.assertNotEqual(self.get_dbus_display_property("State"), UP_DEVICE_STATE_UNKNOWN) + self.assertEqual(self.get_dbus_display_property("State"), UP_DEVICE_STATE_FULLY_CHARGED) + self.stop_daemon() + + self.testbed.set_attribute(bat0, "status", "Full") + self.testbed.set_attribute(bat1, "status", "Not Charging") + + # BAT0 is full, BAT1 is pending a charge + # DisplayDevice -> Fully charged + self.start_daemon() + self.assertNotEqual(self.get_dbus_display_property("State"), UP_DEVICE_STATE_UNKNOWN) + self.assertEqual(self.get_dbus_display_property("State"), UP_DEVICE_STATE_FULLY_CHARGED) + self.stop_daemon() + def test_unknown_battery_status_no_ac(self): '''Unknown battery charge status, no AC''' -- 2.15.1