Order the overall test case list in the resulting test suite
by priority (by default all test cases do have a priority of 50).
In a second round move test cases with test dependencies accordingly.
New method 'orderSuites' can be explictly overridden to disable
usage of the new 'priority' decorator.

Signed-off-by: Konrad Weihmann <[email protected]>
---
v2:
  - mind test cases without any decorator
  - rename new method to orderSuites

 meta/lib/oeqa/core/context.py | 30 +++++++++++++++++++++++++++++-
 1 file changed, 29 insertions(+), 1 deletion(-)

diff --git a/meta/lib/oeqa/core/context.py b/meta/lib/oeqa/core/context.py
index 2abe353d27..2ca9ec0c56 100644
--- a/meta/lib/oeqa/core/context.py
+++ b/meta/lib/oeqa/core/context.py
@@ -66,6 +66,34 @@ class OETestContext(object):
                 if (cid + '.').startswith(skip + '.'):
                     setattr(tclass, 'setUpHooker', skipfuncgen('Skip by the 
command line argument "%s"' % skip))
 
+    def orderSuites(self, suites):
+        _tests = {}
+        for _test in suites._tests:
+            _prio = 50
+            _depends = []
+            for x in getattr(_test, "decorators", []):
+                if hasattr(x, "depends"):
+                    _depends += getattr(x, "depends")
+                if hasattr(x, "priority"):
+                    _prio = getattr(x, "priority")
+            _tests[_test.id()] = {"prio": _prio, "deps": _depends, "ref": 
_test}
+
+        def set_suite_prio(suites, suite):
+            for dep in suite["deps"]:
+                if dep not in suites:
+                    try:
+                        dep = [x for x in suites.keys() if x.endswith(dep)][0]
+                    except:
+                        continue
+                suite["prio"] = max(suite["prio"], set_suite_prio(suites, 
suites[dep]) + 1)
+            return suite["prio"]
+
+        for k, v in _tests.items():
+            _tests[k]["prio"] = set_suite_prio(_tests, v)
+
+        suites._tests = [x[1]["ref"] for x in sorted(_tests.items(), 
key=lambda tup: tup[1]["prio"])]
+        return suites
+
     def loadTests(self, module_paths, modules=[], tests=[],
             modules_manifest="", modules_required=[], **kwargs):
         if modules_manifest:
@@ -73,7 +101,7 @@ class OETestContext(object):
 
         self.loader = self.loaderClass(self, module_paths, modules, tests,
                 modules_required, **kwargs)
-        self.suites = self.loader.discover()
+        self.suites = self.orderSuites(self.loader.discover())
 
     def prepareSuite(self, suites, processes):
         return suites
-- 
2.25.1

-=-=-=-=-=-=-=-=-=-=-=-
Links: You receive all messages sent to this group.
View/Reply Online (#147319): 
https://lists.openembedded.org/g/openembedded-core/message/147319
Mute This Topic: https://lists.openembedded.org/mt/80137093/21656
Group Owner: [email protected]
Unsubscribe: https://lists.openembedded.org/g/openembedded-core/unsub 
[[email protected]]
-=-=-=-=-=-=-=-=-=-=-=-

Reply via email to