mirror of
https://git.kernel.org/pub/scm/network/wireless/iwd.git
synced 2024-11-05 11:39:24 +01:00
1024562e1d
Make sure stop_ap is called on success and on failure in both tests so that one can succeed after the other has failed. Also make sure to move both interfaces out of autoconnect state.
129 lines
3.8 KiB
Python
129 lines
3.8 KiB
Python
#! /usr/bin/python3
|
|
|
|
import unittest
|
|
import sys, os
|
|
|
|
sys.path.append('../util')
|
|
import iwd
|
|
from iwd import IWD
|
|
from iwd import PSKAgent
|
|
from iwd import NetworkType
|
|
import hostapd
|
|
import testutil
|
|
|
|
class Test(unittest.TestCase):
|
|
|
|
def client_connect(self, wd, dev):
|
|
condition = 'not obj.scanning'
|
|
wd.wait_for_object_condition(dev, condition)
|
|
|
|
if not dev.get_ordered_networks():
|
|
dev.scan()
|
|
condition = 'obj.scanning'
|
|
wd.wait_for_object_condition(dev, condition)
|
|
condition = 'not obj.scanning'
|
|
wd.wait_for_object_condition(dev, condition)
|
|
|
|
ordered_networks = dev.get_ordered_networks()
|
|
|
|
ordered_network = None
|
|
for network in ordered_networks:
|
|
if network.name == 'TestAP1':
|
|
ordered_network = network
|
|
break
|
|
|
|
self.assertNotEqual(ordered_network, None)
|
|
self.assertEqual(ordered_network.name, 'TestAP1')
|
|
self.assertEqual(ordered_network.type, NetworkType.psk)
|
|
|
|
psk_agent = PSKAgent('Password1')
|
|
wd.register_psk_agent(psk_agent)
|
|
|
|
ordered_network.network_object.connect()
|
|
|
|
condition = 'obj.connected'
|
|
wd.wait_for_object_condition(ordered_network.network_object, condition)
|
|
|
|
wd.unregister_psk_agent(psk_agent)
|
|
|
|
testutil.test_iface_operstate(dev.name)
|
|
testutil.test_ifaces_connected(list(hostapd.hostapd_map.keys())[0],
|
|
dev.name)
|
|
|
|
self.assertRaises(iwd.dbus.DBusException, dev.start_ap,
|
|
'TestAP2', 'Password2')
|
|
|
|
dev.disconnect()
|
|
|
|
condition = 'not obj.connected'
|
|
wd.wait_for_object_condition(ordered_network.network_object, condition)
|
|
|
|
def test_connection_success(self):
|
|
wd = IWD()
|
|
|
|
dev1, dev2 = wd.list_devices(2)
|
|
dev1.disconnect()
|
|
dev2.disconnect()
|
|
|
|
self.client_connect(wd, dev1)
|
|
|
|
dev1.start_ap('TestAP2', 'Password2')
|
|
|
|
try:
|
|
condition = 'not obj.scanning'
|
|
wd.wait_for_object_condition(dev2, condition)
|
|
dev2.scan()
|
|
condition = 'obj.scanning'
|
|
wd.wait_for_object_condition(dev2, condition)
|
|
condition = 'not obj.scanning'
|
|
wd.wait_for_object_condition(dev2, condition)
|
|
|
|
ordered_networks = dev2.get_ordered_networks()
|
|
self.assertEqual(len(ordered_networks), 2)
|
|
networks = { n.name: n for n in ordered_networks }
|
|
self.assertEqual(networks['TestAP1'].type, NetworkType.psk)
|
|
self.assertEqual(networks['TestAP2'].type, NetworkType.psk)
|
|
|
|
psk_agent = PSKAgent('Password2')
|
|
wd.register_psk_agent(psk_agent)
|
|
|
|
try:
|
|
dev2.disconnect()
|
|
condition = 'not obj.connected'
|
|
wd.wait_for_object_condition(dev2, condition)
|
|
except:
|
|
pass
|
|
|
|
networks['TestAP2'].network_object.connect()
|
|
|
|
condition = 'obj.connected'
|
|
wd.wait_for_object_condition(networks['TestAP2'].network_object,
|
|
condition)
|
|
|
|
testutil.test_iface_operstate(dev2.name)
|
|
testutil.test_ifaces_connected(dev1.name, dev2.name)
|
|
|
|
wd.unregister_psk_agent(psk_agent)
|
|
|
|
dev2.disconnect()
|
|
|
|
condition = 'not obj.connected'
|
|
wd.wait_for_object_condition(networks['TestAP2'].network_object,
|
|
condition)
|
|
finally:
|
|
dev1.stop_ap()
|
|
|
|
# Finally test dev1 can go to client mode and connect again
|
|
self.client_connect(wd, dev1)
|
|
|
|
@classmethod
|
|
def setUpClass(cls):
|
|
pass
|
|
|
|
@classmethod
|
|
def tearDownClass(cls):
|
|
IWD.clear_storage()
|
|
|
|
if __name__ == '__main__':
|
|
unittest.main(exit=True)
|