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

Commit

Permalink
Solidify the HomeServer constructor. (#8515)
Browse files Browse the repository at this point in the history
This implements a more standard API for instantiating a homeserver and
moves some of the dependency injection into the test suite.

More concretely this stops using `setattr` on all `kwargs` passed to `HomeServer`.
  • Loading branch information
ShadowJonathan authored Oct 15, 2020
1 parent c276bd9 commit 6b5a115
Show file tree
Hide file tree
Showing 7 changed files with 33 additions and 25 deletions.
1 change: 1 addition & 0 deletions changelog.d/8515.misc
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
Apply some internal fixes to the `HomeServer` class to make its code more idiomatic and statically-verifiable.
14 changes: 9 additions & 5 deletions synapse/server.py
Original file line number Diff line number Diff line change
Expand Up @@ -205,7 +205,13 @@ class HomeServer(metaclass=abc.ABCMeta):
# instantiated during setup() for future return by get_datastore()
DATASTORE_CLASS = abc.abstractproperty()

def __init__(self, hostname: str, config: HomeServerConfig, reactor=None, **kwargs):
def __init__(
self,
hostname: str,
config: HomeServerConfig,
reactor=None,
version_string="Synapse",
):
"""
Args:
hostname : The hostname for the server.
Expand Down Expand Up @@ -236,11 +242,9 @@ def __init__(self, hostname: str, config: HomeServerConfig, reactor=None, **kwar
burst_count=config.rc_registration.burst_count,
)

self.datastores = None # type: Optional[Databases]
self.version_string = version_string

# Other kwargs are explicit dependencies
for depname in kwargs:
setattr(self, depname, kwargs[depname])
self.datastores = None # type: Optional[Databases]

def get_instance_id(self) -> str:
"""A unique ID for this synapse process instance.
Expand Down
2 changes: 1 addition & 1 deletion tests/app/test_frontend_proxy.py
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@ class FrontendProxyTests(HomeserverTestCase):
def make_homeserver(self, reactor, clock):

hs = self.setup_test_homeserver(
http_client=None, homeserverToUse=GenericWorkerServer
http_client=None, homeserver_to_use=GenericWorkerServer
)

return hs
Expand Down
4 changes: 2 additions & 2 deletions tests/app/test_openid_listener.py
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@
class FederationReaderOpenIDListenerTests(HomeserverTestCase):
def make_homeserver(self, reactor, clock):
hs = self.setup_test_homeserver(
http_client=None, homeserverToUse=GenericWorkerServer
http_client=None, homeserver_to_use=GenericWorkerServer
)
return hs

Expand Down Expand Up @@ -84,7 +84,7 @@ def test_openid_listener(self, names, expectation):
class SynapseHomeserverOpenIDListenerTests(HomeserverTestCase):
def make_homeserver(self, reactor, clock):
hs = self.setup_test_homeserver(
http_client=None, homeserverToUse=SynapseHomeServer
http_client=None, homeserver_to_use=SynapseHomeServer
)
return hs

Expand Down
4 changes: 2 additions & 2 deletions tests/replication/_base.py
Original file line number Diff line number Diff line change
Expand Up @@ -59,7 +59,7 @@ def prepare(self, reactor, clock, hs):
self.reactor.lookups["testserv"] = "1.2.3.4"
self.worker_hs = self.setup_test_homeserver(
http_client=None,
homeserverToUse=GenericWorkerServer,
homeserver_to_use=GenericWorkerServer,
config=self._get_worker_hs_config(),
reactor=self.reactor,
)
Expand Down Expand Up @@ -266,7 +266,7 @@ def make_worker_hs(
config.update(extra_config)

worker_hs = self.setup_test_homeserver(
homeserverToUse=GenericWorkerServer,
homeserver_to_use=GenericWorkerServer,
config=config,
reactor=self.reactor,
**kwargs
Expand Down
2 changes: 1 addition & 1 deletion tests/replication/test_federation_ack.py
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,7 @@ def default_config(self) -> dict:
return config

def make_homeserver(self, reactor, clock):
hs = self.setup_test_homeserver(homeserverToUse=GenericWorkerServer)
hs = self.setup_test_homeserver(homeserver_to_use=GenericWorkerServer)

return hs

Expand Down
31 changes: 17 additions & 14 deletions tests/utils.py
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@
import uuid
import warnings
from inspect import getcallargs
from typing import Type
from urllib import parse as urlparse

from mock import Mock, patch
Expand Down Expand Up @@ -194,8 +195,8 @@ def setup_test_homeserver(
name="test",
config=None,
reactor=None,
homeserverToUse=TestHomeServer,
**kargs
homeserver_to_use: Type[HomeServer] = TestHomeServer,
**kwargs
):
"""
Setup a homeserver suitable for running tests against. Keyword arguments
Expand All @@ -218,8 +219,8 @@ def setup_test_homeserver(

config.ldap_enabled = False

if "clock" not in kargs:
kargs["clock"] = MockClock()
if "clock" not in kwargs:
kwargs["clock"] = MockClock()

if USE_POSTGRES_FOR_TESTS:
test_db = "synapse_test_%s" % uuid.uuid4().hex
Expand Down Expand Up @@ -264,18 +265,20 @@ def setup_test_homeserver(
cur.close()
db_conn.close()

hs = homeserverToUse(
name,
config=config,
version_string="Synapse/tests",
tls_server_context_factory=Mock(),
tls_client_options_factory=Mock(),
reactor=reactor,
**kargs
hs = homeserver_to_use(
name, config=config, version_string="Synapse/tests", reactor=reactor,
)

# Install @cache_in_self attributes
for key, val in kwargs.items():
setattr(hs, key, val)

# Mock TLS
hs.tls_server_context_factory = Mock()
hs.tls_client_options_factory = Mock()

hs.setup()
if homeserverToUse.__name__ == "TestHomeServer":
if homeserver_to_use == TestHomeServer:
hs.setup_background_tasks()

if isinstance(db_engine, PostgresEngine):
Expand Down Expand Up @@ -339,7 +342,7 @@ async def validate_hash(p, h):

hs.get_auth_handler().validate_hash = validate_hash

fed = kargs.get("resource_for_federation", None)
fed = kwargs.get("resource_for_federation", None)
if fed:
register_federation_servlets(hs, fed)

Expand Down

0 comments on commit 6b5a115

Please sign in to comment.