Message ID | 20240223151648.1453027-2-alexis.lothore@bootlin.com |
---|---|
State | Accepted, archived |
Commit | 01b1a6a5a4e7cede4d23a981b5144ae9c8306274 |
Headers | show |
Series | testimage: add failed test post actions and fetch more data | expand |
On Fri, 2024-02-23 at 16:16 +0100, Alexis Lothoré via lists.openembedded.org wrote: > From: Alexis Lothoré <alexis.lothore@bootlin.com> > > Multiple places in oeqa need to get the log output path, and redefine > a > small helper to accomplish this > > Define this helper in lib/oeqa/utils/__init__.py and import it > wherever > needed to allow using it. > > Signed-off-by: Alexis Lothoré <alexis.lothore@bootlin.com> > --- > There is one additional place re-definining (slightly) differently > this > helper, which is in selftest/context.py. This one does not check > OEQA_JSON_RESULT_DIR from the datastore but through test data > embedded in > the test context. Based on Richard's feedback in v2, the datastore > functions may be correctly simulated even in this case, so I may do > some > tests and come up with a patch after this series > --- > meta/classes-recipe/testimage.bbclass | 12 +++--------- > meta/lib/oeqa/sdk/testsdk.py | 11 ++--------- > meta/lib/oeqa/utils/__init__.py | 7 +++++++ > 3 files changed, 12 insertions(+), 18 deletions(-) > > diff --git a/meta/classes-recipe/testimage.bbclass b/meta/classes- > recipe/testimage.bbclass > index d076102f9691..959c226072aa 100644 > --- a/meta/classes-recipe/testimage.bbclass > +++ b/meta/classes-recipe/testimage.bbclass > @@ -149,13 +149,6 @@ def get_testimage_configuration(d, test_type, > machine): > return configuration > get_testimage_configuration[vardepsexclude] = "DATETIME" > > -def get_testimage_json_result_dir(d): > - json_result_dir = os.path.join(d.getVar("LOG_DIR"), 'oeqa') > - custom_json_result_dir = d.getVar("OEQA_JSON_RESULT_DIR") > - if custom_json_result_dir: > - json_result_dir = custom_json_result_dir > - return json_result_dir > - > def get_testimage_result_id(configuration): > return '%s_%s_%s_%s' % (configuration['TEST_TYPE'], > configuration['IMAGE_BASENAME'], configuration['MACHINE'], > configuration['STARTTIME']) > > @@ -224,6 +217,7 @@ def testimage_main(d): > from oeqa.core.target.qemu import supported_fstypes > from oeqa.core.utils.test import getSuiteCases > from oeqa.utils import make_logger_bitbake_compatible > + from oeqa.utils import get_json_result_dir > > def sigterm_exception(signum, stackframe): > """ > @@ -426,14 +420,14 @@ def testimage_main(d): > # Show results (if we have them) > if results: > configuration = get_testimage_configuration(d, 'runtime', > machine) > - results.logDetails(get_testimage_json_result_dir(d), > + results.logDetails(get_json_result_dir(d), > configuration, > get_testimage_result_id(configuration), > > dump_streams=d.getVar('TESTREPORT_FULLLOGS')) > results.logSummary(pn) > > # Copy additional logs to tmp/log/oeqa so it's easier to find > them > - targetdir = os.path.join(get_testimage_json_result_dir(d), > d.getVar("PN")) > + targetdir = os.path.join(get_json_result_dir(d), d.getVar("PN")) > os.makedirs(targetdir, exist_ok=True) > os.symlink(bootlog, os.path.join(targetdir, > os.path.basename(bootlog))) > os.symlink(d.getVar("BB_LOGFILE"), os.path.join(targetdir, > os.path.basename(d.getVar("BB_LOGFILE") + "." + > d.getVar('DATETIME')))) > diff --git a/meta/lib/oeqa/sdk/testsdk.py > b/meta/lib/oeqa/sdk/testsdk.py > index b4719110edbc..518b09febb61 100644 > --- a/meta/lib/oeqa/sdk/testsdk.py > +++ b/meta/lib/oeqa/sdk/testsdk.py > @@ -22,14 +22,6 @@ class TestSDKBase(object): > 'LAYERS': get_layers(d.getVar("BBLAYERS"))} > return configuration > > - @staticmethod > - def get_sdk_json_result_dir(d): > - json_result_dir = os.path.join(d.getVar("LOG_DIR"), 'oeqa') > - custom_json_result_dir = d.getVar("OEQA_JSON_RESULT_DIR") > - if custom_json_result_dir: > - json_result_dir = custom_json_result_dir > - return json_result_dir > - > @staticmethod > def get_sdk_result_id(configuration): > return '%s_%s_%s_%s_%s' % (configuration['TEST_TYPE'], > configuration['IMAGE_BASENAME'], configuration['SDKMACHINE'], > configuration['MACHINE'], configuration['STARTTIME']) > @@ -72,6 +64,7 @@ class TestSDK(TestSDKBase): > > from bb.utils import export_proxies > from oeqa.utils import make_logger_bitbake_compatible > + from oeqa.utils import get_json_result_dir > > pn = d.getVar("PN") > logger = > make_logger_bitbake_compatible(logging.getLogger("BitBake")) > @@ -134,7 +127,7 @@ class TestSDK(TestSDKBase): > component = "%s %s" % (pn, > self.context_executor_class.name) > context_msg = "%s:%s" % (os.path.basename(tcname), > os.path.basename(sdk_env)) > configuration = self.get_sdk_configuration(d, > self.test_type) > - result.logDetails(self.get_sdk_json_result_dir(d), > + result.logDetails(get_json_result_dir(d), > configuration, > self.get_sdk_result_id(configuration)) > result.logSummary(component, context_msg) > diff --git a/meta/lib/oeqa/utils/__init__.py > b/meta/lib/oeqa/utils/__init__.py > index fbc7f7d525d8..53bdcbf26618 100644 > --- a/meta/lib/oeqa/utils/__init__.py > +++ b/meta/lib/oeqa/utils/__init__.py > @@ -90,3 +90,10 @@ def load_test_components(logger, executor): > "_executor_class defined." % > (comp_name, comp_context)) > > return components > + > +def get_json_result_dir(d): > + json_result_dir = os.path.join(d.getVar("LOG_DIR"), 'oeqa') > + custom_json_result_dir = d.getVar("OEQA_JSON_RESULT_DIR") > + if custom_json_result_dir: > + json_result_dir = custom_json_result_dir > + return json_result_dir > \ No newline at end of file > I suspect this is missing a change to TestSDKEXT: https://autobuilder.yoctoproject.org/typhoon/#/builders/136/builds/56/steps/14/logs/stdio Cheers, Richard
On 2/23/24 18:27, Richard Purdie wrote: > On Fri, 2024-02-23 at 16:16 +0100, Alexis Lothoré via > lists.openembedded.org wrote: >> From: Alexis Lothoré <alexis.lothore@bootlin.com> >> >> Multiple places in oeqa need to get the log output path, and redefine >> a >> small helper to accomplish this >> >> Define this helper in lib/oeqa/utils/__init__.py and import it >> wherever >> needed to allow using it. >> >> Signed-off-by: Alexis Lothoré <alexis.lothore@bootlin.com> >> --- >> There is one additional place re-definining (slightly) differently >> this >> helper, which is in selftest/context.py. This one does not check >> OEQA_JSON_RESULT_DIR from the datastore but through test data >> embedded in >> the test context. Based on Richard's feedback in v2, the datastore >> functions may be correctly simulated even in this case, so I may do >> some >> tests and come up with a patch after this series >> --- >> meta/classes-recipe/testimage.bbclass | 12 +++--------- >> meta/lib/oeqa/sdk/testsdk.py | 11 ++--------- >> meta/lib/oeqa/utils/__init__.py | 7 +++++++ >> 3 files changed, 12 insertions(+), 18 deletions(-) >> >> diff --git a/meta/classes-recipe/testimage.bbclass b/meta/classes- >> recipe/testimage.bbclass >> index d076102f9691..959c226072aa 100644 >> --- a/meta/classes-recipe/testimage.bbclass >> +++ b/meta/classes-recipe/testimage.bbclass >> @@ -149,13 +149,6 @@ def get_testimage_configuration(d, test_type, >> machine): >> return configuration >> get_testimage_configuration[vardepsexclude] = "DATETIME" >> >> -def get_testimage_json_result_dir(d): >> - json_result_dir = os.path.join(d.getVar("LOG_DIR"), 'oeqa') >> - custom_json_result_dir = d.getVar("OEQA_JSON_RESULT_DIR") >> - if custom_json_result_dir: >> - json_result_dir = custom_json_result_dir >> - return json_result_dir >> - >> def get_testimage_result_id(configuration): >> return '%s_%s_%s_%s' % (configuration['TEST_TYPE'], >> configuration['IMAGE_BASENAME'], configuration['MACHINE'], >> configuration['STARTTIME']) >> >> @@ -224,6 +217,7 @@ def testimage_main(d): >> from oeqa.core.target.qemu import supported_fstypes >> from oeqa.core.utils.test import getSuiteCases >> from oeqa.utils import make_logger_bitbake_compatible >> + from oeqa.utils import get_json_result_dir >> >> def sigterm_exception(signum, stackframe): >> """ >> @@ -426,14 +420,14 @@ def testimage_main(d): >> # Show results (if we have them) >> if results: >> configuration = get_testimage_configuration(d, 'runtime', >> machine) >> - results.logDetails(get_testimage_json_result_dir(d), >> + results.logDetails(get_json_result_dir(d), >> configuration, >> get_testimage_result_id(configuration), >> >> dump_streams=d.getVar('TESTREPORT_FULLLOGS')) >> results.logSummary(pn) >> >> # Copy additional logs to tmp/log/oeqa so it's easier to find >> them >> - targetdir = os.path.join(get_testimage_json_result_dir(d), >> d.getVar("PN")) >> + targetdir = os.path.join(get_json_result_dir(d), d.getVar("PN")) >> os.makedirs(targetdir, exist_ok=True) >> os.symlink(bootlog, os.path.join(targetdir, >> os.path.basename(bootlog))) >> os.symlink(d.getVar("BB_LOGFILE"), os.path.join(targetdir, >> os.path.basename(d.getVar("BB_LOGFILE") + "." + >> d.getVar('DATETIME')))) >> diff --git a/meta/lib/oeqa/sdk/testsdk.py >> b/meta/lib/oeqa/sdk/testsdk.py >> index b4719110edbc..518b09febb61 100644 >> --- a/meta/lib/oeqa/sdk/testsdk.py >> +++ b/meta/lib/oeqa/sdk/testsdk.py >> @@ -22,14 +22,6 @@ class TestSDKBase(object): >> 'LAYERS': get_layers(d.getVar("BBLAYERS"))} >> return configuration >> >> - @staticmethod >> - def get_sdk_json_result_dir(d): >> - json_result_dir = os.path.join(d.getVar("LOG_DIR"), 'oeqa') >> - custom_json_result_dir = d.getVar("OEQA_JSON_RESULT_DIR") >> - if custom_json_result_dir: >> - json_result_dir = custom_json_result_dir >> - return json_result_dir >> - >> @staticmethod >> def get_sdk_result_id(configuration): >> return '%s_%s_%s_%s_%s' % (configuration['TEST_TYPE'], >> configuration['IMAGE_BASENAME'], configuration['SDKMACHINE'], >> configuration['MACHINE'], configuration['STARTTIME']) >> @@ -72,6 +64,7 @@ class TestSDK(TestSDKBase): >> >> from bb.utils import export_proxies >> from oeqa.utils import make_logger_bitbake_compatible >> + from oeqa.utils import get_json_result_dir >> >> pn = d.getVar("PN") >> logger = >> make_logger_bitbake_compatible(logging.getLogger("BitBake")) >> @@ -134,7 +127,7 @@ class TestSDK(TestSDKBase): >> component = "%s %s" % (pn, >> self.context_executor_class.name) >> context_msg = "%s:%s" % (os.path.basename(tcname), >> os.path.basename(sdk_env)) >> configuration = self.get_sdk_configuration(d, >> self.test_type) >> - result.logDetails(self.get_sdk_json_result_dir(d), >> + result.logDetails(get_json_result_dir(d), >> configuration, >> self.get_sdk_result_id(configuration)) >> result.logSummary(component, context_msg) >> diff --git a/meta/lib/oeqa/utils/__init__.py >> b/meta/lib/oeqa/utils/__init__.py >> index fbc7f7d525d8..53bdcbf26618 100644 >> --- a/meta/lib/oeqa/utils/__init__.py >> +++ b/meta/lib/oeqa/utils/__init__.py >> @@ -90,3 +90,10 @@ def load_test_components(logger, executor): >> "_executor_class defined." % >> (comp_name, comp_context)) >> >> return components >> + >> +def get_json_result_dir(d): >> + json_result_dir = os.path.join(d.getVar("LOG_DIR"), 'oeqa') >> + custom_json_result_dir = d.getVar("OEQA_JSON_RESULT_DIR") >> + if custom_json_result_dir: >> + json_result_dir = custom_json_result_dir >> + return json_result_dir >> \ No newline at end of file >> > > I suspect this is missing a change to TestSDKEXT: > > https://autobuilder.yoctoproject.org/typhoon/#/builders/136/builds/56/steps/14/logs/stdio Indeed, I messed up with some half-search-and-replace -_- Thanks for the test. I'll delay a bit before sending v4 to avoid spamming the list. Thanks, Alexis
diff --git a/meta/classes-recipe/testimage.bbclass b/meta/classes-recipe/testimage.bbclass index d076102f9691..959c226072aa 100644 --- a/meta/classes-recipe/testimage.bbclass +++ b/meta/classes-recipe/testimage.bbclass @@ -149,13 +149,6 @@ def get_testimage_configuration(d, test_type, machine): return configuration get_testimage_configuration[vardepsexclude] = "DATETIME" -def get_testimage_json_result_dir(d): - json_result_dir = os.path.join(d.getVar("LOG_DIR"), 'oeqa') - custom_json_result_dir = d.getVar("OEQA_JSON_RESULT_DIR") - if custom_json_result_dir: - json_result_dir = custom_json_result_dir - return json_result_dir - def get_testimage_result_id(configuration): return '%s_%s_%s_%s' % (configuration['TEST_TYPE'], configuration['IMAGE_BASENAME'], configuration['MACHINE'], configuration['STARTTIME']) @@ -224,6 +217,7 @@ def testimage_main(d): from oeqa.core.target.qemu import supported_fstypes from oeqa.core.utils.test import getSuiteCases from oeqa.utils import make_logger_bitbake_compatible + from oeqa.utils import get_json_result_dir def sigterm_exception(signum, stackframe): """ @@ -426,14 +420,14 @@ def testimage_main(d): # Show results (if we have them) if results: configuration = get_testimage_configuration(d, 'runtime', machine) - results.logDetails(get_testimage_json_result_dir(d), + results.logDetails(get_json_result_dir(d), configuration, get_testimage_result_id(configuration), dump_streams=d.getVar('TESTREPORT_FULLLOGS')) results.logSummary(pn) # Copy additional logs to tmp/log/oeqa so it's easier to find them - targetdir = os.path.join(get_testimage_json_result_dir(d), d.getVar("PN")) + targetdir = os.path.join(get_json_result_dir(d), d.getVar("PN")) os.makedirs(targetdir, exist_ok=True) os.symlink(bootlog, os.path.join(targetdir, os.path.basename(bootlog))) os.symlink(d.getVar("BB_LOGFILE"), os.path.join(targetdir, os.path.basename(d.getVar("BB_LOGFILE") + "." + d.getVar('DATETIME')))) diff --git a/meta/lib/oeqa/sdk/testsdk.py b/meta/lib/oeqa/sdk/testsdk.py index b4719110edbc..518b09febb61 100644 --- a/meta/lib/oeqa/sdk/testsdk.py +++ b/meta/lib/oeqa/sdk/testsdk.py @@ -22,14 +22,6 @@ class TestSDKBase(object): 'LAYERS': get_layers(d.getVar("BBLAYERS"))} return configuration - @staticmethod - def get_sdk_json_result_dir(d): - json_result_dir = os.path.join(d.getVar("LOG_DIR"), 'oeqa') - custom_json_result_dir = d.getVar("OEQA_JSON_RESULT_DIR") - if custom_json_result_dir: - json_result_dir = custom_json_result_dir - return json_result_dir - @staticmethod def get_sdk_result_id(configuration): return '%s_%s_%s_%s_%s' % (configuration['TEST_TYPE'], configuration['IMAGE_BASENAME'], configuration['SDKMACHINE'], configuration['MACHINE'], configuration['STARTTIME']) @@ -72,6 +64,7 @@ class TestSDK(TestSDKBase): from bb.utils import export_proxies from oeqa.utils import make_logger_bitbake_compatible + from oeqa.utils import get_json_result_dir pn = d.getVar("PN") logger = make_logger_bitbake_compatible(logging.getLogger("BitBake")) @@ -134,7 +127,7 @@ class TestSDK(TestSDKBase): component = "%s %s" % (pn, self.context_executor_class.name) context_msg = "%s:%s" % (os.path.basename(tcname), os.path.basename(sdk_env)) configuration = self.get_sdk_configuration(d, self.test_type) - result.logDetails(self.get_sdk_json_result_dir(d), + result.logDetails(get_json_result_dir(d), configuration, self.get_sdk_result_id(configuration)) result.logSummary(component, context_msg) diff --git a/meta/lib/oeqa/utils/__init__.py b/meta/lib/oeqa/utils/__init__.py index fbc7f7d525d8..53bdcbf26618 100644 --- a/meta/lib/oeqa/utils/__init__.py +++ b/meta/lib/oeqa/utils/__init__.py @@ -90,3 +90,10 @@ def load_test_components(logger, executor): "_executor_class defined." % (comp_name, comp_context)) return components + +def get_json_result_dir(d): + json_result_dir = os.path.join(d.getVar("LOG_DIR"), 'oeqa') + custom_json_result_dir = d.getVar("OEQA_JSON_RESULT_DIR") + if custom_json_result_dir: + json_result_dir = custom_json_result_dir + return json_result_dir \ No newline at end of file