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