Example #1
0
    def test_process_response_commits_transaction_if_managed(self):
        commit = self.mocker.replace("transaction.commit")
        leave_transaction_management = self.mocker.replace(
            "django.db.transaction.leave_transaction_management")
        is_managed = self.mocker.replace("django.db.transaction.is_managed")
        set_clean = self.mocker.replace("django.db.transaction.set_clean")
        # We test three request methods
        self.expect(is_managed()).result(True).count(3)
        self.expect(commit()).count(3)
        self.expect(set_clean()).count(3)
        self.expect(leave_transaction_management()).count(3)
        self.mocker.replay()

        # Commit on all methods
        conf.settings.STORM_COMMIT_SAFE_METHODS = True

        zope_middleware = ZopeTransactionMiddleware()
        request = HttpRequest()
        response = HttpResponse()

        request.method = "GET"
        zope_middleware.process_response(request, response)
        request.method = "HEAD"
        zope_middleware.process_response(request, response)
        request.method = "POST"
        zope_middleware.process_response(request, response)
Example #2
0
    def test_process_request_begins_transaction(self):
        begin = self.mocker.replace("transaction.begin")
        enter_transaction_management = self.mocker.replace(
            "django.db.transaction.enter_transaction_management")
        managed = self.mocker.replace("django.db.transaction.managed")
        enter_transaction_management()
        managed(True)
        begin()
        self.mocker.replay()

        zope_middleware = ZopeTransactionMiddleware()
        request = HttpRequest()
        request.method = "GET"
        zope_middleware.process_request(request)
Example #3
0
    def test_process_response_aborts_transaction_not_managed(self):
        abort = self.mocker.replace("transaction.abort")
        commit = self.mocker.replace("transaction.commit")
        leave_transaction_management = self.mocker.replace(
            "django.db.transaction.leave_transaction_management")
        is_managed = self.mocker.replace("django.db.transaction.is_managed")
        set_clean = self.mocker.replace("django.db.transaction.set_clean")

        self.expect(is_managed()).result(False).count(2)
        # None of these methods should be called
        self.expect(commit()).count(0)
        self.expect(abort()).count(0)
        self.expect(set_clean()).count(0)
        self.expect(leave_transaction_management()).count(0)
        self.mocker.replay()

        zope_middleware = ZopeTransactionMiddleware()
        request = HttpRequest()
        response = HttpResponse()

        request.method = "GET"
        zope_middleware.process_response(request, response)

        # Try the same with a safe method.
        conf.settings.STORM_COMMIT_SAFE_METHODS = False
        zope_middleware = ZopeTransactionMiddleware()
        zope_middleware.process_response(request, response)
Example #4
0
    def test_process_request_begins_transaction(self):
        begin = self.mocker.replace("transaction.begin")
        enter_transaction_management = self.mocker.replace(
            "django.db.transaction.enter_transaction_management")
        managed = self.mocker.replace(
            "django.db.transaction.managed")
        enter_transaction_management()
        managed(True)
        begin()
        self.mocker.replay()

        zope_middleware = ZopeTransactionMiddleware()
        request = HttpRequest()
        request.method = "GET"
        zope_middleware.process_request(request)
Example #5
0
    def test_process_exception_aborts_transaction(self):
        abort = self.mocker.replace("transaction.abort")
        leave_transaction_management = self.mocker.replace(
            "django.db.transaction.leave_transaction_management")
        set_clean = self.mocker.replace("django.db.transaction.set_clean")
        abort()
        set_clean()
        leave_transaction_management()
        self.mocker.replay()

        zope_middleware = ZopeTransactionMiddleware()
        request = HttpRequest()
        request.method = "GET"
        exception = RuntimeError("some error")
        zope_middleware.process_exception(request, exception)
