Exemplo n.º 1
0
def _django_db_fixture_helper(transactional, request, _django_cursor_wrapper):
    if is_django_unittest(request.node):
        return

    if transactional:
        _django_cursor_wrapper.enable()

        def flushdb():
            """Flush the database and close database connections"""
            # Django does this by default *before* each test
            # instead of after.
            from django.db import connections
            from django.core.management import call_command

            for db in connections:
                call_command('flush', verbosity=0,
                             interactive=False, database=db)
            for conn in connections.all():
                conn.close()

        request.addfinalizer(_django_cursor_wrapper.disable)
        request.addfinalizer(flushdb)
    else:
        if 'live_server' in request.funcargnames:
            return
        from django.test import TestCase

        _django_cursor_wrapper.enable()
        _django_cursor_wrapper._is_transactional = False
        case = TestCase(methodName='__init__')
        case._pre_setup()
        request.addfinalizer(_django_cursor_wrapper.disable)
        request.addfinalizer(case._post_teardown)
Exemplo n.º 2
0
def run_test(test: TestCase, result: TestResult) -> bool:
    failed = False
    test_method = get_test_method(test)

    if fast_tests_only() and is_known_slow_test(test_method):
        return failed

    test_name = full_test_name(test)

    bounce_key_prefix_for_testing(test_name)
    bounce_redis_key_prefix_for_testing(test_name)

    flush_caches_for_testing()

    if not hasattr(test, "_pre_setup"):
        msg = "Test doesn't have _pre_setup; something is wrong."
        error_pre_setup = (Exception, Exception(msg), None
                           )  # type: Tuple[Any, Any, Any]
        result.addError(test, error_pre_setup)
        return True
    test._pre_setup()

    start_time = time.time()

    test(result)  # unittest will handle skipping, error, failure and success.

    delay = time.time() - start_time
    enforce_timely_test_completion(test_method, test_name, delay, result)
    slowness_reason = getattr(test_method, 'slowness_reason', '')
    TEST_TIMINGS.append((delay, test_name, slowness_reason))

    test._post_teardown()
    return failed
Exemplo n.º 3
0
def run_test(test: TestCase, result: TestResult) -> bool:
    failed = False
    test_method = get_test_method(test)

    if fast_tests_only() and is_known_slow_test(test_method):
        return failed

    test_name = full_test_name(test)

    bounce_key_prefix_for_testing(test_name)
    bounce_redis_key_prefix_for_testing(test_name)

    flush_caches_for_testing()

    if not hasattr(test, "_pre_setup"):
        msg = "Test doesn't have _pre_setup; something is wrong."
        error_pre_setup = (Exception, Exception(msg), None)  # type: Tuple[Any, Any, Any]
        result.addError(test, error_pre_setup)
        return True
    test._pre_setup()

    start_time = time.time()

    test(result)  # unittest will handle skipping, error, failure and success.

    delay = time.time() - start_time
    enforce_timely_test_completion(test_method, test_name, delay, result)
    slowness_reason = getattr(test_method, 'slowness_reason', '')
    TEST_TIMINGS.append((delay, test_name, slowness_reason))

    test._post_teardown()
    return failed
Exemplo n.º 4
0
def run_test(test: TestCase, result: TestResult) -> bool:
    failed = False
    test_method = get_test_method(test)

    if fast_tests_only() and is_known_slow_test(test_method):
        return failed

    test_name = full_test_name(test)

    bounce_key_prefix_for_testing(test_name)
    bounce_redis_key_prefix_for_testing(test_name)

    try:
        test._pre_setup()
    except Exception:
        result.addError(test, sys.exc_info())
        return True

    start_time = time.time()

    test(result)  # unittest will handle skipping, error, failure and success.

    delay = time.time() - start_time
    enforce_timely_test_completion(test_method, test_name, delay, result)
    slowness_reason = getattr(test_method, 'slowness_reason', '')
    TEST_TIMINGS.append((delay, test_name, slowness_reason))

    test._post_teardown()
    return failed
Exemplo n.º 5
0
    def _pre_setup(self):
        from film20.middleware import threadlocals

        self.__class__._created_models = []
        signals.post_save.connect(self._model_postsave)

        logger.info("running test %r", self.id())

        threadlocals._thread_locals.request = None

        DjangoTestCase._pre_setup(self)
Exemplo n.º 6
0
    def _pre_setup(self):
        from film20.middleware import threadlocals

        self.__class__._created_models = []
        signals.post_save.connect(self._model_postsave)

        logger.info("running test %r", self.id())

        threadlocals._thread_locals.request = None
        if settings.USE_REDIS:
            from film20.utils import redis_intf
            redis_intf.redis.flushdb()
        if hasattr(cache.cache, 'clear'):
            cache.cache.clear()
        DjangoTestCase._pre_setup(self)
Exemplo n.º 7
0
    def _pre_setup(self):
        from film20.middleware import threadlocals

        self.__class__._created_models = []
        signals.post_save.connect(self._model_postsave)

        logger.info("running test %r", self.id())

        threadlocals._thread_locals.request = None
        if settings.USE_REDIS:
            from film20.utils import redis_intf
            redis_intf.redis.flushdb()
        if hasattr(cache.cache, 'clear'):
            cache.cache.clear()
        DjangoTestCase._pre_setup(self)
