units.py 2.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879
  1. #!/usr/bin/env python3
  2. import sys, os
  3. import serial
  4. import re
  5. from await_flipper import flp_serial_by_name
  6. LEAK_THRESHOLD = 3000 # added until units are fixed
  7. def main():
  8. flp_serial = flp_serial_by_name(sys.argv[1])
  9. if flp_serial == "":
  10. print("Name or serial port is invalid")
  11. sys.exit(1)
  12. with serial.Serial(flp_serial, timeout=1) as flipper:
  13. flipper.baudrate = 230400
  14. flipper.flushOutput()
  15. flipper.flushInput()
  16. flipper.timeout = 300
  17. flipper.read_until(b">: ").decode("utf-8")
  18. flipper.write(b"unit_tests\r")
  19. data = flipper.read_until(b">: ").decode("utf-8")
  20. lines = data.split("\r\n")
  21. tests_re = r"Failed tests: \d{0,}"
  22. time_re = r"Consumed: \d{0,}"
  23. leak_re = r"Leaked: \d{0,}"
  24. status_re = r"Status: \w{3,}"
  25. tests_pattern = re.compile(tests_re)
  26. time_pattern = re.compile(time_re)
  27. leak_pattern = re.compile(leak_re)
  28. status_pattern = re.compile(status_re)
  29. tests, time, leak, status = None, None, None, None
  30. for line in lines:
  31. print(line)
  32. if not tests:
  33. tests = re.match(tests_pattern, line)
  34. if not time:
  35. time = re.match(time_pattern, line)
  36. if not leak:
  37. leak = re.match(leak_pattern, line)
  38. if not status:
  39. status = re.match(status_pattern, line)
  40. if leak is None or time is None or leak is None or status is None:
  41. print("Failed to get data. Or output is corrupt")
  42. sys.exit(1)
  43. leak = int(re.findall(r"[- ]\d+", leak.group(0))[0])
  44. status = re.findall(r"\w+", status.group(0))[1]
  45. tests = int(re.findall(r"\d+", tests.group(0))[0])
  46. time = int(re.findall(r"\d+", time.group(0))[0])
  47. if tests > 0 or leak > LEAK_THRESHOLD or status != "PASSED":
  48. print(f"Got {tests} failed tests.")
  49. print(f"Leaked {leak} bytes.")
  50. print(f"Status by flipper: {status}")
  51. print(f"Time elapsed {time/1000} seconds.")
  52. sys.exit(1)
  53. print(
  54. f"Tests ran successfully! Time elapsed {time/1000} seconds. Passed {tests} tests."
  55. )
  56. sys.exit(0)
  57. if __name__ == "__main__":
  58. main()