Example #6
0
    def test_process_exception_aborts_transaction(self):
        abort = self.mocker.replace("transaction.abort")
        leave_transaction_management = self.mocker.replace(
            "django.db.transaction.leave_transaction_management")
        set_clean = self.mocker.replace(
            "django.db.transaction.set_clean")
        abort()
        set_clean()
        leave_transaction_management()
        self.mocker.replay()

        zope_middleware = ZopeTransactionMiddleware()
        request = HttpRequest()
        request.method = "GET"
        exception = RuntimeError("some error")
        zope_middleware.process_exception(request, exception)
Example #7
0
    def test_process_response_commits_transaction_if_managed(self):
        commit = self.mocker.replace("transaction.commit")
        leave_transaction_management = self.mocker.replace(
            "django.db.transaction.leave_transaction_management")
        is_managed = self.mocker.replace(
            "django.db.transaction.is_managed")
        set_clean = self.mocker.replace(
            "django.db.transaction.set_clean")
        # We test three request methods
        self.expect(is_managed()).result(True).count(3)
        self.expect(commit()).count(3)
        self.expect(set_clean()).count(3)
        self.expect(leave_transaction_management()).count(3)
        self.mocker.replay()

        # Commit on all methods
        conf.settings.STORM_COMMIT_SAFE_METHODS = True

        zope_middleware = ZopeTransactionMiddleware()
        request = HttpRequest()
        response = HttpResponse()

        request.method = "GET"
        zope_middleware.process_response(request, response)
        request.method = "HEAD"
        zope_middleware.process_response(request, response)
        request.method = "POST"
        zope_middleware.process_response(request, response)
Example #8
0
    def test_process_response_aborts_transaction_not_managed(self):
        abort = self.mocker.replace("transaction.abort")
        commit = self.mocker.replace("transaction.commit")
        leave_transaction_management = self.mocker.replace(
            "django.db.transaction.leave_transaction_management")
        is_managed = self.mocker.replace(
            "django.db.transaction.is_managed")
        set_clean = self.mocker.replace(
            "django.db.transaction.set_clean")

        self.expect(is_managed()).result(False).count(2)
        # None of these methods should be called
        self.expect(commit()).count(0)
        self.expect(abort()).count(0)
        self.expect(set_clean()).count(0)
        self.expect(leave_transaction_management()).count(0)
        self.mocker.replay()

        zope_middleware = ZopeTransactionMiddleware()
        request = HttpRequest()
        response = HttpResponse()

        request.method = "GET"
        zope_middleware.process_response(request, response)

        # Try the same with a safe method.
        conf.settings.STORM_COMMIT_SAFE_METHODS = False
        zope_middleware = ZopeTransactionMiddleware()
        zope_middleware.process_response(request, response)
Example #9
0
    def test_process_response_aborts_transaction_on_failed_commit(self):
        _transaction = transaction.get()
        resource1 = self.mocker.mock()
        self.expect(resource1.prepare).throw(AttributeError).count(0)
        resource2 = self.mocker.mock()
        self.expect(resource2.prepare).throw(AttributeError).count(0)
        leave_transaction_management = self.mocker.replace(
            "django.db.transaction.leave_transaction_management")
        is_managed = self.mocker.replace("django.db.transaction.is_managed")
        set_clean = self.mocker.replace("django.db.transaction.set_clean")

        self.expect(is_managed()).result(True).count(1)
        self.expect(
            resource1.tpc_begin(_transaction)).throw(DisconnectionError)
        self.expect(resource1.abort(_transaction)).count(2)
        # None of these methods should be called
        self.expect(set_clean()).count(0)
        self.expect(leave_transaction_management()).count(0)
        self.mocker.replay()

        _transaction.join(resource1)
        zope_middleware = ZopeTransactionMiddleware()
        request = HttpRequest()
        response = HttpResponse()

        # Processing this response should fail on "commit()" with a
        # DisconnectionError. The error is saved by
        # "_saveAndRaiseCommitishError()", and re-raised, so we need to catch
        # it and abort the transaction.
        request.method = "POST"
        self.assertRaises(DisconnectionError, zope_middleware.process_response,
                          request, response)

        # Now the transaction should have been cleared by "abort()". A resource
        # joining the transaction manager should not fail with a
        # "TransactionFailedError".
        transaction.get().join(resource2)