]>
git.ipfire.org Git - thirdparty/hostap.git/blob - tests/hwsim/run-tests.py
4 # Copyright (c) 2013, Jouni Malinen <j@w1.fi>
6 # This software may be distributed under the terms of the BSD license.
7 # See README for more details.
13 from datetime
import datetime
16 logger
= logging
.getLogger(__name__
)
18 from wpasupplicant
import WpaSupplicant
19 from hostapd
import HostapdGlobal
21 def reset_devs(dev
, apdev
):
22 hapd
= HostapdGlobal()
27 logger
.info("Failed to reset device " + d
.ifname
)
30 hapd
.remove(ap
['ifname'])
39 if len(sys
.argv
) > 1 and sys
.argv
[1] == '-d':
40 logging
.basicConfig(level
=logging
.DEBUG
)
42 elif len(sys
.argv
) > 1 and sys
.argv
[1] == '-q':
43 logging
.basicConfig(level
=logging
.WARNING
)
46 elif len(sys
.argv
) > 2 and sys
.argv
[1] == '-l':
47 log_file
= sys
.argv
[2]
48 logging
.basicConfig(filename
=log_file
,level
=logging
.DEBUG
)
51 logging
.basicConfig(level
=logging
.INFO
)
53 while len(sys
.argv
) > idx
:
54 if len(sys
.argv
) > idx
+ 1 and sys
.argv
[idx
] == '-e':
55 error_file
= sys
.argv
[idx
+ 1]
57 elif len(sys
.argv
) > idx
+ 1 and sys
.argv
[idx
] == '-r':
58 results_file
= sys
.argv
[idx
+ 1]
60 elif len(sys
.argv
) > idx
+ 1 and sys
.argv
[idx
] == '-f':
61 test_file
= sys
.argv
[idx
+ 1]
66 if len(sys
.argv
) > idx
:
67 test_filter
= sys
.argv
[idx
]
71 dev0
= WpaSupplicant('wlan0', '/tmp/wpas-wlan0')
72 dev1
= WpaSupplicant('wlan1', '/tmp/wpas-wlan1')
73 dev2
= WpaSupplicant('wlan2', '/tmp/wpas-wlan2')
74 dev
= [ dev0
, dev1
, dev2
]
76 apdev
.append({"ifname": 'wlan3', "bssid": "02:00:00:00:03:00"})
77 apdev
.append({"ifname": 'wlan4', "bssid": "02:00:00:00:04:00"})
81 logger
.info(d
.ifname
+ ": No response from wpa_supplicant")
83 logger
.info("DEV: " + d
.ifname
+ ": " + d
.p2p_dev_addr())
85 logger
.info("APDEV: " + ap
['ifname'])
88 for t
in os
.listdir("."):
89 m
= re
.match(r
'(test_.*)\.py$', t
)
91 if test_file
and test_file
not in t
:
93 logger
.debug("Import test cases from " + t
)
94 mod
= __import__(m
.group(1))
96 if s
.startswith("test_"):
97 func
= mod
.__dict
__.get(s
)
105 if test_filter
!= t
.__name
__:
107 reset_devs(dev
, apdev
)
108 logger
.info("START " + t
.__name
__)
110 print "START " + t
.__name
__
112 logger
.info("Test: " + t
.__doc
__)
113 start
= datetime
.now()
116 d
.request("NOTE TEST-START " + t
.__name
__)
118 logger
.info("Failed to issue TEST-START before " + t
.__name
__ + " for " + d
.ifname
)
121 if t
.func_code
.co_argcount
> 1:
125 passed
.append(t
.__name
__)
128 result
= "PASS " + t
.__name
__ + " " + str(diff
.total_seconds()) + " " + str(end
)
130 if log_file
or print_res
:
133 f
= open(results_file
, 'a')
134 f
.write(result
+ "\n")
140 failed
.append(t
.__name
__)
141 result
= "FAIL " + t
.__name
__ + " " + str(diff
.total_seconds()) + " " + str(end
)
146 f
= open(results_file
, 'a')
147 f
.write(result
+ "\n")
151 d
.request("NOTE TEST-STOP " + t
.__name
__)
153 logger
.info("Failed to issue TEST-STOP after " + t
.__name
__ + " for " + d
.ifname
)
157 reset_devs(dev
, apdev
)
160 logger
.info("passed " + str(len(passed
)) + " test case(s)")
161 logger
.info("failed tests: " + str(failed
))
163 f
= open(error_file
, 'w')
164 f
.write(str(failed
) + '\n')
167 logger
.info("passed all " + str(len(passed
)) + " test case(s)")
169 print "passed all " + str(len(passed
)) + " test case(s)"
171 if __name__
== "__main__":