3
0
mirror of https://git.kernel.org/pub/scm/network/wireless/iwd.git synced 2024-11-05 03:29:24 +01:00
iwd/autotests/test2AP/twoNetworksTest.py
Andrew Zaborowski c26b0ad3db autotest: Simplify iterating over network objects
Where the code just needs to find all of the network objects, don't look
for the device objects first because this only adds overhead.  With
the structure now having three levels it can be even more confusing,
especially in getCurrentlyConnectedNetworkName where the outer loop
didn't check for the Device interface.

In getNetworkList don't return after the first device's networks are
listed.
2016-07-13 10:33:34 -05:00

113 lines
4.2 KiB
Python
Executable File

#!/usr/bin/python3
#built-in python libraries
import unittest
from gi.repository import GLib
import dbus
import dbus.service
import dbus.mainloop.glib
import time
import threading
import logging
from subprocess import Popen
import sys
import os
sys.path.append('../utility') #needed to import all the utlilty modules
import utility
def getSecondNetworkToConnect(objectList, firstNetworkName):
logger.debug(sys._getframe().f_code.co_name)
for path in objectList:
if utility.IWD_NETWORK_INTERFACE not in objectList[path]:
continue
network = objectList[path][utility.IWD_NETWORK_INTERFACE]
# skip the first connected network
if network["Name"] == firstNetworkName:
continue
return path
return ""
class TestTwoNetworks(unittest.TestCase):
# connect to network A. disconnect from network A.
# connect to network B. disconnect from network B.
def connectToNetwork(self, networkToConnect):
# start simpleAgent
proc = Popen([sys.executable, '../utility/simpleAgent.py'])
time.sleep(2)
network = dbus.Interface(bus.get_object(utility.IWD_SERVICE,
networkToConnect),
utility.IWD_NETWORK_INTERFACE)
status = utility.connect(networkToConnect, self, mainloop, bus)
if status == False:
#terminate proc
proc.terminate()
return
connectedNetworkName = utility.getCurrentlyConnectedNetworkName()
logger.info("Currently connected to: %s", connectedNetworkName)
self.assertIn(connectedNetworkName, networkListToMatch)
# remove the network we just matched from the list
networkListToMatch.remove(connectedNetworkName)
# wait 2 seconds before initiating disconnect
time.sleep(2)
# retrieve the deviceId form networkToConnect. This will be used
# for checking if we are disconnecting from the right device later.
deviceIdIndex = networkToConnect.rfind("/", 0,
len(networkToConnect))
deviceIdOfConnectedNetwork = networkToConnect[0:deviceIdIndex]
deviceIdToDisconnect = utility.getCurrentlyConnectedDevice()
logger.info("Disconnecting from: %s", deviceIdToDisconnect)
self.assertEqual(deviceIdToDisconnect, deviceIdOfConnectedNetwork)
utility.disconnect(deviceIdToDisconnect, mainloop, bus)
#terminate proc
proc.terminate()
return connectedNetworkName
def doConnectDisconnectTwoNetworks(self):
objectList = utility.getObjectList(bus)
networkToConnect = utility.getNetworkToConnectTo(objectList)
# check if networkToConnect is not null. If yes, restart program
# so that the network list is updated. Alternatively, we can scan
# for networks.
if (networkToConnect == ""):
time.sleep(2)
logger.debug("RESTART PROGRAM")
os.execl(sys.executable, sys.executable, * sys.argv)
self.assertNotEqual(networkToConnect, "")
# connect to 1st network
connectedNetworkName = self.connectToNetwork(networkToConnect)
# connect to the 2nd network
secondNetworkToConnect = getSecondNetworkToConnect(objectList,
connectedNetworkName)
connectedNetwork = self.connectToNetwork(secondNetworkToConnect)
def test_twoNetworks(self):
logger.info(sys._getframe().f_code.co_name)
while (True):
if bus.name_has_owner(utility.IWD_SERVICE) == True:
break
self.doConnectDisconnectTwoNetworks()
@classmethod
def setUpClass(cls):
global logger, bus, mainloop, networkListToMatch
utility.initLogger()
logger = logging.getLogger(__name__)
mainloop = GLib.MainLoop()
dbus.mainloop.glib.DBusGMainLoop(set_as_default=True)
bus = dbus.SystemBus()
# we should connect to these networks - in any order
networkListToMatch = ["IntelWIFI", "PersonalWIFI"]
@classmethod
def tearDown(self):
mainloop.quit()
if __name__ == '__main__':
unittest.main(exit=True)