forked from MirrorHub/synapse
Move wait_until_result
into FakeChannel
(#8758)
FakeChannel has everything we need, and this more accurately models the real flow.
This commit is contained in:
parent
4f76eef0e8
commit
f125895475
3 changed files with 24 additions and 25 deletions
1
changelog.d/8758.misc
Normal file
1
changelog.d/8758.misc
Normal file
|
@ -0,0 +1 @@
|
||||||
|
Refactor test utilities for injecting HTTP requests.
|
|
@ -32,7 +32,7 @@ from synapse.util.httpresourcetree import create_resource_tree
|
||||||
from synapse.util.stringutils import random_string
|
from synapse.util.stringutils import random_string
|
||||||
|
|
||||||
from tests import unittest
|
from tests import unittest
|
||||||
from tests.server import FakeChannel, wait_until_result
|
from tests.server import FakeChannel
|
||||||
from tests.utils import default_config
|
from tests.utils import default_config
|
||||||
|
|
||||||
|
|
||||||
|
@ -94,7 +94,7 @@ class RemoteKeyResourceTestCase(BaseRemoteKeyResourceTestCase):
|
||||||
% (server_name.encode("utf-8"), key_id.encode("utf-8")),
|
% (server_name.encode("utf-8"), key_id.encode("utf-8")),
|
||||||
b"1.1",
|
b"1.1",
|
||||||
)
|
)
|
||||||
wait_until_result(self.reactor, req)
|
channel.await_result()
|
||||||
self.assertEqual(channel.code, 200)
|
self.assertEqual(channel.code, 200)
|
||||||
resp = channel.json_body
|
resp = channel.json_body
|
||||||
return resp
|
return resp
|
||||||
|
@ -190,7 +190,7 @@ class EndToEndPerspectivesTests(BaseRemoteKeyResourceTestCase):
|
||||||
req.requestReceived(
|
req.requestReceived(
|
||||||
b"POST", path.encode("utf-8"), b"1.1",
|
b"POST", path.encode("utf-8"), b"1.1",
|
||||||
)
|
)
|
||||||
wait_until_result(self.reactor, req)
|
channel.await_result()
|
||||||
self.assertEqual(channel.code, 200)
|
self.assertEqual(channel.code, 200)
|
||||||
resp = channel.json_body
|
resp = channel.json_body
|
||||||
return resp
|
return resp
|
||||||
|
|
|
@ -117,6 +117,25 @@ class FakeChannel:
|
||||||
def transport(self):
|
def transport(self):
|
||||||
return self
|
return self
|
||||||
|
|
||||||
|
def await_result(self, timeout: int = 100) -> None:
|
||||||
|
"""
|
||||||
|
Wait until the request is finished.
|
||||||
|
"""
|
||||||
|
self._reactor.run()
|
||||||
|
x = 0
|
||||||
|
|
||||||
|
while not self.result.get("done"):
|
||||||
|
# If there's a producer, tell it to resume producing so we get content
|
||||||
|
if self._producer:
|
||||||
|
self._producer.resumeProducing()
|
||||||
|
|
||||||
|
x += 1
|
||||||
|
|
||||||
|
if x > timeout:
|
||||||
|
raise TimedOutException("Timed out waiting for request to finish.")
|
||||||
|
|
||||||
|
self._reactor.advance(0.1)
|
||||||
|
|
||||||
|
|
||||||
class FakeSite:
|
class FakeSite:
|
||||||
"""
|
"""
|
||||||
|
@ -225,30 +244,9 @@ def make_request(
|
||||||
return req, channel
|
return req, channel
|
||||||
|
|
||||||
|
|
||||||
def wait_until_result(clock, request, timeout=100):
|
|
||||||
"""
|
|
||||||
Wait until the request is finished.
|
|
||||||
"""
|
|
||||||
clock.run()
|
|
||||||
x = 0
|
|
||||||
|
|
||||||
while not request.finished:
|
|
||||||
|
|
||||||
# If there's a producer, tell it to resume producing so we get content
|
|
||||||
if request._channel._producer:
|
|
||||||
request._channel._producer.resumeProducing()
|
|
||||||
|
|
||||||
x += 1
|
|
||||||
|
|
||||||
if x > timeout:
|
|
||||||
raise TimedOutException("Timed out waiting for request to finish.")
|
|
||||||
|
|
||||||
clock.advance(0.1)
|
|
||||||
|
|
||||||
|
|
||||||
def render(request, resource, clock):
|
def render(request, resource, clock):
|
||||||
request.render(resource)
|
request.render(resource)
|
||||||
wait_until_result(clock, request)
|
request._channel.await_result()
|
||||||
|
|
||||||
|
|
||||||
@implementer(IReactorPluggableNameResolver)
|
@implementer(IReactorPluggableNameResolver)
|
||||||
|
|
Loading…
Reference in a new issue