@@ -972,24 +972,24 @@ where
972
972
/// recommended to run those in encrypted stores because the size of the
973
973
/// encrypted content may vary compared to what the tests expect.
974
974
///
975
- /// You need to provide an `async fn get_event_cache_store () ->
976
- /// event_cache::store::Result<Store>` that provides a fresh event cache store
977
- /// that implements `MediaStoreInner` on the same level you invoke the
975
+ /// You need to provide an `async fn get_media_store () ->
976
+ /// event_cache::store::media:: Result<Store>` that provides a fresh media
977
+ /// store that implements `MediaStoreInner` on the same level you invoke the
978
978
/// macro.
979
979
///
980
980
/// ## Usage Example:
981
981
/// ```no_run
982
- /// # use matrix_sdk_base::event_cache::store::{
983
- /// # EventCacheStore ,
982
+ /// # use matrix_sdk_base::event_cache::store::media {
983
+ /// # MediaStoreInner ,
984
984
/// # MemoryStore as MyStore,
985
- /// # Result as EventCacheStoreResult ,
985
+ /// # Result as MediaStoreResult ,
986
986
/// # };
987
987
///
988
988
/// #[cfg(test)]
989
989
/// mod tests {
990
- /// use super::{EventCacheStoreResult , MyStore};
990
+ /// use super::{MediaStoreResult , MyStore};
991
991
///
992
- /// async fn get_event_cache_store () -> EventCacheStoreResult <MyStore> {
992
+ /// async fn get_media_store () -> MediaStoreResult <MyStore> {
993
993
/// Ok(MyStore::new())
994
994
/// }
995
995
///
@@ -1005,19 +1005,19 @@ macro_rules! media_store_inner_integration_tests {
1005
1005
1006
1006
#[ async_test]
1007
1007
async fn test_media_max_file_size( ) {
1008
- let media_store_inner = get_event_cache_store ( ) . await . unwrap( ) ;
1008
+ let media_store_inner = get_media_store ( ) . await . unwrap( ) ;
1009
1009
media_store_inner. test_media_max_file_size( ) . await ;
1010
1010
}
1011
1011
1012
1012
#[ async_test]
1013
1013
async fn test_media_max_cache_size( ) {
1014
- let media_store_inner = get_event_cache_store ( ) . await . unwrap( ) ;
1014
+ let media_store_inner = get_media_store ( ) . await . unwrap( ) ;
1015
1015
media_store_inner. test_media_max_cache_size( ) . await ;
1016
1016
}
1017
1017
1018
1018
#[ async_test]
1019
1019
async fn test_media_ignore_max_size( ) {
1020
- let media_store_inner = get_event_cache_store ( ) . await . unwrap( ) ;
1020
+ let media_store_inner = get_media_store ( ) . await . unwrap( ) ;
1021
1021
media_store_inner. test_media_ignore_max_size( ) . await ;
1022
1022
}
1023
1023
}
@@ -1033,29 +1033,29 @@ macro_rules! media_store_inner_integration_tests {
1033
1033
use matrix_sdk_test:: async_test;
1034
1034
use $crate:: event_cache:: store:: media:: MediaStoreInnerIntegrationTests ;
1035
1035
1036
- use super :: get_event_cache_store ;
1036
+ use super :: get_media_store ;
1037
1037
1038
1038
#[ async_test]
1039
1039
async fn test_store_media_retention_policy( ) {
1040
- let media_store_inner = get_event_cache_store ( ) . await . unwrap( ) ;
1040
+ let media_store_inner = get_media_store ( ) . await . unwrap( ) ;
1041
1041
media_store_inner. test_store_media_retention_policy( ) . await ;
1042
1042
}
1043
1043
1044
1044
#[ async_test]
1045
1045
async fn test_media_expiry( ) {
1046
- let media_store_inner = get_event_cache_store ( ) . await . unwrap( ) ;
1046
+ let media_store_inner = get_media_store ( ) . await . unwrap( ) ;
1047
1047
media_store_inner. test_media_expiry( ) . await ;
1048
1048
}
1049
1049
1050
1050
#[ async_test]
1051
1051
async fn test_media_ignore_expiry( ) {
1052
- let media_store_inner = get_event_cache_store ( ) . await . unwrap( ) ;
1052
+ let media_store_inner = get_media_store ( ) . await . unwrap( ) ;
1053
1053
media_store_inner. test_media_ignore_expiry( ) . await ;
1054
1054
}
1055
1055
1056
1056
#[ async_test]
1057
1057
async fn test_store_last_media_cleanup_time( ) {
1058
- let media_store_inner = get_event_cache_store ( ) . await . unwrap( ) ;
1058
+ let media_store_inner = get_media_store ( ) . await . unwrap( ) ;
1059
1059
media_store_inner. test_store_last_media_cleanup_time( ) . await ;
1060
1060
}
1061
1061
} ;
@@ -1296,19 +1296,99 @@ macro_rules! media_store_integration_tests {
1296
1296
( ) => {
1297
1297
mod media_store_integration_tests {
1298
1298
use matrix_sdk_test:: async_test;
1299
+ use $crate:: event_cache:: store:: media:: MediaStoreIntegrationTests ;
1299
1300
1300
1301
use super :: get_media_store;
1301
1302
1302
1303
#[ async_test]
1303
1304
async fn test_media_content( ) {
1304
- let event_cache_store = get_media_store( ) . await . unwrap( ) . into_event_cache_store ( ) ;
1305
- event_cache_store . test_media_content( ) . await ;
1305
+ let media_store = get_media_store( ) . await . unwrap( ) ;
1306
+ media_store . test_media_content( ) . await ;
1306
1307
}
1307
1308
1308
1309
#[ async_test]
1309
1310
async fn test_replace_media_key( ) {
1310
- let event_cache_store = get_media_store( ) . await . unwrap( ) . into_event_cache_store( ) ;
1311
- event_cache_store. test_replace_media_key( ) . await ;
1311
+ let media_store = get_media_store( ) . await . unwrap( ) ;
1312
+ media_store. test_replace_media_key( ) . await ;
1313
+ }
1314
+ }
1315
+ } ;
1316
+ }
1317
+
1318
+ /// Macro generating tests for the media store, related to time (mostly
1319
+ /// for the cross-process lock).
1320
+ #[ allow( unused_macros) ]
1321
+ #[ macro_export]
1322
+ macro_rules! media_store_integration_tests_time {
1323
+ ( ) => {
1324
+ mod media_store_integration_tests_time {
1325
+ use std:: time:: Duration ;
1326
+
1327
+ #[ cfg( all( target_family = "wasm" , target_os = "unknown" ) ) ]
1328
+ use gloo_timers:: future:: sleep;
1329
+ use matrix_sdk_test:: async_test;
1330
+ #[ cfg( not( all( target_family = "wasm" , target_os = "unknown" ) ) ) ]
1331
+ use tokio:: time:: sleep;
1332
+ use $crate:: event_cache:: store:: media:: MediaStore ;
1333
+
1334
+ use super :: get_media_store;
1335
+
1336
+ #[ async_test]
1337
+ async fn test_lease_locks( ) {
1338
+ let store = get_media_store( ) . await . unwrap( ) ;
1339
+
1340
+ let acquired0 = store. try_take_leased_lock( 0 , "key" , "alice" ) . await . unwrap( ) ;
1341
+ assert!( acquired0) ;
1342
+
1343
+ // Should extend the lease automatically (same holder).
1344
+ let acquired2 = store. try_take_leased_lock( 300 , "key" , "alice" ) . await . unwrap( ) ;
1345
+ assert!( acquired2) ;
1346
+
1347
+ // Should extend the lease automatically (same holder + time is ok).
1348
+ let acquired3 = store. try_take_leased_lock( 300 , "key" , "alice" ) . await . unwrap( ) ;
1349
+ assert!( acquired3) ;
1350
+
1351
+ // Another attempt at taking the lock should fail, because it's taken.
1352
+ let acquired4 = store. try_take_leased_lock( 300 , "key" , "bob" ) . await . unwrap( ) ;
1353
+ assert!( !acquired4) ;
1354
+
1355
+ // Even if we insist.
1356
+ let acquired5 = store. try_take_leased_lock( 300 , "key" , "bob" ) . await . unwrap( ) ;
1357
+ assert!( !acquired5) ;
1358
+
1359
+ // That's a nice test we got here, go take a little nap.
1360
+ sleep( Duration :: from_millis( 50 ) ) . await ;
1361
+
1362
+ // Still too early.
1363
+ let acquired55 = store. try_take_leased_lock( 300 , "key" , "bob" ) . await . unwrap( ) ;
1364
+ assert!( !acquired55) ;
1365
+
1366
+ // Ok you can take another nap then.
1367
+ sleep( Duration :: from_millis( 250 ) ) . await ;
1368
+
1369
+ // At some point, we do get the lock.
1370
+ let acquired6 = store. try_take_leased_lock( 0 , "key" , "bob" ) . await . unwrap( ) ;
1371
+ assert!( acquired6) ;
1372
+
1373
+ sleep( Duration :: from_millis( 1 ) ) . await ;
1374
+
1375
+ // The other gets it almost immediately too.
1376
+ let acquired7 = store. try_take_leased_lock( 0 , "key" , "alice" ) . await . unwrap( ) ;
1377
+ assert!( acquired7) ;
1378
+
1379
+ sleep( Duration :: from_millis( 1 ) ) . await ;
1380
+
1381
+ // But when we take a longer lease...
1382
+ let acquired8 = store. try_take_leased_lock( 300 , "key" , "bob" ) . await . unwrap( ) ;
1383
+ assert!( acquired8) ;
1384
+
1385
+ // It blocks the other user.
1386
+ let acquired9 = store. try_take_leased_lock( 300 , "key" , "alice" ) . await . unwrap( ) ;
1387
+ assert!( !acquired9) ;
1388
+
1389
+ // We can hold onto our lease.
1390
+ let acquired10 = store. try_take_leased_lock( 300 , "key" , "bob" ) . await . unwrap( ) ;
1391
+ assert!( acquired10) ;
1312
1392
}
1313
1393
}
1314
1394
} ;
0 commit comments