trace-json-v1-check.py 1.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667
  1. #!/usr/bin/env python3
  2. import argparse
  3. import json
  4. import os
  5. import sys
  6. if sys.version_info[0] >= 3:
  7. unicode = str
  8. parser = argparse.ArgumentParser(description='Checks the trace output')
  9. parser.add_argument('-e', '--expand', action='store_true')
  10. parser.add_argument('trace', type=str, help='the trace file to check')
  11. args = parser.parse_args()
  12. assert os.path.exists(args.trace)
  13. if args.expand:
  14. msg_args = ['STATUS', 'fff', 'fff;sss; SPACES !!! ', ' 42 space in string!', ' SPACES !!! ']
  15. else:
  16. msg_args = ['STATUS', 'fff', '${ASDF}', ' ${FOO} ${BAR}', ' SPACES !!! ']
  17. required_traces = [
  18. {
  19. 'args': ['STATUS', 'JSON-V1 str', 'spaces'],
  20. 'cmd': 'message',
  21. },
  22. {
  23. 'args': ['ASDF', 'fff', 'sss', ' SPACES !!! '],
  24. 'cmd': 'set',
  25. },
  26. {
  27. 'args': ['FOO', '42'],
  28. 'cmd': 'set',
  29. },
  30. {
  31. 'args': ['BAR', ' space in string!'],
  32. 'cmd': 'set',
  33. },
  34. {
  35. 'args': msg_args,
  36. 'cmd': 'message',
  37. },
  38. ]
  39. with open(args.trace, 'r') as fp:
  40. # Check for version (must be the first document)
  41. vers = json.loads(fp.readline())
  42. assert sorted(vers.keys()) == ['version']
  43. assert sorted(vers['version'].keys()) == ['major', 'minor']
  44. assert vers['version']['major'] == 1
  45. assert vers['version']['minor'] == 0
  46. for i in fp.readlines():
  47. line = json.loads(i)
  48. assert sorted(line.keys()) == ['args', 'cmd', 'file', 'line']
  49. assert isinstance(line['args'], list)
  50. assert isinstance(line['cmd'], unicode)
  51. assert isinstance(line['file'], unicode)
  52. assert isinstance(line['line'], int)
  53. for j in required_traces:
  54. if j['cmd'] == line['cmd'] and j['args'] == line['args']:
  55. j['found'] = True
  56. assert all([x.get('found', False) == True for x in required_traces])