diff mbox series

[v2,01/10] binman: Skip elf tests if python elftools is not available

Message ID 20220808105125.21356-1-stefan.herbrechtsmeier-oss@weidmueller.com
State Superseded
Delegated to: Simon Glass
Headers show
Series [v2,01/10] binman: Skip elf tests if python elftools is not available | expand

Commit Message

Stefan Herbrechtsmeier Aug. 8, 2022, 10:51 a.m. UTC
From: Stefan Herbrechtsmeier <stefan.herbrechtsmeier@weidmueller.com>

Skip tests which requires python elftools if the tool is not available.

Signed-off-by: Stefan Herbrechtsmeier <stefan.herbrechtsmeier@weidmueller.com>

---

Changes in v2:
- Added

 tools/binman/elf_test.py | 14 ++++++++++++++
 tools/binman/ftest.py    | 18 ++++++++++++++++++
 2 files changed, 32 insertions(+)

Comments

Simon Glass Aug. 9, 2022, 7:51 p.m. UTC | #1
On Mon, 8 Aug 2022 at 04:51, Stefan Herbrechtsmeier
<stefan.herbrechtsmeier-oss@weidmueller.com> wrote:
>
> From: Stefan Herbrechtsmeier <stefan.herbrechtsmeier@weidmueller.com>
>
> Skip tests which requires python elftools if the tool is not available.
>
> Signed-off-by: Stefan Herbrechtsmeier <stefan.herbrechtsmeier@weidmueller.com>
>
> ---
>
> Changes in v2:
> - Added
>
>  tools/binman/elf_test.py | 14 ++++++++++++++
>  tools/binman/ftest.py    | 18 ++++++++++++++++++
>  2 files changed, 32 insertions(+)

Reviewed-by: Simon Glass <sjg@chromium.org>
Simon Glass Aug. 10, 2022, 9:32 p.m. UTC | #2
Hi Stefan,

On Tue, 9 Aug 2022 at 13:51, Simon Glass <sjg@chromium.org> wrote:
>
> On Mon, 8 Aug 2022 at 04:51, Stefan Herbrechtsmeier
> <stefan.herbrechtsmeier-oss@weidmueller.com> wrote:
> >
> > From: Stefan Herbrechtsmeier <stefan.herbrechtsmeier@weidmueller.com>
> >
> > Skip tests which requires python elftools if the tool is not available.
> >
> > Signed-off-by: Stefan Herbrechtsmeier <stefan.herbrechtsmeier@weidmueller.com>
> >
> > ---
> >
> > Changes in v2:
> > - Added
> >
> >  tools/binman/elf_test.py | 14 ++++++++++++++
> >  tools/binman/ftest.py    | 18 ++++++++++++++++++
> >  2 files changed, 32 insertions(+)
>
> Reviewed-by: Simon Glass <sjg@chromium.org>

The rest of this series is going to need more investigation and
thought on my part. I will come back to you by the end of next week.

Regards,
SImon
diff mbox series

Patch

diff --git a/tools/binman/elf_test.py b/tools/binman/elf_test.py
index 5a51c64cfe..75b867c2be 100644
--- a/tools/binman/elf_test.py
+++ b/tools/binman/elf_test.py
@@ -122,6 +122,8 @@  class TestElf(unittest.TestCase):
 
     def testOutsideFile(self):
         """Test a symbol which extends outside the entry area is detected"""
+        if not elf.ELF_TOOLS:
+            self.skipTest('Python elftools not available')
         entry = FakeEntry(10)
         section = FakeSection()
         elf_fname = self.ElfTestFile('u_boot_binman_syms')
@@ -147,6 +149,8 @@  class TestElf(unittest.TestCase):
         Only 32 and 64 bits are supported, since we need to store an offset
         into the image.
         """
+        if not elf.ELF_TOOLS:
+            self.skipTest('Python elftools not available')
         entry = FakeEntry(10)
         section = FakeSection()
         elf_fname =self.ElfTestFile('u_boot_binman_syms_size')
@@ -161,6 +165,8 @@  class TestElf(unittest.TestCase):
         This should produce -1 values for all thress symbols, taking up the
         first 16 bytes of the image.
         """
+        if not elf.ELF_TOOLS:
+            self.skipTest('Python elftools not available')
         entry = FakeEntry(28)
         section = FakeSection(sym_value=None)
         elf_fname = self.ElfTestFile('u_boot_binman_syms')
@@ -172,6 +178,8 @@  class TestElf(unittest.TestCase):
 
     def testDebug(self):
         """Check that enabling debug in the elf module produced debug output"""
+        if not elf.ELF_TOOLS:
+            self.skipTest('Python elftools not available')
         try:
             tout.init(tout.DEBUG)
             entry = FakeEntry(24)
@@ -281,6 +289,8 @@  class TestElf(unittest.TestCase):
 
     def test_read_segments_bad_data(self):
         """Test for read_loadable_segments() with an invalid ELF file"""
+        if not elf.ELF_TOOLS:
+            self.skipTest('Python elftools not available')
         fname = self.ElfTestFile('embed_data')
         with self.assertRaises(ValueError) as e:
             elf.read_loadable_segments(tools.get_bytes(100, 100))
