diff options
author | Erik Johnston <erik@matrix.org> | 2019-12-10 14:20:26 +0000 |
---|---|---|
committer | GitHub <noreply@github.com> | 2019-12-10 14:20:26 +0000 |
commit | 35f3c366ef70541a8e5d826bb3da530c07723e1c (patch) | |
tree | f0a6b3bddf1a560ccb1b0e635037b43bec880c4c /tests | |
parent | Merge pull request #6499 from matrix-org/erikj/fix_sqlite_7 (diff) | |
parent | Update comment (diff) | |
download | synapse-35f3c366ef70541a8e5d826bb3da530c07723e1c.tar.xz |
Merge pull request #6505 from matrix-org/erikj/make_deferred_yiedable
Fix `make_deferred_yieldable` to work with coroutines
Diffstat (limited to 'tests')
-rw-r--r-- | tests/util/test_logcontext.py | 24 |
1 files changed, 24 insertions, 0 deletions
diff --git a/tests/util/test_logcontext.py b/tests/util/test_logcontext.py index 8b8455c8b7..281b32c4b8 100644 --- a/tests/util/test_logcontext.py +++ b/tests/util/test_logcontext.py @@ -179,6 +179,30 @@ class LoggingContextTestCase(unittest.TestCase): nested_context = nested_logging_context(suffix="bar") self.assertEqual(nested_context.request, "foo-bar") + @defer.inlineCallbacks + def test_make_deferred_yieldable_with_await(self): + # an async function which retuns an incomplete coroutine, but doesn't + # follow the synapse rules. + + async def blocking_function(): + d = defer.Deferred() + reactor.callLater(0, d.callback, None) + await d + + sentinel_context = LoggingContext.current_context() + + with LoggingContext() as context_one: + context_one.request = "one" + + d1 = make_deferred_yieldable(blocking_function()) + # make sure that the context was reset by make_deferred_yieldable + self.assertIs(LoggingContext.current_context(), sentinel_context) + + yield d1 + + # now it should be restored + self._check_test_key("one") + # a function which returns a deferred which has been "called", but # which had a function which returned another incomplete deferred on |