Properly typecheck tests.app (#14984

This commit is contained in:
David Robertson 2023-02-03 19:22:40 +00:00 committed by GitHub
parent f0cae26d58
commit e301ee6189
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
5 changed files with 29 additions and 15 deletions

1
changelog.d/14984.misc Normal file
View file

@ -0,0 +1 @@
Improve type hints.

View file

@ -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

View file

@ -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

View file

@ -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.

View file

@ -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.