diff --git a/tests/api/test_auth.py b/tests/api/test_auth.py
index 4575dd9834..f65a27e5f1 100644
--- a/tests/api/test_auth.py
+++ b/tests/api/test_auth.py
@@ -13,16 +13,19 @@
# See the License for the specific language governing permissions and
# limitations under the License.
-import pymacaroons
from mock import Mock
+
+import pymacaroons
+
from twisted.internet import defer
import synapse.handlers.auth
from synapse.api.auth import Auth
-from synapse.api.errors import AuthError
+from synapse.api.errors import AuthError, Codes, ResourceLimitError
from synapse.types import UserID
+
from tests import unittest
-from tests.utils import setup_test_homeserver, mock_getRawHeaders
+from tests.utils import mock_getRawHeaders, setup_test_homeserver
class TestHandlers(object):
@@ -31,34 +34,29 @@ class TestHandlers(object):
class AuthTestCase(unittest.TestCase):
-
@defer.inlineCallbacks
def setUp(self):
self.state_handler = Mock()
self.store = Mock()
- self.hs = yield setup_test_homeserver(handlers=None)
+ self.hs = yield setup_test_homeserver(self.addCleanup, handlers=None)
self.hs.get_datastore = Mock(return_value=self.store)
self.hs.handlers = TestHandlers(self.hs)
self.auth = Auth(self.hs)
self.test_user = "@foo:bar"
- self.test_token = "_test_token_"
+ self.test_token = b"_test_token_"
# this is overridden for the appservice tests
self.store.get_app_service_by_token = Mock(return_value=None)
@defer.inlineCallbacks
def test_get_user_by_req_user_valid_token(self):
- user_info = {
- "name": self.test_user,
- "token_id": "ditto",
- "device_id": "device",
- }
+ user_info = {"name": self.test_user, "token_id": "ditto", "device_id": "device"}
self.store.get_user_by_access_token = Mock(return_value=user_info)
request = Mock(args={})
- request.args["access_token"] = [self.test_token]
+ request.args[b"access_token"] = [self.test_token]
request.requestHeaders.getRawHeaders = mock_getRawHeaders()
requester = yield self.auth.get_user_by_req(request)
self.assertEquals(requester.user.to_string(), self.test_user)
@@ -67,16 +65,13 @@ class AuthTestCase(unittest.TestCase):
self.store.get_user_by_access_token = Mock(return_value=None)
request = Mock(args={})
- request.args["access_token"] = [self.test_token]
+ request.args[b"access_token"] = [self.test_token]
request.requestHeaders.getRawHeaders = mock_getRawHeaders()
d = self.auth.get_user_by_req(request)
self.failureResultOf(d, AuthError)
def test_get_user_by_req_user_missing_token(self):
- user_info = {
- "name": self.test_user,
- "token_id": "ditto",
- }
+ user_info = {"name": self.test_user, "token_id": "ditto"}
self.store.get_user_by_access_token = Mock(return_value=user_info)
request = Mock(args={})
@@ -86,22 +81,64 @@ class AuthTestCase(unittest.TestCase):
@defer.inlineCallbacks
def test_get_user_by_req_appservice_valid_token(self):
- app_service = Mock(token="foobar", url="a_url", sender=self.test_user)
+ app_service = Mock(
+ token="foobar", url="a_url", sender=self.test_user, ip_range_whitelist=None
+ )
self.store.get_app_service_by_token = Mock(return_value=app_service)
self.store.get_user_by_access_token = Mock(return_value=None)
request = Mock(args={})
- request.args["access_token"] = [self.test_token]
+ request.getClientIP.return_value = "127.0.0.1"
+ request.args[b"access_token"] = [self.test_token]
request.requestHeaders.getRawHeaders = mock_getRawHeaders()
requester = yield self.auth.get_user_by_req(request)
self.assertEquals(requester.user.to_string(), self.test_user)
+ @defer.inlineCallbacks
+ def test_get_user_by_req_appservice_valid_token_good_ip(self):
+ from netaddr import IPSet
+
+ app_service = Mock(
+ token="foobar",
+ url="a_url",
+ sender=self.test_user,
+ ip_range_whitelist=IPSet(["192.168/16"]),
+ )
+ self.store.get_app_service_by_token = Mock(return_value=app_service)
+ self.store.get_user_by_access_token = Mock(return_value=None)
+
+ request = Mock(args={})
+ request.getClientIP.return_value = "192.168.10.10"
+ request.args[b"access_token"] = [self.test_token]
+ request.requestHeaders.getRawHeaders = mock_getRawHeaders()
+ requester = yield self.auth.get_user_by_req(request)
+ self.assertEquals(requester.user.to_string(), self.test_user)
+
+ def test_get_user_by_req_appservice_valid_token_bad_ip(self):
+ from netaddr import IPSet
+
+ app_service = Mock(
+ token="foobar",
+ url="a_url",
+ sender=self.test_user,
+ ip_range_whitelist=IPSet(["192.168/16"]),
+ )
+ self.store.get_app_service_by_token = Mock(return_value=app_service)
+ self.store.get_user_by_access_token = Mock(return_value=None)
+
+ request = Mock(args={})
+ request.getClientIP.return_value = "131.111.8.42"
+ request.args[b"access_token"] = [self.test_token]
+ request.requestHeaders.getRawHeaders = mock_getRawHeaders()
+ d = self.auth.get_user_by_req(request)
+ self.failureResultOf(d, AuthError)
+
def test_get_user_by_req_appservice_bad_token(self):
self.store.get_app_service_by_token = Mock(return_value=None)
self.store.get_user_by_access_token = Mock(return_value=None)
request = Mock(args={})
- request.args["access_token"] = [self.test_token]
+ request.args[b"access_token"] = [self.test_token]
request.requestHeaders.getRawHeaders = mock_getRawHeaders()
d = self.auth.get_user_by_req(request)
self.failureResultOf(d, AuthError)
@@ -118,29 +155,37 @@ class AuthTestCase(unittest.TestCase):
@defer.inlineCallbacks
def test_get_user_by_req_appservice_valid_token_valid_user_id(self):
- masquerading_user_id = "@doppelganger:matrix.org"
- app_service = Mock(token="foobar", url="a_url", sender=self.test_user)
+ masquerading_user_id = b"@doppelganger:matrix.org"
+ app_service = Mock(
+ token="foobar", url="a_url", sender=self.test_user, ip_range_whitelist=None
+ )
app_service.is_interested_in_user = Mock(return_value=True)
self.store.get_app_service_by_token = Mock(return_value=app_service)
self.store.get_user_by_access_token = Mock(return_value=None)
request = Mock(args={})
- request.args["access_token"] = [self.test_token]
- request.args["user_id"] = [masquerading_user_id]
+ request.getClientIP.return_value = "127.0.0.1"
+ request.args[b"access_token"] = [self.test_token]
+ request.args[b"user_id"] = [masquerading_user_id]
request.requestHeaders.getRawHeaders = mock_getRawHeaders()
requester = yield self.auth.get_user_by_req(request)
- self.assertEquals(requester.user.to_string(), masquerading_user_id)
+ self.assertEquals(
+ requester.user.to_string(), masquerading_user_id.decode('utf8')
+ )
def test_get_user_by_req_appservice_valid_token_bad_user_id(self):
- masquerading_user_id = "@doppelganger:matrix.org"
- app_service = Mock(token="foobar", url="a_url", sender=self.test_user)
+ masquerading_user_id = b"@doppelganger:matrix.org"
+ app_service = Mock(
+ token="foobar", url="a_url", sender=self.test_user, ip_range_whitelist=None
+ )
app_service.is_interested_in_user = Mock(return_value=False)
self.store.get_app_service_by_token = Mock(return_value=app_service)
self.store.get_user_by_access_token = Mock(return_value=None)
request = Mock(args={})
- request.args["access_token"] = [self.test_token]
- request.args["user_id"] = [masquerading_user_id]
+ request.getClientIP.return_value = "127.0.0.1"
+ request.args[b"access_token"] = [self.test_token]
+ request.args[b"user_id"] = [masquerading_user_id]
request.requestHeaders.getRawHeaders = mock_getRawHeaders()
d = self.auth.get_user_by_req(request)
self.failureResultOf(d, AuthError)
@@ -150,17 +195,15 @@ class AuthTestCase(unittest.TestCase):
# TODO(danielwh): Remove this mock when we remove the
# get_user_by_access_token fallback.
self.store.get_user_by_access_token = Mock(
- return_value={
- "name": "@baldrick:matrix.org",
- "device_id": "device",
- }
+ return_value={"name": "@baldrick:matrix.org", "device_id": "device"}
)
user_id = "@baldrick:matrix.org"
macaroon = pymacaroons.Macaroon(
location=self.hs.config.server_name,
identifier="key",
- key=self.hs.config.macaroon_secret_key)
+ key=self.hs.config.macaroon_secret_key,
+ )
macaroon.add_first_party_caveat("gen = 1")
macaroon.add_first_party_caveat("type = access")
macaroon.add_first_party_caveat("user_id = %s" % (user_id,))
@@ -174,15 +217,14 @@ class AuthTestCase(unittest.TestCase):
@defer.inlineCallbacks
def test_get_guest_user_from_macaroon(self):
- self.store.get_user_by_id = Mock(return_value={
- "is_guest": True,
- })
+ self.store.get_user_by_id = Mock(return_value={"is_guest": True})
user_id = "@baldrick:matrix.org"
macaroon = pymacaroons.Macaroon(
location=self.hs.config.server_name,
identifier="key",
- key=self.hs.config.macaroon_secret_key)
+ key=self.hs.config.macaroon_secret_key,
+ )
macaroon.add_first_party_caveat("gen = 1")
macaroon.add_first_party_caveat("type = access")
macaroon.add_first_party_caveat("user_id = %s" % (user_id,))
@@ -206,7 +248,8 @@ class AuthTestCase(unittest.TestCase):
macaroon = pymacaroons.Macaroon(
location=self.hs.config.server_name,
identifier="key",
- key=self.hs.config.macaroon_secret_key)
+ key=self.hs.config.macaroon_secret_key,
+ )
macaroon.add_first_party_caveat("gen = 1")
macaroon.add_first_party_caveat("type = access")
macaroon.add_first_party_caveat("user_id = %s" % (user,))
@@ -226,7 +269,8 @@ class AuthTestCase(unittest.TestCase):
macaroon = pymacaroons.Macaroon(
location=self.hs.config.server_name,
identifier="key",
- key=self.hs.config.macaroon_secret_key)
+ key=self.hs.config.macaroon_secret_key,
+ )
macaroon.add_first_party_caveat("gen = 1")
macaroon.add_first_party_caveat("type = access")
@@ -247,7 +291,8 @@ class AuthTestCase(unittest.TestCase):
macaroon = pymacaroons.Macaroon(
location=self.hs.config.server_name,
identifier="key",
- key=self.hs.config.macaroon_secret_key + "wrong")
+ key=self.hs.config.macaroon_secret_key + "wrong",
+ )
macaroon.add_first_party_caveat("gen = 1")
macaroon.add_first_party_caveat("type = access")
macaroon.add_first_party_caveat("user_id = %s" % (user,))
@@ -269,7 +314,8 @@ class AuthTestCase(unittest.TestCase):
macaroon = pymacaroons.Macaroon(
location=self.hs.config.server_name,
identifier="key",
- key=self.hs.config.macaroon_secret_key)
+ key=self.hs.config.macaroon_secret_key,
+ )
macaroon.add_first_party_caveat("gen = 1")
macaroon.add_first_party_caveat("type = access")
macaroon.add_first_party_caveat("user_id = %s" % (user,))
@@ -296,7 +342,8 @@ class AuthTestCase(unittest.TestCase):
macaroon = pymacaroons.Macaroon(
location=self.hs.config.server_name,
identifier="key",
- key=self.hs.config.macaroon_secret_key)
+ key=self.hs.config.macaroon_secret_key,
+ )
macaroon.add_first_party_caveat("gen = 1")
macaroon.add_first_party_caveat("type = access")
macaroon.add_first_party_caveat("user_id = %s" % (user,))
@@ -329,7 +376,8 @@ class AuthTestCase(unittest.TestCase):
macaroon = pymacaroons.Macaroon(
location=self.hs.config.server_name,
identifier="key",
- key=self.hs.config.macaroon_secret_key)
+ key=self.hs.config.macaroon_secret_key,
+ )
macaroon.add_first_party_caveat("gen = 1")
macaroon.add_first_party_caveat("type = access")
macaroon.add_first_party_caveat("user_id = %s" % (user_id,))
@@ -350,9 +398,7 @@ class AuthTestCase(unittest.TestCase):
token = yield self.hs.handlers.auth_handler.issue_access_token(
USER_ID, "DEVICE"
)
- self.store.add_access_token_to_user.assert_called_with(
- USER_ID, token, "DEVICE"
- )
+ self.store.add_access_token_to_user.assert_called_with(USER_ID, token, "DEVICE")
def get_user(tok):
if token != tok:
@@ -363,14 +409,13 @@ class AuthTestCase(unittest.TestCase):
"token_id": 1234,
"device_id": "DEVICE",
}
+
self.store.get_user_by_access_token = get_user
- self.store.get_user_by_id = Mock(return_value={
- "is_guest": False,
- })
+ self.store.get_user_by_id = Mock(return_value={"is_guest": False})
# check the token works
request = Mock(args={})
- request.args["access_token"] = [token]
+ request.args[b"access_token"] = [token.encode('ascii')]
request.requestHeaders.getRawHeaders = mock_getRawHeaders()
requester = yield self.auth.get_user_by_req(request, allow_guest=True)
self.assertEqual(UserID.from_string(USER_ID), requester.user)
@@ -383,7 +428,7 @@ class AuthTestCase(unittest.TestCase):
# the token should *not* work now
request = Mock(args={})
- request.args["access_token"] = [guest_tok]
+ request.args[b"access_token"] = [guest_tok.encode('ascii')]
request.requestHeaders.getRawHeaders = mock_getRawHeaders()
with self.assertRaises(AuthError) as cm:
@@ -393,3 +438,66 @@ class AuthTestCase(unittest.TestCase):
self.assertEqual("Guest access token used for regular user", cm.exception.msg)
self.store.get_user_by_id.assert_called_with(USER_ID)
+
+ @defer.inlineCallbacks
+ def test_blocking_mau(self):
+ self.hs.config.limit_usage_by_mau = False
+ self.hs.config.max_mau_value = 50
+ lots_of_users = 100
+ small_number_of_users = 1
+
+ # Ensure no error thrown
+ yield self.auth.check_auth_blocking()
+
+ self.hs.config.limit_usage_by_mau = True
+
+ self.store.get_monthly_active_count = Mock(
+ return_value=defer.succeed(lots_of_users)
+ )
+
+ 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)
+
+ # Ensure does not throw an error
+ self.store.get_monthly_active_count = Mock(
+ return_value=defer.succeed(small_number_of_users)
+ )
+ yield self.auth.check_auth_blocking()
+
+ @defer.inlineCallbacks
+ def test_reserved_threepid(self):
+ self.hs.config.limit_usage_by_mau = True
+ self.hs.config.max_mau_value = 1
+ threepid = {'medium': 'email', 'address': 'reserved@server.com'}
+ unknown_threepid = {'medium': 'email', 'address': 'unreserved@server.com'}
+ self.hs.config.mau_limits_reserved_threepids = [threepid]
+
+ yield self.store.register(user_id='user1', token="123", password_hash=None)
+ with self.assertRaises(ResourceLimitError):
+ yield self.auth.check_auth_blocking()
+
+ with self.assertRaises(ResourceLimitError):
+ yield self.auth.check_auth_blocking(threepid=unknown_threepid)
+
+ yield self.auth.check_auth_blocking(threepid=threepid)
+
+ @defer.inlineCallbacks
+ def test_hs_disabled(self):
+ 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
+ user = "@user:server"
+ self.hs.config.server_notices_mxid = user
+ self.hs.config.hs_disabled_message = "Reason for being disabled"
+ yield self.auth.check_auth_blocking(user)
diff --git a/tests/api/test_filtering.py b/tests/api/test_filtering.py
index dcceca7f3e..48b2d3d663 100644
--- a/tests/api/test_filtering.py
+++ b/tests/api/test_filtering.py
@@ -13,19 +13,18 @@
# See the License for the specific language governing permissions and
# limitations under the License.
-from tests import unittest
-from twisted.internet import defer
-
from mock import Mock
-from tests.utils import (
- MockHttpResource, DeferredMockCallable, setup_test_homeserver
-)
+import jsonschema
+
+from twisted.internet import defer
+
+from synapse.api.errors import SynapseError
from synapse.api.filtering import Filter
from synapse.events import FrozenEvent
-from synapse.api.errors import SynapseError
-import jsonschema
+from tests import unittest
+from tests.utils import DeferredMockCallable, MockHttpResource, setup_test_homeserver
user_localpart = "test_user"
@@ -39,7 +38,6 @@ def MockEvent(**kwargs):
class FilteringTestCase(unittest.TestCase):
-
@defer.inlineCallbacks
def setUp(self):
self.mock_federation_resource = MockHttpResource()
@@ -48,6 +46,7 @@ class FilteringTestCase(unittest.TestCase):
self.mock_http_client.put_json = DeferredMockCallable()
hs = yield setup_test_homeserver(
+ self.addCleanup,
handlers=None,
http_client=self.mock_http_client,
keyring=Mock(),
@@ -65,7 +64,7 @@ class FilteringTestCase(unittest.TestCase):
{"room": {"timeline": {"limit": 0}, "state": {"not_bars": ["*"]}}},
{"event_format": "other"},
{"room": {"not_rooms": ["#foo:pik-test"]}},
- {"presence": {"senders": ["@bar;pik.test.com"]}}
+ {"presence": {"senders": ["@bar;pik.test.com"]}},
]
for filter in invalid_filters:
with self.assertRaises(SynapseError) as check_filter_error:
@@ -82,34 +81,34 @@ class FilteringTestCase(unittest.TestCase):
"include_leave": False,
"rooms": ["!dee:pik-test"],
"not_rooms": ["!gee:pik-test"],
- "account_data": {"limit": 0, "types": ["*"]}
+ "account_data": {"limit": 0, "types": ["*"]},
}
},
{
"room": {
"state": {
"types": ["m.room.*"],
- "not_rooms": ["!726s6s6q:example.com"]
+ "not_rooms": ["!726s6s6q:example.com"],
},
"timeline": {
"limit": 10,
"types": ["m.room.message"],
"not_rooms": ["!726s6s6q:example.com"],
- "not_senders": ["@spam:example.com"]
+ "not_senders": ["@spam:example.com"],
},
"ephemeral": {
"types": ["m.receipt", "m.typing"],
"not_rooms": ["!726s6s6q:example.com"],
- "not_senders": ["@spam:example.com"]
- }
+ "not_senders": ["@spam:example.com"],
+ },
},
"presence": {
"types": ["m.presence"],
- "not_senders": ["@alice:example.com"]
+ "not_senders": ["@alice:example.com"],
},
"event_format": "client",
- "event_fields": ["type", "content", "sender"]
- }
+ "event_fields": ["type", "content", "sender"],
+ },
]
for filter in valid_filters:
try:
@@ -122,229 +121,131 @@ class FilteringTestCase(unittest.TestCase):
pass
def test_definition_types_works_with_literals(self):
- definition = {
- "types": ["m.room.message", "org.matrix.foo.bar"]
- }
- event = MockEvent(
- sender="@foo:bar",
- type="m.room.message",
- room_id="!foo:bar"
- )
+ definition = {"types": ["m.room.message", "org.matrix.foo.bar"]}
+ event = MockEvent(sender="@foo:bar", type="m.room.message", room_id="!foo:bar")
- self.assertTrue(
- Filter(definition).check(event)
- )
+ self.assertTrue(Filter(definition).check(event))
def test_definition_types_works_with_wildcards(self):
- definition = {
- "types": ["m.*", "org.matrix.foo.bar"]
- }
- event = MockEvent(
- sender="@foo:bar",
- type="m.room.message",
- room_id="!foo:bar"
- )
- self.assertTrue(
- Filter(definition).check(event)
- )
+ definition = {"types": ["m.*", "org.matrix.foo.bar"]}
+ event = MockEvent(sender="@foo:bar", type="m.room.message", room_id="!foo:bar")
+ self.assertTrue(Filter(definition).check(event))
def test_definition_types_works_with_unknowns(self):
- definition = {
- "types": ["m.room.message", "org.matrix.foo.bar"]
- }
+ definition = {"types": ["m.room.message", "org.matrix.foo.bar"]}
event = MockEvent(
sender="@foo:bar",
type="now.for.something.completely.different",
- room_id="!foo:bar"
- )
- self.assertFalse(
- Filter(definition).check(event)
+ room_id="!foo:bar",
)
+ self.assertFalse(Filter(definition).check(event))
def test_definition_not_types_works_with_literals(self):
- definition = {
- "not_types": ["m.room.message", "org.matrix.foo.bar"]
- }
- event = MockEvent(
- sender="@foo:bar",
- type="m.room.message",
- room_id="!foo:bar"
- )
- self.assertFalse(
- Filter(definition).check(event)
- )
+ definition = {"not_types": ["m.room.message", "org.matrix.foo.bar"]}
+ event = MockEvent(sender="@foo:bar", type="m.room.message", room_id="!foo:bar")
+ self.assertFalse(Filter(definition).check(event))
def test_definition_not_types_works_with_wildcards(self):
- definition = {
- "not_types": ["m.room.message", "org.matrix.*"]
- }
+ definition = {"not_types": ["m.room.message", "org.matrix.*"]}
event = MockEvent(
- sender="@foo:bar",
- type="org.matrix.custom.event",
- room_id="!foo:bar"
- )
- self.assertFalse(
- Filter(definition).check(event)
+ sender="@foo:bar", type="org.matrix.custom.event", room_id="!foo:bar"
)
+ self.assertFalse(Filter(definition).check(event))
def test_definition_not_types_works_with_unknowns(self):
- definition = {
- "not_types": ["m.*", "org.*"]
- }
- event = MockEvent(
- sender="@foo:bar",
- type="com.nom.nom.nom",
- room_id="!foo:bar"
- )
- self.assertTrue(
- Filter(definition).check(event)
- )
+ definition = {"not_types": ["m.*", "org.*"]}
+ event = MockEvent(sender="@foo:bar", type="com.nom.nom.nom", room_id="!foo:bar")
+ self.assertTrue(Filter(definition).check(event))
def test_definition_not_types_takes_priority_over_types(self):
definition = {
"not_types": ["m.*", "org.*"],
- "types": ["m.room.message", "m.room.topic"]
+ "types": ["m.room.message", "m.room.topic"],
}
- event = MockEvent(
- sender="@foo:bar",
- type="m.room.topic",
- room_id="!foo:bar"
- )
- self.assertFalse(
- Filter(definition).check(event)
- )
+ event = MockEvent(sender="@foo:bar", type="m.room.topic", room_id="!foo:bar")
+ self.assertFalse(Filter(definition).check(event))
def test_definition_senders_works_with_literals(self):
- definition = {
- "senders": ["@flibble:wibble"]
- }
+ definition = {"senders": ["@flibble:wibble"]}
event = MockEvent(
- sender="@flibble:wibble",
- type="com.nom.nom.nom",
- room_id="!foo:bar"
- )
- self.assertTrue(
- Filter(definition).check(event)
+ sender="@flibble:wibble", type="com.nom.nom.nom", room_id="!foo:bar"
)
+ self.assertTrue(Filter(definition).check(event))
def test_definition_senders_works_with_unknowns(self):
- definition = {
- "senders": ["@flibble:wibble"]
- }
+ definition = {"senders": ["@flibble:wibble"]}
event = MockEvent(
- sender="@challenger:appears",
- type="com.nom.nom.nom",
- room_id="!foo:bar"
- )
- self.assertFalse(
- Filter(definition).check(event)
+ sender="@challenger:appears", type="com.nom.nom.nom", room_id="!foo:bar"
)
+ self.assertFalse(Filter(definition).check(event))
def test_definition_not_senders_works_with_literals(self):
- definition = {
- "not_senders": ["@flibble:wibble"]
- }
+ definition = {"not_senders": ["@flibble:wibble"]}
event = MockEvent(
- sender="@flibble:wibble",
- type="com.nom.nom.nom",
- room_id="!foo:bar"
- )
- self.assertFalse(
- Filter(definition).check(event)
+ sender="@flibble:wibble", type="com.nom.nom.nom", room_id="!foo:bar"
)
+ self.assertFalse(Filter(definition).check(event))
def test_definition_not_senders_works_with_unknowns(self):
- definition = {
- "not_senders": ["@flibble:wibble"]
- }
+ definition = {"not_senders": ["@flibble:wibble"]}
event = MockEvent(
- sender="@challenger:appears",
- type="com.nom.nom.nom",
- room_id="!foo:bar"
- )
- self.assertTrue(
- Filter(definition).check(event)
+ sender="@challenger:appears", type="com.nom.nom.nom", room_id="!foo:bar"
)
+ self.assertTrue(Filter(definition).check(event))
def test_definition_not_senders_takes_priority_over_senders(self):
definition = {
"not_senders": ["@misspiggy:muppets"],
- "senders": ["@kermit:muppets", "@misspiggy:muppets"]
+ "senders": ["@kermit:muppets", "@misspiggy:muppets"],
}
event = MockEvent(
- sender="@misspiggy:muppets",
- type="m.room.topic",
- room_id="!foo:bar"
- )
- self.assertFalse(
- Filter(definition).check(event)
+ sender="@misspiggy:muppets", type="m.room.topic", room_id="!foo:bar"
)
+ self.assertFalse(Filter(definition).check(event))
def test_definition_rooms_works_with_literals(self):
- definition = {
- "rooms": ["!secretbase:unknown"]
- }
+ definition = {"rooms": ["!secretbase:unknown"]}
event = MockEvent(
- sender="@foo:bar",
- type="m.room.message",
- room_id="!secretbase:unknown"
- )
- self.assertTrue(
- Filter(definition).check(event)
+ sender="@foo:bar", type="m.room.message", room_id="!secretbase:unknown"
)
+ self.assertTrue(Filter(definition).check(event))
def test_definition_rooms_works_with_unknowns(self):
- definition = {
- "rooms": ["!secretbase:unknown"]
- }
+ definition = {"rooms": ["!secretbase:unknown"]}
event = MockEvent(
sender="@foo:bar",
type="m.room.message",
- room_id="!anothersecretbase:unknown"
- )
- self.assertFalse(
- Filter(definition).check(event)
+ room_id="!anothersecretbase:unknown",
)
+ self.assertFalse(Filter(definition).check(event))
def test_definition_not_rooms_works_with_literals(self):
- definition = {
- "not_rooms": ["!anothersecretbase:unknown"]
- }
+ definition = {"not_rooms": ["!anothersecretbase:unknown"]}
event = MockEvent(
sender="@foo:bar",
type="m.room.message",
- room_id="!anothersecretbase:unknown"
- )
- self.assertFalse(
- Filter(definition).check(event)
+ room_id="!anothersecretbase:unknown",
)
+ self.assertFalse(Filter(definition).check(event))
def test_definition_not_rooms_works_with_unknowns(self):
- definition = {
- "not_rooms": ["!secretbase:unknown"]
- }
+ definition = {"not_rooms": ["!secretbase:unknown"]}
event = MockEvent(
sender="@foo:bar",
type="m.room.message",
- room_id="!anothersecretbase:unknown"
- )
- self.assertTrue(
- Filter(definition).check(event)
+ room_id="!anothersecretbase:unknown",
)
+ self.assertTrue(Filter(definition).check(event))
def test_definition_not_rooms_takes_priority_over_rooms(self):
definition = {
"not_rooms": ["!secretbase:unknown"],
- "rooms": ["!secretbase:unknown"]
+ "rooms": ["!secretbase:unknown"],
}
event = MockEvent(
- sender="@foo:bar",
- type="m.room.message",
- room_id="!secretbase:unknown"
- )
- self.assertFalse(
- Filter(definition).check(event)
+ sender="@foo:bar", type="m.room.message", room_id="!secretbase:unknown"
)
+ self.assertFalse(Filter(definition).check(event))
def test_definition_combined_event(self):
definition = {
@@ -353,16 +254,14 @@ class FilteringTestCase(unittest.TestCase):
"rooms": ["!stage:unknown"],
"not_rooms": ["!piggyshouse:muppets"],
"types": ["m.room.message", "muppets.kermit.*"],
- "not_types": ["muppets.misspiggy.*"]
+ "not_types": ["muppets.misspiggy.*"],
}
event = MockEvent(
sender="@kermit:muppets", # yup
type="m.room.message", # yup
- room_id="!stage:unknown" # yup
- )
- self.assertTrue(
- Filter(definition).check(event)
+ room_id="!stage:unknown", # yup
)
+ self.assertTrue(Filter(definition).check(event))
def test_definition_combined_event_bad_sender(self):
definition = {
@@ -371,16 +270,14 @@ class FilteringTestCase(unittest.TestCase):
"rooms": ["!stage:unknown"],
"not_rooms": ["!piggyshouse:muppets"],
"types": ["m.room.message", "muppets.kermit.*"],
- "not_types": ["muppets.misspiggy.*"]
+ "not_types": ["muppets.misspiggy.*"],
}
event = MockEvent(
sender="@misspiggy:muppets", # nope
type="m.room.message", # yup
- room_id="!stage:unknown" # yup
- )
- self.assertFalse(
- Filter(definition).check(event)
+ room_id="!stage:unknown", # yup
)
+ self.assertFalse(Filter(definition).check(event))
def test_definition_combined_event_bad_room(self):
definition = {
@@ -389,16 +286,14 @@ class FilteringTestCase(unittest.TestCase):
"rooms": ["!stage:unknown"],
"not_rooms": ["!piggyshouse:muppets"],
"types": ["m.room.message", "muppets.kermit.*"],
- "not_types": ["muppets.misspiggy.*"]
+ "not_types": ["muppets.misspiggy.*"],
}
event = MockEvent(
sender="@kermit:muppets", # yup
type="m.room.message", # yup
- room_id="!piggyshouse:muppets" # nope
- )
- self.assertFalse(
- Filter(definition).check(event)
+ room_id="!piggyshouse:muppets", # nope
)
+ self.assertFalse(Filter(definition).check(event))
def test_definition_combined_event_bad_type(self):
definition = {
@@ -407,37 +302,26 @@ class FilteringTestCase(unittest.TestCase):
"rooms": ["!stage:unknown"],
"not_rooms": ["!piggyshouse:muppets"],
"types": ["m.room.message", "muppets.kermit.*"],
- "not_types": ["muppets.misspiggy.*"]
+ "not_types": ["muppets.misspiggy.*"],
}
event = MockEvent(
sender="@kermit:muppets", # yup
type="muppets.misspiggy.kisses", # nope
- room_id="!stage:unknown" # yup
- )
- self.assertFalse(
- Filter(definition).check(event)
+ room_id="!stage:unknown", # yup
)
+ self.assertFalse(Filter(definition).check(event))
@defer.inlineCallbacks
def test_filter_presence_match(self):
- user_filter_json = {
- "presence": {
- "types": ["m.*"]
- }
- }
+ user_filter_json = {"presence": {"types": ["m.*"]}}
filter_id = yield self.datastore.add_user_filter(
- user_localpart=user_localpart,
- user_filter=user_filter_json,
- )
- event = MockEvent(
- sender="@foo:bar",
- type="m.profile",
+ user_localpart=user_localpart, user_filter=user_filter_json
)
+ event = MockEvent(sender="@foo:bar", type="m.profile")
events = [event]
user_filter = yield self.filtering.get_user_filter(
- user_localpart=user_localpart,
- filter_id=filter_id,
+ user_localpart=user_localpart, filter_id=filter_id
)
results = user_filter.filter_presence(events=events)
@@ -445,15 +329,10 @@ class FilteringTestCase(unittest.TestCase):
@defer.inlineCallbacks
def test_filter_presence_no_match(self):
- user_filter_json = {
- "presence": {
- "types": ["m.*"]
- }
- }
+ user_filter_json = {"presence": {"types": ["m.*"]}}
filter_id = yield self.datastore.add_user_filter(
- user_localpart=user_localpart + "2",
- user_filter=user_filter_json,
+ user_localpart=user_localpart + "2", user_filter=user_filter_json
)
event = MockEvent(
event_id="$asdasd:localhost",
@@ -463,8 +342,7 @@ class FilteringTestCase(unittest.TestCase):
events = [event]
user_filter = yield self.filtering.get_user_filter(
- user_localpart=user_localpart + "2",
- filter_id=filter_id,
+ user_localpart=user_localpart + "2", filter_id=filter_id
)
results = user_filter.filter_presence(events=events)
@@ -472,27 +350,15 @@ class FilteringTestCase(unittest.TestCase):
@defer.inlineCallbacks
def test_filter_room_state_match(self):
- user_filter_json = {
- "room": {
- "state": {
- "types": ["m.*"]
- }
- }
- }
+ user_filter_json = {"room": {"state": {"types": ["m.*"]}}}
filter_id = yield self.datastore.add_user_filter(
- user_localpart=user_localpart,
- user_filter=user_filter_json,
- )
- event = MockEvent(
- sender="@foo:bar",
- type="m.room.topic",
- room_id="!foo:bar"
+ user_localpart=user_localpart, user_filter=user_filter_json
)
+ event = MockEvent(sender="@foo:bar", type="m.room.topic", room_id="!foo:bar")
events = [event]
user_filter = yield self.filtering.get_user_filter(
- user_localpart=user_localpart,
- filter_id=filter_id,
+ user_localpart=user_localpart, filter_id=filter_id
)
results = user_filter.filter_room_state(events=events)
@@ -500,27 +366,17 @@ class FilteringTestCase(unittest.TestCase):
@defer.inlineCallbacks
def test_filter_room_state_no_match(self):
- user_filter_json = {
- "room": {
- "state": {
- "types": ["m.*"]
- }
- }
- }
+ user_filter_json = {"room": {"state": {"types": ["m.*"]}}}
filter_id = yield self.datastore.add_user_filter(
- user_localpart=user_localpart,
- user_filter=user_filter_json,
+ user_localpart=user_localpart, user_filter=user_filter_json
)
event = MockEvent(
- sender="@foo:bar",
- type="org.matrix.custom.event",
- room_id="!foo:bar"
+ sender="@foo:bar", type="org.matrix.custom.event", room_id="!foo:bar"
)
events = [event]
user_filter = yield self.filtering.get_user_filter(
- user_localpart=user_localpart,
- filter_id=filter_id,
+ user_localpart=user_localpart, filter_id=filter_id
)
results = user_filter.filter_room_state(events)
@@ -544,45 +400,32 @@ class FilteringTestCase(unittest.TestCase):
@defer.inlineCallbacks
def test_add_filter(self):
- user_filter_json = {
- "room": {
- "state": {
- "types": ["m.*"]
- }
- }
- }
+ user_filter_json = {"room": {"state": {"types": ["m.*"]}}}
filter_id = yield self.filtering.add_user_filter(
- user_localpart=user_localpart,
- user_filter=user_filter_json,
+ user_localpart=user_localpart, user_filter=user_filter_json
)
self.assertEquals(filter_id, 0)
- self.assertEquals(user_filter_json, (
- yield self.datastore.get_user_filter(
- user_localpart=user_localpart,
- filter_id=0,
- )
- ))
+ self.assertEquals(
+ user_filter_json,
+ (
+ yield self.datastore.get_user_filter(
+ user_localpart=user_localpart, filter_id=0
+ )
+ ),
+ )
@defer.inlineCallbacks
def test_get_filter(self):
- user_filter_json = {
- "room": {
- "state": {
- "types": ["m.*"]
- }
- }
- }
+ user_filter_json = {"room": {"state": {"types": ["m.*"]}}}
filter_id = yield self.datastore.add_user_filter(
- user_localpart=user_localpart,
- user_filter=user_filter_json,
+ user_localpart=user_localpart, user_filter=user_filter_json
)
filter = yield self.filtering.get_user_filter(
- user_localpart=user_localpart,
- filter_id=filter_id,
+ user_localpart=user_localpart, filter_id=filter_id
)
self.assertEquals(filter.get_filter_json(), user_filter_json)
diff --git a/tests/api/test_ratelimiting.py b/tests/api/test_ratelimiting.py
index c45b59b36c..8933fe3b72 100644
--- a/tests/api/test_ratelimiting.py
+++ b/tests/api/test_ratelimiting.py
@@ -4,17 +4,16 @@ from tests import unittest
class TestRatelimiter(unittest.TestCase):
-
def test_allowed(self):
limiter = Ratelimiter()
allowed, time_allowed = limiter.send_message(
- user_id="test_id", time_now_s=0, msg_rate_hz=0.1, burst_count=1,
+ user_id="test_id", time_now_s=0, msg_rate_hz=0.1, burst_count=1
)
self.assertTrue(allowed)
self.assertEquals(10., time_allowed)
allowed, time_allowed = limiter.send_message(
- user_id="test_id", time_now_s=5, msg_rate_hz=0.1, burst_count=1,
+ user_id="test_id", time_now_s=5, msg_rate_hz=0.1, burst_count=1
)
self.assertFalse(allowed)
self.assertEquals(10., time_allowed)
@@ -28,7 +27,7 @@ class TestRatelimiter(unittest.TestCase):
def test_pruning(self):
limiter = Ratelimiter()
allowed, time_allowed = limiter.send_message(
- user_id="test_id_1", time_now_s=0, msg_rate_hz=0.1, burst_count=1,
+ user_id="test_id_1", time_now_s=0, msg_rate_hz=0.1, burst_count=1
)
self.assertIn("test_id_1", limiter.message_counts)
|