Am Dienstag, dem 29.07.2025 um 12:48 +0000 schrieb Aristo Chen: > Add a new test case to verify that mkimage properly detects and reports > memory region overlaps in FIT image configurations. > > The test creates a FIT image with kernel and FDT components that have > the same load address (0x40000), which should trigger the overlap > detection logic and cause mkimage to fail with an appropriate error > message. > > Test verifies: > - mkimage returns non-zero exit code when overlap is detected > - Error message contains "Error: Overlap detected:" > - Error message identifies the specific overlapping components > (kernel@1 and fdt@1) > > This test ensures the overlap detection feature works correctly and > prevents deployment of FIT images with conflicting memory layouts > that could cause runtime failures. > > Signed-off-by: Aristo Chen <aristo.c...@canonical.com> > --- > test/py/tests/test_fit_mkimage_validate.py | 65 ++++++++++++++++++++++ > 1 file changed, 65 insertions(+) > > diff --git a/test/py/tests/test_fit_mkimage_validate.py > b/test/py/tests/test_fit_mkimage_validate.py > index ef974c8c762..51f7f64b257 100644 > --- a/test/py/tests/test_fit_mkimage_validate.py > +++ b/test/py/tests/test_fit_mkimage_validate.py > @@ -101,3 +101,68 @@ def test_fit_invalid_default_config(ubman): > > assert result.returncode != 0, "mkimage should fail due to missing > default config" > assert re.search(r"Default configuration '.*' not found under > /configurations", result.stderr) > + > +def test_fit_load_addr_overlap(ubman): > + """Test that mkimage fails when load address overlap""" > + > + its_fname = fit_util.make_fname(ubman, "invalid.its") > + itb_fname = fit_util.make_fname(ubman, "invalid.itb") > + kernel = fit_util.make_kernel(ubman, 'kernel.bin', 'kernel') > + fdt = fit_util.make_dtb(ubman, ''' > +/dts-v1/; > +/ { > + model = "Test FDT"; > + compatible = "test"; > +}; > +''', 'test') > + > + # Write ITS with an invalid reference to a nonexistent default config > + its_text = ''' > +/dts-v1/; > + > +/ { > + images { > + kernel@1 { > + description = "Test Kernel"; > + data = /incbin/("kernel.bin"); > + type = "kernel"; > + arch = "sandbox"; > + os = "linux"; > + compression = "none"; > + load = <0x40000>; > + entry = <0x40000>; > + }; > + fdt@1 { > + description = "Test FDT"; > + data = /incbin/("test.dtb"); > + type = "flat_dt"; > + arch = "sandbox"; > + os = "linux"; > + compression = "none"; > + load = <0x40000>; > + entry = <0x40000>; > + }; > + }; > + > + configurations { > + default = "conf@1"; > + conf@1 { > + kernel = "kernel@1"; > + fdt = "fdt@1"; > + }; > + }; > +}; > +'''
Why do you create the dts here? I think it is best to stay consistent: create a dts file and use existing _DoReadFileDtb and the like for the test. Yannic > + > + with open(its_fname, 'w') as f: > + f.write(its_text) > + > + mkimage = os.path.join(ubman.config.build_dir, 'tools/mkimage') > + cmd = [mkimage, '-f', its_fname, itb_fname] > + > + result = subprocess.run(cmd, capture_output=True, text=True) > + > + assert result.returncode != 0, "mkimage should fail due to memory > overlap" > + assert "Error: Overlap detected:" in result.stderr > + # Check that it identifies the specific overlapping components > + assert "kernel@1" in result.stderr and "fdt@1" in result.stderr