mirror of
https://git.anonymousland.org/anonymousland/synapse.git
synced 2025-05-03 02:34:50 -04:00
Fix client reader sharding tests (#7853)
* Fix client reader sharding tests * Newsfile * Fix typing * Update changelog.d/7853.misc Co-authored-by: Patrick Cloke <clokep@users.noreply.github.com> * Move mocking of http_client to tests Co-authored-by: Patrick Cloke <clokep@users.noreply.github.com>
This commit is contained in:
parent
b11450dedc
commit
f13061d515
7 changed files with 302 additions and 176 deletions
|
@ -31,6 +31,7 @@ from twisted.internet.interfaces import (
|
|||
IReactorPluggableNameResolver,
|
||||
IResolutionReceiver,
|
||||
)
|
||||
from twisted.internet.task import Cooperator
|
||||
from twisted.python.failure import Failure
|
||||
from twisted.web._newclient import ResponseDone
|
||||
from twisted.web.client import Agent, HTTPConnectionPool, readBody
|
||||
|
@ -69,6 +70,21 @@ def check_against_blacklist(ip_address, ip_whitelist, ip_blacklist):
|
|||
return False
|
||||
|
||||
|
||||
_EPSILON = 0.00000001
|
||||
|
||||
|
||||
def _make_scheduler(reactor):
|
||||
"""Makes a schedular suitable for a Cooperator using the given reactor.
|
||||
|
||||
(This is effectively just a copy from `twisted.internet.task`)
|
||||
"""
|
||||
|
||||
def _scheduler(x):
|
||||
return reactor.callLater(_EPSILON, x)
|
||||
|
||||
return _scheduler
|
||||
|
||||
|
||||
class IPBlacklistingResolver(object):
|
||||
"""
|
||||
A proxy for reactor.nameResolver which only produces non-blacklisted IP
|
||||
|
@ -212,6 +228,10 @@ class SimpleHttpClient(object):
|
|||
if hs.config.user_agent_suffix:
|
||||
self.user_agent = "%s %s" % (self.user_agent, hs.config.user_agent_suffix)
|
||||
|
||||
# We use this for our body producers to ensure that they use the correct
|
||||
# reactor.
|
||||
self._cooperator = Cooperator(scheduler=_make_scheduler(hs.get_reactor()))
|
||||
|
||||
self.user_agent = self.user_agent.encode("ascii")
|
||||
|
||||
if self._ip_blacklist:
|
||||
|
@ -292,7 +312,9 @@ class SimpleHttpClient(object):
|
|||
try:
|
||||
body_producer = None
|
||||
if data is not None:
|
||||
body_producer = QuieterFileBodyProducer(BytesIO(data))
|
||||
body_producer = QuieterFileBodyProducer(
|
||||
BytesIO(data), cooperator=self._cooperator,
|
||||
)
|
||||
|
||||
request_deferred = treq.request(
|
||||
method,
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue