|
@@ -37,6 +37,66 @@ def test__get_login_manager():
|
|
|
assert isinstance(login_manager.CanPowerOff(), dbus.String)
|
|
|
|
|
|
|
|
|
+def test__log_shutdown_inhibitors_some(caplog):
|
|
|
+ login_manager = unittest.mock.MagicMock()
|
|
|
+ login_manager.ListInhibitors.return_value = dbus.Array(
|
|
|
+ [
|
|
|
+ dbus.Struct(
|
|
|
+ (
|
|
|
+ dbus.String("shutdown:sleep"),
|
|
|
+ dbus.String("Developer"),
|
|
|
+ dbus.String("Haven't pushed my commits yet"),
|
|
|
+ dbus.String("delay"),
|
|
|
+ dbus.UInt32(1000),
|
|
|
+ dbus.UInt32(1234),
|
|
|
+ ),
|
|
|
+ signature=None,
|
|
|
+ ),
|
|
|
+ dbus.Struct(
|
|
|
+ (
|
|
|
+ dbus.String("shutdown"),
|
|
|
+ dbus.String("Editor"),
|
|
|
+ dbus.String(""),
|
|
|
+ dbus.String("Unsafed files open"),
|
|
|
+ dbus.UInt32(0),
|
|
|
+ dbus.UInt32(42),
|
|
|
+ ),
|
|
|
+ signature=None,
|
|
|
+ ),
|
|
|
+ ],
|
|
|
+ signature=dbus.Signature("(ssssuu)"),
|
|
|
+ )
|
|
|
+ with caplog.at_level(logging.DEBUG):
|
|
|
+ systemctl_mqtt._log_shutdown_inhibitors(login_manager)
|
|
|
+ assert len(caplog.records) == 2
|
|
|
+ assert caplog.records[0].levelno == logging.DEBUG
|
|
|
+ assert (
|
|
|
+ caplog.records[0].message
|
|
|
+ == "detected shutdown inhibitor Developer (pid=1234, uid=1000, mode=delay): "
|
|
|
+ + "Haven't pushed my commits yet"
|
|
|
+ )
|
|
|
+
|
|
|
+
|
|
|
+def test__log_shutdown_inhibitors_none(caplog):
|
|
|
+ login_manager = unittest.mock.MagicMock()
|
|
|
+ login_manager.ListInhibitors.return_value = dbus.Array([])
|
|
|
+ with caplog.at_level(logging.DEBUG):
|
|
|
+ systemctl_mqtt._log_shutdown_inhibitors(login_manager)
|
|
|
+ assert len(caplog.records) == 1
|
|
|
+ assert caplog.records[0].levelno == logging.DEBUG
|
|
|
+ assert caplog.records[0].message == "no shutdown inhibitor locks found"
|
|
|
+
|
|
|
+
|
|
|
+def test__log_shutdown_inhibitors_fail(caplog):
|
|
|
+ login_manager = unittest.mock.MagicMock()
|
|
|
+ login_manager.ListInhibitors.side_effect = dbus.DBusException("mocked")
|
|
|
+ with caplog.at_level(logging.DEBUG):
|
|
|
+ systemctl_mqtt._log_shutdown_inhibitors(login_manager)
|
|
|
+ assert len(caplog.records) == 1
|
|
|
+ assert caplog.records[0].levelno == logging.WARNING
|
|
|
+ assert caplog.records[0].message == "failed to fetch shutdown inhibitors: mocked"
|
|
|
+
|
|
|
+
|
|
|
@pytest.mark.parametrize("action", ["poweroff", "reboot"])
|
|
|
def test__schedule_shutdown(action):
|
|
|
login_manager_mock = unittest.mock.MagicMock()
|
|
@@ -53,7 +113,7 @@ def test__schedule_shutdown(action):
|
|
|
)
|
|
|
delay = shutdown_datetime - datetime.datetime.now(tz=_UTC)
|
|
|
assert delay.total_seconds() == pytest.approx(
|
|
|
- datetime.timedelta(seconds=4).total_seconds(), abs=0.1,
|
|
|
+ systemctl_mqtt._SHUTDOWN_DELAY.total_seconds(), abs=0.1,
|
|
|
)
|
|
|
assert not schedule_kwargs
|
|
|
|
|
@@ -79,13 +139,14 @@ def test__schedule_shutdown_fail(caplog, action, exception_message, log_message)
|
|
|
), caplog.at_level(logging.DEBUG):
|
|
|
systemctl_mqtt._schedule_shutdown(action=action)
|
|
|
assert login_manager_mock.ScheduleShutdown.call_count == 1
|
|
|
- assert len(caplog.records) == 2
|
|
|
+ assert len(caplog.records) == 3
|
|
|
assert caplog.records[0].levelno == logging.INFO
|
|
|
assert caplog.records[0].message.startswith("scheduling {} for ".format(action))
|
|
|
assert caplog.records[1].levelno == logging.ERROR
|
|
|
assert caplog.records[1].message == "failed to schedule {}: {}".format(
|
|
|
action, log_message
|
|
|
)
|
|
|
+ assert "inhibitor" in caplog.records[2].message
|
|
|
|
|
|
|
|
|
@pytest.mark.parametrize(
|