Skip to content

Commit

Permalink
wificontrol: Delete ReconnectWorker support
Browse files Browse the repository at this point in the history
- Delete ReconnectWorker methods calls from WiFiMonitor
- Update test cases
  • Loading branch information
merindorium committed Jun 20, 2017
1 parent 6e030af commit 8a77201
Show file tree
Hide file tree
Showing 6 changed files with 53 additions and 78 deletions.
30 changes: 26 additions & 4 deletions tests/test_edison_wificontrol.py
Original file line number Diff line number Diff line change
Expand Up @@ -82,6 +82,12 @@ def hostapd_callback(self, result):

self.callback_event.set()

def assert_wpa_state(self, network):
state, status = self.manager.get_status()

assert state == self.manager.WPA_STATE
assert status['ssid'] == network['ssid']

def wait_for_callback(self, result):
self.callback_event.wait(self.CALLBACK_TIMEOUT)
assert self.connection_result == result
Expand Down Expand Up @@ -140,10 +146,7 @@ def test_connect_to_reachable_network_from_hostap(self, valid_network):

self.wait_for_callback(1)

state, status = self.manager.get_status()

assert state == self.manager.WPA_STATE
assert status['ssid'] == valid_network['ssid']
self.assert_wpa_state(valid_network)

def test_change_names(self):
old_name = self.manager.get_device_name()
Expand Down Expand Up @@ -183,3 +186,22 @@ def test_disconnect_from_network(self, valid_network):

assert state == self.manager.WPA_STATE
assert status is None

def test_reconnection(self, valid_network, invalid_network):
self.test_connect_to_reachable_network_from_hostap(valid_network)

self.assert_wpa_state(valid_network)

self.manager.revert_on_connect_failure = self.hostapd_callback
self.callback_event.clear()

self.manager.add_network(invalid_network)
self.manager.start_connecting(invalid_network,
callback=self.manager.reconnect,
args=(valid_network,))

self.wait_for_callback(1)

self.assert_wpa_state(valid_network)

self.manager.remove_network(invalid_network)
18 changes: 18 additions & 0 deletions tests/test_wificontrol.py
Original file line number Diff line number Diff line change
Expand Up @@ -130,6 +130,24 @@ def start_connecting(*args):
assert self.manager.wpasupplicant.stop.call_count == 1
assert self.manager.hotspot.start.call_count == 1

def test_reconnection(self, ssid):
def start_connecting(result, callback, args, timeout):
self.manager.hotspot.started.return_value = False
if args:
callback({}, *args)
else:
callback(result)

self.manager.wpasupplicant.started = mock.Mock(return_value=False)
self.manager.wpasupplicant.start_connecting.side_effect = start_connecting

self.manager.hotspot.started = mock.Mock(return_value=True)

self.manager.start_connecting(ssid, callback=self.manager.reconnect,
args=(ssid,))

assert self.manager.wpasupplicant.start_connecting.call_count == 2

def test_supplicant_functions(self):
self.manager.scan()
assert self.manager.wpasupplicant.scan.call_count == 1
Expand Down
26 changes: 0 additions & 26 deletions tests/test_wifimonitor.py
Original file line number Diff line number Diff line change
Expand Up @@ -72,9 +72,6 @@ def __init__(self):
self.current_state = None
self.current_ssid = None

self.reconnect_worker = mock.MagicMock()
self.disconnect_reason = None

self._initialize()


Expand Down Expand Up @@ -155,26 +152,3 @@ def test_revert_connection_event(self, wpa_client_state, scanning_state, mocker)
self.monitor._wpa_props_changed(wpa_client_state)
assert self.monitor.current_state == self.monitor.CLIENT_STATE
stub_func.assert_called_with('revert')

def test_reconnection_worker_start(self, disconnect_state_on_station_del, wpa_client_state):
self.monitor.wifi_manager.set_ssid(self.ssid)

