1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123
|
# This program is free software; you can redistribute it and/or modify it under
# the terms of the GNU Lesser General Public License as published by the Free
# Software Foundation; either version 3 of the License, or (at your option) any
# later version. See http://www.gnu.org/copyleft/lgpl.html for the full text
# of the license.
__author__ = "Jussi Pakkanen"
__copyright__ = """
(c) 2015 Canonical Ltd.
(c) 2017 - 2022 Martin Pitt <martin@piware.de>
"""
import fcntl
import os
import subprocess
import sys
import unittest
import dbus
import dbusmock
def _get_urfkill_objects():
bus = dbus.SystemBus()
remote_object = bus.get_object("org.freedesktop.URfkill", "/org/freedesktop/URfkill")
iface = dbus.Interface(remote_object, "org.freedesktop.URfkill")
return (remote_object, iface)
class TestURfkill(dbusmock.DBusTestCase):
"""Test mocked URfkill"""
@classmethod
def setUpClass(cls):
cls.start_system_bus()
cls.dbus_con = cls.get_dbus(True)
def setUp(self):
(self.p_mock, self.obj_urfkill) = self.spawn_server_template("urfkill", {}, stdout=subprocess.PIPE)
# set log to nonblocking
flags = fcntl.fcntl(self.p_mock.stdout, fcntl.F_GETFL)
fcntl.fcntl(self.p_mock.stdout, fcntl.F_SETFL, flags | os.O_NONBLOCK)
self.dbusmock = dbus.Interface(self.obj_urfkill, dbusmock.MOCK_IFACE)
def tearDown(self):
self.p_mock.stdout.close()
self.p_mock.terminate()
self.p_mock.wait()
def test_mainobject(self):
(remote_object, iface) = _get_urfkill_objects()
self.assertFalse(iface.IsFlightMode())
propiface = dbus.Interface(remote_object, dbus.PROPERTIES_IFACE)
version = propiface.Get("org.freedesktop.URfkill", "DaemonVersion")
self.assertEqual(version, "0.6.0")
def test_subobjects(self):
bus = dbus.SystemBus()
individual_objects = ["BLUETOOTH", "FM", "GPS", "NFC", "UWB", "WIMAX", "WLAN", "WWAN"]
for i in individual_objects:
path = "/org/freedesktop/URfkill/" + i
remote_object = bus.get_object("org.freedesktop.URfkill", path)
propiface = dbus.Interface(remote_object, dbus.PROPERTIES_IFACE)
state = propiface.Get("org.freedesktop.URfkill.Killswitch", "state")
self.assertEqual(state, 0)
def test_block(self):
bus = dbus.SystemBus()
(_, iface) = _get_urfkill_objects()
property_object = bus.get_object("org.freedesktop.URfkill", "/org/freedesktop/URfkill/WLAN")
propiface = dbus.Interface(property_object, dbus.PROPERTIES_IFACE)
self.assertEqual(propiface.Get("org.freedesktop.URfkill.Killswitch", "state"), 0)
self.assertTrue(iface.Block(1, True))
self.assertEqual(propiface.Get("org.freedesktop.URfkill.Killswitch", "state"), 1)
self.assertTrue(iface.Block(1, False))
self.assertEqual(propiface.Get("org.freedesktop.URfkill.Killswitch", "state"), 0)
# 99 is an unknown type to the mock, so it should return false.
self.assertFalse(iface.Block(99, False))
def test_flightmode(self):
bus = dbus.SystemBus()
(_, iface) = _get_urfkill_objects()
property_object = bus.get_object("org.freedesktop.URfkill", "/org/freedesktop/URfkill/WLAN")
propiface = dbus.Interface(property_object, dbus.PROPERTIES_IFACE)
self.assertFalse(iface.IsFlightMode())
self.assertEqual(propiface.Get("org.freedesktop.URfkill.Killswitch", "state"), 0)
iface.FlightMode(True)
self.assertTrue(iface.IsFlightMode())
self.assertEqual(propiface.Get("org.freedesktop.URfkill.Killswitch", "state"), 1)
iface.FlightMode(False)
self.assertFalse(iface.IsFlightMode())
self.assertEqual(propiface.Get("org.freedesktop.URfkill.Killswitch", "state"), 0)
def test_flightmode_restore(self):
# An interface that was blocked remains blocked once flightmode is removed.
bus = dbus.SystemBus()
(_, iface) = _get_urfkill_objects()
property_object = bus.get_object("org.freedesktop.URfkill", "/org/freedesktop/URfkill/WLAN")
propiface = dbus.Interface(property_object, dbus.PROPERTIES_IFACE)
self.assertFalse(iface.IsFlightMode())
self.assertEqual(propiface.Get("org.freedesktop.URfkill.Killswitch", "state"), 0)
iface.Block(1, True)
self.assertEqual(propiface.Get("org.freedesktop.URfkill.Killswitch", "state"), 1)
iface.FlightMode(True)
self.assertTrue(iface.IsFlightMode())
self.assertEqual(propiface.Get("org.freedesktop.URfkill.Killswitch", "state"), 1)
iface.FlightMode(False)
self.assertFalse(iface.IsFlightMode())
self.assertEqual(propiface.Get("org.freedesktop.URfkill.Killswitch", "state"), 1)
if __name__ == "__main__":
# avoid writing to stderr
unittest.main(testRunner=unittest.TextTestRunner(stream=sys.stdout))
|