diff options
author | Richard van der Hoff <richard@matrix.org> | 2018-05-21 16:58:20 +0100 |
---|---|---|
committer | Richard van der Hoff <richard@matrix.org> | 2018-05-21 16:58:20 +0100 |
commit | 6e1cb54a05df3dd614acb022a665458cc1c9698f (patch) | |
tree | bf212f594c5d4c793c41c7b9fe8f6b21abb69f7e /tests | |
parent | Stop the transaction cache caching failures (diff) | |
download | synapse-6e1cb54a05df3dd614acb022a665458cc1c9698f.tar.xz |
Fix logcontext leak in HttpTransactionCache
ONE DAY I WILL PURGE THE WORLD OF THIS EVIL
Diffstat (limited to 'tests')
-rw-r--r-- | tests/rest/client/test_transactions.py | 21 |
1 files changed, 21 insertions, 0 deletions
diff --git a/tests/rest/client/test_transactions.py b/tests/rest/client/test_transactions.py index b650a7772b..b5bc2fa255 100644 --- a/tests/rest/client/test_transactions.py +++ b/tests/rest/client/test_transactions.py @@ -3,6 +3,7 @@ from synapse.rest.client.transactions import CLEANUP_PERIOD_MS from twisted.internet import defer from mock import Mock, call +from synapse.util import async from synapse.util.logcontext import LoggingContext from tests import unittest from tests.utils import MockClock @@ -42,6 +43,26 @@ class HttpTransactionCacheTestCase(unittest.TestCase): cb.assert_called_once_with("some_arg", keyword="arg", changing_args=0) @defer.inlineCallbacks + def test_logcontexts_with_async_result(self): + @defer.inlineCallbacks + def cb(): + yield async.sleep(0) + defer.returnValue("yay") + + @defer.inlineCallbacks + def test(): + with LoggingContext("c") as c1: + res = yield self.cache.fetch_or_execute(self.mock_key, cb) + self.assertIs(LoggingContext.current_context(), c1) + self.assertEqual(res, "yay") + + # run the test twice in parallel + d = defer.gatherResults([test(), test()]) + self.assertIs(LoggingContext.current_context(), LoggingContext.sentinel) + yield d + self.assertIs(LoggingContext.current_context(), LoggingContext.sentinel) + + @defer.inlineCallbacks def test_does_not_cache_exceptions(self): """Checks that, if the callback throws an exception, it is called again for the next request. |