diff options
| author | Aníbal Limón <anibal.limon@linux.intel.com> | 2017-06-08 11:32:07 -0500 | 
|---|---|---|
| committer | Richard Purdie <richard.purdie@linuxfoundation.org> | 2017-06-12 15:08:30 +0100 | 
| commit | 652df69b026f1188b99efb7a2a237a44928ff6a9 (patch) | |
| tree | b2b84ab16c1cf1a67160947daaba637585585a9b /meta/lib/oeqa/core/loader.py | |
| parent | cbe13b3b10100da325e393a57b6877f10f48c252 (diff) | |
| download | poky-652df69b026f1188b99efb7a2a237a44928ff6a9.tar.gz | |
oeqa/core/loader: Fix filtering on test modules with submodules
Our filtering allows to specify which tests to run using,
<module_name>.[test_class].[test_name]
But the module name logic was restricted to only accept one level,
for example: runtime_test vs oelib.types, to support multiple
submodules use only the first part for filtering.
This allows to run the whole tests in a module with more than tree
levels.
Due to the ambiguity on the test filtering options with test cases
with more than tree levels the supported sytnax is,
<module>
or
<module>.[submoduleN].[test_class].[test_name]
[YOCTO #11632]
(From OE-Core rev: cf2ee12b007e5570959ccfbb643159b21d90426e)
Signed-off-by: Aníbal Limón <anibal.limon@linux.intel.com>
Signed-off-by: Ross Burton <ross.burton@intel.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
Diffstat (limited to 'meta/lib/oeqa/core/loader.py')
| -rw-r--r-- | meta/lib/oeqa/core/loader.py | 70 | 
1 files changed, 34 insertions, 36 deletions
diff --git a/meta/lib/oeqa/core/loader.py b/meta/lib/oeqa/core/loader.py index 7cc4d4c0cf..166fc35b4f 100644 --- a/meta/lib/oeqa/core/loader.py +++ b/meta/lib/oeqa/core/loader.py  | |||
| @@ -164,8 +164,11 @@ class OETestLoader(unittest.TestLoader): | |||
| 164 | """ | 164 | """ | 
| 165 | Returns True if test case must be filtered, False otherwise. | 165 | Returns True if test case must be filtered, False otherwise. | 
| 166 | """ | 166 | """ | 
| 167 | # Filters by module.class.name | 167 | # XXX; If the module has more than one namespace only use | 
| 168 | module_name = case.__module__ | 168 | # the first to support run the whole module specifying the | 
| 169 | # <module_name>.[test_class].[test_name] | ||
| 170 | module_name = case.__module__.split('.')[0] | ||
| 171 | |||
| 169 | class_name = case.__class__.__name__ | 172 | class_name = case.__class__.__name__ | 
| 170 | test_name = case._testMethodName | 173 | test_name = case._testMethodName | 
| 171 | 174 | ||
| @@ -278,6 +281,33 @@ class OETestLoader(unittest.TestLoader): | |||
| 278 | 281 | ||
| 279 | return self.suiteClass(cases) if cases else big_suite | 282 | return self.suiteClass(cases) if cases else big_suite | 
| 280 | 283 | ||
| 284 | def _filterModule(self, module): | ||
| 285 | if module.__name__ in sys.builtin_module_names: | ||
| 286 | msg = 'Tried to import %s test module but is a built-in' | ||
| 287 | raise ImportError(msg % module.__name__) | ||
| 288 | |||
| 289 | # XXX; If the module has more than one namespace only use | ||
| 290 | # the first to support run the whole module specifying the | ||
| 291 | # <module_name>.[test_class].[test_name] | ||
| 292 | module_name = module.__name__.split('.')[0] | ||
| 293 | |||
| 294 | # Normal test modules are loaded if no modules were specified, | ||
| 295 | # if module is in the specified module list or if 'all' is in | ||
| 296 | # module list. | ||
| 297 | # Underscore modules are loaded only if specified in module list. | ||
| 298 | load_module = True if not module_name.startswith('_') \ | ||
| 299 | and (not self.modules \ | ||
| 300 | or module_name in self.modules \ | ||
| 301 | or 'all' in self.modules) \ | ||
| 302 | else False | ||
| 303 | |||
| 304 | load_underscore = True if module_name.startswith('_') \ | ||
| 305 | and module_name in self.modules \ | ||
| 306 | else False | ||
| 307 | |||
| 308 | return (load_module, load_underscore) | ||
| 309 | |||
| 310 | |||
| 281 | # XXX After Python 3.5, remove backward compatibility hacks for | 311 | # XXX After Python 3.5, remove backward compatibility hacks for | 
| 282 | # use_load_tests deprecation via *args and **kws. See issue 16662. | 312 | # use_load_tests deprecation via *args and **kws. See issue 16662. | 
| 283 | if sys.version_info >= (3,5): | 313 | if sys.version_info >= (3,5): | 
| @@ -285,23 +315,7 @@ class OETestLoader(unittest.TestLoader): | |||
| 285 | """ | 315 | """ | 
| 286 | Returns a suite of all tests cases contained in module. | 316 | Returns a suite of all tests cases contained in module. | 
| 287 | """ | 317 | """ | 
| 288 | if module.__name__ in sys.builtin_module_names: | 318 | load_module, load_underscore = self._filterModule(module) | 
| 289 | msg = 'Tried to import %s test module but is a built-in' | ||
| 290 | raise ImportError(msg % module.__name__) | ||
| 291 | |||
| 292 | # Normal test modules are loaded if no modules were specified, | ||
| 293 | # if module is in the specified module list or if 'all' is in | ||
| 294 | # module list. | ||
| 295 | # Underscore modules are loaded only if specified in module list. | ||
| 296 | load_module = True if not module.__name__.startswith('_') \ | ||
| 297 | and (not self.modules \ | ||
| 298 | or module.__name__ in self.modules \ | ||
| 299 | or 'all' in self.modules) \ | ||
| 300 | else False | ||
| 301 | |||
| 302 | load_underscore = True if module.__name__.startswith('_') \ | ||
| 303 | and module.__name__ in self.modules \ | ||
| 304 | else False | ||
| 305 | 319 | ||
| 306 | if load_module or load_underscore: | 320 | if load_module or load_underscore: | 
| 307 | return super(OETestLoader, self).loadTestsFromModule( | 321 | return super(OETestLoader, self).loadTestsFromModule( | 
| @@ -313,23 +327,7 @@ class OETestLoader(unittest.TestLoader): | |||
| 313 | """ | 327 | """ | 
| 314 | Returns a suite of all tests cases contained in module. | 328 | Returns a suite of all tests cases contained in module. | 
| 315 | """ | 329 | """ | 
| 316 | if module.__name__ in sys.builtin_module_names: | 330 | load_module, load_underscore = self._filterModule(module) | 
| 317 | msg = 'Tried to import %s test module but is a built-in' | ||
| 318 | raise ImportError(msg % module.__name__) | ||
| 319 | |||
| 320 | # Normal test modules are loaded if no modules were specified, | ||
| 321 | # if module is in the specified module list or if 'all' is in | ||
| 322 | # module list. | ||
| 323 | # Underscore modules are loaded only if specified in module list. | ||
| 324 | load_module = True if not module.__name__.startswith('_') \ | ||
| 325 | and (not self.modules \ | ||
| 326 | or module.__name__ in self.modules \ | ||
| 327 | or 'all' in self.modules) \ | ||
| 328 | else False | ||
| 329 | |||
| 330 | load_underscore = True if module.__name__.startswith('_') \ | ||
| 331 | and module.__name__ in self.modules \ | ||
| 332 | else False | ||
| 333 | 331 | ||
| 334 | if load_module or load_underscore: | 332 | if load_module or load_underscore: | 
| 335 | return super(OETestLoader, self).loadTestsFromModule( | 333 | return super(OETestLoader, self).loadTestsFromModule( | 
