aboutsummaryrefslogtreecommitdiff
path: root/tools
diff options
context:
space:
mode:
Diffstat (limited to 'tools')
-rwxr-xr-xtools/binman/binman.py28
-rw-r--r--tools/binman/cmdline.py2
-rw-r--r--tools/binman/elf_test.py5
-rw-r--r--tools/binman/entry_test.py17
-rw-r--r--tools/binman/etype/intel_refcode.py27
-rw-r--r--tools/binman/fdt_test.py8
-rw-r--r--tools/binman/ftest.py275
-rw-r--r--tools/binman/test/001_invalid.dts (renamed from tools/binman/test/01_invalid.dts)0
-rw-r--r--tools/binman/test/002_missing_node.dts (renamed from tools/binman/test/02_missing_node.dts)0
-rw-r--r--tools/binman/test/003_empty.dts (renamed from tools/binman/test/03_empty.dts)0
-rw-r--r--tools/binman/test/004_invalid_entry.dts (renamed from tools/binman/test/04_invalid_entry.dts)0
-rw-r--r--tools/binman/test/005_simple.dts (renamed from tools/binman/test/05_simple.dts)0
-rw-r--r--tools/binman/test/006_dual_image.dts (renamed from tools/binman/test/06_dual_image.dts)0
-rw-r--r--tools/binman/test/007_bad_align.dts (renamed from tools/binman/test/07_bad_align.dts)0
-rw-r--r--tools/binman/test/008_pack.dts (renamed from tools/binman/test/08_pack.dts)0
-rw-r--r--tools/binman/test/009_pack_extra.dts (renamed from tools/binman/test/09_pack_extra.dts)0
-rw-r--r--tools/binman/test/010_pack_align_power2.dts (renamed from tools/binman/test/10_pack_align_power2.dts)0
-rw-r--r--tools/binman/test/011_pack_align_size_power2.dts (renamed from tools/binman/test/11_pack_align_size_power2.dts)0
-rw-r--r--tools/binman/test/012_pack_inv_align.dts (renamed from tools/binman/test/12_pack_inv_align.dts)0
-rw-r--r--tools/binman/test/013_pack_inv_size_align.dts (renamed from tools/binman/test/13_pack_inv_size_align.dts)0
-rw-r--r--tools/binman/test/014_pack_overlap.dts (renamed from tools/binman/test/14_pack_overlap.dts)0
-rw-r--r--tools/binman/test/015_pack_overflow.dts (renamed from tools/binman/test/15_pack_overflow.dts)0
-rw-r--r--tools/binman/test/016_pack_image_overflow.dts (renamed from tools/binman/test/16_pack_image_overflow.dts)0
-rw-r--r--tools/binman/test/017_pack_image_size.dts (renamed from tools/binman/test/17_pack_image_size.dts)0
-rw-r--r--tools/binman/test/018_pack_image_align.dts (renamed from tools/binman/test/18_pack_image_align.dts)0
-rw-r--r--tools/binman/test/019_pack_inv_image_align.dts (renamed from tools/binman/test/19_pack_inv_image_align.dts)0
-rw-r--r--tools/binman/test/020_pack_inv_image_align_power2.dts (renamed from tools/binman/test/20_pack_inv_image_align_power2.dts)0
-rw-r--r--tools/binman/test/021_image_pad.dts (renamed from tools/binman/test/21_image_pad.dts)0
-rw-r--r--tools/binman/test/022_image_name.dts (renamed from tools/binman/test/22_image_name.dts)0
-rw-r--r--tools/binman/test/023_blob.dts (renamed from tools/binman/test/23_blob.dts)0
-rw-r--r--tools/binman/test/024_sorted.dts (renamed from tools/binman/test/24_sorted.dts)0
-rw-r--r--tools/binman/test/025_pack_zero_size.dts (renamed from tools/binman/test/25_pack_zero_size.dts)0
-rw-r--r--tools/binman/test/026_pack_u_boot_dtb.dts (renamed from tools/binman/test/26_pack_u_boot_dtb.dts)0
-rw-r--r--tools/binman/test/027_pack_4gb_no_size.dts (renamed from tools/binman/test/27_pack_4gb_no_size.dts)0
-rw-r--r--tools/binman/test/028_pack_4gb_outside.dts (renamed from tools/binman/test/28_pack_4gb_outside.dts)0
-rw-r--r--tools/binman/test/029_x86-rom.dts (renamed from tools/binman/test/29_x86-rom.dts)0
-rw-r--r--tools/binman/test/030_x86-rom-me-no-desc.dts (renamed from tools/binman/test/30_x86-rom-me-no-desc.dts)0
-rw-r--r--tools/binman/test/031_x86-rom-me.dts (renamed from tools/binman/test/31_x86-rom-me.dts)0
-rw-r--r--tools/binman/test/032_intel-vga.dts (renamed from tools/binman/test/32_intel-vga.dts)0
-rw-r--r--tools/binman/test/033_x86-start16.dts (renamed from tools/binman/test/33_x86-start16.dts)0
-rw-r--r--tools/binman/test/034_x86_ucode.dts (renamed from tools/binman/test/34_x86_ucode.dts)0
-rw-r--r--tools/binman/test/035_x86_single_ucode.dts (renamed from tools/binman/test/35_x86_single_ucode.dts)0
-rw-r--r--tools/binman/test/036_u_boot_img.dts (renamed from tools/binman/test/36_u_boot_img.dts)0
-rw-r--r--tools/binman/test/037_x86_no_ucode.dts (renamed from tools/binman/test/37_x86_no_ucode.dts)0
-rw-r--r--tools/binman/test/038_x86_ucode_missing_node.dts (renamed from tools/binman/test/38_x86_ucode_missing_node.dts)0
-rw-r--r--tools/binman/test/039_x86_ucode_missing_node2.dts (renamed from tools/binman/test/39_x86_ucode_missing_node2.dts)0
-rw-r--r--tools/binman/test/040_x86_ucode_not_in_image.dts (renamed from tools/binman/test/40_x86_ucode_not_in_image.dts)0
-rw-r--r--tools/binman/test/041_unknown_pos_size.dts (renamed from tools/binman/test/41_unknown_pos_size.dts)0
-rw-r--r--tools/binman/test/042_intel-fsp.dts (renamed from tools/binman/test/42_intel-fsp.dts)0
-rw-r--r--tools/binman/test/043_intel-cmc.dts (renamed from tools/binman/test/43_intel-cmc.dts)0
-rw-r--r--tools/binman/test/044_x86_optional_ucode.dts (renamed from tools/binman/test/44_x86_optional_ucode.dts)0
-rw-r--r--tools/binman/test/045_prop_test.dts (renamed from tools/binman/test/45_prop_test.dts)0
-rw-r--r--tools/binman/test/046_intel-vbt.dts (renamed from tools/binman/test/46_intel-vbt.dts)0
-rw-r--r--tools/binman/test/047_spl_bss_pad.dts (renamed from tools/binman/test/47_spl_bss_pad.dts)0
-rw-r--r--tools/binman/test/048_x86-start16-spl.dts (renamed from tools/binman/test/48_x86-start16-spl.dts)0
-rw-r--r--tools/binman/test/049_x86_ucode_spl.dts (renamed from tools/binman/test/49_x86_ucode_spl.dts)0
-rw-r--r--tools/binman/test/050_intel_mrc.dts (renamed from tools/binman/test/50_intel_mrc.dts)0
-rw-r--r--tools/binman/test/051_u_boot_spl_dtb.dts (renamed from tools/binman/test/51_u_boot_spl_dtb.dts)0
-rw-r--r--tools/binman/test/052_u_boot_spl_nodtb.dts (renamed from tools/binman/test/52_u_boot_spl_nodtb.dts)0
-rw-r--r--tools/binman/test/053_symbols.dts (renamed from tools/binman/test/53_symbols.dts)0
-rw-r--r--tools/binman/test/054_unit_address.dts (renamed from tools/binman/test/54_unit_address.dts)0
-rw-r--r--tools/binman/test/055_sections.dts (renamed from tools/binman/test/55_sections.dts)0
-rw-r--r--tools/binman/test/056_name_prefix.dts (renamed from tools/binman/test/56_name_prefix.dts)0
-rw-r--r--tools/binman/test/057_unknown_contents.dts (renamed from tools/binman/test/57_unknown_contents.dts)0
-rw-r--r--tools/binman/test/058_x86_ucode_spl_needs_retry.dts (renamed from tools/binman/test/58_x86_ucode_spl_needs_retry.dts)0
-rw-r--r--tools/binman/test/059_change_size.dts (renamed from tools/binman/test/59_change_size.dts)0
-rw-r--r--tools/binman/test/060_fdt_update.dts (renamed from tools/binman/test/60_fdt_update.dts)0
-rw-r--r--tools/binman/test/061_fdt_update_bad.dts (renamed from tools/binman/test/61_fdt_update_bad.dts)0
-rw-r--r--tools/binman/test/062_entry_args.dts (renamed from tools/binman/test/62_entry_args.dts)0
-rw-r--r--tools/binman/test/063_entry_args_missing.dts (renamed from tools/binman/test/63_entry_args_missing.dts)0
-rw-r--r--tools/binman/test/064_entry_args_required.dts (renamed from tools/binman/test/64_entry_args_required.dts)0
-rw-r--r--tools/binman/test/065_entry_args_unknown_datatype.dts (renamed from tools/binman/test/65_entry_args_unknown_datatype.dts)0
-rw-r--r--tools/binman/test/066_text.dts (renamed from tools/binman/test/66_text.dts)0
-rw-r--r--tools/binman/test/067_fmap.dts (renamed from tools/binman/test/67_fmap.dts)0
-rw-r--r--tools/binman/test/068_blob_named_by_arg.dts (renamed from tools/binman/test/68_blob_named_by_arg.dts)0
-rw-r--r--tools/binman/test/069_fill.dts (renamed from tools/binman/test/69_fill.dts)0
-rw-r--r--tools/binman/test/070_fill_no_size.dts (renamed from tools/binman/test/70_fill_no_size.dts)0
-rw-r--r--tools/binman/test/071_gbb.dts (renamed from tools/binman/test/71_gbb.dts)0
-rw-r--r--tools/binman/test/072_gbb_too_small.dts (renamed from tools/binman/test/72_gbb_too_small.dts)0
-rw-r--r--tools/binman/test/073_gbb_no_size.dts (renamed from tools/binman/test/73_gbb_no_size.dts)0
-rw-r--r--tools/binman/test/074_vblock.dts (renamed from tools/binman/test/74_vblock.dts)0
-rw-r--r--tools/binman/test/075_vblock_no_content.dts (renamed from tools/binman/test/75_vblock_no_content.dts)0
-rw-r--r--tools/binman/test/076_vblock_bad_phandle.dts (renamed from tools/binman/test/76_vblock_bad_phandle.dts)0
-rw-r--r--tools/binman/test/077_vblock_bad_entry.dts (renamed from tools/binman/test/77_vblock_bad_entry.dts)0
-rw-r--r--tools/binman/test/078_u_boot_tpl.dts (renamed from tools/binman/test/78_u_boot_tpl.dts)0
-rw-r--r--tools/binman/test/079_uses_pos.dts (renamed from tools/binman/test/79_uses_pos.dts)0
-rw-r--r--tools/binman/test/080_fill_empty.dts (renamed from tools/binman/test/80_fill_empty.dts)0
-rw-r--r--tools/binman/test/081_x86-start16-tpl.dts (renamed from tools/binman/test/81_x86-start16-tpl.dts)0
-rw-r--r--tools/binman/test/082_fdt_update_all.dts (renamed from tools/binman/test/82_fdt_update_all.dts)0
-rw-r--r--tools/binman/test/083_compress.dts (renamed from tools/binman/test/83_compress.dts)0
-rw-r--r--tools/binman/test/084_files.dts (renamed from tools/binman/test/84_files.dts)0
-rw-r--r--tools/binman/test/085_files_compress.dts (renamed from tools/binman/test/85_files_compress.dts)0
-rw-r--r--tools/binman/test/086_files_none.dts (renamed from tools/binman/test/86_files_none.dts)0
-rw-r--r--tools/binman/test/087_files_no_pattern.dts (renamed from tools/binman/test/87_files_no_pattern.dts)0
-rw-r--r--tools/binman/test/088_expand_size.dts (renamed from tools/binman/test/88_expand_size.dts)0
-rw-r--r--tools/binman/test/089_expand_size_bad.dts (renamed from tools/binman/test/89_expand_size_bad.dts)0
-rw-r--r--tools/binman/test/090_hash.dts (renamed from tools/binman/test/90_hash.dts)0
-rw-r--r--tools/binman/test/091_hash_no_algo.dts (renamed from tools/binman/test/91_hash_no_algo.dts)0
-rw-r--r--tools/binman/test/092_hash_bad_algo.dts (renamed from tools/binman/test/92_hash_bad_algo.dts)0
-rw-r--r--tools/binman/test/093_x86_tpl_ucode.dts (renamed from tools/binman/test/93_x86_tpl_ucode.dts)0
-rw-r--r--tools/binman/test/094_fmap_x86.dts (renamed from tools/binman/test/94_fmap_x86.dts)0
-rw-r--r--tools/binman/test/095_fmap_x86_section.dts (renamed from tools/binman/test/95_fmap_x86_section.dts)0
-rw-r--r--tools/binman/test/096_elf.dts (renamed from tools/binman/test/96_elf.dts)0
-rw-r--r--tools/binman/test/097_elf_strip.dts (renamed from tools/binman/test/97_elf_strip.dts)0
-rw-r--r--tools/binman/test/099_hash_section.dts (renamed from tools/binman/test/99_hash_section.dts)0
-rw-r--r--tools/binman/test/100_intel_refcode.dts14
-rw-r--r--tools/buildman/test.py8
-rw-r--r--tools/concurrencytest/.gitignore1
-rw-r--r--tools/concurrencytest/README.md74
-rw-r--r--tools/concurrencytest/concurrencytest.py144
-rwxr-xr-xtools/dtoc/dtoc.py7
-rw-r--r--tools/dtoc/fdt.py2
-rw-r--r--tools/dtoc/test_dtoc.py6
-rwxr-xr-xtools/dtoc/test_fdt.py12
-rw-r--r--tools/patman/settings.py27
-rw-r--r--tools/patman/test_util.py2
-rw-r--r--tools/patman/tools.py3
-rw-r--r--tools/patman/tout.py8
118 files changed, 510 insertions, 160 deletions
diff --git a/tools/binman/binman.py b/tools/binman/binman.py
index 1536e95..439908e 100755
--- a/tools/binman/binman.py
+++ b/tools/binman/binman.py
@@ -10,6 +10,7 @@
"""See README for more information"""
import glob
+import multiprocessing
import os
import sys
import traceback
@@ -17,24 +18,32 @@ import unittest
# Bring in the patman and dtoc libraries
our_path = os.path.dirname(os.path.realpath(__file__))
-for dirname in ['../patman', '../dtoc', '..']:
+for dirname in ['../patman', '../dtoc', '..', '../concurrencytest']:
sys.path.insert(0, os.path.join(our_path, dirname))
# Bring in the libfdt module
sys.path.insert(0, 'scripts/dtc/pylibfdt')
+sys.path.insert(0, os.path.join(our_path,
+ '../../build-sandbox_spl/scripts/dtc/pylibfdt'))
import cmdline
import command
+use_concurrent = True
+try:
+ from concurrencytest import ConcurrentTestSuite, fork_for_tests
+except:
+ use_concurrent = False
import control
import test_util
-def RunTests(debug, args):
+def RunTests(debug, processes, args):
"""Run the functional tests and any embedded doctests
Args:
debug: True to enable debugging, which shows a full stack trace on error
args: List of positional args provided to binman. This can hold a test
name to execute (as in 'binman -t testSections', for example)
+ processes: Number of processes to use to run tests (None=same as #CPUs)
"""
import elf_test
import entry_test
@@ -52,19 +61,28 @@ def RunTests(debug, args):
sys.argv = [sys.argv[0]]
if debug:
sys.argv.append('-D')
+ if debug:
+ sys.argv.append('-D')
# Run the entry tests first ,since these need to be the first to import the
# 'entry' module.
test_name = args and args[0] or None
+ suite = unittest.TestSuite()
+ loader = unittest.TestLoader()
for module in (entry_test.TestEntry, ftest.TestFunctional, fdt_test.TestFdt,
elf_test.TestElf, image_test.TestImage):
if test_name:
try:
- suite = unittest.TestLoader().loadTestsFromName(test_name, module)
+ suite.addTests(loader.loadTestsFromName(test_name, module))
except AttributeError:
continue
else:
- suite = unittest.TestLoader().loadTestsFromTestCase(module)
+ suite.addTests(loader.loadTestsFromTestCase(module))
+ if use_concurrent and processes != 1:
+ concurrent_suite = ConcurrentTestSuite(suite,
+ fork_for_tests(processes or multiprocessing.cpu_count()))
+ concurrent_suite.run(result)
+ else:
suite.run(result)
print result
@@ -113,7 +131,7 @@ def RunBinman(options, args):
sys.tracebacklimit = 0
if options.test:
- ret_code = RunTests(options.debug, args[1:])
+ ret_code = RunTests(options.debug, options.processes, args[1:])
elif options.test_coverage:
RunTestCoverage()
diff --git a/tools/binman/cmdline.py b/tools/binman/cmdline.py
index f8caa7d..3886d52 100644
--- a/tools/binman/cmdline.py
+++ b/tools/binman/cmdline.py
@@ -46,6 +46,8 @@ def ParseArgs(argv):
parser.add_option('-p', '--preserve', action='store_true',\
help='Preserve temporary output directory even if option -O is not '
'given')
+ parser.add_option('-P', '--processes', type=int,
+ help='set number of processes to use for running tests')
parser.add_option('-t', '--test', action='store_true',
default=False, help='run tests')
parser.add_option('-T', '--test-coverage', action='store_true',
diff --git a/tools/binman/elf_test.py b/tools/binman/elf_test.py
index c16f714..b68530c 100644
--- a/tools/binman/elf_test.py
+++ b/tools/binman/elf_test.py
@@ -10,6 +10,7 @@ import unittest
import elf
import test_util
+import tools
binman_dir = os.path.dirname(os.path.realpath(sys.argv[0]))
@@ -46,6 +47,10 @@ class FakeSection:
class TestElf(unittest.TestCase):
+ @classmethod
+ def setUpClass(self):
+ tools.SetInputDirs(['.'])
+
def testAllSymbols(self):
"""Test that we can obtain a symbol from the ELF file"""
fname = os.path.join(binman_dir, 'test', 'u_boot_ucode_ptr')
diff --git a/tools/binman/entry_test.py b/tools/binman/entry_test.py
index 69d85b4..1f7ff5b 100644
--- a/tools/binman/entry_test.py
+++ b/tools/binman/entry_test.py
@@ -13,12 +13,19 @@ import fdt
import fdt_util
import tools
+entry = None
+
class TestEntry(unittest.TestCase):
+ def setUp(self):
+ tools.PrepareOutputDir(None)
+
+ def tearDown(self):
+ tools.FinaliseOutputDir()
+
def GetNode(self):
binman_dir = os.path.dirname(os.path.realpath(sys.argv[0]))
- tools.PrepareOutputDir(None)
fname = fdt_util.EnsureCompiled(
- os.path.join(binman_dir,('test/05_simple.dts')))
+ os.path.join(binman_dir,('test/005_simple.dts')))
dtb = fdt.FdtScan(fname)
return dtb.GetNode('/binman/u-boot')
@@ -33,9 +40,11 @@ class TestEntry(unittest.TestCase):
def test2EntryImportLib(self):
del sys.modules['importlib']
global entry
- reload(entry)
+ if entry:
+ reload(entry)
+ else:
+ import entry
entry.Entry.Create(None, self.GetNode(), 'u-boot-spl')
- tools._RemoveOutputDir()
del entry
def testEntryContents(self):
diff --git a/tools/binman/etype/intel_refcode.py b/tools/binman/etype/intel_refcode.py
new file mode 100644
index 0000000..045db58
--- /dev/null
+++ b/tools/binman/etype/intel_refcode.py
@@ -0,0 +1,27 @@
+# SPDX-License-Identifier: GPL-2.0+
+# Copyright (c) 2016 Google, Inc
+# Written by Simon Glass <sjg@chromium.org>
+#
+# Entry-type module for Intel Memory Reference Code binary blob
+#
+
+from entry import Entry
+from blob import Entry_blob
+
+class Entry_intel_refcode(Entry_blob):
+ """Entry containing an Intel Reference Code file
+
+ Properties / Entry arguments:
+ - filename: Filename of file to read into entry
+
+ This file contains code for setting up the platform on some Intel systems.
+ This is executed by U-Boot when needed early during startup. A typical
+ filename is 'refcode.bin'.
+
+ See README.x86 for information about x86 binary blobs.
+ """
+ def __init__(self, section, etype, node):
+ Entry_blob.__init__(self, section, etype, node)
+
+ def GetDefaultFilename(self):
+ return 'refcode.bin'
diff --git a/tools/binman/fdt_test.py b/tools/binman/fdt_test.py
index 8ea098f..ac6f910 100644
--- a/tools/binman/fdt_test.py
+++ b/tools/binman/fdt_test.py
@@ -21,6 +21,10 @@ class TestFdt(unittest.TestCase):
self._indir = tempfile.mkdtemp(prefix='binmant.')
tools.PrepareOutputDir(self._indir, True)
+ @classmethod
+ def tearDownClass(self):
+ tools._FinaliseForTest()
+
def TestFile(self, fname):
return os.path.join(self._binman_dir, 'test', fname)
@@ -32,12 +36,12 @@ class TestFdt(unittest.TestCase):
node.DeleteProp('data')
def testFdtNormal(self):
- fname = self.GetCompiled('34_x86_ucode.dts')
+ fname = self.GetCompiled('034_x86_ucode.dts')
dt = FdtScan(fname)
self._DeleteProp(dt)
def testFdtNormalProp(self):
- fname = self.GetCompiled('45_prop_test.dts')
+ fname = self.GetCompiled('045_prop_test.dts')
dt = FdtScan(fname)
node = dt.GetNode('/binman/intel-me')
self.assertEquals('intel-me', node.name)
diff --git a/tools/binman/ftest.py b/tools/binman/ftest.py
index 57725c9..e77fce5 100644
--- a/tools/binman/ftest.py
+++ b/tools/binman/ftest.py
@@ -60,6 +60,7 @@ VBLOCK_DATA = 'vblk'
FILES_DATA = ("sorry I'm late\nOh, don't bother apologising, I'm " +
"sorry you're alive\n")
COMPRESS_DATA = 'data to compress'
+REFCODE_DATA = 'refcode'
class TestFunctional(unittest.TestCase):
@@ -115,7 +116,7 @@ class TestFunctional(unittest.TestCase):
TestFunctional._MakeInputFile('ecrw.bin', CROS_EC_RW_DATA)
TestFunctional._MakeInputDir('devkeys')
TestFunctional._MakeInputFile('bmpblk.bin', BMPBLK_DATA)
- self._output_setup = False
+ TestFunctional._MakeInputFile('refcode.bin', REFCODE_DATA)
# ELF file with a '_dt_ucode_base_size' symbol
with open(self.TestFile('u_boot_ucode_ptr')) as fd:
@@ -190,7 +191,7 @@ class TestFunctional(unittest.TestCase):
"""Run binman with a given test file
Args:
- fname: Device-tree source filename to use (e.g. 05_simple.dts)
+ fname: Device-tree source filename to use (e.g. 005_simple.dts)
debug: True to enable debugging output
map: True to output map files for the images
update_dtb: Update the offset and size of each entry in the device
@@ -230,14 +231,13 @@ class TestFunctional(unittest.TestCase):
Returns:
Contents of device-tree binary
"""
- if not self._output_setup:
- tools.PrepareOutputDir(self._indir, True)
- self._output_setup = True
+ tools.PrepareOutputDir(None)
dtb = fdt_util.EnsureCompiled(self.TestFile(fname))
with open(dtb) as fd:
data = fd.read()
TestFunctional._MakeInputFile(outfile, data)
- return data
+ tools.FinaliseOutputDir()
+ return data
def _GetDtbContentsForSplTpl(self, dtb_data, name):
"""Create a version of the main DTB for SPL or SPL
@@ -268,7 +268,7 @@ class TestFunctional(unittest.TestCase):
Raises an assertion failure if binman returns a non-zero exit code.
Args:
- fname: Device-tree source filename to use (e.g. 05_simple.dts)
+ fname: Device-tree source filename to use (e.g. 005_simple.dts)
use_real_dtb: True to use the test file as the contents of
the u-boot-dtb entry. Normally this is not needed and the
test contents (the U_BOOT_DTB_DATA string) can be used.
@@ -325,7 +325,7 @@ class TestFunctional(unittest.TestCase):
"""Helper function which discards the device-tree binary
Args:
- fname: Device-tree source filename to use (e.g. 05_simple.dts)
+ fname: Device-tree source filename to use (e.g. 005_simple.dts)
use_real_dtb: True to use the test file as the contents of
the u-boot-dtb entry. Normally this is not needed and the
test contents (the U_BOOT_DTB_DATA string) can be used.
@@ -370,6 +370,16 @@ class TestFunctional(unittest.TestCase):
return pathname
@classmethod
+ def _SetupSplElf(self, src_fname='bss_data'):
+ """Set up an ELF file with a '_dt_ucode_base_size' symbol
+
+ Args:
+ Filename of ELF file to use as SPL
+ """
+ with open(self.TestFile(src_fname)) as fd:
+ TestFunctional._MakeInputFile('spl/u-boot-spl', fd.read())
+
+ @classmethod
def TestFile(self, fname):
return os.path.join(self._binman_dir, 'test', fname)
@@ -456,7 +466,7 @@ class TestFunctional(unittest.TestCase):
def testBoard(self):
"""Test that we can run it with a specific board"""
- self._SetupDtb('05_simple.dts', 'sandbox/u-boot.dtb')
+ self._SetupDtb('005_simple.dts', 'sandbox/u-boot.dtb')
TestFunctional._MakeInputFile('sandbox/u-boot.bin', U_BOOT_DATA)
result = self._DoBinman('-b', 'sandbox')
self.assertEqual(0, result)
@@ -483,19 +493,19 @@ class TestFunctional(unittest.TestCase):
will come from the device-tree compiler (dtc).
"""
with self.assertRaises(Exception) as e:
- self._RunBinman('-d', self.TestFile('01_invalid.dts'))
+ self._RunBinman('-d', self.TestFile('001_invalid.dts'))
self.assertIn("FATAL ERROR: Unable to parse input tree",
str(e.exception))
def testMissingNode(self):
"""Test that a device tree without a 'binman' node generates an error"""
with self.assertRaises(Exception) as e:
- self._DoBinman('-d', self.TestFile('02_missing_node.dts'))
+ self._DoBinman('-d', self.TestFile('002_missing_node.dts'))
self.assertIn("does not have a 'binman' node", str(e.exception))
def testEmpty(self):
"""Test that an empty binman node works OK (i.e. does nothing)"""
- result = self._RunBinman('-d', self.TestFile('03_empty.dts'))
+ result = self._RunBinman('-d', self.TestFile('003_empty.dts'))
self.assertEqual(0, len(result.stderr))
self.assertEqual(0, result.return_code)
@@ -503,25 +513,25 @@ class TestFunctional(unittest.TestCase):
"""Test that an invalid entry is flagged"""
with self.assertRaises(Exception) as e:
result = self._RunBinman('-d',
- self.TestFile('04_invalid_entry.dts'))
+ self.TestFile('004_invalid_entry.dts'))
self.assertIn("Unknown entry type 'not-a-valid-type' in node "
"'/binman/not-a-valid-type'", str(e.exception))
def testSimple(self):
"""Test a simple binman with a single file"""
- data = self._DoReadFile('05_simple.dts')
+ data = self._DoReadFile('005_simple.dts')
self.assertEqual(U_BOOT_DATA, data)
def testSimpleDebug(self):
"""Test a simple binman run with debugging enabled"""
- data = self._DoTestFile('05_simple.dts', debug=True)
+ data = self._DoTestFile('005_simple.dts', debug=True)
def testDual(self):
"""Test that we can handle creating two images
This also tests image padding.
"""
- retcode = self._DoTestFile('06_dual_image.dts')
+ retcode = self._DoTestFile('006_dual_image.dts')
self.assertEqual(0, retcode)
image = control.images['image1']
@@ -545,13 +555,13 @@ class TestFunctional(unittest.TestCase):
def testBadAlign(self):
"""Test that an invalid alignment value is detected"""
with self.assertRaises(ValueError) as e:
- self._DoTestFile('07_bad_align.dts')
+ self._DoTestFile('007_bad_align.dts')
self.assertIn("Node '/binman/u-boot': Alignment 23 must be a power "
"of two", str(e.exception))
def testPackSimple(self):
"""Test that packing works as expected"""
- retcode = self._DoTestFile('08_pack.dts')
+ retcode = self._DoTestFile('008_pack.dts')
self.assertEqual(0, retcode)
self.assertIn('image', control.images)
image = control.images['image']
@@ -593,7 +603,7 @@ class TestFunctional(unittest.TestCase):
def testPackExtra(self):
"""Test that extra packing feature works as expected"""
- retcode = self._DoTestFile('09_pack_extra.dts')
+ retcode = self._DoTestFile('009_pack_extra.dts')
self.assertEqual(0, retcode)
self.assertIn('image', control.images)
@@ -638,35 +648,35 @@ class TestFunctional(unittest.TestCase):
def testPackAlignPowerOf2(self):
"""Test that invalid entry alignment is detected"""
with self.assertRaises(ValueError) as e:
- self._DoTestFile('10_pack_align_power2.dts')
+ self._DoTestFile('010_pack_align_power2.dts')
self.assertIn("Node '/binman/u-boot': Alignment 5 must be a power "
"of two", str(e.exception))
def testPackAlignSizePowerOf2(self):
"""Test that invalid entry size alignment is detected"""
with self.assertRaises(ValueError) as e:
- self._DoTestFile('11_pack_align_size_power2.dts')
+ self._DoTestFile('011_pack_align_size_power2.dts')
self.assertIn("Node '/binman/u-boot': Alignment size 55 must be a "
"power of two", str(e.exception))
def testPackInvalidAlign(self):
"""Test detection of an offset that does not match its alignment"""
with self.assertRaises(ValueError) as e:
- self._DoTestFile('12_pack_inv_align.dts')
+ self._DoTestFile('012_pack_inv_align.dts')
self.assertIn("Node '/binman/u-boot': Offset 0x5 (5) does not match "
"align 0x4 (4)", str(e.exception))
def testPackInvalidSizeAlign(self):
"""Test that invalid entry size alignment is detected"""
with self.assertRaises(ValueError) as e:
- self._DoTestFile('13_pack_inv_size_align.dts')
+ self._DoTestFile('013_pack_inv_size_align.dts')
self.assertIn("Node '/binman/u-boot': Size 0x5 (5) does not match "
"align-size 0x4 (4)", str(e.exception))
def testPackOverlap(self):
"""Test that overlapping regions are detected"""
with self.assertRaises(ValueError) as e:
- self._DoTestFile('14_pack_overlap.dts')
+ self._DoTestFile('014_pack_overlap.dts')
self.assertIn("Node '/binman/u-boot-align': Offset 0x3 (3) overlaps "
"with previous entry '/binman/u-boot' ending at 0x4 (4)",
str(e.exception))
@@ -674,20 +684,20 @@ class TestFunctional(unittest.TestCase):
def testPackEntryOverflow(self):
"""Test that entries that overflow their size are detected"""
with self.assertRaises(ValueError) as e:
- self._DoTestFile('15_pack_overflow.dts')
+ self._DoTestFile('015_pack_overflow.dts')
self.assertIn("Node '/binman/u-boot': Entry contents size is 0x4 (4) "
"but entry size is 0x3 (3)", str(e.exception))
def testPackImageOverflow(self):
"""Test that entries which overflow the image size are detected"""
with self.assertRaises(ValueError) as e:
- self._DoTestFile('16_pack_image_overflow.dts')
+ self._DoTestFile('016_pack_image_overflow.dts')
self.assertIn("Section '/binman': contents size 0x4 (4) exceeds section "
"size 0x3 (3)", str(e.exception))
def testPackImageSize(self):
"""Test that the image size can be set"""
- retcode = self._DoTestFile('17_pack_image_size.dts')
+ retcode = self._DoTestFile('017_pack_image_size.dts')
self.assertEqual(0, retcode)
self.assertIn('image', control.images)
image = control.images['image']
@@ -695,7 +705,7 @@ class TestFunctional(unittest.TestCase):
def testPackImageSizeAlign(self):
"""Test that image size alignemnt works as expected"""
- retcode = self._DoTestFile('18_pack_image_align.dts')
+ retcode = self._DoTestFile('018_pack_image_align.dts')
self.assertEqual(0, retcode)
self.assertIn('image', control.images)
image = control.images['image']
@@ -704,27 +714,26 @@ class TestFunctional(unittest.TestCase):
def testPackInvalidImageAlign(self):
"""Test that invalid image alignment is detected"""
with self.assertRaises(ValueError) as e:
- self._DoTestFile('19_pack_inv_image_align.dts')
+ self._DoTestFile('019_pack_inv_image_align.dts')
self.assertIn("Section '/binman': Size 0x7 (7) does not match "
"align-size 0x8 (8)", str(e.exception))
def testPackAlignPowerOf2(self):
"""Test that invalid image alignment is detected"""
with self.assertRaises(ValueError) as e:
- self._DoTestFile('20_pack_inv_image_align_power2.dts')
+ self._DoTestFile('020_pack_inv_image_align_power2.dts')
self.assertIn("Section '/binman': Alignment size 131 must be a power of "
"two", str(e.exception))
def testImagePadByte(self):
"""Test that the image pad byte can be specified"""
- with open(self.TestFile('bss_data')) as fd:
- TestFunctional._MakeInputFile('spl/u-boot-spl', fd.read())
- data = self._DoReadFile('21_image_pad.dts')
+ self._SetupSplElf()
+ data = self._DoReadFile('021_image_pad.dts')
self.assertEqual(U_BOOT_SPL_DATA + (chr(0xff) * 1) + U_BOOT_DATA, data)
def testImageName(self):
"""Test that image files can be named"""
- retcode = self._DoTestFile('22_image_name.dts')
+ retcode = self._DoTestFile('022_image_name.dts')
self.assertEqual(0, retcode)
image = control.images['image1']
fname = tools.GetOutputFilename('test-name')
@@ -736,32 +745,33 @@ class TestFunctional(unittest.TestCase):
def testBlobFilename(self):
"""Test that generic blobs can be provided by filename"""
- data = self._DoReadFile('23_blob.dts')
+ data = self._DoReadFile('023_blob.dts')
self.assertEqual(BLOB_DATA, data)
def testPackSorted(self):
"""Test that entries can be sorted"""
- data = self._DoReadFile('24_sorted.dts')
+ self._SetupSplElf()
+ data = self._DoReadFile('024_sorted.dts')
self.assertEqual(chr(0) * 1 + U_BOOT_SPL_DATA + chr(0) * 2 +
U_BOOT_DATA, data)
def testPackZeroOffset(self):
"""Test that an entry at offset 0 is not given a new offset"""
with self.assertRaises(ValueError) as e:
- self._DoTestFile('25_pack_zero_size.dts')
+ self._DoTestFile('025_pack_zero_size.dts')
self.assertIn("Node '/binman/u-boot-spl': Offset 0x0 (0) overlaps "
"with previous entry '/binman/u-boot' ending at 0x4 (4)",
str(e.exception))
def testPackUbootDtb(self):
"""Test that a device tree can be added to U-Boot"""
- data = self._DoReadFile('26_pack_u_boot_dtb.dts')
+ data = self._DoReadFile('026_pack_u_boot_dtb.dts')
self.assertEqual(U_BOOT_NODTB_DATA + U_BOOT_DTB_DATA, data)
def testPackX86RomNoSize(self):
"""Test that the end-at-4gb property requires a size property"""
with self.assertRaises(ValueError) as e:
- self._DoTestFile('27_pack_4gb_no_size.dts')
+ self._DoTestFile('027_pack_4gb_no_size.dts')
self.assertIn("Section '/binman': Section size must be provided when "
"using end-at-4gb", str(e.exception))
@@ -776,14 +786,15 @@ class TestFunctional(unittest.TestCase):
def testPackX86RomOutside(self):
"""Test that the end-at-4gb property checks for offset boundaries"""
with self.assertRaises(ValueError) as e:
- self._DoTestFile('28_pack_4gb_outside.dts')
+ self._DoTestFile('028_pack_4gb_outside.dts')
self.assertIn("Node '/binman/u-boot': Offset 0x0 (0) is outside "
"the section starting at 0xffffffe0 (4294967264)",
str(e.exception))
def testPackX86Rom(self):
"""Test that a basic x86 ROM can be created"""
- data = self._DoReadFile('29_x86-rom.dts')
+ self._SetupSplElf()
+ data = self._DoReadFile('029_x86-rom.dts')
self.assertEqual(U_BOOT_DATA + chr(0) * 7 + U_BOOT_SPL_DATA +
chr(0) * 2, data)
@@ -791,31 +802,31 @@ class TestFunctional(unittest.TestCase):
"""Test that an invalid Intel descriptor entry is detected"""
TestFunctional._MakeInputFile('descriptor.bin', '')
with self.assertRaises(ValueError) as e:
- self._DoTestFile('31_x86-rom-me.dts')
+ self._DoTestFile('031_x86-rom-me.dts')
self.assertIn("Node '/binman/intel-descriptor': Cannot find FD "
"signature", str(e.exception))
def testPackX86RomBadDesc(self):
"""Test that the Intel requires a descriptor entry"""
with self.assertRaises(ValueError) as e:
- self._DoTestFile('30_x86-rom-me-no-desc.dts')
+ self._DoTestFile('030_x86-rom-me-no-desc.dts')
self.assertIn("Node '/binman/intel-me': No offset set with "
"offset-unset: should another entry provide this correct "
"offset?", str(e.exception))
def testPackX86RomMe(self):
"""Test that an x86 ROM with an ME region can be created"""
- data = self._DoReadFile('31_x86-rom-me.dts')
+ data = self._DoReadFile('031_x86-rom-me.dts')
self.assertEqual(ME_DATA, data[0x1000:0x1000 + len(ME_DATA)])
def testPackVga(self):
"""Test that an image with a VGA binary can be created"""
- data = self._DoReadFile('32_intel-vga.dts')
+ data = self._DoReadFile('032_intel-vga.dts')
self.assertEqual(VGA_DATA, data[:len(VGA_DATA)])
def testPackStart16(self):
"""Test that an image with an x86 start16 region can be created"""
- data = self._DoReadFile('33_x86-start16.dts')
+ data = self._DoReadFile('033_x86-start16.dts')
self.assertEqual(X86_START16_DATA, data[:len(X86_START16_DATA)])
def testPackPowerpcMpc85xxBootpgResetvec(self):
@@ -884,7 +895,7 @@ class TestFunctional(unittest.TestCase):
u-boot.dtb with the microcode removed
the microcode
"""
- first, pos_and_size = self._RunMicrocodeTest('34_x86_ucode.dts',
+ first, pos_and_size = self._RunMicrocodeTest('034_x86_ucode.dts',
U_BOOT_NODTB_DATA)
self.assertEqual('nodtb with microcode' + pos_and_size +
' somewhere in here', first)
@@ -901,7 +912,7 @@ class TestFunctional(unittest.TestCase):
# We need the libfdt library to run this test since only that allows
# finding the offset of a property. This is required by
# Entry_u_boot_dtb_with_ucode.ObtainContents().
- data = self._DoReadFile('35_x86_single_ucode.dts', True)
+ data = self._DoReadFile('035_x86_single_ucode.dts', True)
second = data[len(U_BOOT_NODTB_DATA):]
@@ -928,27 +939,27 @@ class TestFunctional(unittest.TestCase):
def testUBootImg(self):
"""Test that u-boot.img can be put in a file"""
- data = self._DoReadFile('36_u_boot_img.dts')
+ data = self._DoReadFile('036_u_boot_img.dts')
self.assertEqual(U_BOOT_IMG_DATA, data)
def testNoMicrocode(self):
"""Test that a missing microcode region is detected"""
with self.assertRaises(ValueError) as e:
- self._DoReadFile('37_x86_no_ucode.dts', True)
+ self._DoReadFile('037_x86_no_ucode.dts', True)
self.assertIn("Node '/binman/u-boot-dtb-with-ucode': No /microcode "
"node found in ", str(e.exception))
def testMicrocodeWithoutNode(self):
"""Test that a missing u-boot-dtb-with-ucode node is detected"""
with self.assertRaises(ValueError) as e:
- self._DoReadFile('38_x86_ucode_missing_node.dts', True)
+ self._DoReadFile('038_x86_ucode_missing_node.dts', True)
self.assertIn("Node '/binman/u-boot-with-ucode-ptr': Cannot find "
"microcode region u-boot-dtb-with-ucode", str(e.exception))
def testMicrocodeWithoutNode2(self):
"""Test that a missing u-boot-ucode node is detected"""
with self.assertRaises(ValueError) as e:
- self._DoReadFile('39_x86_ucode_missing_node2.dts', True)
+ self._DoReadFile('039_x86_ucode_missing_node2.dts', True)
self.assertIn("Node '/binman/u-boot-with-ucode-ptr': Cannot find "
"microcode region u-boot-ucode", str(e.exception))
@@ -972,7 +983,7 @@ class TestFunctional(unittest.TestCase):
def testMicrocodeNotInImage(self):
"""Test that microcode must be placed within the image"""
with self.assertRaises(ValueError) as e:
- self._DoReadFile('40_x86_ucode_not_in_image.dts', True)
+ self._DoReadFile('040_x86_ucode_not_in_image.dts', True)
self.assertIn("Node '/binman/u-boot-with-ucode-ptr': Microcode "
"pointer _dt_ucode_base_size at fffffe14 is outside the "
"section ranging from 00000000 to 0000002e", str(e.exception))
@@ -981,7 +992,7 @@ class TestFunctional(unittest.TestCase):
"""Test that we can cope with an image without microcode (e.g. qemu)"""
with open(self.TestFile('u_boot_no_ucode_ptr')) as fd:
TestFunctional._MakeInputFile('u-boot', fd.read())
- data, dtb, _, _ = self._DoReadFileDtb('44_x86_optional_ucode.dts', True)
+ data, dtb, _, _ = self._DoReadFileDtb('044_x86_optional_ucode.dts', True)
# Now check the device tree has no microcode
self.assertEqual(U_BOOT_NODTB_DATA, data[:len(U_BOOT_NODTB_DATA)])
@@ -997,43 +1008,43 @@ class TestFunctional(unittest.TestCase):
def testUnknownPosSize(self):
"""Test that microcode must be placed within the image"""
with self.assertRaises(ValueError) as e:
- self._DoReadFile('41_unknown_pos_size.dts', True)
+ self._DoReadFile('041_unknown_pos_size.dts', True)
self.assertIn("Section '/binman': Unable to set offset/size for unknown "
"entry 'invalid-entry'", str(e.exception))
def testPackFsp(self):
"""Test that an image with a FSP binary can be created"""
- data = self._DoReadFile('42_intel-fsp.dts')
+ data = self._DoReadFile('042_intel-fsp.dts')
self.assertEqual(FSP_DATA, data[:len(FSP_DATA)])
def testPackCmc(self):
"""Test that an image with a CMC binary can be created"""
- data = self._DoReadFile('43_intel-cmc.dts')
+ data = self._DoReadFile('043_intel-cmc.dts')
self.assertEqual(CMC_DATA, data[:len(CMC_DATA)])
def testPackVbt(self):
"""Test that an image with a VBT binary can be created"""
- data = self._DoReadFile('46_intel-vbt.dts')
+ data = self._DoReadFile('046_intel-vbt.dts')
self.assertEqual(VBT_DATA, data[:len(VBT_DATA)])
def testSplBssPad(self):
"""Test that we can pad SPL's BSS with zeros"""
# ELF file with a '__bss_size' symbol
- with open(self.TestFile('bss_data')) as fd:
- TestFunctional._MakeInputFile('spl/u-boot-spl', fd.read())
- data = self._DoReadFile('47_spl_bss_pad.dts')
+ self._SetupSplElf()
+ data = self._DoReadFile('047_spl_bss_pad.dts')
self.assertEqual(U_BOOT_SPL_DATA + (chr(0) * 10) + U_BOOT_DATA, data)
- with open(self.TestFile('u_boot_ucode_ptr')) as fd:
- TestFunctional._MakeInputFile('spl/u-boot-spl', fd.read())
+ def testSplBssPadMissing(self):
+ """Test that a missing symbol is detected"""
+ self._SetupSplElf('u_boot_ucode_ptr')
with self.assertRaises(ValueError) as e:
- data = self._DoReadFile('47_spl_bss_pad.dts')
+ self._DoReadFile('047_spl_bss_pad.dts')
self.assertIn('Expected __bss_size symbol in spl/u-boot-spl',
str(e.exception))
def testPackStart16Spl(self):
"""Test that an image with an x86 start16 SPL region can be created"""
- data = self._DoReadFile('48_x86-start16-spl.dts')
+ data = self._DoReadFile('048_x86-start16-spl.dts')
self.assertEqual(X86_START16_SPL_DATA, data[:len(X86_START16_SPL_DATA)])
def _PackUbootSplMicrocode(self, dts, ucode_second=False):
@@ -1050,9 +1061,7 @@ class TestFunctional(unittest.TestCase):
ucode_second: True if the microsecond entry is second instead of
third
"""
- # ELF file with a '_dt_ucode_base_size' symbol
- with open(self.TestFile('u_boot_ucode_ptr')) as fd:
- TestFunctional._MakeInputFile('spl/u-boot-spl', fd.read())
+ self._SetupSplElf('u_boot_ucode_ptr')
first, pos_and_size = self._RunMicrocodeTest(dts, U_BOOT_SPL_NODTB_DATA,
ucode_second=ucode_second)
self.assertEqual('splnodtb with microc' + pos_and_size +
@@ -1060,7 +1069,7 @@ class TestFunctional(unittest.TestCase):
def testPackUbootSplMicrocode(self):
"""Test that x86 microcode can be handled correctly in SPL"""
- self._PackUbootSplMicrocode('49_x86_ucode_spl.dts')
+ self._PackUbootSplMicrocode('049_x86_ucode_spl.dts')
def testPackUbootSplMicrocodeReorder(self):
"""Test that order doesn't matter for microcode entries
@@ -1069,22 +1078,22 @@ class TestFunctional(unittest.TestCase):
u-boot-ucode entry we have not yet seen the u-boot-dtb-with-ucode
entry, so we reply on binman to try later.
"""
- self._PackUbootSplMicrocode('58_x86_ucode_spl_needs_retry.dts',
+ self._PackUbootSplMicrocode('058_x86_ucode_spl_needs_retry.dts',
ucode_second=True)
def testPackMrc(self):
"""Test that an image with an MRC binary can be created"""
- data = self._DoReadFile('50_intel_mrc.dts')
+ data = self._DoReadFile('050_intel_mrc.dts')
self.assertEqual(MRC_DATA, data[:len(MRC_DATA)])
def testSplDtb(self):
"""Test that an image with spl/u-boot-spl.dtb can be created"""
- data = self._DoReadFile('51_u_boot_spl_dtb.dts')
+ data = self._DoReadFile('051_u_boot_spl_dtb.dts')
self.assertEqual(U_BOOT_SPL_DTB_DATA, data[:len(U_BOOT_SPL_DTB_DATA)])
def testSplNoDtb(self):
"""Test that an image with spl/u-boot-spl-nodtb.bin can be created"""
- data = self._DoReadFile('52_u_boot_spl_nodtb.dts')
+ data = self._DoReadFile('052_u_boot_spl_nodtb.dts')
self.assertEqual(U_BOOT_SPL_NODTB_DATA, data[:len(U_BOOT_SPL_NODTB_DATA)])
def testSymbols(self):
@@ -1094,9 +1103,8 @@ class TestFunctional(unittest.TestCase):
addr = elf.GetSymbolAddress(elf_fname, '__image_copy_start')
self.assertEqual(syms['_binman_u_boot_spl_prop_offset'].address, addr)
- with open(self.TestFile('u_boot_binman_syms')) as fd:
- TestFunctional._MakeInputFile('spl/u-boot-spl', fd.read())
- data = self._DoReadFile('53_symbols.dts')
+ self._SetupSplElf('u_boot_binman_syms')
+ data = self._DoReadFile('053_symbols.dts')
sym_values = struct.pack('<LQL', 0x24 + 0, 0x24 + 24, 0x24 + 20)
expected = (sym_values + U_BOOT_SPL_DATA[16:] + chr(0xff) +
U_BOOT_DATA +
@@ -1105,19 +1113,19 @@ class TestFunctional(unittest.TestCase):
def testPackUnitAddress(self):
"""Test that we support multiple binaries with the same name"""
- data = self._DoReadFile('54_unit_address.dts')
+ data = self._DoReadFile('054_unit_address.dts')
self.assertEqual(U_BOOT_DATA + U_BOOT_DATA, data)
def testSections(self):
"""Basic test of sections"""
- data = self._DoReadFile('55_sections.dts')
+ data = self._DoReadFile('055_sections.dts')
expected = (U_BOOT_DATA + '!' * 12 + U_BOOT_DATA + 'a' * 12 +
U_BOOT_DATA + '&' * 4)
self.assertEqual(expected, data)
def testMap(self):
"""Tests outputting a map of the images"""
- _, _, map_data, _ = self._DoReadFileDtb('55_sections.dts', map=True)
+ _, _, map_data, _ = self._DoReadFileDtb('055_sections.dts', map=True)
self.assertEqual('''ImagePos Offset Size Name
00000000 00000000 00000028 main-section
00000000 00000000 00000010 section@0
@@ -1130,7 +1138,7 @@ class TestFunctional(unittest.TestCase):
def testNamePrefix(self):
"""Tests that name prefixes are used"""
- _, _, map_data, _ = self._DoReadFileDtb('56_name_prefix.dts', map=True)
+ _, _, map_data, _ = self._DoReadFileDtb('056_name_prefix.dts', map=True)
self.assertEqual('''ImagePos Offset Size Name
00000000 00000000 00000028 main-section
00000000 00000000 00000010 section@0
@@ -1142,7 +1150,7 @@ class TestFunctional(unittest.TestCase):
def testUnknownContents(self):
"""Test that obtaining the contents works as expected"""
with self.assertRaises(ValueError) as e:
- self._DoReadFile('57_unknown_contents.dts', True)
+ self._DoReadFile('057_unknown_contents.dts', True)
self.assertIn("Section '/binman': Internal error: Could not complete "
"processing of contents: remaining [<_testing.Entry__testing ",
str(e.exception))
@@ -1150,13 +1158,13 @@ class TestFunctional(unittest.TestCase):
def testBadChangeSize(self):
"""Test that trying to change the size of an entry fails"""
with self.assertRaises(ValueError) as e:
- self._DoReadFile('59_change_size.dts', True)
+ self._DoReadFile('059_change_size.dts', True)
self.assertIn("Node '/binman/_testing': Cannot update entry size from "
'2 to 1', str(e.exception))
def testUpdateFdt(self):
"""Test that we can update the device tree with offset/size info"""
- _, _, _, out_dtb_fname = self._DoReadFileDtb('60_fdt_update.dts',
+ _, _, _, out_dtb_fname = self._DoReadFileDtb('060_fdt_update.dts',
update_dtb=True)
dtb = fdt.Fdt(out_dtb_fname)
dtb.Scan()
@@ -1186,7 +1194,7 @@ class TestFunctional(unittest.TestCase):
def testUpdateFdtBad(self):
"""Test that we detect when ProcessFdt never completes"""
with self.assertRaises(ValueError) as e:
- self._DoReadFileDtb('61_fdt_update_bad.dts', update_dtb=True)
+ self._DoReadFileDtb('061_fdt_update_bad.dts', update_dtb=True)
self.assertIn('Could not complete processing of Fdt: remaining '
'[<_testing.Entry__testing', str(e.exception))
@@ -1196,7 +1204,7 @@ class TestFunctional(unittest.TestCase):
'test-str-arg': 'test1',
'test-int-arg': '456',
}
- self._DoReadFileDtb('62_entry_args.dts', entry_args=entry_args)
+ self._DoReadFileDtb('062_entry_args.dts', entry_args=entry_args)
self.assertIn('image', control.images)
entry = control.images['image'].GetEntries()['_testing']
self.assertEqual('test0', entry.test_str_fdt)
@@ -1209,7 +1217,7 @@ class TestFunctional(unittest.TestCase):
entry_args = {
'test-int-arg': '456',
}
- self._DoReadFileDtb('63_entry_args_missing.dts', entry_args=entry_args)
+ self._DoReadFileDtb('063_entry_args_missing.dts', entry_args=entry_args)
entry = control.images['image'].GetEntries()['_testing']
self.assertEqual('test0', entry.test_str_fdt)
self.assertEqual(None, entry.test_str_arg)
@@ -1222,14 +1230,14 @@ class TestFunctional(unittest.TestCase):
'test-int-arg': '456',
}
with self.assertRaises(ValueError) as e:
- self._DoReadFileDtb('64_entry_args_required.dts')
+ self._DoReadFileDtb('064_entry_args_required.dts')
self.assertIn("Node '/binman/_testing': Missing required "
'properties/entry args: test-str-arg, test-int-fdt, test-int-arg',
str(e.exception))
def testEntryArgsInvalidFormat(self):
"""Test that an invalid entry-argument format is detected"""
- args = ['-d', self.TestFile('64_entry_args_required.dts'), '-ano-value']
+ args = ['-d', self.TestFile('064_entry_args_required.dts'), '-ano-value']
with self.assertRaises(ValueError) as e:
self._DoBinman(*args)
self.assertIn("Invalid entry arguemnt 'no-value'", str(e.exception))
@@ -1240,7 +1248,7 @@ class TestFunctional(unittest.TestCase):
'test-int-arg': 'abc',
}
with self.assertRaises(ValueError) as e:
- self._DoReadFileDtb('62_entry_args.dts', entry_args=entry_args)
+ self._DoReadFileDtb('062_entry_args.dts', entry_args=entry_args)
self.assertIn("Node '/binman/_testing': Cannot convert entry arg "
"'test-int-arg' (value 'abc') to integer",
str(e.exception))
@@ -1256,7 +1264,7 @@ class TestFunctional(unittest.TestCase):
'test-bad-datatype-arg': '12',
}
with self.assertRaises(ValueError) as e:
- self._DoReadFileDtb('65_entry_args_unknown_datatype.dts',
+ self._DoReadFileDtb('065_entry_args_unknown_datatype.dts',
entry_args=entry_args)
self.assertIn('GetArg() internal error: Unknown data type ',
str(e.exception))
@@ -1268,7 +1276,7 @@ class TestFunctional(unittest.TestCase):
'test-id2': TEXT_DATA2,
'test-id3': TEXT_DATA3,
}
- data, _, _, _ = self._DoReadFileDtb('66_text.dts',
+ data, _, _, _ = self._DoReadFileDtb('066_text.dts',
entry_args=entry_args)
expected = (TEXT_DATA + chr(0) * (8 - len(TEXT_DATA)) + TEXT_DATA2 +
TEXT_DATA3 + 'some text')
@@ -1290,7 +1298,7 @@ class TestFunctional(unittest.TestCase):
def testFmap(self):
"""Basic test of generation of a flashrom fmap"""
- data = self._DoReadFile('67_fmap.dts')
+ data = self._DoReadFile('067_fmap.dts')
fhdr, fentries = fmap_util.DecodeFmap(data[32:])
expected = U_BOOT_DATA + '!' * 12 + U_BOOT_DATA + 'a' * 12
self.assertEqual(expected, data[:32])
@@ -1324,19 +1332,19 @@ class TestFunctional(unittest.TestCase):
entry_args = {
'cros-ec-rw-path': 'ecrw.bin',
}
- data, _, _, _ = self._DoReadFileDtb('68_blob_named_by_arg.dts',
+ data, _, _, _ = self._DoReadFileDtb('068_blob_named_by_arg.dts',
entry_args=entry_args)
def testFill(self):
"""Test for an fill entry type"""
- data = self._DoReadFile('69_fill.dts')
+ data = self._DoReadFile('069_fill.dts')
expected = 8 * chr(0xff) + 8 * chr(0)
self.assertEqual(expected, data)
def testFillNoSize(self):
"""Test for an fill entry type with no size"""
with self.assertRaises(ValueError) as e:
- self._DoReadFile('70_fill_no_size.dts')
+ self._DoReadFile('070_fill_no_size.dts')
self.assertIn("'fill' entry must have a size property",
str(e.exception))
@@ -1357,7 +1365,7 @@ class TestFunctional(unittest.TestCase):
'keydir': 'devkeys',
'bmpblk': 'bmpblk.bin',
}
- data, _, _, _ = self._DoReadFileDtb('71_gbb.dts', entry_args=entry_args)
+ data, _, _, _ = self._DoReadFileDtb('071_gbb.dts', entry_args=entry_args)
# Since futility
expected = GBB_DATA + GBB_DATA + 8 * chr(0) + (0x2180 - 16) * chr(0)
@@ -1366,14 +1374,14 @@ class TestFunctional(unittest.TestCase):
def testGbbTooSmall(self):
"""Test for the Chromium OS Google Binary Block being large enough"""
with self.assertRaises(ValueError) as e:
- self._DoReadFileDtb('72_gbb_too_small.dts')
+ self._DoReadFileDtb('072_gbb_too_small.dts')
self.assertIn("Node '/binman/gbb': GBB is too small",
str(e.exception))
def testGbbNoSize(self):
"""Test for the Chromium OS Google Binary Block having a size"""
with self.assertRaises(ValueError) as e:
- self._DoReadFileDtb('73_gbb_no_size.dts')
+ self._DoReadFileDtb('073_gbb_no_size.dts')
self.assertIn("Node '/binman/gbb': GBB must have a fixed size",
str(e.exception))
@@ -1391,7 +1399,7 @@ class TestFunctional(unittest.TestCase):
entry_args = {
'keydir': 'devkeys',
}
- data, _, _, _ = self._DoReadFileDtb('74_vblock.dts',
+ data, _, _, _ = self._DoReadFileDtb('074_vblock.dts',
entry_args=entry_args)
expected = U_BOOT_DATA + VBLOCK_DATA + U_BOOT_DTB_DATA
self.assertEqual(expected, data)
@@ -1399,21 +1407,21 @@ class TestFunctional(unittest.TestCase):
def testVblockNoContent(self):
"""Test we detect a vblock which has no content to sign"""
with self.assertRaises(ValueError) as e:
- self._DoReadFile('75_vblock_no_content.dts')
+ self._DoReadFile('075_vblock_no_content.dts')
self.assertIn("Node '/binman/vblock': Vblock must have a 'content' "
'property', str(e.exception))
def testVblockBadPhandle(self):
"""Test that we detect a vblock with an invalid phandle in contents"""
with self.assertRaises(ValueError) as e:
- self._DoReadFile('76_vblock_bad_phandle.dts')
+ self._DoReadFile('076_vblock_bad_phandle.dts')
self.assertIn("Node '/binman/vblock': Cannot find node for phandle "
'1000', str(e.exception))
def testVblockBadEntry(self):
"""Test that we detect an entry that points to a non-entry"""
with self.assertRaises(ValueError) as e:
- self._DoReadFile('77_vblock_bad_entry.dts')
+ self._DoReadFile('077_vblock_bad_entry.dts')
self.assertIn("Node '/binman/vblock': Cannot find entry for node "
"'other'", str(e.exception))
@@ -1422,37 +1430,37 @@ class TestFunctional(unittest.TestCase):
# ELF file with a '__bss_size' symbol
with open(self.TestFile('bss_data')) as fd:
TestFunctional._MakeInputFile('tpl/u-boot-tpl', fd.read())
- data = self._DoReadFile('78_u_boot_tpl.dts')
+ data = self._DoReadFile('078_u_boot_tpl.dts')
self.assertEqual(U_BOOT_TPL_DATA + U_BOOT_TPL_DTB_DATA, data)
def testUsesPos(self):
"""Test that the 'pos' property cannot be used anymore"""
with self.assertRaises(ValueError) as e:
- data = self._DoReadFile('79_uses_pos.dts')
+ data = self._DoReadFile('079_uses_pos.dts')
self.assertIn("Node '/binman/u-boot': Please use 'offset' instead of "
"'pos'", str(e.exception))
def testFillZero(self):
"""Test for an fill entry type with a size of 0"""
- data = self._DoReadFile('80_fill_empty.dts')
+ data = self._DoReadFile('080_fill_empty.dts')
self.assertEqual(chr(0) * 16, data)
def testTextMissing(self):
"""Test for a text entry type where there is no text"""
with self.assertRaises(ValueError) as e:
- self._DoReadFileDtb('66_text.dts',)
+ self._DoReadFileDtb('066_text.dts',)
self.assertIn("Node '/binman/text': No value provided for text label "
"'test-id'", str(e.exception))
def testPackStart16Tpl(self):
"""Test that an image with an x86 start16 TPL region can be created"""
- data = self._DoReadFile('81_x86-start16-tpl.dts')
+ data = self._DoReadFile('081_x86-start16-tpl.dts')
self.assertEqual(X86_START16_TPL_DATA, data[:len(X86_START16_TPL_DATA)])
def testSelectImage(self):
"""Test that we can select which images to build"""
with test_util.capture_sys_output() as (stdout, stderr):
- retcode = self._DoTestFile('06_dual_image.dts', images=['image2'])
+ retcode = self._DoTestFile('006_dual_image.dts', images=['image2'])
self.assertEqual(0, retcode)
self.assertIn('Skipping images: image1', stdout.getvalue())
@@ -1461,7 +1469,7 @@ class TestFunctional(unittest.TestCase):
def testUpdateFdtAll(self):
"""Test that all device trees are updated with offset/size info"""
- data, _, _, _ = self._DoReadFileDtb('82_fdt_update_all.dts',
+ data, _, _, _ = self._DoReadFileDtb('082_fdt_update_all.dts',
use_real_dtb=True, update_dtb=True)
base_expected = {
@@ -1501,12 +1509,12 @@ class TestFunctional(unittest.TestCase):
def testUpdateFdtOutput(self):
"""Test that output DTB files are updated"""
try:
- data, dtb_data, _, _ = self._DoReadFileDtb('82_fdt_update_all.dts',
+ data, dtb_data, _, _ = self._DoReadFileDtb('082_fdt_update_all.dts',
use_real_dtb=True, update_dtb=True, reset_dtbs=False)
# Unfortunately, compiling a source file always results in a file
# called source.dtb (see fdt_util.EnsureCompiled()). The test
- # source file (e.g. test/75_fdt_update_all.dts) thus does not enter
+ # source file (e.g. test/075_fdt_update_all.dts) thus does not enter
# binman as a file called u-boot.dtb. To fix this, copy the file
# over to the expected place.
#tools.WriteFile(os.path.join(self._indir, 'u-boot.dtb'),
@@ -1547,7 +1555,7 @@ class TestFunctional(unittest.TestCase):
def testCompress(self):
"""Test compression of blobs"""
- data, _, _, out_dtb_fname = self._DoReadFileDtb('83_compress.dts',
+ data, _, _, out_dtb_fname = self._DoReadFileDtb('083_compress.dts',
use_real_dtb=True, update_dtb=True)
dtb = fdt.Fdt(out_dtb_fname)
dtb.Scan()
@@ -1563,12 +1571,12 @@ class TestFunctional(unittest.TestCase):
def testFiles(self):
"""Test bringing in multiple files"""
- data = self._DoReadFile('84_files.dts')
+ data = self._DoReadFile('084_files.dts')
self.assertEqual(FILES_DATA, data)
def testFilesCompress(self):
"""Test bringing in multiple files and compressing them"""
- data = self._DoReadFile('85_files_compress.dts')
+ data = self._DoReadFile('085_files_compress.dts')
image = control.images['image']
entries = image.GetEntries()
@@ -1588,20 +1596,20 @@ class TestFunctional(unittest.TestCase):
def testFilesMissing(self):
"""Test missing files"""
with self.assertRaises(ValueError) as e:
- data = self._DoReadFile('86_files_none.dts')
+ data = self._DoReadFile('086_files_none.dts')
self.assertIn("Node '/binman/files': Pattern \'files/*.none\' matched "
'no files', str(e.exception))
def testFilesNoPattern(self):
"""Test missing files"""
with self.assertRaises(ValueError) as e:
- data = self._DoReadFile('87_files_no_pattern.dts')
+ data = self._DoReadFile('087_files_no_pattern.dts')
self.assertIn("Node '/binman/files': Missing 'pattern' property",
str(e.exception))
def testExpandSize(self):
"""Test an expanding entry"""
- data, _, map_data, _ = self._DoReadFileDtb('88_expand_size.dts',
+ data, _, map_data, _ = self._DoReadFileDtb('088_expand_size.dts',
map=True)
expect = ('a' * 8 + U_BOOT_DATA +
MRC_DATA + 'b' * 1 + U_BOOT_DATA +
@@ -1625,13 +1633,13 @@ class TestFunctional(unittest.TestCase):
"""Test an expanding entry which fails to provide contents"""
with test_util.capture_sys_output() as (stdout, stderr):
with self.assertRaises(ValueError) as e:
- self._DoReadFileDtb('89_expand_size_bad.dts', map=True)
+ self._DoReadFileDtb('089_expand_size_bad.dts', map=True)
self.assertIn("Node '/binman/_testing': Cannot obtain contents when "
'expanding entry', str(e.exception))
def testHash(self):
"""Test hashing of the contents of an entry"""
- _, _, _, out_dtb_fname = self._DoReadFileDtb('90_hash.dts',
+ _, _, _, out_dtb_fname = self._DoReadFileDtb('090_hash.dts',
use_real_dtb=True, update_dtb=True)
dtb = fdt.Fdt(out_dtb_fname)
dtb.Scan()
@@ -1642,19 +1650,19 @@ class TestFunctional(unittest.TestCase):
def testHashNoAlgo(self):
with self.assertRaises(ValueError) as e:
- self._DoReadFileDtb('91_hash_no_algo.dts', update_dtb=True)
+ self._DoReadFileDtb('091_hash_no_algo.dts', update_dtb=True)
self.assertIn("Node \'/binman/u-boot\': Missing \'algo\' property for "
'hash node', str(e.exception))
def testHashBadAlgo(self):
with self.assertRaises(ValueError) as e:
- self._DoReadFileDtb('92_hash_bad_algo.dts', update_dtb=True)
+ self._DoReadFileDtb('092_hash_bad_algo.dts', update_dtb=True)
self.assertIn("Node '/binman/u-boot': Unknown hash algorithm",
str(e.exception))
def testHashSection(self):
"""Test hashing of the contents of an entry"""
- _, _, _, out_dtb_fname = self._DoReadFileDtb('99_hash_section.dts',
+ _, _, _, out_dtb_fname = self._DoReadFileDtb('099_hash_section.dts',
use_real_dtb=True, update_dtb=True)
dtb = fdt.Fdt(out_dtb_fname)
dtb.Scan()
@@ -1675,14 +1683,14 @@ class TestFunctional(unittest.TestCase):
"""
with open(self.TestFile('u_boot_ucode_ptr')) as fd:
TestFunctional._MakeInputFile('tpl/u-boot-tpl', fd.read())
- first, pos_and_size = self._RunMicrocodeTest('93_x86_tpl_ucode.dts',
+ first, pos_and_size = self._RunMicrocodeTest('093_x86_tpl_ucode.dts',
U_BOOT_TPL_NODTB_DATA)
self.assertEqual('tplnodtb with microc' + pos_and_size +
'ter somewhere in here', first)
def testFmapX86(self):
"""Basic test of generation of a flashrom fmap"""
- data = self._DoReadFile('94_fmap_x86.dts')
+ data = self._DoReadFile('094_fmap_x86.dts')
fhdr, fentries = fmap_util.DecodeFmap(data[32:])
expected = U_BOOT_DATA + MRC_DATA + 'a' * (32 - 7)
self.assertEqual(expected, data[:32])
@@ -1705,7 +1713,7 @@ class TestFunctional(unittest.TestCase):
def testFmapX86Section(self):
"""Basic test of generation of a flashrom fmap"""
- data = self._DoReadFile('95_fmap_x86_section.dts')
+ data = self._DoReadFile('095_fmap_x86_section.dts')
expected = U_BOOT_DATA + MRC_DATA + 'b' * (32 - 7)
self.assertEqual(expected, data[:32])
fhdr, fentries = fmap_util.DecodeFmap(data[36:])
@@ -1727,25 +1735,23 @@ class TestFunctional(unittest.TestCase):
def testElf(self):
"""Basic test of ELF entries"""
- with open(self.TestFile('bss_data')) as fd:
- TestFunctional._MakeInputFile('spl/u-boot-spl', fd.read())
+ self._SetupSplElf()
with open(self.TestFile('bss_data')) as fd:
TestFunctional._MakeInputFile('-boot', fd.read())
- data = self._DoReadFile('96_elf.dts')
+ data = self._DoReadFile('096_elf.dts')
def testElfStripg(self):
"""Basic test of ELF entries"""
- with open(self.TestFile('bss_data')) as fd:
- TestFunctional._MakeInputFile('spl/u-boot-spl', fd.read())
+ self._SetupSplElf()
with open(self.TestFile('bss_data')) as fd:
TestFunctional._MakeInputFile('-boot', fd.read())
- data = self._DoReadFile('97_elf_strip.dts')
+ data = self._DoReadFile('097_elf_strip.dts')
def testPackOverlapMap(self):
"""Test that overlapping regions are detected"""
with test_util.capture_sys_output() as (stdout, stderr):
with self.assertRaises(ValueError) as e:
- self._DoTestFile('14_pack_overlap.dts', map=True)
+ self._DoTestFile('014_pack_overlap.dts', map=True)
map_fname = tools.GetOutputFilename('image.map')
self.assertEqual("Wrote map file '%s' to show errors\n" % map_fname,
stdout.getvalue())
@@ -1760,6 +1766,11 @@ class TestFunctional(unittest.TestCase):
<none> 00000003 00000004 u-boot-align
''', map_data)
+ def testPacRefCode(self):
+ """Test that an image with an Intel Reference code binary works"""
+ data = self._DoReadFile('100_intel_refcode.dts')
+ self.assertEqual(REFCODE_DATA, data[:len(REFCODE_DATA)])
+
if __name__ == "__main__":
unittest.main()
diff --git a/tools/binman/test/01_invalid.dts b/tools/binman/test/001_invalid.dts
index 7d00455..7d00455 100644
--- a/tools/binman/test/01_invalid.dts
+++ b/tools/binman/test/001_invalid.dts
diff --git a/tools/binman/test/02_missing_node.dts b/tools/binman/test/002_missing_node.dts
index 3a51ec2..3a51ec2 100644
--- a/tools/binman/test/02_missing_node.dts
+++ b/tools/binman/test/002_missing_node.dts
diff --git a/tools/binman/test/03_empty.dts b/tools/binman/test/003_empty.dts
index 493c9a0..493c9a0 100644
--- a/tools/binman/test/03_empty.dts
+++ b/tools/binman/test/003_empty.dts
diff --git a/tools/binman/test/04_invalid_entry.dts b/tools/binman/test/004_invalid_entry.dts
index b043455..b043455 100644
--- a/tools/binman/test/04_invalid_entry.dts
+++ b/tools/binman/test/004_invalid_entry.dts
diff --git a/tools/binman/test/05_simple.dts b/tools/binman/test/005_simple.dts
index 3771aa2..3771aa2 100644
--- a/tools/binman/test/05_simple.dts
+++ b/tools/binman/test/005_simple.dts
diff --git a/tools/binman/test/06_dual_image.dts b/tools/binman/test/006_dual_image.dts
index 78be16f..78be16f 100644
--- a/tools/binman/test/06_dual_image.dts
+++ b/tools/binman/test/006_dual_image.dts
diff --git a/tools/binman/test/07_bad_align.dts b/tools/binman/test/007_bad_align.dts
index 123bb13..123bb13 100644
--- a/tools/binman/test/07_bad_align.dts
+++ b/tools/binman/test/007_bad_align.dts
diff --git a/tools/binman/test/08_pack.dts b/tools/binman/test/008_pack.dts
index a88785d..a88785d 100644
--- a/tools/binman/test/08_pack.dts
+++ b/tools/binman/test/008_pack.dts
diff --git a/tools/binman/test/09_pack_extra.dts b/tools/binman/test/009_pack_extra.dts
index 0765707..0765707 100644
--- a/tools/binman/test/09_pack_extra.dts
+++ b/tools/binman/test/009_pack_extra.dts
diff --git a/tools/binman/test/10_pack_align_power2.dts b/tools/binman/test/010_pack_align_power2.dts
index 8f6253a..8f6253a 100644
--- a/tools/binman/test/10_pack_align_power2.dts
+++ b/tools/binman/test/010_pack_align_power2.dts
diff --git a/tools/binman/test/11_pack_align_size_power2.dts b/tools/binman/test/011_pack_align_size_power2.dts
index 04f7672..04f7672 100644
--- a/tools/binman/test/11_pack_align_size_power2.dts
+++ b/tools/binman/test/011_pack_align_size_power2.dts
diff --git a/tools/binman/test/12_pack_inv_align.dts b/tools/binman/test/012_pack_inv_align.dts
index d8dd600..d8dd600 100644
--- a/tools/binman/test/12_pack_inv_align.dts
+++ b/tools/binman/test/012_pack_inv_align.dts
diff --git a/tools/binman/test/13_pack_inv_size_align.dts b/tools/binman/test/013_pack_inv_size_align.dts
index dfafa13..dfafa13 100644
--- a/tools/binman/test/13_pack_inv_size_align.dts
+++ b/tools/binman/test/013_pack_inv_size_align.dts
diff --git a/tools/binman/test/14_pack_overlap.dts b/tools/binman/test/014_pack_overlap.dts
index 3895cba..3895cba 100644
--- a/tools/binman/test/14_pack_overlap.dts
+++ b/tools/binman/test/014_pack_overlap.dts
diff --git a/tools/binman/test/15_pack_overflow.dts b/tools/binman/test/015_pack_overflow.dts
index 6f65433..6f65433 100644
--- a/tools/binman/test/15_pack_overflow.dts
+++ b/tools/binman/test/015_pack_overflow.dts
diff --git a/tools/binman/test/16_pack_image_overflow.dts b/tools/binman/test/016_pack_image_overflow.dts
index 6ae66f3..6ae66f3 100644
--- a/tools/binman/test/16_pack_image_overflow.dts
+++ b/tools/binman/test/016_pack_image_overflow.dts
diff --git a/tools/binman/test/17_pack_image_size.dts b/tools/binman/test/017_pack_image_size.dts
index 2360eb5..2360eb5 100644
--- a/tools/binman/test/17_pack_image_size.dts
+++ b/tools/binman/test/017_pack_image_size.dts
diff --git a/tools/binman/test/18_pack_image_align.dts b/tools/binman/test/018_pack_image_align.dts
index 16cd2a4..16cd2a4 100644
--- a/tools/binman/test/18_pack_image_align.dts
+++ b/tools/binman/test/018_pack_image_align.dts
diff --git a/tools/binman/test/19_pack_inv_image_align.dts b/tools/binman/test/019_pack_inv_image_align.dts
index e5ee87b..e5ee87b 100644
--- a/tools/binman/test/19_pack_inv_image_align.dts
+++ b/tools/binman/test/019_pack_inv_image_align.dts
diff --git a/tools/binman/test/20_pack_inv_image_align_power2.dts b/tools/binman/test/020_pack_inv_image_align_power2.dts
index a428c4b..a428c4b 100644
--- a/tools/binman/test/20_pack_inv_image_align_power2.dts
+++ b/tools/binman/test/020_pack_inv_image_align_power2.dts
diff --git a/tools/binman/test/21_image_pad.dts b/tools/binman/test/021_image_pad.dts
index c651668..c651668 100644
--- a/tools/binman/test/21_image_pad.dts
+++ b/tools/binman/test/021_image_pad.dts
diff --git a/tools/binman/test/22_image_name.dts b/tools/binman/test/022_image_name.dts
index 94fc069..94fc069 100644
--- a/tools/binman/test/22_image_name.dts
+++ b/tools/binman/test/022_image_name.dts
diff --git a/tools/binman/test/23_blob.dts b/tools/binman/test/023_blob.dts
index 7dcff69..7dcff69 100644
--- a/tools/binman/test/23_blob.dts
+++ b/tools/binman/test/023_blob.dts
diff --git a/tools/binman/test/24_sorted.dts b/tools/binman/test/024_sorted.dts
index d35d39f..d35d39f 100644
--- a/tools/binman/test/24_sorted.dts
+++ b/tools/binman/test/024_sorted.dts
diff --git a/tools/binman/test/25_pack_zero_size.dts b/tools/binman/test/025_pack_zero_size.dts
index e863c44..e863c44 100644
--- a/tools/binman/test/25_pack_zero_size.dts
+++ b/tools/binman/test/025_pack_zero_size.dts
diff --git a/tools/binman/test/26_pack_u_boot_dtb.dts b/tools/binman/test/026_pack_u_boot_dtb.dts
index 2707a73..2707a73 100644
--- a/tools/binman/test/26_pack_u_boot_dtb.dts
+++ b/tools/binman/test/026_pack_u_boot_dtb.dts
diff --git a/tools/binman/test/27_pack_4gb_no_size.dts b/tools/binman/test/027_pack_4gb_no_size.dts
index 371cca1..371cca1 100644
--- a/tools/binman/test/27_pack_4gb_no_size.dts
+++ b/tools/binman/test/027_pack_4gb_no_size.dts
diff --git a/tools/binman/test/28_pack_4gb_outside.dts b/tools/binman/test/028_pack_4gb_outside.dts
index 2216abf..2216abf 100644
--- a/tools/binman/test/28_pack_4gb_outside.dts
+++ b/tools/binman/test/028_pack_4gb_outside.dts
diff --git a/tools/binman/test/29_x86-rom.dts b/tools/binman/test/029_x86-rom.dts
index d5c69f9..d5c69f9 100644
--- a/tools/binman/test/29_x86-rom.dts
+++ b/tools/binman/test/029_x86-rom.dts
diff --git a/tools/binman/test/30_x86-rom-me-no-desc.dts b/tools/binman/test/030_x86-rom-me-no-desc.dts
index 796cb87..796cb87 100644
--- a/tools/binman/test/30_x86-rom-me-no-desc.dts
+++ b/tools/binman/test/030_x86-rom-me-no-desc.dts
diff --git a/tools/binman/test/31_x86-rom-me.dts b/tools/binman/test/031_x86-rom-me.dts
index b8b0a5a..b8b0a5a 100644
--- a/tools/binman/test/31_x86-rom-me.dts
+++ b/tools/binman/test/031_x86-rom-me.dts
diff --git a/tools/binman/test/32_intel-vga.dts b/tools/binman/test/032_intel-vga.dts
index 9c532d0..9c532d0 100644
--- a/tools/binman/test/32_intel-vga.dts
+++ b/tools/binman/test/032_intel-vga.dts
diff --git a/tools/binman/test/33_x86-start16.dts b/tools/binman/test/033_x86-start16.dts
index 2e279de..2e279de 100644
--- a/tools/binman/test/33_x86-start16.dts
+++ b/tools/binman/test/033_x86-start16.dts
diff --git a/tools/binman/test/34_x86_ucode.dts b/tools/binman/test/034_x86_ucode.dts
index 4072573..4072573 100644
--- a/tools/binman/test/34_x86_ucode.dts
+++ b/tools/binman/test/034_x86_ucode.dts
diff --git a/tools/binman/test/35_x86_single_ucode.dts b/tools/binman/test/035_x86_single_ucode.dts
index 2b1f086..2b1f086 100644
--- a/tools/binman/test/35_x86_single_ucode.dts
+++ b/tools/binman/test/035_x86_single_ucode.dts
diff --git a/tools/binman/test/36_u_boot_img.dts b/tools/binman/test/036_u_boot_img.dts
index aa5a3fe..aa5a3fe 100644
--- a/tools/binman/test/36_u_boot_img.dts
+++ b/tools/binman/test/036_u_boot_img.dts
diff --git a/tools/binman/test/37_x86_no_ucode.dts b/tools/binman/test/037_x86_no_ucode.dts
index 6da49c3..6da49c3 100644
--- a/tools/binman/test/37_x86_no_ucode.dts
+++ b/tools/binman/test/037_x86_no_ucode.dts
diff --git a/tools/binman/test/38_x86_ucode_missing_node.dts b/tools/binman/test/038_x86_ucode_missing_node.dts
index 720677c..720677c 100644
--- a/tools/binman/test/38_x86_ucode_missing_node.dts
+++ b/tools/binman/test/038_x86_ucode_missing_node.dts
diff --git a/tools/binman/test/39_x86_ucode_missing_node2.dts b/tools/binman/test/039_x86_ucode_missing_node2.dts
index 10ac086..10ac086 100644
--- a/tools/binman/test/39_x86_ucode_missing_node2.dts
+++ b/tools/binman/test/039_x86_ucode_missing_node2.dts
diff --git a/tools/binman/test/40_x86_ucode_not_in_image.dts b/tools/binman/test/040_x86_ucode_not_in_image.dts
index 6097258..6097258 100644
--- a/tools/binman/test/40_x86_ucode_not_in_image.dts
+++ b/tools/binman/test/040_x86_ucode_not_in_image.dts
diff --git a/tools/binman/test/41_unknown_pos_size.dts b/tools/binman/test/041_unknown_pos_size.dts
index 94fe821..94fe821 100644
--- a/tools/binman/test/41_unknown_pos_size.dts
+++ b/tools/binman/test/041_unknown_pos_size.dts
diff --git a/tools/binman/test/42_intel-fsp.dts b/tools/binman/test/042_intel-fsp.dts
index 8a7c889..8a7c889 100644
--- a/tools/binman/test/42_intel-fsp.dts
+++ b/tools/binman/test/042_intel-fsp.dts
diff --git a/tools/binman/test/43_intel-cmc.dts b/tools/binman/test/043_intel-cmc.dts
index 5a56c7d..5a56c7d 100644
--- a/tools/binman/test/43_intel-cmc.dts
+++ b/tools/binman/test/043_intel-cmc.dts
diff --git a/tools/binman/test/44_x86_optional_ucode.dts b/tools/binman/test/044_x86_optional_ucode.dts
index 24a7040..24a7040 100644
--- a/tools/binman/test/44_x86_optional_ucode.dts
+++ b/tools/binman/test/044_x86_optional_ucode.dts
diff --git a/tools/binman/test/45_prop_test.dts b/tools/binman/test/045_prop_test.dts
index 064de2b..064de2b 100644
--- a/tools/binman/test/45_prop_test.dts
+++ b/tools/binman/test/045_prop_test.dts
diff --git a/tools/binman/test/46_intel-vbt.dts b/tools/binman/test/046_intel-vbt.dts
index 733f575..733f575 100644
--- a/tools/binman/test/46_intel-vbt.dts
+++ b/tools/binman/test/046_intel-vbt.dts
diff --git a/tools/binman/test/47_spl_bss_pad.dts b/tools/binman/test/047_spl_bss_pad.dts
index 6bd88b8..6bd88b8 100644
--- a/tools/binman/test/47_spl_bss_pad.dts
+++ b/tools/binman/test/047_spl_bss_pad.dts
diff --git a/tools/binman/test/48_x86-start16-spl.dts b/tools/binman/test/048_x86-start16-spl.dts
index e2009f1..e2009f1 100644
--- a/tools/binman/test/48_x86-start16-spl.dts
+++ b/tools/binman/test/048_x86-start16-spl.dts
diff --git a/tools/binman/test/49_x86_ucode_spl.dts b/tools/binman/test/049_x86_ucode_spl.dts
index 350d2c4..350d2c4 100644
--- a/tools/binman/test/49_x86_ucode_spl.dts
+++ b/tools/binman/test/049_x86_ucode_spl.dts
diff --git a/tools/binman/test/50_intel_mrc.dts b/tools/binman/test/050_intel_mrc.dts
index 54cd52a..54cd52a 100644
--- a/tools/binman/test/50_intel_mrc.dts
+++ b/tools/binman/test/050_intel_mrc.dts
diff --git a/tools/binman/test/51_u_boot_spl_dtb.dts b/tools/binman/test/051_u_boot_spl_dtb.dts
index 3912f86..3912f86 100644
--- a/tools/binman/test/51_u_boot_spl_dtb.dts
+++ b/tools/binman/test/051_u_boot_spl_dtb.dts
diff --git a/tools/binman/test/52_u_boot_spl_nodtb.dts b/tools/binman/test/052_u_boot_spl_nodtb.dts
index 7f4e277..7f4e277 100644
--- a/tools/binman/test/52_u_boot_spl_nodtb.dts
+++ b/tools/binman/test/052_u_boot_spl_nodtb.dts
diff --git a/tools/binman/test/53_symbols.dts b/tools/binman/test/053_symbols.dts
index 9f13567..9f13567 100644
--- a/tools/binman/test/53_symbols.dts
+++ b/tools/binman/test/053_symbols.dts
diff --git a/tools/binman/test/54_unit_address.dts b/tools/binman/test/054_unit_address.dts
index 3216dbb..3216dbb 100644
--- a/tools/binman/test/54_unit_address.dts
+++ b/tools/binman/test/054_unit_address.dts
diff --git a/tools/binman/test/55_sections.dts b/tools/binman/test/055_sections.dts
index 6b306ae..6b306ae 100644
--- a/tools/binman/test/55_sections.dts
+++ b/tools/binman/test/055_sections.dts
diff --git a/tools/binman/test/56_name_prefix.dts b/tools/binman/test/056_name_prefix.dts
index f38c80e..f38c80e 100644
--- a/tools/binman/test/56_name_prefix.dts
+++ b/tools/binman/test/056_name_prefix.dts
diff --git a/tools/binman/test/57_unknown_contents.dts b/tools/binman/test/057_unknown_contents.dts
index 6ea98d7..6ea98d7 100644
--- a/tools/binman/test/57_unknown_contents.dts
+++ b/tools/binman/test/057_unknown_contents.dts
diff --git a/tools/binman/test/58_x86_ucode_spl_needs_retry.dts b/tools/binman/test/058_x86_ucode_spl_needs_retry.dts
index a04adaaf..a04adaaf 100644
--- a/tools/binman/test/58_x86_ucode_spl_needs_retry.dts
+++ b/tools/binman/test/058_x86_ucode_spl_needs_retry.dts
diff --git a/tools/binman/test/59_change_size.dts b/tools/binman/test/059_change_size.dts
index 1a69026..1a69026 100644
--- a/tools/binman/test/59_change_size.dts
+++ b/tools/binman/test/059_change_size.dts
diff --git a/tools/binman/test/60_fdt_update.dts b/tools/binman/test/060_fdt_update.dts
index f53c8a5..f53c8a5 100644
--- a/tools/binman/test/60_fdt_update.dts
+++ b/tools/binman/test/060_fdt_update.dts
diff --git a/tools/binman/test/61_fdt_update_bad.dts b/tools/binman/test/061_fdt_update_bad.dts
index e5abf31..e5abf31 100644
--- a/tools/binman/test/61_fdt_update_bad.dts
+++ b/tools/binman/test/061_fdt_update_bad.dts
diff --git a/tools/binman/test/62_entry_args.dts b/tools/binman/test/062_entry_args.dts
index 4d4f102..4d4f102 100644
--- a/tools/binman/test/62_entry_args.dts
+++ b/tools/binman/test/062_entry_args.dts
diff --git a/tools/binman/test/63_entry_args_missing.dts b/tools/binman/test/063_entry_args_missing.dts
index 1644e2f..1644e2f 100644
--- a/tools/binman/test/63_entry_args_missing.dts
+++ b/tools/binman/test/063_entry_args_missing.dts
diff --git a/tools/binman/test/64_entry_args_required.dts b/tools/binman/test/064_entry_args_required.dts
index 705be10..705be10 100644
--- a/tools/binman/test/64_entry_args_required.dts
+++ b/tools/binman/test/064_entry_args_required.dts
diff --git a/tools/binman/test/65_entry_args_unknown_datatype.dts b/tools/binman/test/065_entry_args_unknown_datatype.dts
index 3e4838f..3e4838f 100644
--- a/tools/binman/test/65_entry_args_unknown_datatype.dts
+++ b/tools/binman/test/065_entry_args_unknown_datatype.dts
diff --git a/tools/binman/test/66_text.dts b/tools/binman/test/066_text.dts
index 59b1fed..59b1fed 100644
--- a/tools/binman/test/66_text.dts
+++ b/tools/binman/test/066_text.dts
diff --git a/tools/binman/test/67_fmap.dts b/tools/binman/test/067_fmap.dts
index 9c0e293..9c0e293 100644
--- a/tools/binman/test/67_fmap.dts
+++ b/tools/binman/test/067_fmap.dts
diff --git a/tools/binman/test/68_blob_named_by_arg.dts b/tools/binman/test/068_blob_named_by_arg.dts
index e129f84..e129f84 100644
--- a/tools/binman/test/68_blob_named_by_arg.dts
+++ b/tools/binman/test/068_blob_named_by_arg.dts
diff --git a/tools/binman/test/69_fill.dts b/tools/binman/test/069_fill.dts
index e372ea3..e372ea3 100644
--- a/tools/binman/test/69_fill.dts
+++ b/tools/binman/test/069_fill.dts
diff --git a/tools/binman/test/70_fill_no_size.dts b/tools/binman/test/070_fill_no_size.dts
index 7b1fcf1..7b1fcf1 100644
--- a/tools/binman/test/70_fill_no_size.dts
+++ b/tools/binman/test/070_fill_no_size.dts
diff --git a/tools/binman/test/71_gbb.dts b/tools/binman/test/071_gbb.dts
index 5517563..5517563 100644
--- a/tools/binman/test/71_gbb.dts
+++ b/tools/binman/test/071_gbb.dts
diff --git a/tools/binman/test/72_gbb_too_small.dts b/tools/binman/test/072_gbb_too_small.dts
index c088f36..c088f36 100644
--- a/tools/binman/test/72_gbb_too_small.dts
+++ b/tools/binman/test/072_gbb_too_small.dts
diff --git a/tools/binman/test/73_gbb_no_size.dts b/tools/binman/test/073_gbb_no_size.dts
index 83be403..83be403 100644
--- a/tools/binman/test/73_gbb_no_size.dts
+++ b/tools/binman/test/073_gbb_no_size.dts
diff --git a/tools/binman/test/74_vblock.dts b/tools/binman/test/074_vblock.dts
index f0c21bf..f0c21bf 100644
--- a/tools/binman/test/74_vblock.dts
+++ b/tools/binman/test/074_vblock.dts
diff --git a/tools/binman/test/75_vblock_no_content.dts b/tools/binman/test/075_vblock_no_content.dts
index 676d947..676d947 100644
--- a/tools/binman/test/75_vblock_no_content.dts
+++ b/tools/binman/test/075_vblock_no_content.dts
diff --git a/tools/binman/test/76_vblock_bad_phandle.dts b/tools/binman/test/076_vblock_bad_phandle.dts
index ffbd0c3..ffbd0c3 100644
--- a/tools/binman/test/76_vblock_bad_phandle.dts
+++ b/tools/binman/test/076_vblock_bad_phandle.dts
diff --git a/tools/binman/test/77_vblock_bad_entry.dts b/tools/binman/test/077_vblock_bad_entry.dts
index 764c42a..764c42a 100644
--- a/tools/binman/test/77_vblock_bad_entry.dts
+++ b/tools/binman/test/077_vblock_bad_entry.dts
diff --git a/tools/binman/test/78_u_boot_tpl.dts b/tools/binman/test/078_u_boot_tpl.dts
index 6c60b4c..6c60b4c 100644
--- a/tools/binman/test/78_u_boot_tpl.dts
+++ b/tools/binman/test/078_u_boot_tpl.dts
diff --git a/tools/binman/test/79_uses_pos.dts b/tools/binman/test/079_uses_pos.dts
index 7638b9b..7638b9b 100644
--- a/tools/binman/test/79_uses_pos.dts
+++ b/tools/binman/test/079_uses_pos.dts
diff --git a/tools/binman/test/80_fill_empty.dts b/tools/binman/test/080_fill_empty.dts
index 2b78d3a..2b78d3a 100644
--- a/tools/binman/test/80_fill_empty.dts
+++ b/tools/binman/test/080_fill_empty.dts
diff --git a/tools/binman/test/81_x86-start16-tpl.dts b/tools/binman/test/081_x86-start16-tpl.dts
index 68e6bbd..68e6bbd 100644
--- a/tools/binman/test/81_x86-start16-tpl.dts
+++ b/tools/binman/test/081_x86-start16-tpl.dts
diff --git a/tools/binman/test/82_fdt_update_all.dts b/tools/binman/test/082_fdt_update_all.dts
index 284975c..284975c 100644
--- a/tools/binman/test/82_fdt_update_all.dts
+++ b/tools/binman/test/082_fdt_update_all.dts
diff --git a/tools/binman/test/83_compress.dts b/tools/binman/test/083_compress.dts
index 07813bd..07813bd 100644
--- a/tools/binman/test/83_compress.dts
+++ b/tools/binman/test/083_compress.dts
diff --git a/tools/binman/test/84_files.dts b/tools/binman/test/084_files.dts
index 83ddb78..83ddb78 100644
--- a/tools/binman/test/84_files.dts
+++ b/tools/binman/test/084_files.dts
diff --git a/tools/binman/test/85_files_compress.dts b/tools/binman/test/085_files_compress.dts
index 847b398..847b398 100644
--- a/tools/binman/test/85_files_compress.dts
+++ b/tools/binman/test/085_files_compress.dts
diff --git a/tools/binman/test/86_files_none.dts b/tools/binman/test/086_files_none.dts
index 34bd92f..34bd92f 100644
--- a/tools/binman/test/86_files_none.dts
+++ b/tools/binman/test/086_files_none.dts
diff --git a/tools/binman/test/87_files_no_pattern.dts b/tools/binman/test/087_files_no_pattern.dts
index 0cb5b46..0cb5b46 100644
--- a/tools/binman/test/87_files_no_pattern.dts
+++ b/tools/binman/test/087_files_no_pattern.dts
diff --git a/tools/binman/test/88_expand_size.dts b/tools/binman/test/088_expand_size.dts
index c8a0130..c8a0130 100644
--- a/tools/binman/test/88_expand_size.dts
+++ b/tools/binman/test/088_expand_size.dts
diff --git a/tools/binman/test/89_expand_size_bad.dts b/tools/binman/test/089_expand_size_bad.dts
index edc0e5c..edc0e5c 100644
--- a/tools/binman/test/89_expand_size_bad.dts
+++ b/tools/binman/test/089_expand_size_bad.dts
diff --git a/tools/binman/test/90_hash.dts b/tools/binman/test/090_hash.dts
index 2003045..2003045 100644
--- a/tools/binman/test/90_hash.dts
+++ b/tools/binman/test/090_hash.dts
diff --git a/tools/binman/test/91_hash_no_algo.dts b/tools/binman/test/091_hash_no_algo.dts
index b64df20..b64df20 100644
--- a/tools/binman/test/91_hash_no_algo.dts
+++ b/tools/binman/test/091_hash_no_algo.dts
diff --git a/tools/binman/test/92_hash_bad_algo.dts b/tools/binman/test/092_hash_bad_algo.dts
index d240200..d240200 100644
--- a/tools/binman/test/92_hash_bad_algo.dts
+++ b/tools/binman/test/092_hash_bad_algo.dts
diff --git a/tools/binman/test/93_x86_tpl_ucode.dts b/tools/binman/test/093_x86_tpl_ucode.dts
index d7ed9fc..d7ed9fc 100644
--- a/tools/binman/test/93_x86_tpl_ucode.dts
+++ b/tools/binman/test/093_x86_tpl_ucode.dts
diff --git a/tools/binman/test/94_fmap_x86.dts b/tools/binman/test/094_fmap_x86.dts
index 613c5da..613c5da 100644
--- a/tools/binman/test/94_fmap_x86.dts
+++ b/tools/binman/test/094_fmap_x86.dts
diff --git a/tools/binman/test/95_fmap_x86_section.dts b/tools/binman/test/095_fmap_x86_section.dts
index 4cfce45..4cfce45 100644
--- a/tools/binman/test/95_fmap_x86_section.dts
+++ b/tools/binman/test/095_fmap_x86_section.dts
diff --git a/tools/binman/test/96_elf.dts b/tools/binman/test/096_elf.dts
index df3440c..df3440c 100644
--- a/tools/binman/test/96_elf.dts
+++ b/tools/binman/test/096_elf.dts
diff --git a/tools/binman/test/97_elf_strip.dts b/tools/binman/test/097_elf_strip.dts
index 6f3c66f..6f3c66f 100644
--- a/tools/binman/test/97_elf_strip.dts
+++ b/tools/binman/test/097_elf_strip.dts
diff --git a/tools/binman/test/99_hash_section.dts b/tools/binman/test/099_hash_section.dts
index dcd8683..dcd8683 100644
--- a/tools/binman/test/99_hash_section.dts
+++ b/tools/binman/test/099_hash_section.dts
diff --git a/tools/binman/test/100_intel_refcode.dts b/tools/binman/test/100_intel_refcode.dts
new file mode 100644
index 0000000..0a1a027
--- /dev/null
+++ b/tools/binman/test/100_intel_refcode.dts
@@ -0,0 +1,14 @@
+/dts-v1/;
+
+/ {
+ #address-cells = <1>;
+ #size-cells = <1>;
+
+ binman {
+ size = <16>;
+
+ intel-refcode {
+ filename = "refcode.bin";
+ };
+ };
+};
diff --git a/tools/buildman/test.py b/tools/buildman/test.py
index c36bcdf..e0c9d6d 100644
--- a/tools/buildman/test.py
+++ b/tools/buildman/test.py
@@ -20,6 +20,7 @@ import control
import command
import commit
import terminal
+import test_util
import toolchain
use_network = True
@@ -422,8 +423,11 @@ class TestBuild(unittest.TestCase):
def testToolchainDownload(self):
"""Test that we can download toolchains"""
if use_network:
- self.assertEqual('https://www.kernel.org/pub/tools/crosstool/files/bin/x86_64/4.9.0/x86_64-gcc-4.9.0-nolibc_arm-unknown-linux-gnueabi.tar.xz',
- self.toolchains.LocateArchUrl('arm'))
+ with test_util.capture_sys_output() as (stdout, stderr):
+ url = self.toolchains.LocateArchUrl('arm')
+ self.assertRegexpMatches(url, 'https://www.kernel.org/pub/tools/'
+ 'crosstool/files/bin/x86_64/.*/'
+ 'x86_64-gcc-.*-nolibc_arm-.*linux-gnueabi.tar.xz')
if __name__ == "__main__":
diff --git a/tools/concurrencytest/.gitignore b/tools/concurrencytest/.gitignore
new file mode 100644
index 0000000..0d20b64
--- /dev/null
+++ b/tools/concurrencytest/.gitignore
@@ -0,0 +1 @@
+*.pyc
diff --git a/tools/concurrencytest/README.md b/tools/concurrencytest/README.md
new file mode 100644
index 0000000..8e65776
--- /dev/null
+++ b/tools/concurrencytest/README.md
@@ -0,0 +1,74 @@
+concurrencytest
+===============
+
+![testing goats](https://raw.github.com/cgoldberg/concurrencytest/master/testing-goats.png "testing goats")
+
+Python testtools extension for running unittest suites concurrently.
+
+----
+
+Install from PyPI:
+```
+pip install concurrencytest
+```
+
+----
+
+Requires:
+
+ * [testtools](https://pypi.python.org/pypi/testtools) : `pip install testtools`
+ * [python-subunit](https://pypi.python.org/pypi/python-subunit) : `pip install python-subunit`
+
+----
+
+Example:
+
+```python
+import time
+import unittest
+
+from concurrencytest import ConcurrentTestSuite, fork_for_tests
+
+
+class SampleTestCase(unittest.TestCase):
+ """Dummy tests that sleep for demo."""
+
+ def test_me_1(self):
+ time.sleep(0.5)
+
+ def test_me_2(self):
+ time.sleep(0.5)
+
+ def test_me_3(self):
+ time.sleep(0.5)
+
+ def test_me_4(self):
+ time.sleep(0.5)
+
+
+# Load tests from SampleTestCase defined above
+suite = unittest.TestLoader().loadTestsFromTestCase(SampleTestCase)
+runner = unittest.TextTestRunner()
+
+# Run tests sequentially
+runner.run(suite)
+
+# Run same tests across 4 processes
+suite = unittest.TestLoader().loadTestsFromTestCase(SampleTestCase)
+concurrent_suite = ConcurrentTestSuite(suite, fork_for_tests(4))
+runner.run(concurrent_suite)
+```
+Output:
+
+```
+....
+----------------------------------------------------------------------
+Ran 4 tests in 2.003s
+
+OK
+....
+----------------------------------------------------------------------
+Ran 4 tests in 0.504s
+
+OK
+```
diff --git a/tools/concurrencytest/concurrencytest.py b/tools/concurrencytest/concurrencytest.py
new file mode 100644
index 0000000..418d7ee
--- /dev/null
+++ b/tools/concurrencytest/concurrencytest.py
@@ -0,0 +1,144 @@
+#!/usr/bin/env python
+# SPDX-License-Identifier: GPL-2.0+
+#
+# Modified by: Corey Goldberg, 2013
+#
+# Original code from:
+# Bazaar (bzrlib.tests.__init__.py, v2.6, copied Jun 01 2013)
+# Copyright (C) 2005-2011 Canonical Ltd
+
+"""Python testtools extension for running unittest suites concurrently.
+
+The `testtools` project provides a ConcurrentTestSuite class, but does
+not provide a `make_tests` implementation needed to use it.
+
+This allows you to parallelize a test run across a configurable number
+of worker processes. While this can speed up CPU-bound test runs, it is
+mainly useful for IO-bound tests that spend most of their time waiting for
+data to arrive from someplace else and can benefit from cocncurrency.
+
+Unix only.
+"""
+
+import os
+import sys
+import traceback
+import unittest
+from itertools import cycle
+from multiprocessing import cpu_count
+
+from subunit import ProtocolTestCase, TestProtocolClient
+from subunit.test_results import AutoTimingTestResultDecorator
+
+from testtools import ConcurrentTestSuite, iterate_tests
+
+
+_all__ = [
+ 'ConcurrentTestSuite',
+ 'fork_for_tests',
+ 'partition_tests',
+]
+
+
+CPU_COUNT = cpu_count()
+
+
+def fork_for_tests(concurrency_num=CPU_COUNT):
+ """Implementation of `make_tests` used to construct `ConcurrentTestSuite`.
+
+ :param concurrency_num: number of processes to use.
+ """
+ def do_fork(suite):
+ """Take suite and start up multiple runners by forking (Unix only).
+
+ :param suite: TestSuite object.
+
+ :return: An iterable of TestCase-like objects which can each have
+ run(result) called on them to feed tests to result.
+ """
+ result = []
+ test_blocks = partition_tests(suite, concurrency_num)
+ # Clear the tests from the original suite so it doesn't keep them alive
+ suite._tests[:] = []
+ for process_tests in test_blocks:
+ process_suite = unittest.TestSuite(process_tests)
+ # Also clear each split list so new suite has only reference
+ process_tests[:] = []
+ c2pread, c2pwrite = os.pipe()
+ pid = os.fork()
+ if pid == 0:
+ try:
+ stream = os.fdopen(c2pwrite, 'wb', 1)
+ os.close(c2pread)
+ # Leave stderr and stdout open so we can see test noise
+ # Close stdin so that the child goes away if it decides to
+ # read from stdin (otherwise its a roulette to see what
+ # child actually gets keystrokes for pdb etc).
+ sys.stdin.close()
+ subunit_result = AutoTimingTestResultDecorator(
+ TestProtocolClient(stream)
+ )
+ process_suite.run(subunit_result)
+ except:
+ # Try and report traceback on stream, but exit with error
+ # even if stream couldn't be created or something else
+ # goes wrong. The traceback is formatted to a string and
+ # written in one go to avoid interleaving lines from
+ # multiple failing children.
+ try:
+ stream.write(traceback.format_exc())
+ finally:
+ os._exit(1)
+ os._exit(0)
+ else:
+ os.close(c2pwrite)
+ stream = os.fdopen(c2pread, 'rb', 1)
+ test = ProtocolTestCase(stream)
+ result.append(test)
+ return result
+ return do_fork
+
+
+def partition_tests(suite, count):
+ """Partition suite into count lists of tests."""
+ # This just assigns tests in a round-robin fashion. On one hand this
+ # splits up blocks of related tests that might run faster if they shared
+ # resources, but on the other it avoids assigning blocks of slow tests to
+ # just one partition. So the slowest partition shouldn't be much slower
+ # than the fastest.
+ partitions = [list() for _ in range(count)]
+ tests = iterate_tests(suite)
+ for partition, test in zip(cycle(partitions), tests):
+ partition.append(test)
+ return partitions
+
+
+if __name__ == '__main__':
+ import time
+
+ class SampleTestCase(unittest.TestCase):
+ """Dummy tests that sleep for demo."""
+
+ def test_me_1(self):
+ time.sleep(0.5)
+
+ def test_me_2(self):
+ time.sleep(0.5)
+
+ def test_me_3(self):
+ time.sleep(0.5)
+
+ def test_me_4(self):
+ time.sleep(0.5)
+
+ # Load tests from SampleTestCase defined above
+ suite = unittest.TestLoader().loadTestsFromTestCase(SampleTestCase)
+ runner = unittest.TextTestRunner()
+
+ # Run tests sequentially
+ runner.run(suite)
+
+ # Run same tests across 4 processes
+ suite = unittest.TestLoader().loadTestsFromTestCase(SampleTestCase)
+ concurrent_suite = ConcurrentTestSuite(suite, fork_for_tests(4))
+ runner.run(concurrent_suite)
diff --git a/tools/dtoc/dtoc.py b/tools/dtoc/dtoc.py
index 827094e..2277af9 100755
--- a/tools/dtoc/dtoc.py
+++ b/tools/dtoc/dtoc.py
@@ -34,6 +34,11 @@ import unittest
our_path = os.path.dirname(os.path.realpath(__file__))
sys.path.append(os.path.join(our_path, '../patman'))
+# Bring in the libfdt module
+sys.path.insert(0, 'scripts/dtc/pylibfdt')
+sys.path.insert(0, os.path.join(our_path,
+ '../../build-sandbox_spl/scripts/dtc/pylibfdt'))
+
import dtb_platdata
import test_util
@@ -84,6 +89,8 @@ parser.add_option('--include-disabled', action='store_true',
help='Include disabled nodes')
parser.add_option('-o', '--output', action='store', default='-',
help='Select output filename')
+parser.add_option('-P', '--processes', type=int,
+ help='set number of processes to use for running tests')
parser.add_option('-t', '--test', action='store_true', dest='test',
default=False, help='run tests')
parser.add_option('-T', '--test-coverage', action='store_true',
diff --git a/tools/dtoc/fdt.py b/tools/dtoc/fdt.py
index 2df2d4b..9ad72f8 100644
--- a/tools/dtoc/fdt.py
+++ b/tools/dtoc/fdt.py
@@ -171,7 +171,7 @@ class Prop:
val: Integer value (32-bit, single cell)
"""
self.bytes = struct.pack('>I', val);
- self.value = val
+ self.value = self.bytes
self.type = TYPE_INT
self.dirty = True
diff --git a/tools/dtoc/test_dtoc.py b/tools/dtoc/test_dtoc.py
index 72bcb37..11bead1 100644
--- a/tools/dtoc/test_dtoc.py
+++ b/tools/dtoc/test_dtoc.py
@@ -385,7 +385,8 @@ U_BOOT_DEVICE(phandle_source2) = {
def test_phandle_bad(self):
"""Test a node containing an invalid phandle fails"""
- dtb_file = get_dtb_file('dtoc_test_phandle_bad.dts')
+ dtb_file = get_dtb_file('dtoc_test_phandle_bad.dts',
+ capture_stderr=True)
output = tools.GetOutputFilename('output')
with self.assertRaises(ValueError) as e:
dtb_platdata.run_steps(['struct'], dtb_file, False, output)
@@ -394,7 +395,8 @@ U_BOOT_DEVICE(phandle_source2) = {
def test_phandle_bad2(self):
"""Test a phandle target missing its #*-cells property"""
- dtb_file = get_dtb_file('dtoc_test_phandle_bad2.dts')
+ dtb_file = get_dtb_file('dtoc_test_phandle_bad2.dts',
+ capture_stderr=True)
output = tools.GetOutputFilename('output')
with self.assertRaises(ValueError) as e:
dtb_platdata.run_steps(['struct'], dtb_file, False, output)
diff --git a/tools/dtoc/test_fdt.py b/tools/dtoc/test_fdt.py
index d259702..8d70dd2 100755
--- a/tools/dtoc/test_fdt.py
+++ b/tools/dtoc/test_fdt.py
@@ -60,7 +60,7 @@ class TestFdt(unittest.TestCase):
@classmethod
def tearDownClass(cls):
- tools._FinaliseForTest()
+ tools.FinaliseOutputDir()
def setUp(self):
self.dtb = fdt.FdtScan('tools/dtoc/dtoc_test_simple.dts')
@@ -128,7 +128,7 @@ class TestNode(unittest.TestCase):
@classmethod
def tearDownClass(cls):
- tools._FinaliseForTest()
+ tools.FinaliseOutputDir()
def setUp(self):
self.dtb = fdt.FdtScan('tools/dtoc/dtoc_test_simple.dts')
@@ -209,7 +209,7 @@ class TestProp(unittest.TestCase):
@classmethod
def tearDownClass(cls):
- tools._FinaliseForTest()
+ tools.FinaliseOutputDir()
def setUp(self):
self.dtb = fdt.FdtScan('tools/dtoc/dtoc_test_simple.dts')
@@ -427,6 +427,10 @@ class TestFdtUtil(unittest.TestCase):
def setUpClass(cls):
tools.PrepareOutputDir(None)
+ @classmethod
+ def tearDownClass(cls):
+ tools.FinaliseOutputDir()
+
def setUp(self):
self.dtb = fdt.FdtScan('tools/dtoc/dtoc_test_simple.dts')
self.node = self.dtb.GetNode('/spl-test')
@@ -543,6 +547,8 @@ if __name__ != '__main__':
parser = OptionParser()
parser.add_option('-B', '--build-dir', type='string', default='b',
help='Directory containing the build output')
+parser.add_option('-P', '--processes', type=int,
+ help='set number of processes to use for running tests')
parser.add_option('-t', '--test', action='store_true', dest='test',
default=False, help='run tests')
parser.add_option('-T', '--test-coverage', action='store_true',
diff --git a/tools/patman/settings.py b/tools/patman/settings.py
index ca43344..ea2bc74 100644
--- a/tools/patman/settings.py
+++ b/tools/patman/settings.py
@@ -58,25 +58,25 @@ class _ProjectConfigParser(ConfigParser.SafeConfigParser):
>>> config = _ProjectConfigParser("zzz")
>>> config.readfp(StringIO(sample_config))
>>> config.get("alias", "enemies")
- 'Evil <evil@example.com>'
+ u'Evil <evil@example.com>'
# Check to make sure that alias gets overridden by project.
>>> config = _ProjectConfigParser("sm")
>>> config.readfp(StringIO(sample_config))
>>> config.get("alias", "enemies")
- 'Green G. <ugly@example.com>'
+ u'Green G. <ugly@example.com>'
# Check to make sure that settings get merged with project.
>>> config = _ProjectConfigParser("linux")
>>> config.readfp(StringIO(sample_config))
>>> sorted(config.items("settings"))
- [('am_hero', 'True'), ('process_tags', 'False')]
+ [(u'am_hero', u'True'), (u'process_tags', u'False')]
# Check to make sure that settings works with unknown project.
>>> config = _ProjectConfigParser("unknown")
>>> config.readfp(StringIO(sample_config))
>>> sorted(config.items("settings"))
- [('am_hero', 'True')]
+ [(u'am_hero', u'True')]
"""
def __init__(self, project_name):
"""Construct _ProjectConfigParser.
@@ -99,6 +99,17 @@ class _ProjectConfigParser(ConfigParser.SafeConfigParser):
for setting_name, setting_value in project_defaults.items():
self.set(project_settings, setting_name, setting_value)
+ def _to_unicode(self, val):
+ """Make sure a value is of type 'unicode'
+
+ Args:
+ val: string or unicode object
+
+ Returns:
+ unicode version of val
+ """
+ return val if isinstance(val, unicode) else val.decode('utf-8')
+
def get(self, section, option, *args, **kwargs):
"""Extend SafeConfigParser to try project_section before section.
@@ -108,14 +119,15 @@ class _ProjectConfigParser(ConfigParser.SafeConfigParser):
See SafeConfigParser.
"""
try:
- return ConfigParser.SafeConfigParser.get(
+ val = ConfigParser.SafeConfigParser.get(
self, "%s_%s" % (self._project_name, section), option,
*args, **kwargs
)
except (ConfigParser.NoSectionError, ConfigParser.NoOptionError):
- return ConfigParser.SafeConfigParser.get(
+ val = ConfigParser.SafeConfigParser.get(
self, section, option, *args, **kwargs
)
+ return self._to_unicode(val)
def items(self, section, *args, **kwargs):
"""Extend SafeConfigParser to add project_section to section.
@@ -150,7 +162,8 @@ class _ProjectConfigParser(ConfigParser.SafeConfigParser):
item_dict = dict(top_items)
item_dict.update(project_items)
- return item_dict.items()
+ return {(self._to_unicode(item), self._to_unicode(val))
+ for item, val in item_dict.iteritems()}
def ReadGitAliases(fname):
"""Read a git alias file. This is in the form used by git:
diff --git a/tools/patman/test_util.py b/tools/patman/test_util.py
index 0e79af8..687d407 100644
--- a/tools/patman/test_util.py
+++ b/tools/patman/test_util.py
@@ -43,7 +43,7 @@ def RunTestCoverage(prog, filter_fname, exclude_list, build_dir, required=None):
glob_list += exclude_list
glob_list += ['*libfdt.py', '*site-packages*']
cmd = ('PYTHONPATH=$PYTHONPATH:%s/sandbox_spl/tools python-coverage run '
- '--omit "%s" %s -t' % (build_dir, ','.join(glob_list), prog))
+ '--omit "%s" %s -P1 -t' % (build_dir, ','.join(glob_list), prog))
os.system(cmd)
stdout = command.Output('python-coverage', 'report')
lines = stdout.splitlines()
diff --git a/tools/patman/tools.py b/tools/patman/tools.py
index 1c9bf4e..bf09979 100644
--- a/tools/patman/tools.py
+++ b/tools/patman/tools.py
@@ -28,6 +28,9 @@ packages = {
'lz4': 'liblz4-tool',
}
+# List of paths to use when looking for an input file
+indir = []
+
def PrepareOutputDir(dirname, preserve=False):
"""Select an output directory, ensuring it exists.
diff --git a/tools/patman/tout.py b/tools/patman/tout.py
index 4cd49e1..4957c7a 100644
--- a/tools/patman/tout.py
+++ b/tools/patman/tout.py
@@ -15,6 +15,8 @@ NOTICE = 2
INFO = 3
DEBUG = 4
+in_progress = False
+
"""
This class handles output of progress and other useful information
to the user. It provides for simple verbosity level control and can
@@ -48,9 +50,11 @@ def UserIsPresent():
def ClearProgress():
"""Clear any active progress message on the terminal."""
- if verbose > 0 and stdout_is_tty:
+ global in_progress
+ if verbose > 0 and stdout_is_tty and in_progress:
_stdout.write('\r%s\r' % (" " * len (_progress)))
_stdout.flush()
+ in_progress = False
def Progress(msg, warning=False, trailer='...'):
"""Display progress information.
@@ -58,6 +62,7 @@ def Progress(msg, warning=False, trailer='...'):
Args:
msg: Message to display.
warning: True if this is a warning."""
+ global in_progress
ClearProgress()
if verbose > 0:
_progress = msg + trailer
@@ -65,6 +70,7 @@ def Progress(msg, warning=False, trailer='...'):
col = _color.YELLOW if warning else _color.GREEN
_stdout.write('\r' + _color.Color(col, _progress))
_stdout.flush()
+ in_progress = True
else:
_stdout.write(_progress + '\n')