trace-json-v1-check.py 1.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576
  1. #!/usr/bin/env python3
  2. import json
  3. import os
  4. import sys
  5. if sys.version_info[0] >= 3:
  6. unicode = str
  7. trace_file = None
  8. expand = False
  9. for i in sys.argv[1:]:
  10. if trace_file is None and not i.startswith('-'):
  11. trace_file = i
  12. continue
  13. if i in ['-e', '--expand']:
  14. expand = True
  15. assert trace_file is not None
  16. assert os.path.exists(trace_file)
  17. if expand:
  18. msg_args = ['STATUS', 'fff', 'fff;sss; SPACES !!! ', ' 42 space in string!', ' SPACES !!! ']
  19. else:
  20. msg_args = ['STATUS', 'fff', '${ASDF}', ' ${FOO} ${BAR}', ' SPACES !!! ']
  21. required_traces = [
  22. {
  23. 'args': ['STATUS', 'JSON-V1 str', 'spaces'],
  24. 'cmd': 'message',
  25. },
  26. {
  27. 'args': ['ASDF', 'fff', 'sss', ' SPACES !!! '],
  28. 'cmd': 'set',
  29. },
  30. {
  31. 'args': ['FOO', '42'],
  32. 'cmd': 'set',
  33. },
  34. {
  35. 'args': ['BAR', ' space in string!'],
  36. 'cmd': 'set',
  37. },
  38. {
  39. 'args': msg_args,
  40. 'cmd': 'message',
  41. 'frame': 3 if expand else 2
  42. },
  43. ]
  44. with open(trace_file, 'r') as fp:
  45. # Check for version (must be the first document)
  46. vers = json.loads(fp.readline())
  47. assert sorted(vers.keys()) == ['version']
  48. assert sorted(vers['version'].keys()) == ['major', 'minor']
  49. assert vers['version']['major'] == 1
  50. assert vers['version']['minor'] == 1
  51. for i in fp.readlines():
  52. line = json.loads(i)
  53. assert sorted(line.keys()) == ['args', 'cmd', 'file', 'frame', 'line', 'time']
  54. assert isinstance(line['args'], list)
  55. assert isinstance(line['cmd'], unicode)
  56. assert isinstance(line['file'], unicode)
  57. assert isinstance(line['frame'], int)
  58. assert isinstance(line['line'], int)
  59. assert isinstance(line['time'], float)
  60. for j in required_traces:
  61. # Compare the subset of required keys with line
  62. if {k: line[k] for k in j} == j:
  63. required_traces.remove(j)
  64. assert not required_traces