self.monitor._wpa_props_changed(wpa_client_state)
assert self.monitor.current_state == self.monitor.CLIENT_STATE

self.monitor._wpa_props_changed(disconnect_state_on_station_del)
assert self.monitor.current_state == self.monitor.OFF_STATE
assert self.monitor.disconnect_reason is None

kwargs = {'args': (self.monitor.current_ssid,)}
_call = mock.call('start_reconnection', **kwargs)
assert _call in self.monitor.reconnect_worker.method_calls

def test_reconnection_worker_stop(self, wpa_client_state, disconnect_state_on_station_del):
self.test_reconnection_worker_start(disconnect_state_on_station_del, wpa_client_state)

self.monitor._wpa_props_changed(wpa_client_state)
assert self.monitor.current_state == self.monitor.CLIENT_STATE

_call = mock.call('stop_reconnection')
assert _call in self.monitor.reconnect_worker.method_calls
21 changes: 9 additions & 12 deletions wificontrol/utils/dbuswpasupplicant.py
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,6 @@ class PropertyError(Exception):


class WpaSupplicantDBus(object):

_BASE_NAME = "fi.w1.wpa_supplicant1"
_BASE_PATH = "/fi/w1/wpa_supplicant1"

Expand Down Expand Up @@ -83,8 +82,8 @@ def get_interface(self, interface):
except dbus.exceptions.DBusException as error:
raise InterfaceError(error)