@@ -288,6 +298,8 @@  class TestElf(unittest.TestCase):
 
     def test_get_file_offset(self):
         """Test GetFileOffset() gives the correct file offset for a symbol"""
+        if not elf.ELF_TOOLS:
+            self.skipTest('Python elftools not available')
         fname = self.ElfTestFile('embed_data')
         syms = elf.GetSymbols(fname, ['embed'])
         addr = syms['embed'].address
@@ -314,6 +326,8 @@  class TestElf(unittest.TestCase):
 
     def test_get_symbol_from_address(self):
         """Test GetSymbolFromAddress()"""
+        if not elf.ELF_TOOLS:
+            self.skipTest('Python elftools not available')
         fname = self.ElfTestFile('elf_sections')
         sym_name = 'calculate'
         syms = elf.GetSymbols(fname, [sym_name])
diff --git a/tools/binman/ftest.py b/tools/binman/ftest.py
index fa1f421c05..da9aa9e679 100644
--- a/tools/binman/ftest.py
+++ b/tools/binman/ftest.py
@@ -4807,6 +4807,8 @@  class TestFunctional(unittest.TestCase):
 
     def testUpdateFdtInElf(self):
         """Test that we can update the devicetree in an ELF file"""
+        if not elf.ELF_TOOLS:
+            self.skipTest('Python elftools not available')
         infile = elf_fname = self.ElfTestFile('u_boot_binman_embed')
         outfile = os.path.join(self._indir, 'u-boot.out')
         begin_sym = 'dtb_embed_begin'
@@ -4858,6 +4860,8 @@  class TestFunctional(unittest.TestCase):
 
     def testUpdateFdtInElfNoSyms(self):
         """Test that missing symbols are detected with --update-fdt-in-elf"""
+        if not elf.ELF_TOOLS:
+            self.skipTest('Python elftools not available')
         infile = elf_fname = self.ElfTestFile('u_boot_binman_embed')
         outfile = ''
         begin_sym = 'wrong_begin'
@@ -4871,6 +4875,8 @@  class TestFunctional(unittest.TestCase):
 
     def testUpdateFdtInElfTooSmall(self):
         """Test that an over-large dtb is detected with --update-fdt-in-elf"""
+        if not elf.ELF_TOOLS:
+            self.skipTest('Python elftools not available')
         infile = elf_fname = self.ElfTestFile('u_boot_binman_embed_sm')
         outfile = os.path.join(self._indir, 'u-boot.out')
         begin_sym = 'dtb_embed_begin'
@@ -5344,6 +5350,8 @@  fdt         fdtmap                Extract the devicetree blob from the fdtmap
 
     def testFitSplitElf(self):
         """Test an image with an FIT with an split-elf operation"""
+        if not elf.ELF_TOOLS:
+            self.skipTest('Python elftools not available')
         entry_args = {
             'of-list': 'test-fdt1 test-fdt2',
             'default-dt': 'test-fdt2',
@@ -5421,6 +5429,8 @@  fdt         fdtmap                Extract the devicetree blob from the fdtmap
 
     def testFitSplitElfBadElf(self):
         """Test a FIT split-elf operation with an invalid ELF file"""
+        if not elf.ELF_TOOLS:
+            self.skipTest('Python elftools not available')
         TestFunctional._MakeInputFile('bad.elf', tools.get_bytes(100, 100))
         entry_args = {
             'of-list': 'test-fdt1 test-fdt2',
@@ -5440,6 +5450,8 @@  fdt         fdtmap                Extract the devicetree blob from the fdtmap
 
     def testFitSplitElfBadDirective(self):
         """Test a FIT split-elf invalid fit,xxx directive in an image node"""
+        if not elf.ELF_TOOLS:
+            self.skipTest('Python elftools not available')
         err = self._check_bad_fit('227_fit_bad_dir.dts')
         self.assertIn(
             "Node '/binman/fit': subnode 'images/@atf-SEQ': Unknown directive 'fit,something'",
@@ -5447,6 +5459,8 @@  fdt         fdtmap                Extract the devicetree blob from the fdtmap
 
     def testFitSplitElfBadDirectiveConfig(self):
         """Test a FIT split-elf with invalid fit,xxx directive in config"""
+        if not elf.ELF_TOOLS:
+            self.skipTest('Python elftools not available')
         err = self._check_bad_fit('228_fit_bad_dir_config.dts')
         self.assertEqual(
             "Node '/binman/fit': subnode 'configurations/@config-SEQ': Unknown directive 'fit,config'",
@@ -5470,6 +5484,8 @@  fdt         fdtmap                Extract the devicetree blob from the fdtmap
 
     def testFitSplitElfMissing(self):
         """Test an split-elf FIT with a missing ELF file"""
+        if not elf.ELF_TOOLS:
+            self.skipTest('Python elftools not available')
         err = self.checkFitSplitElf(allow_missing=True)
         self.assertRegex(
             err,
@@ -5477,6 +5493,8 @@  fdt         fdtmap                Extract the devicetree blob from the fdtmap
 
     def testFitSplitElfFaked(self):
         """Test an split-elf FIT with faked ELF file"""
+        if not elf.ELF_TOOLS:
+            self.skipTest('Python elftools not available')
         err = self.checkFitSplitElf(allow_missing=True, allow_fake_blobs=True)
         self.assertRegex(
             err,