diff --git a/tests/test_fail2ban.py b/tests/test_fail2ban.py index 14c00ff455e1b2cf26723f4f973b244c270cc867..6d30a34e01606097d2a396d563d163272b53c877 100755 --- a/tests/test_fail2ban.py +++ b/tests/test_fail2ban.py @@ -7,8 +7,6 @@ Checks the current state of the fail2ban service. from pathlib import Path import sys -# pylint: disable=E0401 -import dbus sys.path.append(str(Path(__file__).parents[1].resolve())) @@ -25,22 +23,43 @@ def get_service_state(name: str) -> tuple: :rtype: tuple """ - bus = dbus.SystemBus() - systemd = bus.get_object("org.freedesktop.systemd1", "/org/freedesktop/systemd1") - manager = dbus.Interface(systemd, "org.freedesktop.systemd1.Manager") - unit = manager.LoadUnit("{}.service".format(name)) - proxy = bus.get_object("org.freedesktop.systemd1", str(unit)) - - active = proxy.Get( - "org.freedesktop.systemd1.Unit", - "ActiveState", - dbus_interface="org.freedesktop.DBus.Properties", - ) - state = proxy.Get( - "org.freedesktop.systemd1.Unit", - "SubState", - dbus_interface="org.freedesktop.DBus.Properties", - ) + try: + # pylint: disable=E0401 + import dbus + except ImportError: + u.log("Using systemctl to get current state.") + returncode, output = u.exec_cmd( + "systemctl status fail2ban | grep 'Active:'", log_output=False + ) + if returncode != 0: + active = "no" + state = "not installed" + else: + info = output.replace("Active:", "").strip().split(" ") + if len(info) > 1: + active = info[0] + state = info[1].strip("()") + else: + active = "no" + state = "unknown" + else: + u.log("Using dbus to get current state.") + bus = dbus.SystemBus() + systemd = bus.get_object("org.freedesktop.systemd1", "/org/freedesktop/systemd1") + manager = dbus.Interface(systemd, "org.freedesktop.systemd1.Manager") + unit = manager.LoadUnit("{}.service".format(name)) + proxy = bus.get_object("org.freedesktop.systemd1", str(unit)) + + active = proxy.Get( + "org.freedesktop.systemd1.Unit", + "ActiveState", + dbus_interface="org.freedesktop.DBus.Properties", + ) + state = proxy.Get( + "org.freedesktop.systemd1.Unit", + "SubState", + dbus_interface="org.freedesktop.DBus.Properties", + ) return str(active), str(state)