def create_interface(self, interface, bridge_interface=None,
driver=None, config_file=None):
def create_interface(self, interface, bridge_interface=None,
driver=None, config_file=None):
try:
wpa_interface = self.__get_interface()
except dbus.exceptions.DBusException as error:
Expand All @@ -97,7 +96,7 @@ def create_interface(self, interface, bridge_interface=None,
args["Driver"] = driver
if config_file is not None:
args["ConfigFile"] = config_file
try:
try:
return wpa_interface.CreateInterface(dbus.Dictionary(args, 'sv'))
except dbus.exceptions.DBusException as error:
raise InterfaceError(error)
Expand All @@ -107,7 +106,7 @@ def remove_interface(self, iface_path):
wpa_interface = self.__get_interface()
except dbus.exceptions.DBusException as error:
raise ServiceError(error)
else:
else:
try:
return wpa_interface.RemoveInterface(iface_path)
except dbus.exceptions.DBusException as error:
Expand Down Expand Up @@ -135,7 +134,7 @@ def get_interfaces(self):
return self.__get_property(dbus.String("Interfaces"))

def get_EAP_methods(self):
return self.__get_property(dbus.String("EapMethods"))
return self.__get_property(dbus.String("EapMethods"))

def get_capabilities(self):
return self.__get_property(dbus.String("Capabilities"))
Expand All @@ -144,14 +143,13 @@ def get_WFDIEs(self):
return self.__get_property(dbus.String("WFDIEs"))

def set_WFDIEs(self, parameter):
self.__set_property(dbus.String("WFDIEs"), dbus.Array(parameter, "y"))
self.__set_property(dbus.String("WFDIEs"), dbus.Array(parameter, "y"))

def show_wpa_supplicant_properties(self):
return self.__get_properties()


class WpaSupplicantInterface(WpaSupplicantDBus):

_INTERFACE_NAME = "fi.w1.wpa_supplicant1.Interface"

def __init__(self, interface):
Expand Down Expand Up @@ -243,7 +241,7 @@ def reassociate(self):
pass
else:
raise ServiceError(error)

def reconnect(self):
interface = self.__get_interface()
try:
Expand All @@ -265,7 +263,7 @@ def get_current_BSS(self):
return self.__get_property("CurrentBSS")

def get_BSSs(self):
return self.__get_property("BSSs")
return self.__get_property("BSSs")

def get_interface_name(self):
return self.__get_property("Ifname")
Expand Down Expand Up @@ -296,7 +294,6 @@ def get_disconnect_reason(self):


class WpaSupplicantBSS(WpaSupplicantDBus):

_BSS_NAME = "fi.w1.wpa_supplicant1.BSS"

def __init__(self):
Expand Down Expand Up @@ -352,7 +349,6 @@ def get_signal(self, bss_path):


class WpaSupplicantNetwork(WpaSupplicantDBus):

_NETWORK_NAME = "fi.w1.wpa_supplicant1.Network"

def __init__(self):
Expand All @@ -379,6 +375,7 @@ def get_network_SSID(self, network_path):
except TypeError:
return str(ssid).strip("\"")


if __name__ == '__main__':
wifi = WpaSupplicantInterface('wlp6s0')
wifi.initialize()
Expand Down
35 changes: 0 additions & 35 deletions wificontrol/wifimonitor.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,8 +5,6 @@
import logging
from wificontrol import WiFiControl
from reachstatus import StateClient
from daemon_tree import DaemonTreeObj, DaemonTreeError
from wifireconnect import WORKER_NAME

try:
from gi.repository import GObject
Expand Down Expand Up @@ -66,9 +64,6 @@ def __init__(self):
self.current_state = None
self.current_ssid = None

self.reconnect_worker = DaemonTreeObj(WORKER_NAME)
self.disconnect_reason = None

try:
self._initialize()
except dbus.exceptions.DBusException as error:
Expand Down Expand Up @@ -97,12 +92,7 @@ def _initialize(self):

def _register_local_callbacks(self):
self.register_callback(self.CLIENT_STATE, self._check_current_ssid)
self.register_callback(self.CLIENT_STATE, self._stop_reconnect_worker)

self.register_callback(self.HOST_STATE, self._clear_ssid)
self.register_callback(self.HOST_STATE, self._stop_reconnect_worker)

self.register_callback(self.OFF_STATE, self._check_disconnect_reason)

def _set_initial_state(self):
state = self.wifi_manager.get_state()
Expand All @@ -121,7 +111,6 @@ def _wpa_props_changed(self, props):
disconnect = props.get('DisconnectReason', None)

if disconnect is not None:
self.disconnect_reason = disconnect
state = 'disconnected'

if state:
Expand Down Expand Up @@ -159,27 +148,6 @@ def _ssid_updated(self):
def _clear_ssid(self):
self.current_ssid = None

def _check_disconnect_reason(self):
if self._station_went_offline:
self._start_reconnect_worker()
self.disconnect_reason = None

@property
def _station_went_offline(self):
return self.disconnect_reason in (0, 3)

def _start_reconnect_worker(self):
try:
self.reconnect_worker.call('start_reconnection', args=(self.current_ssid,))
except DaemonTreeError as error:
raise WiFiMonitorError(error)

def _stop_reconnect_worker(self):
try:
self.reconnect_worker.call('stop_reconnection')
except DaemonTreeError as error:
raise WiFiMonitorError(error)

def register_callback(self, msg, callback, args=()):
if msg not in self.callbacks:
self.callbacks[msg] = []
Expand All @@ -193,11 +161,8 @@ def _execute_callbacks(self, msg):
callback, args = callback
try:
callback(*args)
except WiFiMonitorError as error:
logger.error(error)
except Exception as error:
logger.error(error)
raise WiFiMonitorError(error)

def run(self):
self._mainloop.run()
Expand Down
1 change: 0 additions & 1 deletion wificontrol/wpasupplicant.py
Original file line number Diff line number Diff line change
Expand Up @@ -205,7 +205,6 @@ def find_network_path(self, aim_network):
if self.wpa_network_manager.get_network_SSID(network) == \
aim_network['ssid']:
return network
raise RuntimeError("Network with this ssid not found")

def get_current_network_ssid(self):
self.wpa_supplicant_interface.initialize()
Expand Down

0 comments on commit 8a77201

Please sign in to comment.