diff --git a/tools/quality_tracking/tgrid_parser.py b/tools/quality_tracking/tgrid_parser.py index 319c64ec4a..b255bf6c92 100644 --- a/tools/quality_tracking/tgrid_parser.py +++ b/tools/quality_tracking/tgrid_parser.py @@ -81,7 +81,7 @@ def parse_tgrid_page(html): """ result = {} - for match in re.finditer('(\d+) (.*?)', + for match in re.finditer('(\d+).*?(.*?)', html, re.DOTALL): revision = match.group(1) builds_for_revision_html = match.group(2) diff --git a/tools/quality_tracking/tgrid_parser_test.py b/tools/quality_tracking/tgrid_parser_test.py index 288376ce9a..c772ac3e62 100755 --- a/tools/quality_tracking/tgrid_parser_test.py +++ b/tools/quality_tracking/tgrid_parser_test.py @@ -492,6 +492,15 @@ MINIMAL_EXCEPTION_SLAVE_LOST = """ """ +MINIMAL_IN_TRUNK_SOURCESTAMP = """ + +1576 in trunk + + build
successful
exception
slave
lost
+ + +""" + class TGridParserTest(unittest.TestCase): def test_parser_throws_exception_on_empty_html(self): self.assertRaises(tgrid_parser.FailedToParseBuildStatus, @@ -554,6 +563,17 @@ class TGridParserTest(unittest.TestCase): self.assertEqual('1576--LinuxValgrind', first_mapping[0]) self.assertEqual('324--failed', first_mapping[1]) + def test_parser_finds_exception_slave_lost_and_maps_to_failed(self): + # Sometimes the transposed grid says "in trunk" in the source stamp, so + # make sure we deal with that. + result = tgrid_parser.parse_tgrid_page(MINIMAL_IN_TRUNK_SOURCESTAMP) + + self.assertEqual(1, len(result), 'There is only one bot in the sample.') + first_mapping = result.items()[0] + + self.assertEqual('1576--LinuxValgrind', first_mapping[0]) + self.assertEqual('324--failed', first_mapping[1]) + def test_parser_finds_all_bots_and_revisions_except_forced_builds(self): result = tgrid_parser.parse_tgrid_page(SAMPLE_FILE)