예제 #1
0
    def test_list_removal_and_addition(self):
        wd = IWD(start_iwd_daemon=True)

        known_networks = wd.list_known_networks()
        self.assertEqual(len(known_networks), 3)

        wd.forget_known_network(known_networks[0])

        known_networks = wd.list_known_networks()
        self.assertEqual(len(known_networks), 2)

        self.connect_to_new_network(wd)

        known_networks = wd.list_known_networks()
        self.assertEqual(len(known_networks), 3)

        for net in known_networks:
            wd.forget_known_network(net)

        known_networks = wd.list_known_networks()
        self.assertEqual(len(known_networks), 0)
예제 #2
0
    def test_connection_success(self):
        wd = IWD(True, '/tmp')

        hapd_hotspot = HostapdCLI(config='ssidHotspot.conf')
        hapd_wpa = HostapdCLI(config='ssidWPA2-1.conf')

        self.assertEqual(len(wd.list_known_networks()), 2)

        devices = wd.list_devices(1)
        device = devices[0]

        condition = 'obj.scanning'
        wd.wait_for_object_condition(device, condition)

        condition = 'not obj.scanning'
        wd.wait_for_object_condition(device, condition)

        wpa_network = device.get_ordered_network("ssidWPA2-1")
        self.assertEqual(wpa_network.type, NetworkType.psk)

        #
        # First make sure we can connect to a provisioned, non-Hotspot network,
        # while there are hotspot networks in range. This should result in
        # autoconnect *after* ANQP is performed
        #
        condition = 'obj.state == DeviceState.connected'
        wd.wait_for_object_condition(device, condition)

        testutil.test_iface_operstate()
        testutil.test_ifaces_connected(device.name, hapd_wpa.ifname)

        #
        # Remove provisioning file, this should cause a disconnect.
        #
        os.remove("/tmp/iwd/ssidWPA2-1.psk")

        condition = 'obj.state == DeviceState.disconnected'
        wd.wait_for_object_condition(device, condition)

        condition = 'len(obj.list_known_networks()) == 1'
        wd.wait_for_object_condition(wd, condition)

        condition = 'obj.scanning'
        wd.wait_for_object_condition(device, condition)

        condition = 'not obj.scanning'
        wd.wait_for_object_condition(device, condition)

        hotspot_network = device.get_ordered_network("Hotspot")
        self.assertEqual(hotspot_network.type, NetworkType.eap)

        #
        # Since there are no other provisioned networks, we should do ANQP and
        # autoconnect to the hotspot network.
        #
        condition = 'obj.state == DeviceState.connected'
        wd.wait_for_object_condition(device, condition)

        testutil.test_iface_operstate()
        testutil.test_ifaces_connected(device.name, hapd_hotspot.ifname)

        os.remove('/tmp/iwd/hotspot/autoconnect.conf')

        #
        # make sure removal of hotspot conf file resulted in disconnect
        #
        condition = 'obj.state == DeviceState.disconnected'
        wd.wait_for_object_condition(device, condition)

        IWD.copy_to_storage('ssidWPA2-1.psk')

        condition = 'len(obj.list_known_networks()) == 1'
        wd.wait_for_object_condition(wd, condition)

        condition = 'obj.scanning'
        wd.wait_for_object_condition(device, condition)

        condition = 'not obj.scanning'
        wd.wait_for_object_condition(device, condition)

        hotspot_network = device.get_ordered_network("ssidWPA2-1")
        self.assertEqual(hotspot_network.type, NetworkType.psk)

        condition = 'obj.state == DeviceState.connected'
        wd.wait_for_object_condition(device, condition)

        testutil.test_iface_operstate()
        testutil.test_ifaces_connected(device.name, hapd_wpa.ifname)

        device.disconnect()
예제 #3
0
    def test_connection_success(self):
        wd = IWD(True, '/tmp')

        psk_agent = PSKAgent("secret123")
        wd.register_psk_agent(psk_agent)

        devices = wd.list_devices(1)
        device = devices[0]

        condition = 'not obj.scanning'
        wd.wait_for_object_condition(device, condition)

        device.scan()

        condition = 'not obj.scanning'
        wd.wait_for_object_condition(device, condition)

        #
        # Connect to the PSK network, then Hotspot so IWD creates 2 entries in
        # the known frequency file.
        #

        self.connect_network(wd, device, 'ssidCCMP')

        wd.unregister_psk_agent(psk_agent)

        psk_agent = PSKAgent('abc', ('domain\\user', 'testpasswd'))
        wd.register_psk_agent(psk_agent)

        self.connect_network(wd, device, 'Hotspot')

        wd.unregister_psk_agent(psk_agent)

        psk_freqs = None
        psk_uuid = None
        hs20_freqs = None
        hs20_uuid = None
        config = ConfigParser()
        config.read('/var/lib/iwd/.known_network.freq')
        for s in config.sections():
            if os.path.basename(config[s]['name']) == 'ssidCCMP.psk':
                psk_freqs = config[s]['list']
                psk_freqs = psk_freqs.split(' ')
                psk_uuid = s
            elif os.path.basename(config[s]['name']) == 'example.conf':
                hs20_freqs = config[s]['list']
                hs20_freqs = hs20_freqs.split(' ')
                hs20_uuid = s

        #
        # Verify the frequencies are what we expect
        #
        self.assertIsNotNone(psk_freqs)
        self.assertIsNotNone(psk_uuid)
        self.assertIn('5180', psk_freqs)
        self.assertIn('2412', psk_freqs)

        self.assertIsNotNone(hs20_freqs)
        self.assertIsNotNone(hs20_uuid)
        self.assertIn('2412', hs20_freqs)

        #
        # Forget all know networks, this should remove all entries in the
        # known frequencies file.
        #
        for n in wd.list_known_networks():
            n.forget()

        psk_agent = PSKAgent("secret123")
        wd.register_psk_agent(psk_agent)

        #
        # Reconnect, this should generate a completely new UUID since we
        # previously forgot the network.
        #
        self.connect_network(wd, device, 'ssidCCMP')

        wd.unregister_psk_agent(psk_agent)

        #
        # Ensure that a new UUID was created and that we still have the same
        # frequencies listed.
        #
        psk_freqs = None
        psk_uuid2 = None
        hs20_freqs = None
        config = ConfigParser()
        config.read('/var/lib/iwd/.known_network.freq')
        for s in config.sections():
            self.assertNotEqual(os.path.basename(config[s]['name']),
                                'example.conf')
            if os.path.basename(config[s]['name']) == 'ssidCCMP.psk':
                psk_freqs = config[s]['list']
                psk_freqs = psk_freqs.split(' ')
                psk_uuid2 = s

        self.assertIsNotNone(psk_freqs)
        self.assertIsNotNone(psk_uuid2)
        self.assertNotEqual(psk_uuid, psk_uuid2)
        self.assertIn('5180', psk_freqs)
        self.assertIn('2412', psk_freqs)