Exemplo n.º 8
0
def run_test(test: TestCase, result: TestResult) -> bool:
    failed = False
    test_method = get_test_method(test)

    if fast_tests_only() and is_known_slow_test(test_method):
        return failed

    test_name = full_test_name(test)

    bounce_key_prefix_for_testing(test_name)
    bounce_redis_key_prefix_for_testing(test_name)

    flush_caches_for_testing()

    if not hasattr(test, "_pre_setup"):
        # We are supposed to get here only when running a single test suite
        # on Python 3.5 or higher (the old import failure prefix is being
        # checked just in case). When running several test suites at once,
        # all import failures should be caught in deserialize_suite.
        import_failure_prefix_old = 'unittest.loader.ModuleImportFailure.'
        import_failure_prefix_new = 'unittest.loader._FailedTest.'
        if test_name.startswith(import_failure_prefix_old):
            actual_test_name = test_name[len(import_failure_prefix_old):]
            raise TestSuiteImportError(test_name=actual_test_name)

        elif test_name.startswith(import_failure_prefix_new):
            actual_test_name = test_name[len(import_failure_prefix_new):]
            raise TestSuiteImportError(test_name=actual_test_name)
        else:
            msg = "Test doesn't have _pre_setup; something is wrong."
            error_pre_setup = (Exception, Exception(msg), None)  # type: Tuple[Any, Any, Any]
            result.addError(test, error_pre_setup)
            return True
    test._pre_setup()

    start_time = time.time()

    test(result)  # unittest will handle skipping, error, failure and success.

    delay = time.time() - start_time
    enforce_timely_test_completion(test_method, test_name, delay, result)
    slowness_reason = getattr(test_method, 'slowness_reason', '')
    TEST_TIMINGS.append((delay, test_name, slowness_reason))

    test._post_teardown()
    return failed
Exemplo n.º 9
0
def db(request, _django_db_setup, _django_cursor_wrapper):
    """Require a django test database

    This database will be setup with the default fixtures and will
    have the transaction management disabled.  At the end of the test
    the transaction will be rolled back to undo any changes to the
    database.  This is more limited then the ``transaction_db``
    resource but faster.

    If both this and ``transaction_db`` are requested then the
    database setup will behave as only ``transaction_db`` was
    requested.
    """
    if ('transactional_db' not in request.funcargnames and
            'live_server' not in request.funcargnames and
            not is_django_unittest(request.node)):

        from django.test import TestCase

        _django_cursor_wrapper.enable()
        case = TestCase(methodName='__init__')
        case._pre_setup()
        request.addfinalizer(case._post_teardown)
        request.addfinalizer(_django_cursor_wrapper.disable)
Exemplo n.º 10
0
def run_test(test: TestCase, result: TestResult) -> bool:
    failed = False
    test_method = get_test_method(test)

    if fast_tests_only() and is_known_slow_test(test_method):
        return failed

    test_name = full_test_name(test)

    bounce_key_prefix_for_testing(test_name)
    bounce_redis_key_prefix_for_testing(test_name)

    flush_caches_for_testing()

    if not hasattr(test, "_pre_setup"):
        # test_name is likely of the form unittest.loader.ModuleImportFailure.zerver.tests.test_upload
        import_failure_prefix = 'unittest.loader.ModuleImportFailure.'
        if test_name.startswith(import_failure_prefix):
            actual_test_name = test_name[len(import_failure_prefix):]
            error_msg = ("\nActual test to be run is %s, but import failed.\n"
                         "Importing test module directly to generate clearer "
                         "traceback:\n") % (actual_test_name, )
            result.addInfo(test, error_msg)

            try:
                command = [
                    sys.executable, "-c",
                    "import %s" % (actual_test_name, )
                ]
                msg = "Import test command: `%s`" % (' '.join(command), )
                result.addInfo(test, msg)
                subprocess.check_call(command)
            except subprocess.CalledProcessError:
                msg = ("If that traceback is confusing, try doing the "
                       "import inside `./manage.py shell`")
                result.addInfo(test, msg)
                result.addError(test, sys.exc_info())
                return True

            msg = ("Import unexpectedly succeeded! Something is wrong. Try "
                   "running `import %s` inside `./manage.py shell`.\n"
                   "If that works, you may have introduced an import "
                   "cycle.") % (actual_test_name, )
            import_error = (Exception, Exception(msg), None
                            )  # type: Tuple[Any, Any, Any]
            result.addError(test, import_error)
            return True
        else:
            msg = "Test doesn't have _pre_setup; something is wrong."
            error_pre_setup = (Exception, Exception(msg), None
                               )  # type: Tuple[Any, Any, Any]
            result.addError(test, error_pre_setup)
            return True
    test._pre_setup()

    start_time = time.time()

    test(result)  # unittest will handle skipping, error, failure and success.

    delay = time.time() - start_time
    enforce_timely_test_completion(test_method, test_name, delay, result)
    slowness_reason = getattr(test_method, 'slowness_reason', '')
    TEST_TIMINGS.append((delay, test_name, slowness_reason))

    test._post_teardown()
    return failed
Exemplo n.º 11
0
def _db_helper(request: Any, django_db_blocker: Any) -> None:
    django_db_blocker.unblock()
    test_case = TestCase(methodName="__init__")
    test_case._pre_setup()
    request.addfinalizer(django_db_blocker.restore)
    request.addfinalizer(test_case._post_teardown)