buildman: Allow tests to have their own boards

Rather than reading boards.cfg, which may take time to generate and is not
necessarily suitable for running tests, create our own list of boards.

Signed-off-by: Simon Glass <sjg@chromium.org>
This commit is contained in:
Simon Glass 2014-09-05 19:00:16 -06:00
parent 8b985eebd0
commit 823e60b62a
2 changed files with 30 additions and 9 deletions

View File

@ -78,7 +78,7 @@ def ShowActions(series, why_selected, boards_selected, builder, options):
print ('Total boards to build for each commit: %d\n' %
why_selected['all'])
def DoBuildman(options, args, toolchains=None, make_func=None):
def DoBuildman(options, args, toolchains=None, make_func=None, boards=None):
"""The main control code for buildman
Args:
@ -90,6 +90,8 @@ def DoBuildman(options, args, toolchains=None, make_func=None):
to execute 'make'. If this is None, the normal function
will be used, which calls the 'make' tool with suitable
arguments. This setting is useful for tests.
board: Boards() object to use, containing a list of available
boards. If this is None it will be created and scanned.
"""
if options.full_help:
pager = os.getenv('PAGER')
@ -135,14 +137,15 @@ def DoBuildman(options, args, toolchains=None, make_func=None):
sys.exit(col.Color(col.RED, str))
# Work out what subset of the boards we are building
board_file = os.path.join(options.git, 'boards.cfg')
status = subprocess.call([os.path.join(options.git,
'tools/genboardscfg.py')])
if status != 0:
sys.exit("Failed to generate boards.cfg")
if not boards:
board_file = os.path.join(options.git, 'boards.cfg')
status = subprocess.call([os.path.join(options.git,
'tools/genboardscfg.py')])
if status != 0:
sys.exit("Failed to generate boards.cfg")
boards = board.Boards()
boards.ReadBoards(os.path.join(options.git, 'boards.cfg'))
boards = board.Boards()
boards.ReadBoards(os.path.join(options.git, 'boards.cfg'))
exclude = []
if options.exclude:

View File

@ -10,6 +10,7 @@ import sys
import tempfile
import unittest
import board
import bsettings
import cmdline
import command
@ -34,6 +35,14 @@ chromeos_daisy=VBOOT=${chroot}/build/daisy/usr ${vboot}
chromeos_peach=VBOOT=${chroot}/build/peach_pit/usr ${vboot}
'''
boards = [
['Active', 'arm', 'armv7', '', 'Tester', 'ARM Board 1', 'board0', ''],
['Active', 'arm', 'armv7', '', 'Tester', 'ARM Board 2', 'board1', ''],
['Active', 'powerpc', 'powerpc', '', 'Tester', 'PowerPC board 1', 'board2', ''],
['Active', 'powerpc', 'mpc5xx', '', 'Tester', 'PowerPC board 2', 'board3', ''],
['Active', 'sandbox', 'sandbox', '', 'Tester', 'Sandbox board', 'board4', ''],
]
class TestFunctional(unittest.TestCase):
"""Functional test for buildman.
@ -55,6 +64,9 @@ class TestFunctional(unittest.TestCase):
self._toolchains.Add('gcc', test=False)
bsettings.Setup(None)
bsettings.AddFile(settings_data)
self._boards = board.Boards()
for brd in boards:
self._boards.AddBoard(board.Board(*brd))
def tearDown(self):
shutil.rmtree(self._base_dir)
@ -67,7 +79,7 @@ class TestFunctional(unittest.TestCase):
sys.argv = [sys.argv[0]] + list(args)
options, args = cmdline.ParseArgs()
return control.DoBuildman(options, args, toolchains=self._toolchains,
make_func=self._HandleMake)
make_func=self._HandleMake, boards=self._boards)
def testFullHelp(self):
command.test_result = None
@ -194,6 +206,12 @@ class TestFunctional(unittest.TestCase):
print 'make', stage
sys.exit(1)
def testNoBoards(self):
"""Test that buildman aborts when there are no boards"""
self._boards = board.Boards()
with self.assertRaises(SystemExit):
self._RunControl()
def testCurrentSource(self):
"""Very simple test to invoke buildman on the current source"""
self._RunControl()