Updated to hostap_2_6
[mech_eap.git] / libeap / tests / hwsim / test_radio_work.py
1 # Radio work tests
2 # Copyright (c) 2014, Jouni Malinen <j@w1.fi>
3 #
4 # This software may be distributed under the terms of the BSD license.
5 # See README for more details.
6
7 import time
8 import logging
9 logger = logging.getLogger()
10
11 import hostapd
12 from wpasupplicant import WpaSupplicant
13
14 def test_ext_radio_work(dev, apdev):
15     """External radio work item"""
16     id = dev[0].request("RADIO_WORK add test-work-a")
17     if "FAIL" in id:
18         raise Exception("Failed to add radio work")
19     id2 = dev[0].request("RADIO_WORK add test-work-b freq=2417")
20     if "FAIL" in id2:
21         raise Exception("Failed to add radio work")
22     id3 = dev[0].request("RADIO_WORK add test-work-c")
23     if "FAIL" in id3:
24         raise Exception("Failed to add radio work")
25
26     ev = dev[0].wait_event(["EXT-RADIO-WORK-START"])
27     if ev is None:
28         raise Exception("Timeout while waiting radio work to start")
29     if "EXT-RADIO-WORK-START " + id not in ev:
30         raise Exception("Unexpected radio work start id")
31
32     items = dev[0].request("RADIO_WORK show")
33     if "ext:test-work-a@wlan0:0:1:" not in items:
34         logger.info("Pending radio work items:\n" + items)
35         raise Exception("Radio work item(a) missing from the list")
36     if "ext:test-work-b@wlan0:2417:0:" not in items:
37         logger.info("Pending radio work items:\n" + items)
38         raise Exception("Radio work item(b) missing from the list")
39     if "ext:test-work-c@wlan0:0:0:" not in items:
40         logger.info("Pending radio work items:\n" + items)
41         raise Exception("Radio work item(c) missing from the list")
42
43     dev[0].request("RADIO_WORK done " + id2)
44     dev[0].request("RADIO_WORK done " + id)
45
46     ev = dev[0].wait_event(["EXT-RADIO-WORK-START"])
47     if ev is None:
48         raise Exception("Timeout while waiting radio work to start")
49     if "EXT-RADIO-WORK-START " + id3 not in ev:
50         raise Exception("Unexpected radio work start id")
51     dev[0].request("RADIO_WORK done " + id3)
52     items = dev[0].request("RADIO_WORK show")
53     if "ext:" in items:
54         logger.info("Pending radio work items:\n" + items)
55         raise Exception("Unexpected remaining radio work item")
56
57     id = dev[0].request("RADIO_WORK add test-work timeout=1")
58     ev = dev[0].wait_event(["EXT-RADIO-WORK-START"])
59     if ev is None:
60         raise Exception("Timeout while waiting radio work to start")
61     ev = dev[0].wait_event(["EXT-RADIO-WORK-TIMEOUT"], timeout=2)
62     if ev is None:
63         raise Exception("Timeout while waiting radio work to time out")
64     if id not in ev:
65         raise Exception("Radio work id mismatch")
66
67     for i in range(5):
68         dev[0].request(("RADIO_WORK add test-work-%d-" % i) + 100*'a')
69     ev = dev[0].wait_event(["EXT-RADIO-WORK-START"])
70     if ev is None:
71         raise Exception("Timeout while waiting radio work to start")
72     if "FAIL" not in dev[0].request("RADIO_WORK done 12345678"):
73         raise Exception("Invalid RADIO_WORK done accepted")
74     if "FAIL" not in dev[0].request("RADIO_WORK foo"):
75         raise Exception("Invalid RADIO_WORK accepted")
76     dev[0].request("FLUSH")
77     items = dev[0].request("RADIO_WORK show")
78     if items != "":
79         raise Exception("Unexpected radio work remaining after FLUSH: " + items)
80
81 def test_radio_work_cancel(dev, apdev):
82     """Radio work items cancelled on interface removal"""
83     params = hostapd.wpa2_params(ssid="radio", passphrase="12345678")
84     hostapd.add_ap(apdev[0], params)
85     wpas = WpaSupplicant(global_iface='/tmp/wpas-wlan5')
86     wpas.interface_add("wlan5")
87     wpas.scan(freq="2412")
88
89     id = wpas.request("RADIO_WORK add test-work-a")
90     if "FAIL" in id:
91         raise Exception("Failed to add radio work")
92     ev = wpas.wait_event(["EXT-RADIO-WORK-START"])
93     if ev is None:
94         raise Exception("Timeout while waiting radio work to start")
95     if "EXT-RADIO-WORK-START " + id not in ev:
96         raise Exception("Unexpected radio work start id")
97
98     wpas.connect("radio", psk="12345678", scan_freq="2412",
99                    wait_connect=False)
100     time.sleep(1)
101     wpas.interface_remove("wlan5")
102     # add to allow log file renaming
103     wpas.interface_add("wlan5")