Просмотр исходного кода

pass a reactor into SynapseSite (#9874)

tags/v1.33.0rc1
Richard van der Hoff 3 лет назад
committed by GitHub
Родитель
Сommit
59d24c5bef
Не найден GPG ключ соответствующий данной подписи Идентификатор GPG ключа: 4AEE18F83AFDEB23
7 измененных файлов: 43 добавлений и 24 удалений
  1. +1
    -0
      changelog.d/9874.misc
  2. +1
    -0
      synapse/app/generic_worker.py
  3. +10
    -15
      synapse/app/homeserver.py
  4. +28
    -9
      synapse/http/site.py
  5. +1
    -0
      tests/replication/_base.py
  6. +1
    -0
      tests/test_server.py
  7. +1
    -0
      tests/unittest.py

+ 1
- 0
changelog.d/9874.misc Просмотреть файл

@@ -0,0 +1 @@
Pass a reactor into `SynapseSite` to make testing easier.

+ 1
- 0
synapse/app/generic_worker.py Просмотреть файл

@@ -367,6 +367,7 @@ class GenericWorkerServer(HomeServer):
listener_config,
root_resource,
self.version_string,
reactor=self.get_reactor(),
),
reactor=self.get_reactor(),
)


+ 10
- 15
synapse/app/homeserver.py Просмотреть файл

@@ -126,19 +126,20 @@ class SynapseHomeServer(HomeServer):
else:
root_resource = OptionsResource()

root_resource = create_resource_tree(resources, root_resource)
site = SynapseSite(
"synapse.access.%s.%s" % ("https" if tls else "http", site_tag),
site_tag,
listener_config,
create_resource_tree(resources, root_resource),
self.version_string,
reactor=self.get_reactor(),
)

if tls:
ports = listen_ssl(
bind_addresses,
port,
SynapseSite(
"synapse.access.https.%s" % (site_tag,),
site_tag,
listener_config,
root_resource,
self.version_string,
),
site,
self.tls_server_context_factory,
reactor=self.get_reactor(),
)
@@ -148,13 +149,7 @@ class SynapseHomeServer(HomeServer):
ports = listen_tcp(
bind_addresses,
port,
SynapseSite(
"synapse.access.http.%s" % (site_tag,),
site_tag,
listener_config,
root_resource,
self.version_string,
),
site,
reactor=self.get_reactor(),
)
logger.info("Synapse now listening on TCP port %d", port)


+ 28
- 9
synapse/http/site.py Просмотреть файл

@@ -19,8 +19,9 @@ from typing import Optional, Tuple, Type, Union
import attr
from zope.interface import implementer

from twisted.internet.interfaces import IAddress
from twisted.internet.interfaces import IAddress, IReactorTime
from twisted.python.failure import Failure
from twisted.web.resource import IResource
from twisted.web.server import Request, Site

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

class SynapseSite(Site):
"""
Subclass of a twisted http Site that does access logging with python's
standard logging
Synapse-specific twisted http Site

This does two main things.

First, it replaces the requestFactory in use so that we build SynapseRequests
instead of regular t.w.server.Requests. All of the constructor params are really
just parameters for SynapseRequest.

Second, it inhibits the log() method called by Request.finish, since SynapseRequest
does its own logging.
"""

def __init__(
self,
logger_name,
site_tag,
logger_name: str,
site_tag: str,
config: ListenerConfig,
resource,
resource: IResource,
server_version_string,
*args,
**kwargs,
reactor: IReactorTime,
):
Site.__init__(self, resource, *args, **kwargs)
"""

Args:
logger_name: The name of the logger to use for access logs.
site_tag: A tag to use for this site - mostly in access logs.
config: Configuration for the HTTP listener corresponding to this site
resource: The base of the resource tree to be used for serving requests on
this site
server_version_string: A string to present for the Server header
reactor: reactor to be used to manage connection timeouts
"""
Site.__init__(self, resource, reactor=reactor)

self.site_tag = site_tag



+ 1
- 0
tests/replication/_base.py Просмотреть файл

@@ -349,6 +349,7 @@ class BaseMultiWorkerStreamTestCase(unittest.HomeserverTestCase):
config=worker_hs.config.server.listeners[0],
resource=resource,
server_version_string="1",
reactor=self.reactor,
)

if worker_hs.config.redis.redis_enabled:


+ 1
- 0
tests/test_server.py Просмотреть файл

@@ -202,6 +202,7 @@ class OptionsResourceTests(unittest.TestCase):
parse_listener_def({"type": "http", "port": 0}),
self.resource,
"1.0",
reactor=self.reactor,
)

# render the request and return the channel


+ 1
- 0
tests/unittest.py Просмотреть файл

@@ -247,6 +247,7 @@ class HomeserverTestCase(TestCase):
config=self.hs.config.server.listeners[0],
resource=self.resource,
server_version_string="1",
reactor=self.reactor,
)

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


Загрузка…
Отмена
Сохранить