diff --git a/openerp/modules/loading.py b/openerp/modules/loading.py index 681d8534c05..5635e42e780 100644 --- a/openerp/modules/loading.py +++ b/openerp/modules/loading.py @@ -42,6 +42,7 @@ from openerp import SUPERUSER_ID from openerp.tools.translate import _ from openerp.modules.module import initialize_sys_path, \ load_openerp_module, init_module_models, adapt_version +from module import runs_post_install _logger = logging.getLogger(__name__) _test_logger = logging.getLogger('openerp.tests') @@ -425,8 +426,13 @@ def load_modules(db, force_demo=False, status=None, update_module=False): for model in registry.models.values(): model._register_hook(cr) + # STEP 9: Run the post-install tests + cr.commit() + if openerp.tools.config['test_enable']: + cr.execute("SELECT name FROM ir_module_module WHERE state='installed'") + for module_name in cr.fetchall(): + report.record_result(openerp.modules.module.run_unit_tests(module_name[0], cr.dbname, position=runs_post_install)) finally: cr.close() - # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/openerp/modules/module.py b/openerp/modules/module.py index 8958813baa2..551b7a664b5 100644 --- a/openerp/modules/module.py +++ b/openerp/modules/module.py @@ -356,30 +356,6 @@ class TestStream(object): current_test = None -def run_unit_tests(module_name, dbname): - """ - :returns: ``True`` if all of ``module_name``'s tests succeeded, ``False`` - if any of them failed. - :rtype: bool - """ - global current_test - current_test = module_name - mods = get_test_modules(module_name) - r = True - for m in mods: - tests = unwrap_suite(unittest2.TestLoader().loadTestsFromModule(m)) - suite = unittest2.TestSuite(itertools.ifilter(runs_at_install, tests)) - _logger.info('running %s tests.', m.__name__) - - result = unittest2.TextTestRunner(verbosity=2, stream=TestStream(m.__name__)).run(suite) - - if not result.wasSuccessful(): - r = False - _logger.error("Module %s: %d failures, %d errors", - module_name, len(result.failures), len(result.errors)) - current_test = None - return r - def runs_at(test, hook, default): # by default, tests do not run post install test_runs = getattr(test, hook, default) @@ -396,6 +372,30 @@ def runs_at(test, hook, default): runs_at_install = functools.partial(runs_at, hook='at_install', default=True) runs_post_install = functools.partial(runs_at, hook='post_install', default=False) +def run_unit_tests(module_name, dbname, position=runs_at_install): + """ + :returns: ``True`` if all of ``module_name``'s tests succeeded, ``False`` + if any of them failed. + :rtype: bool + """ + global current_test + current_test = module_name + mods = get_test_modules(module_name) + r = True + for m in mods: + tests = unwrap_suite(unittest2.TestLoader().loadTestsFromModule(m)) + suite = unittest2.TestSuite(itertools.ifilter(position, tests)) + _logger.info('running %s tests.', m.__name__) + + result = unittest2.TextTestRunner(verbosity=2, stream=TestStream(m.__name__)).run(suite) + + if not result.wasSuccessful(): + r = False + _logger.error("Module %s: %d failures, %d errors", + module_name, len(result.failures), len(result.errors)) + current_test = None + return r + def unwrap_suite(test): """ Attempts to unpack testsuites (holding suites or cases) in order to