autotests: Update testKnownNetworks with DBus API changes

This commit is contained in:
Andrew Zaborowski 2018-07-31 16:37:08 +02:00 committed by Denis Kenzior
parent 7d3656858f
commit 5dd7bd0201
2 changed files with 36 additions and 57 deletions

View File

@ -40,7 +40,7 @@ class Test(unittest.TestCase):
known_networks = wd.list_known_networks() known_networks = wd.list_known_networks()
self.assertEqual(len(known_networks), 3) self.assertEqual(len(known_networks), 3)
wd.forget_known_network(known_networks[0]) known_networks[0].forget()
known_networks = wd.list_known_networks() known_networks = wd.list_known_networks()
self.assertEqual(len(known_networks), 2) self.assertEqual(len(known_networks), 2)
@ -51,7 +51,7 @@ class Test(unittest.TestCase):
self.assertEqual(len(known_networks), 3) self.assertEqual(len(known_networks), 3)
for net in known_networks: for net in known_networks:
wd.forget_known_network(net) net.forget()
known_networks = wd.list_known_networks() known_networks = wd.list_known_networks()
self.assertEqual(len(known_networks), 0) self.assertEqual(len(known_networks), 0)

View File

@ -9,6 +9,7 @@ import os
import threading import threading
import time import time
import collections import collections
import datetime
from abc import ABCMeta, abstractmethod from abc import ABCMeta, abstractmethod
from enum import Enum from enum import Enum
@ -26,7 +27,7 @@ IWD_WIPHY_INTERFACE = 'net.connman.iwd.Adapter'
IWD_AGENT_INTERFACE = 'net.connman.iwd.Agent' IWD_AGENT_INTERFACE = 'net.connman.iwd.Agent'
IWD_AGENT_MANAGER_INTERFACE = 'net.connman.iwd.AgentManager' IWD_AGENT_MANAGER_INTERFACE = 'net.connman.iwd.AgentManager'
IWD_DEVICE_INTERFACE = 'net.connman.iwd.Device' IWD_DEVICE_INTERFACE = 'net.connman.iwd.Device'
IWD_KNOWN_NETWORKS_INTERFACE = 'net.connman.iwd.KnownNetworks' IWD_KNOWN_NETWORK_INTERFACE = 'net.connman.iwd.KnownNetwork'
IWD_NETWORK_INTERFACE = 'net.connman.iwd.Network' IWD_NETWORK_INTERFACE = 'net.connman.iwd.Network'
IWD_WSC_INTERFACE = 'net.connman.iwd.WiFiSimpleConfiguration' IWD_WSC_INTERFACE = 'net.connman.iwd.WiFiSimpleConfiguration'
IWD_SIGNAL_AGENT_INTERFACE = 'net.connman.iwd.SignalLevelAgent' IWD_SIGNAL_AGENT_INTERFACE = 'net.connman.iwd.SignalLevelAgent'
@ -34,7 +35,6 @@ IWD_AP_INTERFACE = 'net.connman.iwd.AccessPoint'
IWD_ADHOC_INTERFACE = 'net.connman.iwd.AdHoc' IWD_ADHOC_INTERFACE = 'net.connman.iwd.AdHoc'
IWD_AGENT_MANAGER_PATH = '/' IWD_AGENT_MANAGER_PATH = '/'
IWD_KNOWN_NETWORKS_PATH = '/'
IWD_TOP_LEVEL_PATH = '/' IWD_TOP_LEVEL_PATH = '/'
@ -519,54 +519,51 @@ class Network(IWDDBusAbstract):
+ prefix + '\tConnected:\t' + str(self.connected) + prefix + '\tConnected:\t' + str(self.connected)
class KnownNetwork(): class KnownNetwork(IWDDBusAbstract):
'''Class represents a known network object.''' '''Class represents a known network object: net.connman.iwd.KnownNetwork'''
_iface_name = IWD_KNOWN_NETWORK_INTERFACE
def forget(self):
'''
Removes information saved by IWD about this network
causing it to be treated as if IWD had never connected
to it before.
'''
self._iface.Forget(dbus_interface=self._iface_name,
reply_handler=self._success,
error_handler=self._failure)
self._wait_for_async_op()
@property @property
def name(self): def name(self):
'''Contains the Name (SSID) of the network.''' '''Contains the Name (SSID) of the network.'''
return self._name return self._properties['Name']
@property @property
def type(self): def type(self):
'''Contains the type of the network.''' '''Contains the type of the network.'''
return self._type return NetworkType(self._properties['Type'])
@property @property
def last_connected_time(self): def last_connected_time(self):
''' '''
Contains the last time this network has been connected to. Contains the last time this network has been connected to.
The time is given as a string in ISO 8601 format. If the network If the network is known, but has never been successfully
is known, but has never been successfully connected to, connected to, this attribute is set to None.
this attribute is set to None.
@rtype: string @rtype: datetime
''' '''
return self._last_connected_time if 'LastConnectedTime' not in self._properties:
return None
@property val = self._properties['LastConnectedTime']
def last_seen_time(self): return datetime.datetime.strptime(val, "%Y-%m-%dT%H:%M:%SZ")
'''
Contains the last time this network has been seen in scan results.
@rtype: string
'''
return self._last_seen_time
def __init__(self, n_n_object):
self._name = n_n_object['Name']
self._type = NetworkType.from_string(n_n_object['Type'])
self._last_connected_time = n_n_object.get('LastConnectedTime')
self._last_seen_time = n_n_object.get('LastSeenTime')
def __str__(self, prefix = ''): def __str__(self, prefix = ''):
return prefix + 'Known Network:\n' \ return prefix + 'Known Network:\n' \
+ prefix + '\tName:\t' + self.name + '\n' \ + prefix + '\tName:\t' + self.name + '\n' \
+ prefix + '\tType:\t' + str(self.type) + '\n' \ + prefix + '\tType:\t' + str(self.type) + '\n' \
+ prefix + '\tLast connected:\t' + self.last_connected_time + \ + prefix + '\tLast connected:\t' + str(self.last_connected_time)
'\n' \
+ prefix + '\tLast seen:\t' + self.last_seen_time
class OrderedNetwork(object): class OrderedNetwork(object):
'''Represents a network found in the scan''' '''Represents a network found in the scan'''
@ -740,7 +737,6 @@ class IWD(AsyncOpAbstract):
_object_manager_if = None _object_manager_if = None
_agent_manager_if = None _agent_manager_if = None
_known_network_manager_if = None
_iwd_proc = None _iwd_proc = None
_devices = None _devices = None
@ -790,7 +786,7 @@ class IWD(AsyncOpAbstract):
self._object_manager_if = None self._object_manager_if = None
self._agent_manager_if = None self._agent_manager_if = None
self._known_network_manager_if = None self._known_networks = None
self._devices = None self._devices = None
self._iwd_proc.terminate() self._iwd_proc.terminate()
@ -816,15 +812,6 @@ class IWD(AsyncOpAbstract):
IWD_AGENT_MANAGER_INTERFACE) IWD_AGENT_MANAGER_INTERFACE)
return self._agent_manager_if return self._agent_manager_if
@property
def _known_network_manager(self):
if self._known_network_manager_if is None:
_known_network_manager_if =\
dbus.Interface(self._bus.get_object(IWD_SERVICE,
IWD_KNOWN_NETWORKS_PATH),
IWD_KNOWN_NETWORKS_INTERFACE)
return _known_network_manager_if
def wait_for_object_condition(self, obj, condition_str, max_wait = 15): def wait_for_object_condition(self, obj, condition_str, max_wait = 15):
self._wait_timed_out = False self._wait_timed_out = False
def wait_timeout_cb(): def wait_timeout_cb():
@ -891,26 +878,18 @@ class IWD(AsyncOpAbstract):
return list(self._devices.values()) return list(self._devices.values())
def list_known_networks(self): def list_known_networks(self):
'''Returns a list of KnownNetwork objects.''' '''Returns the list of KnownNetwork objects.'''
objects = self._object_manager.GetManagedObjects()
known_network_list = [] known_network_list = []
for n_n_object in self._known_network_manager.ListKnownNetworks(): for path in objects:
known_network = KnownNetwork(n_n_object) for interface in objects[path]:
known_network_list.append(known_network) if interface == IWD_KNOWN_NETWORK_INTERFACE:
known_network_list.append(
KnownNetwork(path, objects[path][interface]))
return known_network_list return known_network_list
def forget_known_network(self, known_network):
'''Removes the network from the 'known networks' list and
removes any associated meta-data. If the network is
currently connected, then it is automatically disconnected'''
self._known_network_manager.ForgetNetwork(
known_network.name, str(known_network.type),
dbus_interface=IWD_KNOWN_NETWORKS_INTERFACE,
reply_handler=self._success,
error_handler=self._failure)
self._wait_for_async_op()
def register_psk_agent(self, psk_agent): def register_psk_agent(self, psk_agent):
self._agent_manager.RegisterAgent( self._agent_manager.RegisterAgent(
psk_agent.path, psk_agent.path,