run-ap-tests.py 2.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596
  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, hapd_ifaces):
  16. for d in dev:
  17. d.reset()
  18. hapd = HostapdGlobal()
  19. for h in hapd_ifaces:
  20. hapd.remove(h)
  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. dev = [ dev0, dev1 ]
  38. hapd_ifaces = [ 'wlan2', 'wlan3' ]
  39. for d in dev:
  40. if not d.ping():
  41. print d.ifname + ": No response from wpa_supplicant"
  42. return
  43. d.reset()
  44. print "DEV: " + d.ifname + ": " + d.p2p_dev_addr()
  45. tests = []
  46. for t in os.listdir("."):
  47. m = re.match(r'(test_ap_.*)\.py$', t)
  48. if m:
  49. print "Import test cases from " + t
  50. mod = __import__(m.group(1))
  51. mod.add_tests(tests)
  52. passed = []
  53. failed = []
  54. for t in tests:
  55. if test_filter:
  56. #if test_filter not in t.__name__:
  57. if test_filter != t.__name__:
  58. continue
  59. reset_devs(dev, hapd_ifaces)
  60. print "START " + t.__name__
  61. if t.__doc__:
  62. print "Test: " + t.__doc__
  63. for d in dev:
  64. d.request("NOTE TEST-START " + t.__name__)
  65. try:
  66. t(dev)
  67. passed.append(t.__name__)
  68. print "PASS " + t.__name__
  69. except Exception, e:
  70. print e
  71. failed.append(t.__name__)
  72. print "FAIL " + t.__name__
  73. for d in dev:
  74. d.request("NOTE TEST-STOP " + t.__name__)
  75. if not test_filter:
  76. reset_devs(dev, hapd_ifaces)
  77. print "passed tests: " + str(passed)
  78. print "failed tests: " + str(failed)
  79. if len(failed):
  80. sys.exit(1)
  81. if __name__ == "__main__":
  82. main()