Skip to content
Snippets Groups Projects
Commit 823e60b6 authored by Simon Glass's avatar Simon Glass
Browse files

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: default avatarSimon Glass <sjg@chromium.org>
parent 8b985eeb
No related branches found
No related tags found
No related merge requests found
...@@ -78,7 +78,7 @@ def ShowActions(series, why_selected, boards_selected, builder, options): ...@@ -78,7 +78,7 @@ def ShowActions(series, why_selected, boards_selected, builder, options):
print ('Total boards to build for each commit: %d\n' % print ('Total boards to build for each commit: %d\n' %
why_selected['all']) 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 """The main control code for buildman
Args: Args:
...@@ -90,6 +90,8 @@ def DoBuildman(options, args, toolchains=None, make_func=None): ...@@ -90,6 +90,8 @@ def DoBuildman(options, args, toolchains=None, make_func=None):
to execute 'make'. If this is None, the normal function to execute 'make'. If this is None, the normal function
will be used, which calls the 'make' tool with suitable will be used, which calls the 'make' tool with suitable
arguments. This setting is useful for tests. 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: if options.full_help:
pager = os.getenv('PAGER') pager = os.getenv('PAGER')
...@@ -135,14 +137,15 @@ def DoBuildman(options, args, toolchains=None, make_func=None): ...@@ -135,14 +137,15 @@ def DoBuildman(options, args, toolchains=None, make_func=None):
sys.exit(col.Color(col.RED, str)) sys.exit(col.Color(col.RED, str))
# Work out what subset of the boards we are building # Work out what subset of the boards we are building
board_file = os.path.join(options.git, 'boards.cfg') if not boards:
status = subprocess.call([os.path.join(options.git, board_file = os.path.join(options.git, 'boards.cfg')
'tools/genboardscfg.py')]) status = subprocess.call([os.path.join(options.git,
if status != 0: 'tools/genboardscfg.py')])
sys.exit("Failed to generate boards.cfg") 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 = [] exclude = []
if options.exclude: if options.exclude:
......
...@@ -10,6 +10,7 @@ import sys ...@@ -10,6 +10,7 @@ import sys
import tempfile import tempfile
import unittest import unittest
import board
import bsettings import bsettings
import cmdline import cmdline
import command import command
...@@ -34,6 +35,14 @@ chromeos_daisy=VBOOT=${chroot}/build/daisy/usr ${vboot} ...@@ -34,6 +35,14 @@ chromeos_daisy=VBOOT=${chroot}/build/daisy/usr ${vboot}
chromeos_peach=VBOOT=${chroot}/build/peach_pit/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): class TestFunctional(unittest.TestCase):
"""Functional test for buildman. """Functional test for buildman.
...@@ -55,6 +64,9 @@ class TestFunctional(unittest.TestCase): ...@@ -55,6 +64,9 @@ class TestFunctional(unittest.TestCase):
self._toolchains.Add('gcc', test=False) self._toolchains.Add('gcc', test=False)
bsettings.Setup(None) bsettings.Setup(None)
bsettings.AddFile(settings_data) bsettings.AddFile(settings_data)
self._boards = board.Boards()
for brd in boards:
self._boards.AddBoard(board.Board(*brd))
def tearDown(self): def tearDown(self):
shutil.rmtree(self._base_dir) shutil.rmtree(self._base_dir)
...@@ -67,7 +79,7 @@ class TestFunctional(unittest.TestCase): ...@@ -67,7 +79,7 @@ class TestFunctional(unittest.TestCase):
sys.argv = [sys.argv[0]] + list(args) sys.argv = [sys.argv[0]] + list(args)
options, args = cmdline.ParseArgs() options, args = cmdline.ParseArgs()
return control.DoBuildman(options, args, toolchains=self._toolchains, return control.DoBuildman(options, args, toolchains=self._toolchains,
make_func=self._HandleMake) make_func=self._HandleMake, boards=self._boards)
def testFullHelp(self): def testFullHelp(self):
command.test_result = None command.test_result = None
...@@ -194,6 +206,12 @@ class TestFunctional(unittest.TestCase): ...@@ -194,6 +206,12 @@ class TestFunctional(unittest.TestCase):
print 'make', stage print 'make', stage
sys.exit(1) 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): def testCurrentSource(self):
"""Very simple test to invoke buildman on the current source""" """Very simple test to invoke buildman on the current source"""
self._RunControl() self._RunControl()
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment