From 4520f75b1c7a1c0c5eed275b67d787fb0913dc42 Mon Sep 17 00:00:00 2001 From: zangrc Date: Mon, 23 Nov 2020 23:00:19 +0800 Subject: python3-salttesting: upgrade 2015.2.16 -> 2018.9.21 Refresh the following patch: 0001-Add-ptest-output-option-to-test-suite.patch Signed-off-by: Zang Ruochen Signed-off-by: Bruce Ashfield --- ...001-Add-ptest-output-option-to-test-suite.patch | 229 -------------------- .../python/python-salttesting_2015.2.16.bb | 24 --- ...001-Add-ptest-output-option-to-test-suite.patch | 231 +++++++++++++++++++++ .../python/python3-salttesting_git.bb | 20 ++ 4 files changed, 251 insertions(+), 253 deletions(-) delete mode 100644 meta-openstack/recipes-devtools/python/python-salttesting/0001-Add-ptest-output-option-to-test-suite.patch delete mode 100644 meta-openstack/recipes-devtools/python/python-salttesting_2015.2.16.bb create mode 100644 meta-openstack/recipes-devtools/python/python3-salttesting/0001-Add-ptest-output-option-to-test-suite.patch create mode 100644 meta-openstack/recipes-devtools/python/python3-salttesting_git.bb diff --git a/meta-openstack/recipes-devtools/python/python-salttesting/0001-Add-ptest-output-option-to-test-suite.patch b/meta-openstack/recipes-devtools/python/python-salttesting/0001-Add-ptest-output-option-to-test-suite.patch deleted file mode 100644 index e86768a..0000000 --- a/meta-openstack/recipes-devtools/python/python-salttesting/0001-Add-ptest-output-option-to-test-suite.patch +++ /dev/null @@ -1,229 +0,0 @@ -From 1950b943b7173198f345a1cff7b7f771cbac2244 Mon Sep 17 00:00:00 2001 -From: Collin Richards -Date: Tue, 28 Jun 2016 16:02:22 -0500 -Subject: [PATCH] Add ptest output option to test suite - -Extend salttesting to support outputing the results of running the test -suite in ptest format. - -Upstream-Status: Inappropriate [OE specific] - -Signed-off-by: Collin Richards -Natinst-ReviewBoard-ID: 143279 ---- - salttesting/parser/__init__.py | 12 +++ - salttesting/ptest.py | 165 +++++++++++++++++++++++++++++++++++++++++ - 2 files changed, 177 insertions(+) - create mode 100644 salttesting/ptest.py - -diff --git a/salttesting/parser/__init__.py b/salttesting/parser/__init__.py -index 1e7275b..d8cba0c 100644 ---- a/salttesting/parser/__init__.py -+++ b/salttesting/parser/__init__.py -@@ -25,6 +25,7 @@ from functools import partial - from contextlib import closing - - from salttesting import TestLoader, TextTestRunner -+from salttesting.ptest import PTestRunner - from salttesting.version import __version_info__ - from salttesting.xmlunit import HAS_XMLRUNNER, XMLTestRunner - try: -@@ -264,6 +265,12 @@ class SaltTestingParser(optparse.OptionParser): - action='store_true', - help='Do NOT show the overall tests result' - ) -+ self.output_options_group.add_option( -+ '--ptest-out', -+ dest='ptest_out', -+ default=False, -+ help='Output test results in PTest format' -+ ) - self.add_option_group(self.output_options_group) - - self.fs_cleanup_options_group = optparse.OptionGroup( -@@ -491,6 +498,11 @@ class SaltTestingParser(optparse.OptionParser): - verbosity=self.options.verbosity - ).run(tests) - self.testsuite_results.append((header, runner)) -+ elif self.options.ptest_out: -+ runner = PTestRunner( -+ stream=sys.stdout, -+ verbosity=self.options.verbosity).run(tests) -+ self.testsuite_results.append((header, runner)) - else: - runner = TextTestRunner( - stream=sys.stdout, -diff --git a/salttesting/ptest.py b/salttesting/ptest.py -new file mode 100644 -index 0000000..4c50f57 ---- /dev/null -+++ b/salttesting/ptest.py -@@ -0,0 +1,165 @@ -+# -*- coding: utf-8 -*- -+ -+""" -+Copyright (c) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, -+2011, 2012, 2013, 2014, 2015, 2016 Python Software Foundation; All Rights -+Reserved -+ -+PYTHON SOFTWARE FOUNDATION LICENSE VERSION 2 -+-------------------------------------------- -+ -+1. This LICENSE AGREEMENT is between the Python Software Foundation -+("PSF"), and the Individual or Organization ("Licensee") accessing and -+otherwise using this software ("Python") in source or binary form and -+its associated documentation. -+ -+2. Subject to the terms and conditions of this License Agreement, PSF hereby -+grants Licensee a nonexclusive, royalty-free, world-wide license to reproduce, -+analyze, test, perform and/or display publicly, prepare derivative works, -+distribute, and otherwise use Python alone or in any derivative version, -+provided, however, that PSF's License Agreement and PSF's notice of copyright, -+i.e., "Copyright (c) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, -+2011, 2012, 2013, 2014, 2015, 2016 Python Software Foundation; All Rights -+Reserved" are retained in Python alone or in any derivative version prepared by -+Licensee. -+ -+3. In the event Licensee prepares a derivative work that is based on -+or incorporates Python or any part thereof, and wants to make -+the derivative work available to others as provided herein, then -+Licensee hereby agrees to include in any such work a brief summary of -+the changes made to Python. -+ -+4. PSF is making Python available to Licensee on an "AS IS" -+basis. PSF MAKES NO REPRESENTATIONS OR WARRANTIES, EXPRESS OR -+IMPLIED. BY WAY OF EXAMPLE, BUT NOT LIMITATION, PSF MAKES NO AND -+DISCLAIMS ANY REPRESENTATION OR WARRANTY OF MERCHANTABILITY OR FITNESS -+FOR ANY PARTICULAR PURPOSE OR THAT THE USE OF PYTHON WILL NOT -+INFRINGE ANY THIRD PARTY RIGHTS. -+ -+5. PSF SHALL NOT BE LIABLE TO LICENSEE OR ANY OTHER USERS OF PYTHON -+FOR ANY INCIDENTAL, SPECIAL, OR CONSEQUENTIAL DAMAGES OR LOSS AS -+A RESULT OF MODIFYING, DISTRIBUTING, OR OTHERWISE USING PYTHON, -+OR ANY DERIVATIVE THEREOF, EVEN IF ADVISED OF THE POSSIBILITY THEREOF. -+ -+6. This License Agreement will automatically terminate upon a material -+breach of its terms and conditions. -+ -+7. Nothing in this License Agreement shall be deemed to create any -+relationship of agency, partnership, or joint venture between PSF and -+Licensee. This License Agreement does not grant permission to use PSF -+trademarks or trade name in a trademark sense to endorse or promote -+products or services of Licensee, or any third party. -+ -+8. By copying, installing or otherwise using Python, Licensee -+agrees to be bound by the terms and conditions of this License -+Agreement. -+ -+Modified Version of Python's TextTestRunner -+""" -+ -+import time -+import sys -+import string -+ -+import unittest -+TestResult = unittest.TestResult -+ -+ -+class _WritelnDecorator(object): -+ """Used to decorate file-like objects with a handy 'writeln' method""" -+ def __init__(self, stream): -+ self.stream = stream -+ -+ def __getattr__(self, attr): -+ if attr in ('stream', '__getstate__'): -+ raise AttributeError(attr) -+ return getattr(self.stream, attr) -+ -+ def writeln(self, arg=None): -+ if arg: -+ self.write(arg) -+ self.write('\n') # text-mode streams translate to \r\n if needed -+ -+ -+class _PTestResult(TestResult): -+ """A test result class that can print formatted text results to a stream. -+ -+ Used by PTestRunner. -+ """ -+ separator1 = '=' * 70 -+ separator2 = '-' * 70 -+ -+ def __init__(self, stream, descriptions, verbosity): -+ TestResult.__init__(self) -+ self.stream = stream -+ self.showAll = verbosity > 1 -+ self.dots = verbosity == 1 -+ self.descriptions = descriptions -+ -+ def getDescription(self, test): -+ return str(test) -+ -+ def startTest(self, test): -+ TestResult.startTest(self, test) -+ -+ def addSuccess(self, test): -+ TestResult.addSuccess(self, test) -+ if self.showAll: -+ self.stream.writeln("PASS: {0}".format(self.getDescription(test))) -+ elif self.dots: -+ self.stream.write('.') -+ -+ def addError(self, test, err): -+ TestResult.addError(self, test, err) -+ if self.showAll: -+ self.stream.writeln("FAIL: ERROR {0}".format(self.getDescription(test))) -+ elif self.dots: -+ self.stream.write('E') -+ -+ def addFailure(self, test, err): -+ TestResult.addFailure(self, test, err) -+ if self.showAll: -+ self.stream.writeln("FAIL: {0}".format(self.getDescription(test))) -+ elif self.dots: -+ self.stream.write('F') -+ -+ def printErrors(self): -+ if self.dots or self.showAll: -+ self.stream.writeln() -+ self.printErrorList('ERROR', self.errors) -+ self.printErrorList('FAIL', self.failures) -+ -+ def printErrorList(self, flavour, errors): -+ for test, err in errors: -+ self.stream.writeln(self.separator1) -+ self.stream.writeln("{0}: {0}".format(flavour, self.getDescription(test))) -+ self.stream.writeln(self.separator2) -+ self.stream.writeln("{0}".format(err)) -+ -+ -+class PTestRunner: -+ """A test runner class that displays results in PTest format. -+ -+ """ -+ def __init__(self, stream=sys.stderr, descriptions=1, verbosity=1): -+ self.stream = _WritelnDecorator(stream) -+ self.descriptions = descriptions -+ self.verbosity = 2 -+ -+ def _makeResult(self): -+ return _PTestResult(self.stream, self.descriptions, self.verbosity) -+ -+ def run(self, test): -+ "Run the given test case or test suite." -+ result = self._makeResult() -+ startTime = time.time() -+ test(result) -+ stopTime = time.time() -+ timeTaken = float(stopTime - startTime) -+ result.printErrors() -+ run = result.testsRun -+ self.stream.writeln("Ran %d test%s in %.3fs" % -+ (run, run == 1 and "" or "s", timeTaken)) -+ self.stream.writeln(result.separator2) -+ self.stream.writeln() -+ return result --- -2.13.2 - diff --git a/meta-openstack/recipes-devtools/python/python-salttesting_2015.2.16.bb b/meta-openstack/recipes-devtools/python/python-salttesting_2015.2.16.bb deleted file mode 100644 index d5d1e3e..0000000 --- a/meta-openstack/recipes-devtools/python/python-salttesting_2015.2.16.bb +++ /dev/null @@ -1,24 +0,0 @@ -SUMMARY = "Common testing tools used in the Salt Stack projects" -HOMEPAGE = "https://github.com/saltstack/salt-testing" -SECTION = "devel/python" -LICENSE = "Apache-2.0" -LIC_FILES_CHKSUM = "file://LICENSE;md5=f36f1e9e3e30f90180efdf7e40d943e5" -SRCNAME = "salt-testing" - -FILESEXTRAPATHS_append := "${THISDIR}/${PN}" - -SRC_URI = "https://github.com/saltstack/salt-testing/archive/v${PV}.tar.gz;downloadfilename=salt-testing-v${PV}.tar.gz \ - file://0001-Add-ptest-output-option-to-test-suite.patch \ - " -SRC_URI[md5sum] = "8ca55a796e9ad7ba72bc143043753ccf" -SRC_URI[sha256sum] = "0ef4be6a8a9b505ae1c328394dfad50493674af6100c7e2c220f374533d86edc" - -S = "${WORKDIR}/${SRCNAME}-${PV}" - -RDEPENDS_${PN} = "\ - python-mock \ - python-unittest \ -" - -inherit setuptools3 - diff --git a/meta-openstack/recipes-devtools/python/python3-salttesting/0001-Add-ptest-output-option-to-test-suite.patch b/meta-openstack/recipes-devtools/python/python3-salttesting/0001-Add-ptest-output-option-to-test-suite.patch new file mode 100644 index 0000000..f1628a3 --- /dev/null +++ b/meta-openstack/recipes-devtools/python/python3-salttesting/0001-Add-ptest-output-option-to-test-suite.patch @@ -0,0 +1,231 @@ +From 61ba63c3cde920873b8df48b950b8ebb79158346 Mon Sep 17 00:00:00 2001 +From: Wang Mingyu +Date: Thu, 19 Nov 2020 11:20:58 +0900 +Subject: [PATCH] Add ptest output option to test suite + +Extend salttesting to support outputing the results of running the test +suite in ptest format. + +Upstream-Status: Inappropriate [OE specific] + +Signed-off-by: Collin Richards +Signed-off-by: Zang Ruochen + +Natinst-ReviewBoard-ID: 143279 +--- + salttesting/parser/__init__.py | 12 +++ + salttesting/ptest.py | 165 +++++++++++++++++++++++++++++++++ + 2 files changed, 177 insertions(+) + create mode 100644 salttesting/ptest.py + +diff --git a/salttesting/parser/__init__.py b/salttesting/parser/__init__.py +index d752acf..b41e5ea 100644 +--- a/salttesting/parser/__init__.py ++++ b/salttesting/parser/__init__.py +@@ -28,6 +28,7 @@ from contextlib import closing + + import six + from salttesting import TestLoader, TextTestRunner ++from salttesting.ptest import PTestRunner + from salttesting import helpers + from salttesting.version import __version_info__ + from salttesting.xmlunit import HAS_XMLRUNNER, XMLTestRunner +@@ -277,6 +278,12 @@ class SaltTestingParser(optparse.OptionParser): + action='store_true', + help='Do NOT show the overall tests result' + ) ++ self.output_options_group.add_option( ++ '--ptest-out', ++ dest='ptest_out', ++ default=False, ++ help='Output test results in PTest format' ++ ) + self.add_option_group(self.output_options_group) + + self.fs_cleanup_options_group = optparse.OptionGroup( +@@ -531,6 +538,11 @@ class SaltTestingParser(optparse.OptionParser): + verbosity=self.options.verbosity + ).run(tests) + self.testsuite_results.append((header, runner)) ++ elif self.options.ptest_out: ++ runner = PTestRunner( ++ stream=sys.stdout, ++ verbosity=self.options.verbosity).run(tests) ++ self.testsuite_results.append((header, runner)) + else: + runner = TextTestRunner( + stream=sys.stdout, +diff --git a/salttesting/ptest.py b/salttesting/ptest.py +new file mode 100644 +index 0000000..4c50f57 +--- /dev/null ++++ b/salttesting/ptest.py +@@ -0,0 +1,165 @@ ++# -*- coding: utf-8 -*- ++ ++""" ++Copyright (c) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, ++2011, 2012, 2013, 2014, 2015, 2016 Python Software Foundation; All Rights ++Reserved ++ ++PYTHON SOFTWARE FOUNDATION LICENSE VERSION 2 ++-------------------------------------------- ++ ++1. This LICENSE AGREEMENT is between the Python Software Foundation ++("PSF"), and the Individual or Organization ("Licensee") accessing and ++otherwise using this software ("Python") in source or binary form and ++its associated documentation. ++ ++2. Subject to the terms and conditions of this License Agreement, PSF hereby ++grants Licensee a nonexclusive, royalty-free, world-wide license to reproduce, ++analyze, test, perform and/or display publicly, prepare derivative works, ++distribute, and otherwise use Python alone or in any derivative version, ++provided, however, that PSF's License Agreement and PSF's notice of copyright, ++i.e., "Copyright (c) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, ++2011, 2012, 2013, 2014, 2015, 2016 Python Software Foundation; All Rights ++Reserved" are retained in Python alone or in any derivative version prepared by ++Licensee. ++ ++3. In the event Licensee prepares a derivative work that is based on ++or incorporates Python or any part thereof, and wants to make ++the derivative work available to others as provided herein, then ++Licensee hereby agrees to include in any such work a brief summary of ++the changes made to Python. ++ ++4. PSF is making Python available to Licensee on an "AS IS" ++basis. PSF MAKES NO REPRESENTATIONS OR WARRANTIES, EXPRESS OR ++IMPLIED. BY WAY OF EXAMPLE, BUT NOT LIMITATION, PSF MAKES NO AND ++DISCLAIMS ANY REPRESENTATION OR WARRANTY OF MERCHANTABILITY OR FITNESS ++FOR ANY PARTICULAR PURPOSE OR THAT THE USE OF PYTHON WILL NOT ++INFRINGE ANY THIRD PARTY RIGHTS. ++ ++5. PSF SHALL NOT BE LIABLE TO LICENSEE OR ANY OTHER USERS OF PYTHON ++FOR ANY INCIDENTAL, SPECIAL, OR CONSEQUENTIAL DAMAGES OR LOSS AS ++A RESULT OF MODIFYING, DISTRIBUTING, OR OTHERWISE USING PYTHON, ++OR ANY DERIVATIVE THEREOF, EVEN IF ADVISED OF THE POSSIBILITY THEREOF. ++ ++6. This License Agreement will automatically terminate upon a material ++breach of its terms and conditions. ++ ++7. Nothing in this License Agreement shall be deemed to create any ++relationship of agency, partnership, or joint venture between PSF and ++Licensee. This License Agreement does not grant permission to use PSF ++trademarks or trade name in a trademark sense to endorse or promote ++products or services of Licensee, or any third party. ++ ++8. By copying, installing or otherwise using Python, Licensee ++agrees to be bound by the terms and conditions of this License ++Agreement. ++ ++Modified Version of Python's TextTestRunner ++""" ++ ++import time ++import sys ++import string ++ ++import unittest ++TestResult = unittest.TestResult ++ ++ ++class _WritelnDecorator(object): ++ """Used to decorate file-like objects with a handy 'writeln' method""" ++ def __init__(self, stream): ++ self.stream = stream ++ ++ def __getattr__(self, attr): ++ if attr in ('stream', '__getstate__'): ++ raise AttributeError(attr) ++ return getattr(self.stream, attr) ++ ++ def writeln(self, arg=None): ++ if arg: ++ self.write(arg) ++ self.write('\n') # text-mode streams translate to \r\n if needed ++ ++ ++class _PTestResult(TestResult): ++ """A test result class that can print formatted text results to a stream. ++ ++ Used by PTestRunner. ++ """ ++ separator1 = '=' * 70 ++ separator2 = '-' * 70 ++ ++ def __init__(self, stream, descriptions, verbosity): ++ TestResult.__init__(self) ++ self.stream = stream ++ self.showAll = verbosity > 1 ++ self.dots = verbosity == 1 ++ self.descriptions = descriptions ++ ++ def getDescription(self, test): ++ return str(test) ++ ++ def startTest(self, test): ++ TestResult.startTest(self, test) ++ ++ def addSuccess(self, test): ++ TestResult.addSuccess(self, test) ++ if self.showAll: ++ self.stream.writeln("PASS: {0}".format(self.getDescription(test))) ++ elif self.dots: ++ self.stream.write('.') ++ ++ def addError(self, test, err): ++ TestResult.addError(self, test, err) ++ if self.showAll: ++ self.stream.writeln("FAIL: ERROR {0}".format(self.getDescription(test))) ++ elif self.dots: ++ self.stream.write('E') ++ ++ def addFailure(self, test, err): ++ TestResult.addFailure(self, test, err) ++ if self.showAll: ++ self.stream.writeln("FAIL: {0}".format(self.getDescription(test))) ++ elif self.dots: ++ self.stream.write('F') ++ ++ def printErrors(self): ++ if self.dots or self.showAll: ++ self.stream.writeln() ++ self.printErrorList('ERROR', self.errors) ++ self.printErrorList('FAIL', self.failures) ++ ++ def printErrorList(self, flavour, errors): ++ for test, err in errors: ++ self.stream.writeln(self.separator1) ++ self.stream.writeln("{0}: {0}".format(flavour, self.getDescription(test))) ++ self.stream.writeln(self.separator2) ++ self.stream.writeln("{0}".format(err)) ++ ++ ++class PTestRunner: ++ """A test runner class that displays results in PTest format. ++ ++ """ ++ def __init__(self, stream=sys.stderr, descriptions=1, verbosity=1): ++ self.stream = _WritelnDecorator(stream) ++ self.descriptions = descriptions ++ self.verbosity = 2 ++ ++ def _makeResult(self): ++ return _PTestResult(self.stream, self.descriptions, self.verbosity) ++ ++ def run(self, test): ++ "Run the given test case or test suite." ++ result = self._makeResult() ++ startTime = time.time() ++ test(result) ++ stopTime = time.time() ++ timeTaken = float(stopTime - startTime) ++ result.printErrors() ++ run = result.testsRun ++ self.stream.writeln("Ran %d test%s in %.3fs" % ++ (run, run == 1 and "" or "s", timeTaken)) ++ self.stream.writeln(result.separator2) ++ self.stream.writeln() ++ return result +-- +2.25.1 + diff --git a/meta-openstack/recipes-devtools/python/python3-salttesting_git.bb b/meta-openstack/recipes-devtools/python/python3-salttesting_git.bb new file mode 100644 index 0000000..3447621 --- /dev/null +++ b/meta-openstack/recipes-devtools/python/python3-salttesting_git.bb @@ -0,0 +1,20 @@ +SUMMARY = "Common testing tools used in the Salt Stack projects" +HOMEPAGE = "https://github.com/saltstack/salt-testing" +SECTION = "devel/python" +LICENSE = "Apache-2.0" +LIC_FILES_CHKSUM = "file://LICENSE;md5=f36f1e9e3e30f90180efdf7e40d943e5" + +SRC_URI = "git://github.com/saltstack/salt-testing.git;branch=develop;tag=v2018.9.21 \ + file://0001-Add-ptest-output-option-to-test-suite.patch \ + " + +PV = "2018.9.21+git${SRCPV}" + +S = "${WORKDIR}/git" + +RDEPENDS_${PN} = "\ + python3-mock \ + python3-unittest \ +" + +inherit setuptools3 -- cgit v1.2.3-54-g00ecf