From 2ff254f122aee79bcb8754e704010c4a5e41eb80 Mon Sep 17 00:00:00 2001 From: Kate Hsuan Date: Thu, 22 Jan 2026 16:44:40 +0800 Subject: [PATCH] linux: integration-test: the test for SetChargeStrategy --- src/linux/integration-test.py | 58 +++++++++++++++++++++++++++++++++-- 1 file changed, 56 insertions(+), 2 deletions(-) diff --git a/src/linux/integration-test.py b/src/linux/integration-test.py index 20e8781..f4e2b34 100755 --- a/src/linux/integration-test.py +++ b/src/linux/integration-test.py @@ -372,7 +372,7 @@ class Tests(dbusmock.DBusTestCase): device, "org.freedesktop.UPower.Device", "SetChargeStrategy", - GLib.Variant("s", strategy), + GLib.Variant("(s)", (strategy,)), None, Gio.DBusCallFlags.NO_AUTO_START, -1, @@ -2946,10 +2946,64 @@ class Tests(dbusmock.DBusTestCase): supported_strategies = self.get_charge_strategies(bat0_up) self.assertEqual( supported_strategies, - [("Fast",), ("Standard",), ("Adaptive",), ("Long Life",)], + ["Fast", "Standard", "Adaptive", "Long Life"], ) self.stop_daemon() + def test_set_battery_charge_strategy(self): + """Set battery charge strategy""" + + if not self.polkit: + self.start_polkitd({}) + self.polkit_obj.SetAllowed(["org.freedesktop.UPower.set-charge-strategy"]) + + bat0 = self.testbed.add_device( + "power_supply", + "BAT1", + None, + [ + "type", + "Battery", + "present", + "1", + "status", + "unknown", + "energy_full", + "60000000", + "energy_full_design", + "80000000", + "energy_now", + "48000000", + "voltage_now", + "12000000", + "charge_control_start_threshold", + "0", + "charge_control_end_threshold", + "100", + "charge_types", + "Standard [Long_Life] Fast Adaptive", + ], + [], + ) + + self.start_daemon() + devs = self.proxy.EnumerateDevices() + self.assertEqual(len(devs), 1) + bat0_up = devs[0] + + self.assertEqual( + self.get_dbus_dev_property(bat0_up, "ChargeStrategy"), 128 # Long Life + ) + + self.set_charge_strategy(bat0_up, "Fast") + # it is a hack for umockdev, the configured value should be "[Fast]" but + # umockdev writes "Fast" + battery_name = bat0_up.split("_")[-1] + with open(f"/sys/class/power_supply/{battery_name}/charge_types") as fp: + self.assertEqual(fp.read(), "Fast") + + self.stop_daemon() + def test_battery_zero_power_draw(self): """Battery with zero power draw, e.g. in a dual-battery system"""