Re: [OE-core] [PATCH 2/2] scripts/oe-selftest: Use site.USER_SITE to run coverage configuration code for sub-process
Yes, thanks for the heads up. I will send version 2. Humberto From: Christopher Larson [mailto:clar...@kergoth.com] Sent: Tuesday, February 16, 2016 4:20 PM To: Ibarra Lopez, Humberto <humberto.ibarra.lo...@intel.com>; openembedded-core@lists.openembedded.org Subject: Re: [OE-core] [PATCH 2/2] scripts/oe-selftest: Use site.USER_SITE to run coverage configuration code for sub-process Shouldn't this use a try/finally to ensure the user's site area is properly cleaned up if coverage_report() raises an exception? I doubt you want to risk leaving that around. On Tue, Feb 16, 2016 at 1:10 PM <humberto.ibarra.lo...@intel.com<mailto:humberto.ibarra.lo...@intel.com>> wrote: From: Humberto Ibarra <humberto.ibarra.lo...@intel.com<mailto:humberto.ibarra.lo...@intel.com>> Coverage in oe-selftest currently requires to create or modify a sitecustomize.py file according the coverage tool setup instructions (http://coverage.readthedocs.org/). This file has to be located in the system's python folder, which is not a good solution since this folder is not accesible to non-privileged users. The best solution so far is to create this file in the home directory. This is implemented by creating the temporal file in the user site default folder. [Yocto #8930] Signed-off-by: Humberto Ibarra <humberto.ibarra.lo...@intel.com<mailto:humberto.ibarra.lo...@intel.com>> --- scripts/oe-selftest | 41 +++-- 1 file changed, 31 insertions(+), 10 deletions(-) diff --git a/scripts/oe-selftest b/scripts/oe-selftest index f3865e4..3159d22 100755 --- a/scripts/oe-selftest +++ b/scripts/oe-selftest @@ -553,6 +553,7 @@ def main(): def buildResultClass(args): """Build a Result Class to use in the testcase execution""" +import site class StampedResult(unittest.TextTestResult): """ @@ -568,26 +569,41 @@ def buildResultClass(args): def startTestRun(self): """ Setup coverage before running any testcase """ + +# variable holding the coverage configuration file allowing subprocess to be measured +self.coveragepth = None + +# indicates the system if coverage is currently installed +self.coverage_installed = True + if args.coverage or args.coverage_source or args.coverage_include or args.coverage_omit: try: # check if user can do coverage import coverage -log.info<http://log.info>("Coverage is enabled") - -# In case the user has not set the variable COVERAGE_PROCESS_START, -# create a default one and export it. The COVERAGE_PROCESS_START -# value indicates where the coverage configuration file resides -# More info on https://pypi.python.org/pypi/coverage -if not os.environ.get('COVERAGE_PROCESS_START'): -os.environ['COVERAGE_PROCESS_START'] = coverage_setup(args.run_tests, args.run_all_tests, args.coverage_source, args.coverage_include, args.coverage_omit) - -self.coverage_installed = True except: log.warn('\n'.join(["python coverage is not installed", "Make sure your coverage takes into account sub-process", "More info on https://pypi.python.org/pypi/coverage;])) self.coverage_installed = False +if self.coverage_installed: +log.info<http://log.info>("Coverage is enabled") + +# In case the user has not set the variable COVERAGE_PROCESS_START, +# create a default one and export it. The COVERAGE_PROCESS_START +# value indicates where the coverage configuration file resides +# More info on https://pypi.python.org/pypi/coverage +if not os.environ.get('COVERAGE_PROCESS_START'): +os.environ['COVERAGE_PROCESS_START'] = coverage_setup(args.run_tests, args.run_all_tests, args.coverage_source, args.coverage_include, args.coverage_omit) + +# Use default site.USER_SITE and write corresponding config file +site.ENABLE_USER_SITE = True +if not os.path.exists(site.USER_SITE): +os.makedirs(site.USER_SITE) +self.coveragepth = os.path.join(site.USER_SITE, "coverage.pth") +with open(self.coveragepth, 'w') as cps: +cps.write('import sys,site; sys.path.extend(site.getsitepackages()); import coverage; coverage.process_startup();') + def stopTestRun(self): """ Report coverage data after the testcases
Re: [OE-core] [PATCH 2/2] scripts/oe-selftest: Use site.USER_SITE to run coverage configuration code for sub-process
Shouldn't this use a try/finally to ensure the user's site area is properly cleaned up if coverage_report() raises an exception? I doubt you want to risk leaving that around. On Tue, Feb 16, 2016 at 1:10 PMwrote: > From: Humberto Ibarra > > Coverage in oe-selftest currently requires to create or modify > a sitecustomize.py file according the coverage tool setup instructions > (http://coverage.readthedocs.org/). This file has to be located in > the system's python folder, which is not a good solution since this > folder is not accesible to non-privileged users. > > The best solution so far is to create this file in the home directory. > This is implemented by creating the temporal file in the user site > default folder. > > [Yocto #8930] > > Signed-off-by: Humberto Ibarra > --- > scripts/oe-selftest | 41 +++-- > 1 file changed, 31 insertions(+), 10 deletions(-) > > diff --git a/scripts/oe-selftest b/scripts/oe-selftest > index f3865e4..3159d22 100755 > --- a/scripts/oe-selftest > +++ b/scripts/oe-selftest > @@ -553,6 +553,7 @@ def main(): > > def buildResultClass(args): > """Build a Result Class to use in the testcase execution""" > +import site > > class StampedResult(unittest.TextTestResult): > """ > @@ -568,26 +569,41 @@ def buildResultClass(args): > > def startTestRun(self): > """ Setup coverage before running any testcase """ > + > +# variable holding the coverage configuration file allowing > subprocess to be measured > +self.coveragepth = None > + > +# indicates the system if coverage is currently installed > +self.coverage_installed = True > + > if args.coverage or args.coverage_source or > args.coverage_include or args.coverage_omit: > try: > # check if user can do coverage > import coverage > -log.info("Coverage is enabled") > - > -# In case the user has not set the variable > COVERAGE_PROCESS_START, > -# create a default one and export it. The > COVERAGE_PROCESS_START > -# value indicates where the coverage configuration > file resides > -# More info on https://pypi.python.org/pypi/coverage > -if not os.environ.get('COVERAGE_PROCESS_START'): > -os.environ['COVERAGE_PROCESS_START'] = > coverage_setup(args.run_tests, args.run_all_tests, args.coverage_source, > args.coverage_include, args.coverage_omit) > - > -self.coverage_installed = True > except: > log.warn('\n'.join(["python coverage is not > installed", > "Make sure your coverage takes into account > sub-process", > "More info on > https://pypi.python.org/pypi/coverage;])) > self.coverage_installed = False > > +if self.coverage_installed: > +log.info("Coverage is enabled") > + > +# In case the user has not set the variable > COVERAGE_PROCESS_START, > +# create a default one and export it. The > COVERAGE_PROCESS_START > +# value indicates where the coverage configuration file > resides > +# More info on https://pypi.python.org/pypi/coverage > +if not os.environ.get('COVERAGE_PROCESS_START'): > +os.environ['COVERAGE_PROCESS_START'] = > coverage_setup(args.run_tests, args.run_all_tests, args.coverage_source, > args.coverage_include, args.coverage_omit) > + > +# Use default site.USER_SITE and write corresponding > config file > +site.ENABLE_USER_SITE = True > +if not os.path.exists(site.USER_SITE): > +os.makedirs(site.USER_SITE) > +self.coveragepth = os.path.join(site.USER_SITE, > "coverage.pth") > +with open(self.coveragepth, 'w') as cps: > +cps.write('import sys,site; > sys.path.extend(site.getsitepackages()); import coverage; > coverage.process_startup();') > + > def stopTestRun(self): > """ Report coverage data after the testcases are run """ > > @@ -601,6 +617,11 @@ def buildResultClass(args): > log.info("===") > > coverage_report() > +# remove the pth file > +try: > +os.remove(self.coveragepth) > +except OSError: > +pass > > return StampedResult > > -- > 1.9.1 > > -- > ___ > Openembedded-core mailing list > Openembedded-core@lists.openembedded.org > http://lists.openembedded.org/mailman/listinfo/openembedded-core > --
[OE-core] [PATCH 2/2] scripts/oe-selftest: Use site.USER_SITE to run coverage configuration code for sub-process
From: Humberto IbarraCoverage in oe-selftest currently requires to create or modify a sitecustomize.py file according the coverage tool setup instructions (http://coverage.readthedocs.org/). This file has to be located in the system's python folder, which is not a good solution since this folder is not accesible to non-privileged users. The best solution so far is to create this file in the home directory. This is implemented by creating the temporal file in the user site default folder. [Yocto #8930] Signed-off-by: Humberto Ibarra --- scripts/oe-selftest | 41 +++-- 1 file changed, 31 insertions(+), 10 deletions(-) diff --git a/scripts/oe-selftest b/scripts/oe-selftest index f3865e4..3159d22 100755 --- a/scripts/oe-selftest +++ b/scripts/oe-selftest @@ -553,6 +553,7 @@ def main(): def buildResultClass(args): """Build a Result Class to use in the testcase execution""" +import site class StampedResult(unittest.TextTestResult): """ @@ -568,26 +569,41 @@ def buildResultClass(args): def startTestRun(self): """ Setup coverage before running any testcase """ + +# variable holding the coverage configuration file allowing subprocess to be measured +self.coveragepth = None + +# indicates the system if coverage is currently installed +self.coverage_installed = True + if args.coverage or args.coverage_source or args.coverage_include or args.coverage_omit: try: # check if user can do coverage import coverage -log.info("Coverage is enabled") - -# In case the user has not set the variable COVERAGE_PROCESS_START, -# create a default one and export it. The COVERAGE_PROCESS_START -# value indicates where the coverage configuration file resides -# More info on https://pypi.python.org/pypi/coverage -if not os.environ.get('COVERAGE_PROCESS_START'): -os.environ['COVERAGE_PROCESS_START'] = coverage_setup(args.run_tests, args.run_all_tests, args.coverage_source, args.coverage_include, args.coverage_omit) - -self.coverage_installed = True except: log.warn('\n'.join(["python coverage is not installed", "Make sure your coverage takes into account sub-process", "More info on https://pypi.python.org/pypi/coverage;])) self.coverage_installed = False +if self.coverage_installed: +log.info("Coverage is enabled") + +# In case the user has not set the variable COVERAGE_PROCESS_START, +# create a default one and export it. The COVERAGE_PROCESS_START +# value indicates where the coverage configuration file resides +# More info on https://pypi.python.org/pypi/coverage +if not os.environ.get('COVERAGE_PROCESS_START'): +os.environ['COVERAGE_PROCESS_START'] = coverage_setup(args.run_tests, args.run_all_tests, args.coverage_source, args.coverage_include, args.coverage_omit) + +# Use default site.USER_SITE and write corresponding config file +site.ENABLE_USER_SITE = True +if not os.path.exists(site.USER_SITE): +os.makedirs(site.USER_SITE) +self.coveragepth = os.path.join(site.USER_SITE, "coverage.pth") +with open(self.coveragepth, 'w') as cps: +cps.write('import sys,site; sys.path.extend(site.getsitepackages()); import coverage; coverage.process_startup();') + def stopTestRun(self): """ Report coverage data after the testcases are run """ @@ -601,6 +617,11 @@ def buildResultClass(args): log.info("===") coverage_report() +# remove the pth file +try: +os.remove(self.coveragepth) +except OSError: +pass return StampedResult -- 1.9.1 -- ___ Openembedded-core mailing list Openembedded-core@lists.openembedded.org http://lists.openembedded.org/mailman/listinfo/openembedded-core