On 03/06/2014 04:54 PM, Paul Barker wrote:
A run-ptest script written in python is added which defines a new TestRunner
subclass which prints test results in the required ptest format and then
executes python's built-in testsuite using this new TestRunner subclass.

The built-in testsuite is included in the python standard library and we ensure
we have the complete library by adding ${PN}-modules and ${PN}-misc to the
RDEPENDS for the ptest package. We also require libgcc for pthread support.

Tested on qemux86. Several tests fail and many skip; further investigation
should be done to check that the current status is acceptable. In addition, the
testsuite causes an out-of-memory crash when qemu is configured with 256 MB of
RAM. The testsuite completes without crashing with 1 GB RAM.

Signed-off-by: Paul Barker <p...@paulbarker.me.uk>
---
  meta/recipes-devtools/python/python3/run-ptest | 56 ++++++++++++++++++++++++++
  meta/recipes-devtools/python/python3_3.3.3.bb  | 12 ++++++
  2 files changed, 68 insertions(+)
  create mode 100644 meta/recipes-devtools/python/python3/run-ptest

diff --git a/meta/recipes-devtools/python/python3/run-ptest 
b/meta/recipes-devtools/python/python3/run-ptest
new file mode 100644
index 0000000..bd3ea11
--- /dev/null
+++ b/meta/recipes-devtools/python/python3/run-ptest
@@ -0,0 +1,56 @@
+#! /usr/bin/env python3
+
+from test import support
+from test import regrtest
+import unittest
+import sys
+
+# Define a test result class which outputs results in the desired format.
+class ptestResult(unittest.TestResult):
+    def __init__(self, runner):
+        super(ptestResult, self).__init__()
+        self.runner = runner
+
+    def addError(self, test, err):
+        super(ptestResult, self).addError(test, err)
+        self.runner.write("ERROR: %s: %s\n" % (str(test), str(err[1])))
+
+    def addSuccess(self, test):
+        super(ptestResult, self).addSuccess(test)
+        self.runner.write("PASS: %s\n" % str(test))
+
+    def addFailure(self, test, err):
+        super(ptestResult, self).addFailure(test, err)
+        self.runner.write("FAIL: %s: %s\n" % (str(test), str(err[1])))
+
+    def addSkip(self, test, reason):
+        super(ptestResult, self).addSkip(test, reason)
+        self.runner.write("SKIP: %s: %s\n" % (str(test), str(reason)))
+
+    def addExpectedFailure(self, test, err):
+        super(ptestResult, self).addExpectedFailure(test, err)
+        self.runner.write("XFAIL: %s\n" % (str(test)))
+
+    def addUnexpectedSuccess(self, test):
+        super(ptestResult, self).addUnexpectedSuccess(test)
+        self.runner.write("XPASS: %s\n" % str(test))
+
+# Define a test runner which uses the above output class.
+class ptestRunner:
+    def __init__(self, stream=sys.stderr):
+        self.stream = stream
+
+    def write(self, message):
+        self.stream.write(message)
+
+    def run(self, test):
+        result = ptestResult(self)
+        test(result)
+        return result
+
+# Replace the test runner in python's standard library 'test.support'.
+support.BasicTestRunner = ptestRunner
+
+# Run the python regression test suite - the replacement test runner will be
+# used.
+regrtest.main()
diff --git a/meta/recipes-devtools/python/python3_3.3.3.bb 
b/meta/recipes-devtools/python/python3_3.3.3.bb
index b6f6def..e405a25 100644
--- a/meta/recipes-devtools/python/python3_3.3.3.bb
+++ b/meta/recipes-devtools/python/python3_3.3.3.bb
@@ -35,6 +35,7 @@ SRC_URI += "\
              file://sysroot-include-headers.patch \
              file://unixccompiler.patch \
              file://avoid-ncursesw-include-path.patch \
+            file://run-ptest \
             "
  SRC_URI[md5sum] = "f3ebe34d4d8695bf889279b54673e10c"
  SRC_URI[sha256sum] = 
"e526e9b612f623888364d30cc9f3dfc34dcef39065c713bdbcddf47df84d8dcb"
@@ -209,6 +210,17 @@ FILES_${PN}-dbg += 
"${libdir}/python${PYTHON_MAJMIN}/lib-dynload/.debug"
  PACKAGES += "${PN}-misc"
  FILES_${PN}-misc = "${libdir}/python${PYTHON_MAJMIN}"

+#inherit ptest after "require python-${PYTHON_MAJMIN}-manifest.inc" so 
PACKAGES doesn't get overwritten
+inherit ptest
+

Seems like there is an issue with the multi-lib build.

ERROR: QA Issue: lib32-python3: Files/directories were installed but not shipped
  /usr/lib/python3
  /usr/lib/python3/ptest
NOTE: recipe lib32-pulseaudio-4.0-r0: task do_package_write_rpm: Started

Sau!


+# This must come after inherit ptest for the override to take effect
+do_install_ptest() {
+    install -m 0755 -d ${D}/${libdir}/python3/ptest
+    install -m 0755 ${S}/../run-ptest ${D}/${libdir}/${PN}/ptest
+}
+
+RDEPENDS_${PN}-ptest = "${PN}-modules ${PN}-misc libgcc"
+
  # catch manpage
  PACKAGES += "${PN}-man"
  FILES_${PN}-man = "${datadir}/man"

--
_______________________________________________
Openembedded-core mailing list
Openembedded-core@lists.openembedded.org
http://lists.openembedded.org/mailman/listinfo/openembedded-core

Reply via email to