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

Commit 59d24c5

Browse files
authored
pass a reactor into SynapseSite (#9874)
1 parent e836279 commit 59d24c5

File tree

7 files changed

+43
-24
lines changed

7 files changed

+43
-24
lines changed

changelog.d/9874.misc

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
Pass a reactor into `SynapseSite` to make testing easier.

synapse/app/generic_worker.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -367,6 +367,7 @@ def _listen_http(self, listener_config: ListenerConfig):
367367
listener_config,
368368
root_resource,
369369
self.version_string,
370+
reactor=self.get_reactor(),
370371
),
371372
reactor=self.get_reactor(),
372373
)

synapse/app/homeserver.py

Lines changed: 10 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -126,19 +126,20 @@ def _listener_http(self, config: HomeServerConfig, listener_config: ListenerConf
126126
else:
127127
root_resource = OptionsResource()
128128

129-
root_resource = create_resource_tree(resources, root_resource)
129+
site = SynapseSite(
130+
"synapse.access.%s.%s" % ("https" if tls else "http", site_tag),
131+
site_tag,
132+
listener_config,
133+
create_resource_tree(resources, root_resource),
134+
self.version_string,
135+
reactor=self.get_reactor(),
136+
)
130137

131138
if tls:
132139
ports = listen_ssl(
133140
bind_addresses,
134141
port,
135-
SynapseSite(
136-
"synapse.access.https.%s" % (site_tag,),
137-
site_tag,
138-
listener_config,
139-
root_resource,
140-
self.version_string,
141-
),
142+
site,
142143
self.tls_server_context_factory,
143144
reactor=self.get_reactor(),
144145
)
@@ -148,13 +149,7 @@ def _listener_http(self, config: HomeServerConfig, listener_config: ListenerConf
148149
ports = listen_tcp(
149150
bind_addresses,
150151
port,
151-
SynapseSite(
152-
"synapse.access.http.%s" % (site_tag,),
153-
site_tag,
154-
listener_config,
155-
root_resource,
156-
self.version_string,
157-
),
152+
site,
158153
reactor=self.get_reactor(),
159154
)
160155
logger.info("Synapse now listening on TCP port %d", port)

synapse/http/site.py

Lines changed: 28 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -19,8 +19,9 @@
1919
import attr
2020
from zope.interface import implementer
2121

22-
from twisted.internet.interfaces import IAddress
22+
from twisted.internet.interfaces import IAddress, IReactorTime
2323
from twisted.python.failure import Failure
24+
from twisted.web.resource import IResource
2425
from twisted.web.server import Request, Site
2526

2627
from synapse.config.server import ListenerConfig
@@ -485,21 +486,39 @@ class _XForwardedForAddress:
485486

486487
class SynapseSite(Site):
487488
"""
488-
Subclass of a twisted http Site that does access logging with python's
489-
standard logging
489+
Synapse-specific twisted http Site
490+
491+
This does two main things.
492+
493+
First, it replaces the requestFactory in use so that we build SynapseRequests
494+
instead of regular t.w.server.Requests. All of the constructor params are really
495+
just parameters for SynapseRequest.
496+
497+
Second, it inhibits the log() method called by Request.finish, since SynapseRequest
498+
does its own logging.
490499
"""
491500

492501
def __init__(
493502
self,
494-
logger_name,
495-
site_tag,
503+
logger_name: str,
504+
site_tag: str,
496505
config: ListenerConfig,
497-
resource,
506+
resource: IResource,
498507
server_version_string,
499-
*args,
500-
**kwargs,
508+
reactor: IReactorTime,
501509
):
502-
Site.__init__(self, resource, *args, **kwargs)
510+
"""
511+
512+
Args:
513+
logger_name: The name of the logger to use for access logs.
514+
site_tag: A tag to use for this site - mostly in access logs.
515+
config: Configuration for the HTTP listener corresponding to this site
516+
resource: The base of the resource tree to be used for serving requests on
517+
this site
518+
server_version_string: A string to present for the Server header
519+
reactor: reactor to be used to manage connection timeouts
520+
"""
521+
Site.__init__(self, resource, reactor=reactor)
503522

504523
self.site_tag = site_tag
505524

tests/replication/_base.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -349,6 +349,7 @@ def make_worker_hs(
349349
config=worker_hs.config.server.listeners[0],
350350
resource=resource,
351351
server_version_string="1",
352+
reactor=self.reactor,
352353
)
353354

354355
if worker_hs.config.redis.redis_enabled:

tests/test_server.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -202,6 +202,7 @@ def _make_request(self, method, path):
202202
parse_listener_def({"type": "http", "port": 0}),
203203
self.resource,
204204
"1.0",
205+
reactor=self.reactor,
205206
)
206207

207208
# render the request and return the channel

tests/unittest.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -247,6 +247,7 @@ def setUp(self):
247247
config=self.hs.config.server.listeners[0],
248248
resource=self.resource,
249249
server_version_string="1",
250+
reactor=self.reactor,
250251
)
251252

252253
from tests.rest.client.v1.utils import RestHelper

0 commit comments

Comments
 (0)