trace-json-v1-check.py 1.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172
  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. },
  42. ]
  43. with open(trace_file, 'r') as fp:
  44. # Check for version (must be the first document)
  45. vers = json.loads(fp.readline())
  46. assert sorted(vers.keys()) == ['version']
  47. assert sorted(vers['version'].keys()) == ['major', 'minor']
  48. assert vers['version']['major'] == 1
  49. assert vers['version']['minor'] == 0
  50. for i in fp.readlines():
  51. line = json.loads(i)
  52. assert sorted(line.keys()) == ['args', 'cmd', 'file', 'line']
  53. assert isinstance(line['args'], list)
  54. assert isinstance(line['cmd'], unicode)
  55. assert isinstance(line['file'], unicode)
  56. assert isinstance(line['line'], int)
  57. for i in required_traces:
  58. if i['cmd'] == line['cmd'] and i['args'] == line['args']:
  59. i['found'] = True
  60. assert all([x.get('found', False) == True for x in required_traces])