We can now parse exception statuses as well.
BUG= TEST= Review URL: https://webrtc-codereview.appspot.com/429002 git-svn-id: http://webrtc.googlecode.com/svn/trunk@1825 4adac7df-926f-26a2-2b94-8c16560cd09d
This commit is contained in:
parent
528df57955
commit
bfd316904a
@ -19,9 +19,18 @@ class FailedToParseBuildStatus(Exception):
|
||||
pass
|
||||
|
||||
|
||||
def _map_status(status):
|
||||
if status == 'exception':
|
||||
return 'failed'
|
||||
return status
|
||||
|
||||
|
||||
def _parse_builds(revision, html):
|
||||
"""Parses the bot list, which is a sequence of <td></td> lines.
|
||||
|
||||
See contract for parse_tgrid_page for more information on how this function
|
||||
behaves.
|
||||
|
||||
Example input:
|
||||
<td class="build success"><a href="builders/Android/builds/119">OK</a></td>
|
||||
The first regular expression group captures Android, second 119, third OK.
|
||||
@ -29,10 +38,12 @@ def _parse_builds(revision, html):
|
||||
result = {}
|
||||
|
||||
for match in re.finditer('<td.*?>.*?<a href="builders/(.+?)/builds/(\d+)">'
|
||||
'(OK|failed|building|warnings)</a>.*?</td>',
|
||||
'(OK|failed|building|warnings|exception)'
|
||||
'</a>.*?</td>',
|
||||
html, re.DOTALL):
|
||||
revision_and_bot_name = revision + "--" + match.group(1)
|
||||
build_number_and_status = match.group(2) + "--" + match.group(3)
|
||||
build_number_and_status = match.group(2) + "--" + _map_status(
|
||||
match.group(3))
|
||||
|
||||
result[revision_and_bot_name] = build_number_and_status
|
||||
|
||||
@ -56,7 +67,8 @@ def parse_tgrid_page(html):
|
||||
|
||||
Returns: A dictionary with <svn revision>--<bot name> mapped to
|
||||
<bot build number>--<status>, where status is either OK, failed,
|
||||
building or warnings.
|
||||
building or warnings. The status may be 'exception' in the input, but
|
||||
we simply map that to failed.
|
||||
"""
|
||||
result = {}
|
||||
|
||||
|
@ -133,6 +133,15 @@ make chrome</td>
|
||||
</tr>
|
||||
"""
|
||||
|
||||
MINIMAL_EXCEPTION = """
|
||||
<tr>
|
||||
<td valign="bottom" class="sourcestamp">1576</td>
|
||||
<td class="build exception">
|
||||
<a href="builders/Chrome/builds/109">exception</a><br />
|
||||
Sync</td>
|
||||
</tr>
|
||||
"""
|
||||
|
||||
class TGridParserTest(unittest.TestCase):
|
||||
def test_parser_throws_exception_on_empty_html(self):
|
||||
self.assertRaises(tgrid_parser.FailedToParseBuildStatus,
|
||||
@ -165,7 +174,7 @@ class TGridParserTest(unittest.TestCase):
|
||||
self.assertEqual('1576--Win32Debug', first_mapping[0])
|
||||
self.assertEqual('434--building', first_mapping[1])
|
||||
|
||||
def test_parser_finds_warned_bot(self):
|
||||
def test_parser_finds_warnings(self):
|
||||
result = tgrid_parser.parse_tgrid_page(MINIMAL_WARNED)
|
||||
|
||||
self.assertEqual(1, len(result), 'There is only one bot in the sample.')
|
||||
@ -174,6 +183,16 @@ class TGridParserTest(unittest.TestCase):
|
||||
self.assertEqual('1576--Chrome', first_mapping[0])
|
||||
self.assertEqual('109--warnings', first_mapping[1])
|
||||
|
||||
def test_parser_finds_exception_and_maps_to_failed(self):
|
||||
result = tgrid_parser.parse_tgrid_page(MINIMAL_EXCEPTION)
|
||||
|
||||
self.assertEqual(1, len(result), 'There is only one bot in the sample.')
|
||||
first_mapping = result.items()[0]
|
||||
|
||||
self.assertEqual('1576--Chrome', first_mapping[0])
|
||||
self.assertEqual('109--failed', first_mapping[1])
|
||||
|
||||
|
||||
def test_parser_finds_all_bots_and_revisions(self):
|
||||
result = tgrid_parser.parse_tgrid_page(SAMPLE_FILE)
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user