]>
Commit | Line | Data |
---|---|---|
26b84667 JM |
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() | |
26b84667 JM |
10 | |
11 | import hostapd | |
8ec83adf | 12 | from wpasupplicant import WpaSupplicant |
26b84667 JM |
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") | |
9d89c639 JM |
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") | |
8ec83adf | 66 | |
530b519f JM |
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 | ||
8ec83adf JM |
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") | |
8b8a1864 | 84 | hostapd.add_ap(apdev[0], params) |
8ec83adf JM |
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") |