Skip to content
This repository has been archived by the owner on Apr 26, 2024. It is now read-only.

Commit

Permalink
Move wait_until_result into FakeChannel (#8758)
Browse files Browse the repository at this point in the history
FakeChannel has everything we need, and this more accurately models the real
flow.
  • Loading branch information
richvdh authored Nov 16, 2020
1 parent 4f76eef commit f125895
Show file tree
Hide file tree
Showing 3 changed files with 24 additions and 25 deletions.
1 change: 1 addition & 0 deletions changelog.d/8758.misc
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
Refactor test utilities for injecting HTTP requests.
6 changes: 3 additions & 3 deletions tests/rest/key/v2/test_remote_key_resource.py
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,7 @@
from synapse.util.stringutils import random_string

from tests import unittest
from tests.server import FakeChannel, wait_until_result
from tests.server import FakeChannel
from tests.utils import default_config


Expand Down Expand Up @@ -94,7 +94,7 @@ def make_notary_request(self, server_name: str, key_id: str) -> dict:
% (server_name.encode("utf-8"), key_id.encode("utf-8")),
b"1.1",
)
wait_until_result(self.reactor, req)
channel.await_result()
self.assertEqual(channel.code, 200)
resp = channel.json_body
return resp
Expand Down Expand Up @@ -190,7 +190,7 @@ async def post_json(destination, path, data):
req.requestReceived(
b"POST", path.encode("utf-8"), b"1.1",
)
wait_until_result(self.reactor, req)
channel.await_result()
self.assertEqual(channel.code, 200)
resp = channel.json_body
return resp
Expand Down
42 changes: 20 additions & 22 deletions tests/server.py
Original file line number Diff line number Diff line change
Expand Up @@ -117,6 +117,25 @@ def getHost(self):
def transport(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:
"""
Expand Down Expand Up @@ -225,30 +244,9 @@ def make_request(
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):
request.render(resource)
wait_until_result(clock, request)
request._channel.await_result()


@implementer(IReactorPluggableNameResolver)
Expand Down

0 comments on commit f125895

Please sign in to comment.