1313# limitations under the License.
1414
1515import io
16- from typing import Iterable , Optional , Tuple
16+ from typing import Iterable , Optional
1717
1818from twisted .test .proto_helpers import MemoryReactor
1919
2020from synapse .rest import admin
2121from synapse .rest .client import login , register , room
2222from synapse .server import HomeServer
23- from synapse .types import UserID
23+ from synapse .types import MXCUri , UserID
2424from synapse .util import Clock
2525
2626from tests import unittest
@@ -63,9 +63,9 @@ def _create_media_and_set_attributes(
6363 last_accessed_ms : Optional [int ],
6464 is_quarantined : Optional [bool ] = False ,
6565 is_protected : Optional [bool ] = False ,
66- ) -> str :
66+ ) -> MXCUri :
6767 # "Upload" some media to the local media store
68- mxc_uri = self .get_success (
68+ mxc_uri : MXCUri = self .get_success (
6969 media_repository .create_content (
7070 media_type = "text/plain" ,
7171 upload_name = None ,
@@ -75,13 +75,11 @@ def _create_media_and_set_attributes(
7575 )
7676 )
7777
78- media_id = mxc_uri .split ("/" )[- 1 ]
79-
8078 # Set the last recently accessed time for this media
8179 if last_accessed_ms is not None :
8280 self .get_success (
8381 self .store .update_cached_last_access_time (
84- local_media = (media_id ,),
82+ local_media = (mxc_uri . media_id ,),
8583 remote_media = (),
8684 time_ms = last_accessed_ms ,
8785 )
@@ -92,7 +90,7 @@ def _create_media_and_set_attributes(
9290 self .get_success (
9391 self .store .quarantine_media_by_id (
9492 server_name = self .hs .config .server .server_name ,
95- media_id = media_id ,
93+ media_id = mxc_uri . media_id ,
9694 quarantined_by = "@theadmin:test" ,
9795 )
9896 )
@@ -101,18 +99,18 @@ def _create_media_and_set_attributes(
10199 # Mark this media as protected from quarantine
102100 self .get_success (
103101 self .store .mark_local_media_as_safe (
104- media_id = media_id ,
102+ media_id = mxc_uri . media_id ,
105103 safe = True ,
106104 )
107105 )
108106
109- return media_id
107+ return mxc_uri
110108
111109 def _cache_remote_media_and_set_attributes (
112110 media_id : str ,
113111 last_accessed_ms : Optional [int ],
114112 is_quarantined : Optional [bool ] = False ,
115- ) -> str :
113+ ) -> MXCUri :
116114 # Pretend to cache some remote media
117115 self .get_success (
118116 self .store .store_cached_remote_media (
@@ -146,7 +144,7 @@ def _cache_remote_media_and_set_attributes(
146144 )
147145 )
148146
149- return media_id
147+ return MXCUri ( self . remote_server_name , media_id )
150148
151149 # Start with the local media store
152150 self .local_recently_accessed_media = _create_media_and_set_attributes (
@@ -214,28 +212,16 @@ def test_local_media_retention(self) -> None:
214212 # Remote media should be unaffected.
215213 self ._assert_if_mxc_uris_purged (
216214 purged = [
217- (
218- self .hs .config .server .server_name ,
219- self .local_not_recently_accessed_media ,
220- ),
221- (self .hs .config .server .server_name , self .local_never_accessed_media ),
215+ self .local_not_recently_accessed_media ,
216+ self .local_never_accessed_media ,
222217 ],
223218 not_purged = [
224- (self .hs .config .server .server_name , self .local_recently_accessed_media ),
225- (
226- self .hs .config .server .server_name ,
227- self .local_not_recently_accessed_quarantined_media ,
228- ),
229- (
230- self .hs .config .server .server_name ,
231- self .local_not_recently_accessed_protected_media ,
232- ),
233- (self .remote_server_name , self .remote_recently_accessed_media ),
234- (self .remote_server_name , self .remote_not_recently_accessed_media ),
235- (
236- self .remote_server_name ,
237- self .remote_not_recently_accessed_quarantined_media ,
238- ),
219+ self .local_recently_accessed_media ,
220+ self .local_not_recently_accessed_quarantined_media ,
221+ self .local_not_recently_accessed_protected_media ,
222+ self .remote_recently_accessed_media ,
223+ self .remote_not_recently_accessed_media ,
224+ self .remote_not_recently_accessed_quarantined_media ,
239225 ],
240226 )
241227
@@ -261,49 +247,35 @@ def test_remote_media_cache_retention(self) -> None:
261247 # Remote media accessed <30 days ago should still exist.
262248 self ._assert_if_mxc_uris_purged (
263249 purged = [
264- ( self .remote_server_name , self . remote_not_recently_accessed_media ) ,
250+ self .remote_not_recently_accessed_media ,
265251 ],
266252 not_purged = [
267- (self .remote_server_name , self .remote_recently_accessed_media ),
268- (self .hs .config .server .server_name , self .local_recently_accessed_media ),
269- (
270- self .hs .config .server .server_name ,
271- self .local_not_recently_accessed_media ,
272- ),
273- (
274- self .hs .config .server .server_name ,
275- self .local_not_recently_accessed_quarantined_media ,
276- ),
277- (
278- self .hs .config .server .server_name ,
279- self .local_not_recently_accessed_protected_media ,
280- ),
281- (
282- self .remote_server_name ,
283- self .remote_not_recently_accessed_quarantined_media ,
284- ),
285- (self .hs .config .server .server_name , self .local_never_accessed_media ),
253+ self .remote_recently_accessed_media ,
254+ self .local_recently_accessed_media ,
255+ self .local_not_recently_accessed_media ,
256+ self .local_not_recently_accessed_quarantined_media ,
257+ self .local_not_recently_accessed_protected_media ,
258+ self .remote_not_recently_accessed_quarantined_media ,
259+ self .local_never_accessed_media ,
286260 ],
287261 )
288262
289263 def _assert_if_mxc_uris_purged (
290- self , purged : Iterable [Tuple [ str , str ]] , not_purged : Iterable [Tuple [ str , str ] ]
264+ self , purged : Iterable [MXCUri ] , not_purged : Iterable [MXCUri ]
291265 ) -> None :
292- def _assert_mxc_uri_purge_state (
293- server_name : str , media_id : str , expect_purged : bool
294- ) -> None :
266+ def _assert_mxc_uri_purge_state (mxc_uri : MXCUri , expect_purged : bool ) -> None :
295267 """Given an MXC URI, assert whether it has been purged or not."""
296- if server_name == self .hs .config .server .server_name :
268+ if mxc_uri . server_name == self .hs .config .server .server_name :
297269 found_media_dict = self .get_success (
298- self .store .get_local_media (media_id )
270+ self .store .get_local_media (mxc_uri . media_id )
299271 )
300272 else :
301273 found_media_dict = self .get_success (
302- self .store .get_cached_remote_media (server_name , media_id )
274+ self .store .get_cached_remote_media (
275+ mxc_uri .server_name , mxc_uri .media_id
276+ )
303277 )
304278
305- mxc_uri = f"mxc://{ server_name } /{ media_id } "
306-
307279 if expect_purged :
308280 self .assertIsNone (
309281 found_media_dict , msg = f"{ mxc_uri } unexpectedly not purged"
@@ -315,7 +287,7 @@ def _assert_mxc_uri_purge_state(
315287 )
316288
317289 # Assert that the given MXC URIs have either been correctly purged or not.
318- for server_name , media_id in purged :
319- _assert_mxc_uri_purge_state (server_name , media_id , expect_purged = True )
320- for server_name , media_id in not_purged :
321- _assert_mxc_uri_purge_state (server_name , media_id , expect_purged = False )
290+ for mxc_uri in purged :
291+ _assert_mxc_uri_purge_state (mxc_uri , expect_purged = True )
292+ for mxc_uri in not_purged :
293+ _assert_mxc_uri_purge_state (mxc_uri , expect_purged = False )
0 commit comments