summaryrefslogtreecommitdiffstats
path: root/meta/lib
diff options
context:
space:
mode:
authorHongxu Jia <hongxu.jia@windriver.com>2018-11-09 00:36:20 -0800
committerRichard Purdie <richard.purdie@linuxfoundation.org>2018-11-14 11:14:39 +0000
commitd40767ac831cb3e20b43a87a47e772026f6d19f6 (patch)
tree666fc89a2d23c87b5902fd891a236e1fb2fb8a7b /meta/lib
parent6b7227b68a7ecdf20829e555440a9cfed14db176 (diff)
downloadpoky-d40767ac831cb3e20b43a87a47e772026f6d19f6.tar.gz
testsdk: fix skipped testcase output "UNKNOWN" status while multiprocess execution
Usually skipped testcase output "SKIPPED" [snip serial execution] |RESULTS - buildgalculator.GalculatorTest.test_galculator - Testcase -1: SKIPPED (0.01s) |RESULTS - python.PythonTest.test_python3 - Testcase -1: SKIPPED (0.01s) [snip serial execution] But if enable multiprocess execution, skipped testcase output "UNKNOWN" status [snip enable multiprocess execution] |RESULTS - buildgalculator.GalculatorTest.test_galculator - Testcase -1: UNKNOWN |RESULTS - python.PythonTest.test_python3 - Testcase -1: UNKNOWN [snip enable multiprocess execution] Here is my investigation: There is a class pairs TestProtocolClient and TestProtocolServer provided by python3-subunit. The TestProtocolClient generates a subunit stream of TestResult from a test run, and TestProtocolServer parses the stream of subunit TestResult. The class ProtocolTestCase is a unittest.TestCase adapter and it uses TestProtocolServer to parse the stream of subunit TestResult. In Yocto testsdk, it forks multiple processes to execute testcases and use TestProtocolClient to generate TestResult stream; and then it creates multiple threads to use ProtocolTestCase to parse stream of subunit TestResult through pipe; finally it passes multiple ProtocolTestCase as TestCase instance to main process and output status result. The problem point is TestProtocolServer parses `skip:' directive after reading a `test:' directive. Without `test:' directive, `skip:' directive will be ignored. All above requires SkipTest should be raised inside a test method rather than setUpClass method. Throwing SkipTest inside setUp works correctly (From OE-Core rev: 4828a88556d59e4d06933164c2ebeb9361b7450e) Signed-off-by: Hongxu Jia <hongxu.jia@windriver.com> Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
Diffstat (limited to 'meta/lib')
-rw-r--r--meta/lib/oeqa/sdk/cases/assimp.py3
-rw-r--r--meta/lib/oeqa/sdk/cases/buildcpio.py1
-rw-r--r--meta/lib/oeqa/sdk/cases/buildgalculator.py3
-rw-r--r--meta/lib/oeqa/sdk/cases/buildlzip.py1
-rw-r--r--meta/lib/oeqa/sdk/cases/perl.py3
-rw-r--r--meta/lib/oeqa/sdk/cases/python.py3
6 files changed, 6 insertions, 8 deletions
diff --git a/meta/lib/oeqa/sdk/cases/assimp.py b/meta/lib/oeqa/sdk/cases/assimp.py
index 26c1df089c..f5c7547b88 100644
--- a/meta/lib/oeqa/sdk/cases/assimp.py
+++ b/meta/lib/oeqa/sdk/cases/assimp.py
@@ -12,8 +12,7 @@ class BuildAssimp(OESDKTestCase):
12 12
13 td_vars = ['DATETIME', 'TARGET_OS', 'TARGET_ARCH'] 13 td_vars = ['DATETIME', 'TARGET_OS', 'TARGET_ARCH']
14 14
15 @classmethod 15 def setUp(self):
16 def setUpClass(self):
17 if not (self.tc.hasHostPackage("nativesdk-cmake") or 16 if not (self.tc.hasHostPackage("nativesdk-cmake") or
18 self.tc.hasHostPackage("cmake-native")): 17 self.tc.hasHostPackage("cmake-native")):
19 raise unittest.SkipTest("Needs cmake") 18 raise unittest.SkipTest("Needs cmake")
diff --git a/meta/lib/oeqa/sdk/cases/buildcpio.py b/meta/lib/oeqa/sdk/cases/buildcpio.py
index 333dc7c226..f348ac5d90 100644
--- a/meta/lib/oeqa/sdk/cases/buildcpio.py
+++ b/meta/lib/oeqa/sdk/cases/buildcpio.py
@@ -14,6 +14,7 @@ class BuildCpioTest(OESDKTestCase):
14 self.tc.sdk_dir, self.td['DATETIME'], dl_dir=dl_dir) 14 self.tc.sdk_dir, self.td['DATETIME'], dl_dir=dl_dir)
15 self.project.download_archive() 15 self.project.download_archive()
16 16
17 def setUp(self):
17 machine = self.td.get("MACHINE") 18 machine = self.td.get("MACHINE")
18 if not self.tc.hasHostPackage("packagegroup-cross-canadian-%s" % machine): 19 if not self.tc.hasHostPackage("packagegroup-cross-canadian-%s" % machine):
19 raise unittest.SkipTest("SDK doesn't contain a cross-canadian toolchain") 20 raise unittest.SkipTest("SDK doesn't contain a cross-canadian toolchain")
diff --git a/meta/lib/oeqa/sdk/cases/buildgalculator.py b/meta/lib/oeqa/sdk/cases/buildgalculator.py
index 050d1b3b52..9e12b3ac10 100644
--- a/meta/lib/oeqa/sdk/cases/buildgalculator.py
+++ b/meta/lib/oeqa/sdk/cases/buildgalculator.py
@@ -6,8 +6,7 @@ from oeqa.sdk.utils.sdkbuildproject import SDKBuildProject
6class GalculatorTest(OESDKTestCase): 6class GalculatorTest(OESDKTestCase):
7 td_vars = ['DATETIME'] 7 td_vars = ['DATETIME']
8 8
9 @classmethod 9 def setUp(self):
10 def setUpClass(self):
11 if not (self.tc.hasTargetPackage("gtk+3", multilib=True) or \ 10 if not (self.tc.hasTargetPackage("gtk+3", multilib=True) or \
12 self.tc.hasTargetPackage("libgtk-3.0", multilib=True)): 11 self.tc.hasTargetPackage("libgtk-3.0", multilib=True)):
13 raise unittest.SkipTest("GalculatorTest class: SDK don't support gtk+3") 12 raise unittest.SkipTest("GalculatorTest class: SDK don't support gtk+3")
diff --git a/meta/lib/oeqa/sdk/cases/buildlzip.py b/meta/lib/oeqa/sdk/cases/buildlzip.py
index b28cc3a595..9d137f30eb 100644
--- a/meta/lib/oeqa/sdk/cases/buildlzip.py
+++ b/meta/lib/oeqa/sdk/cases/buildlzip.py
@@ -15,6 +15,7 @@ class BuildLzipTest(OESDKTestCase):
15 self.tc.sdk_dir, self.td['DATETIME'], dl_dir=dl_dir) 15 self.tc.sdk_dir, self.td['DATETIME'], dl_dir=dl_dir)
16 self.project.download_archive() 16 self.project.download_archive()
17 17
18 def setUp(self):
18 machine = self.td.get("MACHINE") 19 machine = self.td.get("MACHINE")
19 20
20 if not (self.tc.hasHostPackage("packagegroup-cross-canadian-%s" % machine) or 21 if not (self.tc.hasHostPackage("packagegroup-cross-canadian-%s" % machine) or
diff --git a/meta/lib/oeqa/sdk/cases/perl.py b/meta/lib/oeqa/sdk/cases/perl.py
index ff50b46800..e1d2bc159a 100644
--- a/meta/lib/oeqa/sdk/cases/perl.py
+++ b/meta/lib/oeqa/sdk/cases/perl.py
@@ -2,8 +2,7 @@ import unittest
2from oeqa.sdk.case import OESDKTestCase 2from oeqa.sdk.case import OESDKTestCase
3 3
4class PerlTest(OESDKTestCase): 4class PerlTest(OESDKTestCase):
5 @classmethod 5 def setUp(self):
6 def setUpClass(self):
7 if not (self.tc.hasHostPackage("nativesdk-perl") or 6 if not (self.tc.hasHostPackage("nativesdk-perl") or
8 self.tc.hasHostPackage("perl-native")): 7 self.tc.hasHostPackage("perl-native")):
9 raise unittest.SkipTest("No perl package in the SDK") 8 raise unittest.SkipTest("No perl package in the SDK")
diff --git a/meta/lib/oeqa/sdk/cases/python.py b/meta/lib/oeqa/sdk/cases/python.py
index bd5f1f67be..7c1d183e52 100644
--- a/meta/lib/oeqa/sdk/cases/python.py
+++ b/meta/lib/oeqa/sdk/cases/python.py
@@ -2,8 +2,7 @@ import subprocess, unittest
2from oeqa.sdk.case import OESDKTestCase 2from oeqa.sdk.case import OESDKTestCase
3 3
4class PythonTest(OESDKTestCase): 4class PythonTest(OESDKTestCase):
5 @classmethod 5 def setUp(self):
6 def setUpClass(self):
7 if not (self.tc.hasHostPackage("nativesdk-python3") or 6 if not (self.tc.hasHostPackage("nativesdk-python3") or
8 self.tc.hasHostPackage("python3-native")): 7 self.tc.hasHostPackage("python3-native")):
9 raise unittest.SkipTest("No python package in the SDK") 8 raise unittest.SkipTest("No python package in the SDK")