blob: 8b15c90c0ee621713b22bb5dd71193a8886e0986 [file] [log] [blame]
#!/usr/bin/env python
#-*- coding: utf-8 -*-
# Copyright (c) 2012 The WebRTC project authors. All Rights Reserved.
#
# Use of this source code is governed by a BSD-style license
# that can be found in the LICENSE file in the root of the source
# tree. An additional intellectual property rights grant can be found
# in the file PATENTS. All contributing project authors may
# be found in the AUTHORS file in the root of the source tree.
"""Contains functions for parsing the build master's transposed grid page."""
__author__ = 'phoglund@webrtc.org (Patrik Höglund)'
import unittest
import tgrid_parser
SAMPLE_FILE = """
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html
xmlns="http://www.w3.org/1999/xhtml"
lang="en"
xml:lang="en">
<head>
<title>Buildbot</title>
<link href="buildbot.css" rel="stylesheet" type="text/css" />
</head>
<body vlink="#800080">
<table class="Grid" border="0" cellspacing="0">
<tr>
<td valign="bottom" class="sourcestamp">1570</td>
<td class="build warnings"><a href="builders/Chrome/builds/109">warnings</a>
<br />
make chrome</td>
<td class="build success">
<a href="builders/Android/builds/121">OK</a></td>
<td class="build success">
<a href="builders/ChromeOS/builds/578">OK</a></td>
<td class="build success">
<a href="builders/Linux32bitDBG/builds/564">OK</a></td>
<td class="build success">
<a href="builders/Linux32bitRelease/builds/684">OK</a></td>
<td class="build success">
<a href="builders/Linux64bitDBG/builds/680">OK</a></td>
<td class="build success">
<a href="builders/Linux64bitDBG-GCC4.6/builds/5">OK</a></td>
<td class="build success">
<a href="builders/Linux64bitRelease/builds/570">OK</a></td>
<td class="build success">
<a href="builders/LinuxCLANG/builds/259">OK</a></td>
<td class="build success">
<a href="builders/LinuxVideoTest/builds/345">OK</a></td>
<td class="build success">
<a href="builders/MacOS/builds/670">OK</a></td>
<td class="build success">
<a href="builders/Win32Debug/builds/432">OK</a></td>
<td class="build success">
<a href="builders/Win32Release/builds/440">OK</a></td>
</tr>
<tr>
<td valign="bottom" class="sourcestamp">1571</td>
<td class="build warnings"><a href="builders/Chrome/builds/109">warnings</a>
<br />
make chrome</td>
<td class="build success">
<a href="builders/Android/builds/122">OK</a></td>
<td class="build success">
<a href="builders/ChromeOS/builds/579">OK</a></td>
<td class="build success">
<a href="builders/Linux32bitDBG/builds/565">OK</a></td>
<td class="build success">
<a href="builders/Linux32bitRelease/builds/685">OK</a></td>
<td class="build success">
<a href="builders/Linux64bitDBG/builds/681">OK</a></td>
<td class="build success">
<a href="builders/Linux64bitDBG-GCC4.6/builds/6">OK</a></td>
<td class="build success">
<a href="builders/Linux64bitRelease/builds/571">OK</a></td>
<td class="build success">
<a href="builders/LinuxCLANG/builds/260">OK</a></td>
<td class="build failure">
<a href="builders/LinuxVideoTest/builds/346">failed</a><br />
voe_auto_test</td>
<td class="build success">
<a href="builders/MacOS/builds/671">OK</a></td>
<td class="build running">
<a href="builders/Win32Debug/builds/441">building</a></td>
<td class="build success">
<a href="builders/Win32Release/builds/441">OK</a></td>
</tr>
</table>
</body>
</html>
"""
MINIMAL_OK = """
<tr>
<td valign="bottom" class="sourcestamp">1570</td>
<td class="build success">
<a href="builders/Android/builds/121">OK</a></td>
</tr>
"""
MINIMAL_FAIL = """
<tr>
<td valign="bottom" class="sourcestamp">1573</td>
<td class="build failure">
<a href="builders/LinuxVideoTest/builds/347">failed</a><br />
voe_auto_test</td>
</tr>
"""
MINIMAL_BUILDING = """
<tr>
<td valign="bottom" class="sourcestamp">1576</td>
<td class="build running">
<a href="builders/Win32Debug/builds/434">building</a></td>
voe_auto_test</td>
</tr>
"""
MINIMAL_WARNED = """
<tr>
<td valign="bottom" class="sourcestamp">1576</td>
<td class="build warnings">
<a href="builders/Chrome/builds/109">warnings</a><br />
make chrome</td>
</tr>
"""
class TGridParserTest(unittest.TestCase):
def test_parser_throws_exception_on_empty_html(self):
self.assertRaises(tgrid_parser.FailedToParseBuildStatus,
tgrid_parser.parse_tgrid_page, '');
def test_parser_finds_successful_bot(self):
result = tgrid_parser.parse_tgrid_page(MINIMAL_OK)
self.assertEqual(1, len(result), 'There is only one bot in the sample.')
first_mapping = result.items()[0]
self.assertEqual('1570--Android', first_mapping[0])
self.assertEqual('121--OK', first_mapping[1])
def test_parser_finds_failed_bot(self):
result = tgrid_parser.parse_tgrid_page(MINIMAL_FAIL)
self.assertEqual(1, len(result), 'There is only one bot in the sample.')
first_mapping = result.items()[0]
self.assertEqual('1573--LinuxVideoTest', first_mapping[0])
self.assertEqual('347--failed', first_mapping[1])
def test_parser_finds_building_bot(self):
result = tgrid_parser.parse_tgrid_page(MINIMAL_BUILDING)
self.assertEqual(1, len(result), 'There is only one bot in the sample.')
first_mapping = result.items()[0]
self.assertEqual('1576--Win32Debug', first_mapping[0])
self.assertEqual('434--building', first_mapping[1])
def test_parser_finds_warned_bot(self):
result = tgrid_parser.parse_tgrid_page(MINIMAL_WARNED)
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--warnings', first_mapping[1])
def test_parser_finds_all_bots_and_revisions(self):
result = tgrid_parser.parse_tgrid_page(SAMPLE_FILE)
# 2 * 13 = 26 bots in sample
self.assertEqual(26, len(result))
# Make some samples
self.assertTrue(result.has_key('1570--ChromeOS'))
self.assertEquals('578--OK', result['1570--ChromeOS'])
self.assertTrue(result.has_key('1570--Chrome'))
self.assertEquals('109--warnings', result['1570--Chrome'])
self.assertTrue(result.has_key('1570--LinuxCLANG'))
self.assertEquals('259--OK', result['1570--LinuxCLANG'])
self.assertTrue(result.has_key('1570--Win32Release'))
self.assertEquals('440--OK', result['1570--Win32Release'])
self.assertTrue(result.has_key('1571--ChromeOS'))
self.assertEquals('579--OK', result['1571--ChromeOS'])
self.assertTrue(result.has_key('1571--LinuxVideoTest'))
self.assertEquals('346--failed', result['1571--LinuxVideoTest'])
self.assertTrue(result.has_key('1571--Win32Debug'))
self.assertEquals('441--building', result['1571--Win32Debug'])
if __name__ == '__main__':
unittest.main()