run-p2p-tests.py 2.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192
  1. #!/usr/bin/python
  2. #
  3. # P2P 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. def main():
  15. idx = 1
  16. if len(sys.argv) > 1 and sys.argv[1] == '-d':
  17. logging.basicConfig(level=logging.DEBUG)
  18. idx = idx + 1
  19. elif len(sys.argv) > 1 and sys.argv[1] == '-q':
  20. logging.basicConfig(level=logging.WARNING)
  21. idx = idx + 1
  22. else:
  23. logging.basicConfig(level=logging.INFO)
  24. if len(sys.argv) > idx:
  25. test_filter = sys.argv[idx]
  26. else:
  27. test_filter = None
  28. dev0 = WpaSupplicant('wlan0')
  29. dev1 = WpaSupplicant('wlan1')
  30. dev2 = WpaSupplicant('wlan2')
  31. dev = [ dev0, dev1, dev2 ]
  32. for d in dev:
  33. if not d.ping():
  34. print d.ifname + ": No response from wpa_supplicant"
  35. return
  36. d.reset()
  37. print "DEV: " + d.ifname + ": " + d.p2p_dev_addr()
  38. tests = []
  39. for t in os.listdir("."):
  40. m = re.match(r'(test_p2p_.*)\.py$', t)
  41. if m:
  42. print "Import test cases from " + t
  43. mod = __import__(m.group(1))
  44. for s in dir(mod):
  45. if s.startswith("test_"):
  46. func = mod.__dict__.get(s)
  47. tests.append(func)
  48. passed = []
  49. failed = []
  50. for t in tests:
  51. if test_filter:
  52. if test_filter != t.__name__:
  53. continue
  54. for d in dev:
  55. d.reset()
  56. print "START " + t.__name__
  57. if t.__doc__:
  58. print "Test: " + t.__doc__
  59. for d in dev:
  60. d.request("NOTE TEST-START " + t.__name__)
  61. try:
  62. t(dev)
  63. passed.append(t.__name__)
  64. print "PASS " + t.__name__
  65. except Exception, e:
  66. print e
  67. failed.append(t.__name__)
  68. print "FAIL " + t.__name__
  69. for d in dev:
  70. d.request("NOTE TEST-STOP " + t.__name__)
  71. if not test_filter:
  72. for d in dev:
  73. d.reset()
  74. print "passed tests: " + str(passed)
  75. print "failed tests: " + str(failed)
  76. if len(failed):
  77. sys.exit(1)
  78. if __name__ == "__main__":
  79. main()