Fix bug 2046932: Puppetmaster cannot parse test result output on master branch

- Parse result fields as generic key/value pairs
- Accept empty value, e.g. INSTRUMENTATION_RESULT: stream=
This commit is contained in:
Jack Wang
2009-08-11 19:31:17 -07:00
parent 69b2b48e07
commit 16eac2a6dc
2 changed files with 222 additions and 30 deletions

View File

@@ -80,7 +80,7 @@ def _ParseInstrumentationFinishedBundle(result):
code.
"""
re_result = re.compile(r'INSTRUMENTATION_RESULT: ([^=]+)=(.+)$')
re_result = re.compile(r'INSTRUMENTATION_RESULT: ([^=]+)=(.*)$')
re_code = re.compile(r'INSTRUMENTATION_CODE: (\-?\d)$')
result_dict = {}
key = ''
@@ -135,38 +135,26 @@ class TestResult(object):
self._test_name = None
self._status_code = None
self._failure_reason = None
self._fields_map = {}
re_start_block = re.compile(
r'\s*INSTRUMENTATION_STATUS: stream=(?P<stream>.*)'
'INSTRUMENTATION_STATUS: test=(?P<test>\w+)\s+'
'INSTRUMENTATION_STATUS: class=(?P<class>[\w\.]+)\s+'
'INSTRUMENTATION_STATUS: current=(?P<current>\d+)\s+'
'INSTRUMENTATION_STATUS: numtests=(?P<numtests>\d+)\s+'
'INSTRUMENTATION_STATUS: id=.*\s+'
'INSTRUMENTATION_STATUS_CODE: 1\s*', re.DOTALL)
re_status_code = re.search(r'INSTRUMENTATION_STATUS_CODE: '
'(?P<status_code>1|0|-1|-2)', result_block_string)
re_fields = re.compile(r'INSTRUMENTATION_STATUS: '
'(?P<key>[\w.]+)=(?P<value>.*?)(?=\nINSTRUMENTATION_STATUS)', re.DOTALL)
re_end_block = re.compile(
r'\s*INSTRUMENTATION_STATUS: stream=(?P<stream>.*)'
'INSTRUMENTATION_STATUS: test=(?P<test>\w+)\s+'
'(INSTRUMENTATION_STATUS: stack=(?P<stack>.*))?'
'INSTRUMENTATION_STATUS: class=(?P<class>[\w\.]+)\s+'
'INSTRUMENTATION_STATUS: current=(?P<current>\d+)\s+'
'INSTRUMENTATION_STATUS: numtests=(?P<numtests>\d+)\s+'
'INSTRUMENTATION_STATUS: id=.*\s+'
'INSTRUMENTATION_STATUS_CODE: (?P<status_code>0|-1|-2)\s*', re.DOTALL)
for field in re_fields.finditer(result_block_string):
key, value = (field.group('key').strip(), field.group('value').strip())
if key.startswith('performance.'):
key = key[len('performance.'):]
self._fields_map[key] = value
self._fields_map.setdefault('class')
self._fields_map.setdefault('test')
start_block_match = re_start_block.match(result_block_string)
end_block_match = re_end_block.match(result_block_string)
if start_block_match:
self._test_name = "%s:%s" % (start_block_match.group('class'),
start_block_match.group('test'))
self._status_code = 1
elif end_block_match:
self._test_name = "%s:%s" % (end_block_match.group('class'),
end_block_match.group('test'))
self._status_code = int(end_block_match.group('status_code'))
self._failure_reason = end_block_match.group('stack')
self._test_name = '%s:%s' % (self._fields_map['class'],
self._fields_map['test'])
self._status_code = int(re_status_code.group('status_code'))
if 'stack' in self._fields_map:
self._failure_reason = self._fields_map['stack']
def GetTestName(self):
return self._test_name
@@ -176,3 +164,6 @@ class TestResult(object):
def GetFailureReason(self):
return self._failure_reason
def GetResultFields(self):
return self._fields_map