binman: Add tests for skip-at-start sections

At present this feature is tested view the end-at-4gb feature. Add some
tests of its own, including the operation of padding.

The third test here shows binman's current, inconsistent approach to
padding in the top-level section. Future patches in this series will
address this.

Signed-off-by: Simon Glass <sjg@chromium.org>
This commit is contained in:
Simon Glass 2020-10-26 17:40:01 -06:00
parent a4dfe3e473
commit f2c0dd85ad
4 changed files with 121 additions and 0 deletions

View file

@ -3752,6 +3752,65 @@ class TestFunctional(unittest.TestCase):
self.assertIn("too small to hold data (need %#x more bytes)" % short,
str(e.exception))
def testSkipAtStart(self):
"""Test handling of skip-at-start section"""
data = self._DoReadFile('177_skip_at_start.dts')
self.assertEqual(U_BOOT_DATA, data)
image = control.images['image']
entries = image.GetEntries()
section = entries['section']
self.assertEqual(0, section.offset)
self.assertEqual(len(U_BOOT_DATA), section.size)
self.assertEqual(U_BOOT_DATA, section.GetData())
entry = section.GetEntries()['u-boot']
self.assertEqual(16, entry.offset)
self.assertEqual(len(U_BOOT_DATA), entry.size)
self.assertEqual(U_BOOT_DATA, entry.data)
def testSkipAtStartPad(self):
"""Test handling of skip-at-start section with padded entry"""
data = self._DoReadFile('178_skip_at_start_pad.dts')
before = tools.GetBytes(0, 8)
after = tools.GetBytes(0, 4)
all = before + U_BOOT_DATA + after
self.assertEqual(all, data)
image = control.images['image']
entries = image.GetEntries()
section = entries['section']
self.assertEqual(0, section.offset)
self.assertEqual(len(all), section.size)
self.assertEqual(all, section.GetData())
entry = section.GetEntries()['u-boot']
self.assertEqual(16, entry.offset)
self.assertEqual(len(all), entry.size)
self.assertEqual(U_BOOT_DATA, entry.data)
def testSkipAtStartSectionPad(self):
"""Test handling of skip-at-start section with padding"""
data = self._DoReadFile('179_skip_at_start_section_pad.dts')
before = tools.GetBytes(0, 8)
after = tools.GetBytes(0, 4)
all = before + U_BOOT_DATA + after
# This is not correct, but it is what binman currently produces
self.assertEqual(tools.GetBytes(0, 16) + U_BOOT_DATA + after, data)
image = control.images['image']
entries = image.GetEntries()
section = entries['section']
self.assertEqual(0, section.offset)
self.assertEqual(len(all), section.size)
self.assertIsNone(section.data)
self.assertEqual(all, section.GetData())
entry = section.GetEntries()['u-boot']
self.assertEqual(16, entry.offset)
self.assertEqual(len(U_BOOT_DATA), entry.size)
self.assertEqual(U_BOOT_DATA, entry.data)
if __name__ == "__main__":
unittest.main()

View file

@ -0,0 +1,19 @@
// SPDX-License-Identifier: GPL-2.0+
/*
* Copyright 2018 NXP
*/
/dts-v1/;
/ {
#address-cells = <1>;
#size-cells = <1>;
binman {
section {
skip-at-start = <16>;
u-boot {
};
};
};
};

View file

@ -0,0 +1,21 @@
// SPDX-License-Identifier: GPL-2.0+
/*
* Copyright 2018 NXP
*/
/dts-v1/;
/ {
#address-cells = <1>;
#size-cells = <1>;
binman {
section {
skip-at-start = <16>;
u-boot {
pad-before = <8>;
pad-after = <4>;
};
};
};
};

View file

@ -0,0 +1,22 @@
// SPDX-License-Identifier: GPL-2.0+
/*
* Copyright 2018 NXP
*/
/dts-v1/;
/ {
#address-cells = <1>;
#size-cells = <1>;
binman {
section {
skip-at-start = <16>;
pad-before = <8>;
pad-after = <4>;
u-boot {
};
};
};
};