| Message ID | 20250627063004.781560-5-mikko.rapeli@linaro.org |
|---|---|
| State | New |
| Headers | show |
| Series | [1/6] oeqa runtime ping.py: make run_network_serialdebug() specific to qemu | expand |
On Fri, 2025-06-27 at 09:30 +0300, Mikko Rapeli via lists.openembedded.org wrote: > testexport.bbclass only copied files from core layer to > the testexport.tar.gz to run tests. Then it removed > all tests and files which were not specified in > TEST_SUITES variable. > > Stop removing files to include for example parselogs.py > test data files which are machine and/or layer specific. > TEST_SUITES variable is now read from build time exported > data store when running tests. > > Then copy oeqa runtime files from all layers so that tests and > test data like parselogs ignore files will be provided > to testexport.tar.gz. > > Adapt oe-test script to find "lib" directories from > the new structure with layer specific paths. > > Signed-off-by: Mikko Rapeli <mikko.rapeli@linaro.org> > --- > meta/classes-recipe/testexport.bbclass | 43 +++++++++++++------------- > scripts/oe-test | 12 ++++--- > 2 files changed, 30 insertions(+), 25 deletions(-) The patch does things which aren't really spelt out in the commit message. This change removes the target specific filtering, putting all tests into the output and not just the ones applicable to the target in question. Once you do that, "testexport" may as well be a script rather than a task as it is no longer target specific. As I've said elsewhere, I'm not against doing it but the commit message should be clear, and it does raise the question of whether we just jump to that external script and remove this class? Cheers, Richard
Hi, On Sun, Jun 29, 2025 at 08:05:35AM +0100, Richard Purdie wrote: > On Fri, 2025-06-27 at 09:30 +0300, Mikko Rapeli via lists.openembedded.org wrote: > > testexport.bbclass only copied files from core layer to > > the testexport.tar.gz to run tests. Then it removed > > all tests and files which were not specified in > > TEST_SUITES variable. > > > > Stop removing files to include for example parselogs.py > > test data files which are machine and/or layer specific. > > TEST_SUITES variable is now read from build time exported > > data store when running tests. > > > > Then copy oeqa runtime files from all layers so that tests and > > test data like parselogs ignore files will be provided > > to testexport.tar.gz. > > > > Adapt oe-test script to find "lib" directories from > > the new structure with layer specific paths. > > > > Signed-off-by: Mikko Rapeli <mikko.rapeli@linaro.org> > > --- > > �meta/classes-recipe/testexport.bbclass | 43 +++++++++++++------------- > > �scripts/oe-test����������������������� | 12 ++++--- > > �2 files changed, 30 insertions(+), 25 deletions(-) > > The patch does things which aren't really spelt out in the commit > message. This change removes the target specific filtering, putting all > tests into the output and not just the ones applicable to the target in > question. Sorry, tried to describe this but failed. Yes, all tests are now exported, also the ones not needed by the current image target because the TEST_SUITES variable is read from exported data at test run time. > Once you do that, "testexport" may as well be a script rather than a > task as it is no longer target specific. For the test python files and data, yes, but not for the data file which actually describes what tests to run. > As I've said elsewhere, I'm not against doing it but the commit message > should be clear, and it does raise the question of whether we just jump > to that external script and remove this class? We still need to export the per-image manifest and testdata. If those are exported elsewhere, then these all could be an external script to create a tar ball to run the configured tests. Cheers, -Mikko
diff --git a/meta/classes-recipe/testexport.bbclass b/meta/classes-recipe/testexport.bbclass index cc4088c71a13..843d777e3bb9 100644 --- a/meta/classes-recipe/testexport.bbclass +++ b/meta/classes-recipe/testexport.bbclass @@ -85,6 +85,7 @@ def copy_needed_files(d, tc): export_path = d.getVar('TEST_EXPORT_DIR') corebase_path = d.getVar('COREBASE') + bblayers = d.getVar('BBLAYERS').split() # Clean everything before starting oe.path.remove(export_path) @@ -92,17 +93,11 @@ def copy_needed_files(d, tc): # The source of files to copy are relative to 'COREBASE' directory # The destination is relative to 'TEST_EXPORT_DIR' - # Because we are squashing the libraries, we need to remove - # the layer/script directory - files_to_copy = [ os.path.join('meta', 'lib', 'oeqa', 'core'), - os.path.join('meta', 'lib', 'oeqa', 'runtime'), - os.path.join('meta', 'lib', 'oeqa', 'files'), - os.path.join('meta', 'lib', 'oeqa', 'utils'), - os.path.join('scripts', 'oe-test'), + # core files/dirs first + core_files_to_copy = [ os.path.join('scripts', 'oe-test'), os.path.join('scripts', 'lib', 'argparse_oe.py'), os.path.join('scripts', 'lib', 'scriptutils.py'), ] - - for f in files_to_copy: + for f in core_files_to_copy: src = os.path.join(corebase_path, f) dst = os.path.join(export_path, f.split('/', 1)[-1]) if os.path.isdir(src): @@ -110,18 +105,21 @@ def copy_needed_files(d, tc): else: shutil.copy2(src, dst) - # Remove cases and just copy the ones specified - cases_path = os.path.join(export_path, 'lib', 'oeqa', 'runtime', 'cases') - oe.path.remove(cases_path) - bb.utils.mkdirhier(cases_path) - test_paths = get_runtime_paths(d) - test_modules = d.getVar('TEST_SUITES').split() - tc.loadTests(test_paths, modules=test_modules) - for f in getSuiteCasesFiles(tc.suites): - shutil.copy2(f, cases_path) - json_file = _get_json_file(f) - if json_file: - shutil.copy2(json_file, cases_path) + # layer specific files/dirs + layer_files_to_copy = [ os.path.join('lib', 'oeqa', 'core'), + os.path.join('lib', 'oeqa', 'runtime'), + os.path.join('lib', 'oeqa', 'files'), + os.path.join('lib', 'oeqa', 'utils'),] + for layer in bblayers: + meta = os.path.basename(layer) + for f in layer_files_to_copy: + src = os.path.join(layer, f) + dst = os.path.join(export_path, meta, f) + if os.path.exists(src): + if os.path.isdir(src): + oe.path.copytree(src, dst) + else: + shutil.copy2(src, dst) # Copy test data image_name = ("%s/%s" % (d.getVar('DEPLOY_DIR_IMAGE'), @@ -142,6 +140,9 @@ def copy_needed_files(d, tc): testexport_create_tarball(d, "testexport.tar.gz", d.getVar("TEST_EXPORT_DIR")) # Copy packages needed for runtime testing + test_paths = get_runtime_paths(d) + test_modules = d.getVar('TEST_SUITES').split() + tc.loadTests(test_paths, modules=test_modules) package_extraction(d, tc.suites) test_pkg_dir = d.getVar("TEST_NEEDED_PACKAGES_DIR") if os.path.isdir(test_pkg_dir) and os.listdir(test_pkg_dir): diff --git a/scripts/oe-test b/scripts/oe-test index 55985b0b2453..efb83c3e7809 100755 --- a/scripts/oe-test +++ b/scripts/oe-test @@ -7,14 +7,18 @@ # SPDX-License-Identifier: MIT # -import os -import sys import argparse +import glob import logging +import os +import sys scripts_path = os.path.dirname(os.path.realpath(__file__)) -lib_path = scripts_path + '/lib' -sys.path = sys.path + [lib_path] +lib_path = os.path.join(scripts_path, 'lib') +sys.path.append(lib_path) +meta_lib_paths = glob.glob(scripts_path + '/*/lib', root_dir=scripts_path, recursive=True) +for p in meta_lib_paths: + sys.path.append(p) import argparse_oe import scriptutils
testexport.bbclass only copied files from core layer to the testexport.tar.gz to run tests. Then it removed all tests and files which were not specified in TEST_SUITES variable. Stop removing files to include for example parselogs.py test data files which are machine and/or layer specific. TEST_SUITES variable is now read from build time exported data store when running tests. Then copy oeqa runtime files from all layers so that tests and test data like parselogs ignore files will be provided to testexport.tar.gz. Adapt oe-test script to find "lib" directories from the new structure with layer specific paths. Signed-off-by: Mikko Rapeli <mikko.rapeli@linaro.org> --- meta/classes-recipe/testexport.bbclass | 43 +++++++++++++------------- scripts/oe-test | 12 ++++--- 2 files changed, 30 insertions(+), 25 deletions(-)