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:
phoglund@webrtc.org 2012-03-02 12:37:28 +00:00
parent 528df57955
commit bfd316904a
2 changed files with 35 additions and 4 deletions

View File

@ -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 = {}

View File

@ -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)