|
44 | 44 | from twisted.web.iweb import UNKNOWN_LENGTH, IResponse
|
45 | 45 | from twisted.web.resource import Resource
|
46 | 46 |
|
47 |
| -from synapse.api.errors import HttpResponseException |
| 47 | +from synapse.api.errors import Codes, HttpResponseException |
48 | 48 | from synapse.api.ratelimiting import Ratelimiter
|
49 | 49 | from synapse.config.oembed import OEmbedEndpointConfig
|
50 | 50 | from synapse.http.client import MultipartResponse
|
@@ -2878,11 +2878,12 @@ def make_homeserver(self, reactor: MemoryReactor, clock: Clock) -> HomeServer:
|
2878 | 2878 |
|
2879 | 2879 | config["media_storage_providers"] = [provider_config]
|
2880 | 2880 |
|
2881 |
| - # These are the limits that we are testing |
2882 |
| - config["media_upload_limits"] = [ |
2883 |
| - {"time_period": "1d", "max_size": "1K"}, |
2884 |
| - {"time_period": "1w", "max_size": "3K"}, |
2885 |
| - ] |
| 2881 | + # These are the limits that we are testing unless overridden |
| 2882 | + if config.get("media_upload_limits") is None: |
| 2883 | + config["media_upload_limits"] = [ |
| 2884 | + {"time_period": "1d", "max_size": "1K"}, |
| 2885 | + {"time_period": "1w", "max_size": "3K"}, |
| 2886 | + ] |
2886 | 2887 |
|
2887 | 2888 | return self.setup_test_homeserver(config=config)
|
2888 | 2889 |
|
@@ -2967,3 +2968,70 @@ def test_over_weekly_limit(self) -> None:
|
2967 | 2968 | # This will succeed as the weekly limit has reset
|
2968 | 2969 | channel = self.upload_media(900)
|
2969 | 2970 | self.assertEqual(channel.code, 200)
|
| 2971 | + |
| 2972 | + @override_config( |
| 2973 | + { |
| 2974 | + "media_upload_limits": [ |
| 2975 | + { |
| 2976 | + "time_period": "1d", |
| 2977 | + "max_size": "1K", |
| 2978 | + "msc4335_info_url": "https://example.com", |
| 2979 | + }, |
| 2980 | + ] |
| 2981 | + } |
| 2982 | + ) |
| 2983 | + def test_msc4335_defaults_disabled(self) -> None: |
| 2984 | + """Test that the MSC4335 is not used unless experimental feature is enabled.""" |
| 2985 | + channel = self.upload_media(500) |
| 2986 | + self.assertEqual(channel.code, 200) |
| 2987 | + |
| 2988 | + channel = self.upload_media(800) |
| 2989 | + # n.b. this response is not spec compliant as described at: https://github.com/element-hq/synapse/issues/18749 |
| 2990 | + self.assertEqual(channel.code, 400) |
| 2991 | + self.assertEqual(channel.json_body["errcode"], Codes.RESOURCE_LIMIT_EXCEEDED) |
| 2992 | + |
| 2993 | + @override_config( |
| 2994 | + { |
| 2995 | + "experimental_features": {"msc4335_enabled": True}, |
| 2996 | + "media_upload_limits": [ |
| 2997 | + { |
| 2998 | + "time_period": "1d", |
| 2999 | + "max_size": "1K", |
| 3000 | + "msc4335_info_url": "https://example.com", |
| 3001 | + } |
| 3002 | + ], |
| 3003 | + } |
| 3004 | + ) |
| 3005 | + def test_msc4335_returns_user_limit_exceeded(self) -> None: |
| 3006 | + """Test that the MSC4335 error is returned when experimental feature is enabled.""" |
| 3007 | + channel = self.upload_media(500) |
| 3008 | + self.assertEqual(channel.code, 200) |
| 3009 | + |
| 3010 | + channel = self.upload_media(800) |
| 3011 | + self.assertEqual(channel.code, 403) |
| 3012 | + self.assertEqual(channel.json_body["errcode"], Codes.UNKNOWN) |
| 3013 | + self.assertEqual( |
| 3014 | + channel.json_body["org.matrix.msc4335.errcode"], "M_USER_LIMIT_EXCEEDED" |
| 3015 | + ) |
| 3016 | + self.assertEqual( |
| 3017 | + channel.json_body["org.matrix.msc4335.info_url"], "https://example.com" |
| 3018 | + ) |
| 3019 | + |
| 3020 | + @override_config( |
| 3021 | + { |
| 3022 | + "experimental_features": {"msc4335_enabled": True}, |
| 3023 | + "media_upload_limits": [ |
| 3024 | + { |
| 3025 | + "time_period": "1d", |
| 3026 | + "max_size": "1K", |
| 3027 | + } |
| 3028 | + ], |
| 3029 | + } |
| 3030 | + ) |
| 3031 | + def test_msc4335_requiredinfo_url(self) -> None: |
| 3032 | + """Test that the MSC4335 error is not used if info_url is not provided.""" |
| 3033 | + channel = self.upload_media(500) |
| 3034 | + self.assertEqual(channel.code, 200) |
| 3035 | + |
| 3036 | + channel = self.upload_media(800) |
| 3037 | + self.assertEqual(channel.code, 400) |
0 commit comments