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

Use a regular HomeServerConfig object for unit tests #4889

Merged
merged 8 commits into from Mar 19, 2019
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
2 changes: 2 additions & 0 deletions changelog.d/4888.bugfix
@@ -0,0 +1,2 @@
Fix a bug where hs_disabled_message was sometimes not correctly enforced.

1 change: 1 addition & 0 deletions changelog.d/4889.misc
@@ -0,0 +1 @@
Use a regular HomeServerConfig object for unit tests rater than a Mock.
8 changes: 5 additions & 3 deletions synapse/api/auth.py
Expand Up @@ -788,9 +788,11 @@ def check_auth_blocking(self, user_id=None, threepid=None):

# Never fail an auth check for the server notices users or support user
# This can be a problem where event creation is prohibited due to blocking
is_support = yield self.store.is_support_user(user_id)
if user_id == self.hs.config.server_notices_mxid or is_support:
return
if user_id is not None:
if user_id == self.hs.config.server_notices_mxid:
return
if (yield self.store.is_support_user(user_id)):
return

if self.hs.config.hs_disabled:
raise ResourceLimitError(
Expand Down
5 changes: 4 additions & 1 deletion synapse/config/_base.py
Expand Up @@ -405,7 +405,10 @@ def read_config_files(self, config_files, keys_directory=None, generate_keys=Fal
self.invoke_all("generate_files", config)
return

self.invoke_all("read_config", config)
self.parse_config_dict(config)

def parse_config_dict(self, config_dict):
self.invoke_all("read_config", config_dict)


def find_config_files(search_paths):
Expand Down
7 changes: 6 additions & 1 deletion synapse/config/key.py
Expand Up @@ -38,7 +38,12 @@
class KeyConfig(Config):

def read_config(self, config):
self.signing_key = self.read_signing_key(config["signing_key_path"])
# the signing key can be specified inline or in a separate file
if "signing_key" in config:
self.signing_key = read_signing_keys([config["signing_key"]])
else:
self.signing_key = self.read_signing_key(config["signing_key_path"])

self.old_signing_keys = self.read_old_signing_keys(
config.get("old_signing_keys", {})
)
Expand Down
17 changes: 17 additions & 0 deletions tests/api/test_auth.py
Expand Up @@ -344,6 +344,23 @@ def test_hs_disabled(self):
self.assertEquals(e.exception.errcode, Codes.RESOURCE_LIMIT_EXCEEDED)
self.assertEquals(e.exception.code, 403)

@defer.inlineCallbacks
def test_hs_disabled_no_server_notices_user(self):
"""Check that 'hs_disabled_message' works correctly when there is no
server_notices user.
"""
# this should be the default, but we had a bug where the test was doing the wrong
# thing, so let's make it explicit
self.hs.config.server_notices_mxid = None

self.hs.config.hs_disabled = True
self.hs.config.hs_disabled_message = "Reason for being disabled"
with self.assertRaises(ResourceLimitError) as e:
yield self.auth.check_auth_blocking()
self.assertEquals(e.exception.admin_contact, self.hs.config.admin_contact)
self.assertEquals(e.exception.errcode, Codes.RESOURCE_LIMIT_EXCEEDED)
self.assertEquals(e.exception.code, 403)

@defer.inlineCallbacks
def test_server_notices_mxid_special_cased(self):
self.hs.config.hs_disabled = True
Expand Down
11 changes: 9 additions & 2 deletions tests/handlers/test_register.py
Expand Up @@ -22,7 +22,7 @@
from synapse.handlers.register import RegistrationHandler
from synapse.types import RoomAlias, UserID, create_requester

from tests.utils import setup_test_homeserver
from tests.utils import default_config, setup_test_homeserver

from .. import unittest

Expand All @@ -40,8 +40,16 @@ def setUp(self):
self.mock_distributor = Mock()
self.mock_distributor.declare("registered_user")
self.mock_captcha_client = Mock()

hs_config = default_config("test")

# some of the tests rely on us having a user consent version
hs_config.user_consent_version = "test_consent_version"
hs_config.max_mau_value = 50

self.hs = yield setup_test_homeserver(
self.addCleanup,
config=hs_config,
expire_access_token=True,
)
self.macaroon_generator = Mock(
Expand All @@ -50,7 +58,6 @@ def setUp(self):
self.hs.get_macaroon_generator = Mock(return_value=self.macaroon_generator)
self.handler = self.hs.get_registration_handler()
self.store = self.hs.get_datastore()
self.hs.config.max_mau_value = 50
self.lots_of_users = 100
self.small_number_of_users = 1

Expand Down
2 changes: 2 additions & 0 deletions tests/push/test_email.py
Expand Up @@ -63,8 +63,10 @@ def sendmail(*args, **kwargs):
config.email_smtp_port = 20
config.require_transport_security = False
config.email_smtp_user = None
config.email_smtp_pass = None
config.email_app_name = "Matrix"
config.email_notif_from = "test@example.com"
config.email_riot_base_url = None

hs = self.setup_test_homeserver(config=config, sendmail=sendmail)

Expand Down
3 changes: 2 additions & 1 deletion tests/rest/client/v2_alpha/test_register.py
Expand Up @@ -20,6 +20,7 @@ def make_homeserver(self, reactor, clock):
self.hs.config.registrations_require_3pid = []
self.hs.config.auto_join_rooms = []
self.hs.config.enable_registration_captcha = False
self.hs.config.allow_guest_access = True

return self.hs

Expand All @@ -28,7 +29,7 @@ def test_POST_appservice_registration_valid(self):
as_token = "i_am_an_app_service"

appservice = ApplicationService(
as_token, self.hs.config.hostname,
as_token, self.hs.config.server_name,
id="1234",
namespaces={
"users": [{"regex": r"@as_user.*", "exclusive": True}],
Expand Down
7 changes: 5 additions & 2 deletions tests/server_notices/test_resource_limits_server_notices.py
Expand Up @@ -9,13 +9,16 @@
)

from tests import unittest
from tests.utils import setup_test_homeserver
from tests.utils import default_config, setup_test_homeserver


class TestResourceLimitsServerNotices(unittest.TestCase):
@defer.inlineCallbacks
def setUp(self):
self.hs = yield setup_test_homeserver(self.addCleanup)
hs_config = default_config(name="test")
hs_config.server_notices_mxid = "@server:test"

self.hs = yield setup_test_homeserver(self.addCleanup, config=hs_config)
self.server_notices_sender = self.hs.get_server_notices_sender()

# relying on [1] is far from ideal, but the only case where
Expand Down
26 changes: 15 additions & 11 deletions tests/utils.py
Expand Up @@ -28,7 +28,7 @@

from synapse.api.constants import EventTypes, RoomVersions
from synapse.api.errors import CodeMessageException, cs_error
from synapse.config.server import ServerConfig
from synapse.config.homeserver import HomeServerConfig
from synapse.federation.transport import server as federation_server
from synapse.http.server import HttpServer
from synapse.server import HomeServer
Expand Down Expand Up @@ -111,14 +111,25 @@ def default_config(name):
"""
Create a reasonable test config.
"""
config = Mock()
config.signing_key = [MockKey()]
config_dict = {
"server_name": name,
"media_store_path": "media",
"uploads_path": "uploads",

# the test signing key is just an arbitrary ed25519 key to keep the config
# parser happy
"signing_key": "ed25519 a_lPym qvioDNmfExFBRPgdTU+wtFYKq4JfwFRv7sYVgWvmgJg",
}

config = HomeServerConfig()
config.parse_config_dict(config_dict)

# TODO: move this stuff into config_dict or get rid of it
config.event_cache_size = 1
config.enable_registration = True
config.enable_registration_captcha = False
config.macaroon_secret_key = "not even a little secret"
config.expire_access_token = False
config.server_name = name
config.trusted_third_party_id_servers = []
config.room_invite_state_types = []
config.password_providers = []
Expand Down Expand Up @@ -176,13 +187,6 @@ def default_config(name):
# background, which upsets the test runner.
config.update_user_directory = False

def is_threepid_reserved(threepid):
return ServerConfig.is_threepid_reserved(
config.mau_limits_reserved_threepids, threepid
)

config.is_threepid_reserved.side_effect = is_threepid_reserved

return config


Expand Down