run-ap-tests.py 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106
  1. #!/usr/bin/python
  2. #
  3. # AP tests
  4. # Copyright (c) 2013, Jouni Malinen <j@w1.fi>
  5. #
  6. # This software may be distributed under the terms of the BSD license.
  7. # See README for more details.
  8. import os
  9. import re
  10. import sys
  11. import time
  12. import logging
  13. from wpasupplicant import WpaSupplicant
  14. from hostapd import HostapdGlobal
  15. def reset_devs(dev, apdev):
  16. for d in dev:
  17. d.reset()
  18. hapd = HostapdGlobal()
  19. for ap in apdev:
  20. hapd.remove(ap['ifname'])
  21. def main():
  22. idx = 1
  23. if len(sys.argv) > 1 and sys.argv[1] == '-d':
  24. logging.basicConfig(level=logging.DEBUG)
  25. idx = idx + 1
  26. elif len(sys.argv) > 1 and sys.argv[1] == '-q':
  27. logging.basicConfig(level=logging.WARNING)
  28. idx = idx + 1
  29. else:
  30. logging.basicConfig(level=logging.INFO)
  31. if len(sys.argv) > idx:
  32. test_filter = sys.argv[idx]
  33. else:
  34. test_filter = None
  35. dev0 = WpaSupplicant('wlan0')
  36. dev1 = WpaSupplicant('wlan1')
  37. dev2 = WpaSupplicant('wlan2')
  38. dev = [ dev0, dev1, dev2 ]
  39. apdev = [ ]
  40. apdev.append({"ifname": 'wlan3', "bssid": "02:00:00:00:03:00"})
  41. apdev.append({"ifname": 'wlan4', "bssid": "02:00:00:00:04:00"})
  42. for d in dev:
  43. if not d.ping():
  44. print d.ifname + ": No response from wpa_supplicant"
  45. return
  46. d.reset()
  47. print "DEV: " + d.ifname + ": " + d.p2p_dev_addr()
  48. for ap in apdev:
  49. print "APDEV: " + ap['ifname']
  50. tests = []
  51. for t in os.listdir("."):
  52. m = re.match(r'(test_ap_.*)\.py$', t)
  53. if m:
  54. print "Import test cases from " + t
  55. mod = __import__(m.group(1))
  56. for s in dir(mod):
  57. if s.startswith("test_"):
  58. func = mod.__dict__.get(s)
  59. tests.append(func)
  60. passed = []
  61. failed = []
  62. for t in tests:
  63. if test_filter:
  64. if test_filter != t.__name__:
  65. continue
  66. reset_devs(dev, apdev)
  67. print "START " + t.__name__
  68. if t.__doc__:
  69. print "Test: " + t.__doc__
  70. for d in dev:
  71. d.request("NOTE TEST-START " + t.__name__)
  72. try:
  73. if t.func_code.co_argcount > 1:
  74. t(dev, apdev)
  75. else:
  76. t(dev)
  77. passed.append(t.__name__)
  78. print "PASS " + t.__name__
  79. except Exception, e:
  80. print e
  81. failed.append(t.__name__)
  82. print "FAIL " + t.__name__
  83. for d in dev:
  84. d.request("NOTE TEST-STOP " + t.__name__)
  85. if not test_filter:
  86. reset_devs(dev, apdev)
  87. print "passed tests: " + str(passed)
  88. print "failed tests: " + str(failed)
  89. if len(failed):
  90. sys.exit(1)
  91. if __name__ == "__main__":
  92. main()