diff options
author | Giampaolo Rodola <g.rodola@gmail.com> | 2017-01-27 01:33:15 +0100 |
---|---|---|
committer | Giampaolo Rodola <g.rodola@gmail.com> | 2017-01-27 01:33:15 +0100 |
commit | bfc5e528574e14485d61ddad7e9a57850b9fb93e (patch) | |
tree | bfbc897ca69439d97caa58f81f76d1ada6ea24e7 | |
parent | 90b261aef4c94e364596f07711565ea250f3a10e (diff) | |
download | psutil-bfc5e528574e14485d61ddad7e9a57850b9fb93e.tar.gz |
#955: freebsd / battery: implement power_plugged field
-rw-r--r-- | psutil/_psbsd.py | 9 | ||||
-rw-r--r-- | psutil/arch/bsd/freebsd.c | 6 | ||||
-rwxr-xr-x | psutil/tests/test_bsd.py | 18 |
3 files changed, 27 insertions, 6 deletions
diff --git a/psutil/_psbsd.py b/psutil/_psbsd.py index 20f9cbcb..ea16fc61 100644 --- a/psutil/_psbsd.py +++ b/psutil/_psbsd.py @@ -401,12 +401,15 @@ def net_connections(kind): def sensors_battery(): - percent, minsleft = cext.sensors_battery() - if minsleft == -1: + percent, minsleft, power_plugged = cext.sensors_battery() + power_plugged = power_plugged == 1 + if power_plugged: secsleft = _common.POWER_TIME_UNLIMITED + elif minsleft == -1: + secsleft = _common.POWER_TIME_UNKNOWN else: secsleft = minsleft * 60 - return _common.sbattery(percent, secsleft) + return _common.sbattery(percent, secsleft, power_plugged) # ===================================================================== diff --git a/psutil/arch/bsd/freebsd.c b/psutil/arch/bsd/freebsd.c index c0286c86..0bec81d8 100644 --- a/psutil/arch/bsd/freebsd.c +++ b/psutil/arch/bsd/freebsd.c @@ -1003,14 +1003,16 @@ PyObject * psutil_sensors_battery(PyObject *self, PyObject *args) { int percent; int minsleft; + int power_plugged; size_t size = sizeof(percent); if (sysctlbyname("hw.acpi.battery.life", &percent, &size, NULL, 0)) goto error; - // -1 if power is connected if (sysctlbyname("hw.acpi.battery.time", &minsleft, &size, NULL, 0)) goto error; - return Py_BuildValue("ii", percent, minsleft); + if (sysctlbyname("hw.acpi.acline", &power_plugged, &size, NULL, 0)) + goto error; + return Py_BuildValue("iii", percent, minsleft, power_plugged); error: PyErr_SetFromErrno(PyExc_OSError); diff --git a/psutil/tests/test_bsd.py b/psutil/tests/test_bsd.py index 479237e5..ff46ab33 100755 --- a/psutil/tests/test_bsd.py +++ b/psutil/tests/test_bsd.py @@ -357,6 +357,8 @@ class FreeBSDSpecificTestCase(unittest.TestCase): btime = int(s) self.assertEqual(btime, psutil.boot_time()) + # --- sensors_battery + @unittest.skipUnless(psutil.sensors_battery(), "no battery") def test_sensors_battery(self): def secs2hours(secs): @@ -371,7 +373,21 @@ class FreeBSDSpecificTestCase(unittest.TestCase): percent = int(fields['Remaining capacity:'].replace('%', '')) remaining_time = fields['Remaining time:'] self.assertEqual(metrics.percent, percent) - self.assertEqual(secs2hours(metrics.secsleft), remaining_time) + if remaining_time == 'unknown': + self.assertEqual(metrics.secsleft, psutil.POWER_TIME_UNLIMITED) + else: + self.assertEqual(secs2hours(metrics.secsleft), remaining_time) + + def test_sensors_battery_against_sysctl(self): + self.assertEqual(psutil.sensors_battery().percent, + sysctl("hw.acpi.battery.life")) + self.assertEqual(psutil.sensors_battery().power_plugged, + sysctl("hw.acpi.acline") == 1) + secsleft = psutil.sensors_battery().secsleft + if secsleft < 0: + self.assertEqual(sysctl("hw.acpi.battery.time"), -1) + else: + self.assertEqual(secsleft, sysctl("hw.acpi.battery.time") * 60) # ===================================================================== |