mirror of
https://git.kernel.org/pub/scm/network/wireless/iwd.git
synced 2024-12-22 04:32:37 +01:00
c26b0ad3db
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.
113 lines
4.2 KiB
Python
Executable File
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)
|