mirror of
https://mau.dev/maunium/synapse.git
synced 2024-12-13 21:43:22 +01:00
Properly typecheck tests.app (#14984
This commit is contained in:
parent
f0cae26d58
commit
e301ee6189
5 changed files with 29 additions and 15 deletions
1
changelog.d/14984.misc
Normal file
1
changelog.d/14984.misc
Normal file
|
@ -0,0 +1 @@
|
||||||
|
Improve type hints.
|
4
mypy.ini
4
mypy.ini
|
@ -33,7 +33,6 @@ exclude = (?x)
|
||||||
|synapse/storage/schema/
|
|synapse/storage/schema/
|
||||||
|
|
||||||
|tests/api/test_auth.py
|
|tests/api/test_auth.py
|
||||||
|tests/app/test_openid_listener.py
|
|
||||||
|tests/appservice/test_scheduler.py
|
|tests/appservice/test_scheduler.py
|
||||||
|tests/federation/test_federation_catch_up.py
|
|tests/federation/test_federation_catch_up.py
|
||||||
|tests/federation/test_federation_sender.py
|
|tests/federation/test_federation_sender.py
|
||||||
|
@ -74,6 +73,9 @@ disallow_untyped_defs = False
|
||||||
[mypy-tests.*]
|
[mypy-tests.*]
|
||||||
disallow_untyped_defs = False
|
disallow_untyped_defs = False
|
||||||
|
|
||||||
|
[mypy-tests.app.*]
|
||||||
|
disallow_untyped_defs = True
|
||||||
|
|
||||||
[mypy-tests.config.*]
|
[mypy-tests.config.*]
|
||||||
disallow_untyped_defs = True
|
disallow_untyped_defs = True
|
||||||
|
|
||||||
|
|
|
@ -19,7 +19,7 @@ from tests.config.utils import ConfigFileTestCase
|
||||||
|
|
||||||
|
|
||||||
class HomeserverAppStartTestCase(ConfigFileTestCase):
|
class HomeserverAppStartTestCase(ConfigFileTestCase):
|
||||||
def test_wrong_start_caught(self):
|
def test_wrong_start_caught(self) -> None:
|
||||||
# Generate a config with a worker_app
|
# Generate a config with a worker_app
|
||||||
self.generate_config()
|
self.generate_config()
|
||||||
# Add a blank line as otherwise the next addition ends up on a line with a comment
|
# Add a blank line as otherwise the next addition ends up on a line with a comment
|
||||||
|
|
|
@ -11,26 +11,32 @@
|
||||||
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
# See the License for the specific language governing permissions and
|
# See the License for the specific language governing permissions and
|
||||||
# limitations under the License.
|
# limitations under the License.
|
||||||
|
from typing import List
|
||||||
from unittest.mock import Mock, patch
|
from unittest.mock import Mock, patch
|
||||||
|
|
||||||
from parameterized import parameterized
|
from parameterized import parameterized
|
||||||
|
|
||||||
|
from twisted.test.proto_helpers import MemoryReactor
|
||||||
|
|
||||||
from synapse.app.generic_worker import GenericWorkerServer
|
from synapse.app.generic_worker import GenericWorkerServer
|
||||||
from synapse.app.homeserver import SynapseHomeServer
|
from synapse.app.homeserver import SynapseHomeServer
|
||||||
from synapse.config.server import parse_listener_def
|
from synapse.config.server import parse_listener_def
|
||||||
|
from synapse.server import HomeServer
|
||||||
|
from synapse.types import JsonDict
|
||||||
|
from synapse.util import Clock
|
||||||
|
|
||||||
from tests.server import make_request
|
from tests.server import make_request
|
||||||
from tests.unittest import HomeserverTestCase
|
from tests.unittest import HomeserverTestCase
|
||||||
|
|
||||||
|
|
||||||
class FederationReaderOpenIDListenerTests(HomeserverTestCase):
|
class FederationReaderOpenIDListenerTests(HomeserverTestCase):
|
||||||
def make_homeserver(self, reactor, clock):
|
def make_homeserver(self, reactor: MemoryReactor, clock: Clock) -> HomeServer:
|
||||||
hs = self.setup_test_homeserver(
|
hs = self.setup_test_homeserver(
|
||||||
federation_http_client=None, homeserver_to_use=GenericWorkerServer
|
federation_http_client=None, homeserver_to_use=GenericWorkerServer
|
||||||
)
|
)
|
||||||
return hs
|
return hs
|
||||||
|
|
||||||
def default_config(self):
|
def default_config(self) -> JsonDict:
|
||||||
conf = super().default_config()
|
conf = super().default_config()
|
||||||
# we're using FederationReaderServer, which uses a SlavedStore, so we
|
# we're using FederationReaderServer, which uses a SlavedStore, so we
|
||||||
# have to tell the FederationHandler not to try to access stuff that is only
|
# have to tell the FederationHandler not to try to access stuff that is only
|
||||||
|
@ -47,7 +53,7 @@ class FederationReaderOpenIDListenerTests(HomeserverTestCase):
|
||||||
(["openid"], "auth_fail"),
|
(["openid"], "auth_fail"),
|
||||||
]
|
]
|
||||||
)
|
)
|
||||||
def test_openid_listener(self, names, expectation):
|
def test_openid_listener(self, names: List[str], expectation: str) -> None:
|
||||||
"""
|
"""
|
||||||
Test different openid listener configurations.
|
Test different openid listener configurations.
|
||||||
|
|
||||||
|
@ -81,7 +87,7 @@ class FederationReaderOpenIDListenerTests(HomeserverTestCase):
|
||||||
|
|
||||||
@patch("synapse.app.homeserver.KeyResource", new=Mock())
|
@patch("synapse.app.homeserver.KeyResource", new=Mock())
|
||||||
class SynapseHomeserverOpenIDListenerTests(HomeserverTestCase):
|
class SynapseHomeserverOpenIDListenerTests(HomeserverTestCase):
|
||||||
def make_homeserver(self, reactor, clock):
|
def make_homeserver(self, reactor: MemoryReactor, clock: Clock) -> HomeServer:
|
||||||
hs = self.setup_test_homeserver(
|
hs = self.setup_test_homeserver(
|
||||||
federation_http_client=None, homeserver_to_use=SynapseHomeServer
|
federation_http_client=None, homeserver_to_use=SynapseHomeServer
|
||||||
)
|
)
|
||||||
|
@ -95,7 +101,7 @@ class SynapseHomeserverOpenIDListenerTests(HomeserverTestCase):
|
||||||
(["openid"], "auth_fail"),
|
(["openid"], "auth_fail"),
|
||||||
]
|
]
|
||||||
)
|
)
|
||||||
def test_openid_listener(self, names, expectation):
|
def test_openid_listener(self, names: List[str], expectation: str) -> None:
|
||||||
"""
|
"""
|
||||||
Test different openid listener configurations.
|
Test different openid listener configurations.
|
||||||
|
|
||||||
|
|
|
@ -1,8 +1,11 @@
|
||||||
import synapse
|
import synapse
|
||||||
from synapse.app.phone_stats_home import start_phone_stats_home
|
from synapse.app.phone_stats_home import start_phone_stats_home
|
||||||
from synapse.rest.client import login, room
|
from synapse.rest.client import login, room
|
||||||
|
from synapse.server import HomeServer
|
||||||
|
from synapse.util import Clock
|
||||||
|
|
||||||
from tests import unittest
|
from tests import unittest
|
||||||
|
from tests.server import ThreadedMemoryReactorClock
|
||||||
from tests.unittest import HomeserverTestCase
|
from tests.unittest import HomeserverTestCase
|
||||||
|
|
||||||
FIVE_MINUTES_IN_SECONDS = 300
|
FIVE_MINUTES_IN_SECONDS = 300
|
||||||
|
@ -19,7 +22,7 @@ class PhoneHomeTestCase(HomeserverTestCase):
|
||||||
# Override the retention time for the user_ips table because otherwise it
|
# Override the retention time for the user_ips table because otherwise it
|
||||||
# gets pruned too aggressively for our R30 test.
|
# gets pruned too aggressively for our R30 test.
|
||||||
@unittest.override_config({"user_ips_max_age": "365d"})
|
@unittest.override_config({"user_ips_max_age": "365d"})
|
||||||
def test_r30_minimum_usage(self):
|
def test_r30_minimum_usage(self) -> None:
|
||||||
"""
|
"""
|
||||||
Tests the minimum amount of interaction necessary for the R30 metric
|
Tests the minimum amount of interaction necessary for the R30 metric
|
||||||
to consider a user 'retained'.
|
to consider a user 'retained'.
|
||||||
|
@ -68,7 +71,7 @@ class PhoneHomeTestCase(HomeserverTestCase):
|
||||||
r30_results = self.get_success(self.hs.get_datastores().main.count_r30_users())
|
r30_results = self.get_success(self.hs.get_datastores().main.count_r30_users())
|
||||||
self.assertEqual(r30_results, {"all": 0})
|
self.assertEqual(r30_results, {"all": 0})
|
||||||
|
|
||||||
def test_r30_minimum_usage_using_default_config(self):
|
def test_r30_minimum_usage_using_default_config(self) -> None:
|
||||||
"""
|
"""
|
||||||
Tests the minimum amount of interaction necessary for the R30 metric
|
Tests the minimum amount of interaction necessary for the R30 metric
|
||||||
to consider a user 'retained'.
|
to consider a user 'retained'.
|
||||||
|
@ -122,7 +125,7 @@ class PhoneHomeTestCase(HomeserverTestCase):
|
||||||
r30_results = self.get_success(self.hs.get_datastores().main.count_r30_users())
|
r30_results = self.get_success(self.hs.get_datastores().main.count_r30_users())
|
||||||
self.assertEqual(r30_results, {"all": 0})
|
self.assertEqual(r30_results, {"all": 0})
|
||||||
|
|
||||||
def test_r30_user_must_be_retained_for_at_least_a_month(self):
|
def test_r30_user_must_be_retained_for_at_least_a_month(self) -> None:
|
||||||
"""
|
"""
|
||||||
Tests that a newly-registered user must be retained for a whole month
|
Tests that a newly-registered user must be retained for a whole month
|
||||||
before appearing in the R30 statistic, even if they post every day
|
before appearing in the R30 statistic, even if they post every day
|
||||||
|
@ -164,12 +167,14 @@ class PhoneHomeR30V2TestCase(HomeserverTestCase):
|
||||||
login.register_servlets,
|
login.register_servlets,
|
||||||
]
|
]
|
||||||
|
|
||||||
def _advance_to(self, desired_time_secs: float):
|
def _advance_to(self, desired_time_secs: float) -> None:
|
||||||
now = self.hs.get_clock().time()
|
now = self.hs.get_clock().time()
|
||||||
assert now < desired_time_secs
|
assert now < desired_time_secs
|
||||||
self.reactor.advance(desired_time_secs - now)
|
self.reactor.advance(desired_time_secs - now)
|
||||||
|
|
||||||
def make_homeserver(self, reactor, clock):
|
def make_homeserver(
|
||||||
|
self, reactor: ThreadedMemoryReactorClock, clock: Clock
|
||||||
|
) -> HomeServer:
|
||||||
hs = super(PhoneHomeR30V2TestCase, self).make_homeserver(reactor, clock)
|
hs = super(PhoneHomeR30V2TestCase, self).make_homeserver(reactor, clock)
|
||||||
|
|
||||||
# We don't want our tests to actually report statistics, so check
|
# We don't want our tests to actually report statistics, so check
|
||||||
|
@ -181,7 +186,7 @@ class PhoneHomeR30V2TestCase(HomeserverTestCase):
|
||||||
start_phone_stats_home(hs)
|
start_phone_stats_home(hs)
|
||||||
return hs
|
return hs
|
||||||
|
|
||||||
def test_r30v2_minimum_usage(self):
|
def test_r30v2_minimum_usage(self) -> None:
|
||||||
"""
|
"""
|
||||||
Tests the minimum amount of interaction necessary for the R30v2 metric
|
Tests the minimum amount of interaction necessary for the R30v2 metric
|
||||||
to consider a user 'retained'.
|
to consider a user 'retained'.
|
||||||
|
@ -250,7 +255,7 @@ class PhoneHomeR30V2TestCase(HomeserverTestCase):
|
||||||
r30_results, {"all": 0, "android": 0, "electron": 0, "ios": 0, "web": 0}
|
r30_results, {"all": 0, "android": 0, "electron": 0, "ios": 0, "web": 0}
|
||||||
)
|
)
|
||||||
|
|
||||||
def test_r30v2_user_must_be_retained_for_at_least_a_month(self):
|
def test_r30v2_user_must_be_retained_for_at_least_a_month(self) -> None:
|
||||||
"""
|
"""
|
||||||
Tests that a newly-registered user must be retained for a whole month
|
Tests that a newly-registered user must be retained for a whole month
|
||||||
before appearing in the R30v2 statistic, even if they post every day
|
before appearing in the R30v2 statistic, even if they post every day
|
||||||
|
@ -316,7 +321,7 @@ class PhoneHomeR30V2TestCase(HomeserverTestCase):
|
||||||
r30_results, {"all": 1, "android": 1, "electron": 0, "ios": 0, "web": 0}
|
r30_results, {"all": 1, "android": 1, "electron": 0, "ios": 0, "web": 0}
|
||||||
)
|
)
|
||||||
|
|
||||||
def test_r30v2_returning_dormant_users_not_counted(self):
|
def test_r30v2_returning_dormant_users_not_counted(self) -> None:
|
||||||
"""
|
"""
|
||||||
Tests that dormant users (users inactive for a long time) do not
|
Tests that dormant users (users inactive for a long time) do not
|
||||||
contribute to R30v2 when they return for just a single day.
|
contribute to R30v2 when they return for just a single day.
|
||||||
|
|
Loading…
Reference in a new issue