On Tue, Dec 31, 2019 at 12:42:36PM +0200, Cristian Ciocaltea wrote: > On Mon, Dec 30, 2019 at 09:03:38PM +0100, Heinrich Schuchardt wrote: > > On 12/30/19 8:32 PM, Stephen Warren wrote: > > > On 12/30/19 12:05 PM, Heinrich Schuchardt wrote: > > > > On 12/30/19 5:38 PM, Stephen Warren wrote: > > > > > On 12/30/19 3:52 AM, Heinrich Schuchardt wrote: > > > > > > Provide dictionary env__efi_fit_tftp_file describing the file used > > > > > > for > > > > > > the > > > > > > UEFI FIT image test. > > > > > > > > > > > diff --git a/py/travis-ci/travis_tftp.py > > > > > > b/py/travis-ci/travis_tftp.py > > > > > > > > > > > +def efifit2env(addr=None): > > > > > > + """Create dictionary describing file for EFI fit image test > > > > > > + > > > > > > + @addr: address used for loading the file as int (e.g. > > > > > > 0x40400000) > > > > > > + Return: dictionary describing the file with entries > > > > > > + * fn - filename > > > > > > + * addr - loading address, optional > > > > > > + * dn - tftp directory > > > > > > + """ > > > > > > + tftp_dir = os.environ['UBOOT_TRAVIS_BUILD_DIR'] > > > > > > + > > > > > > + ret = { > > > > > > + "fn": "test-efi-fit.img", > > > > > > > > > > If this function were to exist, then the filename shouldn't be > > > > > hard-coded; it should be a parameter. > > > > > > > > > > > > > Hello Stephen, > > > > > > > > thanks for reviewing. > > > > > > > > This is the name of a generated file. It does not depend on the board. > > > > > > What generates the file and when/why? > > > > > > Generated files should generally be put into > > > u_boot_console.config.persistent_data_dir, and presumably the name > > > hard-coded into the test that uses it. > > > > > > > Hello Stephen, > > > > this is the test case: > > > > https://lists.denx.de/pipermail/u-boot/2019-December/394957.html > > test/py: Create a test for launching UEFI binaries from FIT images > > > > The test can be run in different styles: > > > > * A complete FIT image can be supplied. In this case the dictionary > > must contain a "size" entry. > > * The test can generate a FIT image from lib/efi_loader/helloworld.efi. > > In this case no "size" entry shall be supplied. The "fn" field > > provides the name of the generated file. The file is generated in > > cons.config.build_dir. The "dn" field" describes the tFTP root > > directory to which the generated file is copied. > > A small correction here: if the "size" entry is not provided in the > dictionary, the test generates a FIT image using a hardcoded file > name (test-efi-fit-helloworld.fit), so any "fn" entry provided in the > dictionary is ignored in this case. > > > The tFTP directory "dn" is only known in uboot-test-hooks.git. > > Yes, and this is actually the only mandatory information to be > provided in the dictionary when the test is supposed to generate the > FIT image. We could get rid of this, too, if we make the assumption > that the tFTP root directory is u_boot_console.config.build_dir by > default. > > > test/py/README.md says --persistent-data-dir is used for data that may > > be re-used across test runs. Currently the FIT file is generated in > > every run. In principal it could be reused. So Christian could consider > > adjusting his patch. > > Actually the FIT image file can be generated multiple times per test > run, with different content, which is determined by various combinations > of flags. E.g. for sandbox we have: enable/disable GZIP compression, > enable/disable FDT usage. Each combination is used in a subtest, that > (re)generates the corresponding FIT image. > > To re-use the generated data we need to introduce additional complexity > to handle FIT image identification for each subtest and to invalidate > those images when they become out of sync with the parametrized input > data samples (ITS, FDT) used to generate their content. > > > Best regards > > > > Heinrich
I would propose the following: def efifit2env(file_name=None, addr=None): """Create dictionary describing file for EFI fit image test @filename: name of an existing file, optional @addr: address used for loading the file as int (e.g. 0x40400000) Return: dictionary describing the file with entries * dn - tftp directory * fn - filename, optional * size - file size in bytes, optional * crc32 - checksum using CRC-32 algorithm, optional * addr - loading address, optional """ tftp_dir = os.environ['UBOOT_TRAVIS_BUILD_DIR'] ret = { 'dn': tftp_dir, } if addr is not None: ret['addr'] = addr if file_name: file_full = tftp_dir + '/' + file_name if os.path.isfile(file_full): ret['fn'] = file_name ret['size'] = os.path.getsize(file_full) with open(file_full, 'rb') as f: ret['crc32'] = hex(binascii.crc32(f.read()) & 0xffffffff)[2:] return ret This allows the test to run in both scenarios described by Heinrich: * the FIT image is available outside the test -> efifit2env() is called with file_name pointing to an existing FIT image file, optionally pass also the addr * the FIT image is generated by the test itself -> efifit2env() is called without arguments, or optionally pass only the addr