Skip to content

Commit 7c41935

Browse files
committed
test: Testing the cross-process event cache store.
1 parent 327ebb8 commit 7c41935

File tree

3 files changed

+80
-1
lines changed

3 files changed

+80
-1
lines changed

crates/matrix-sdk-base/src/event_cache_store/integration_tests.rs

Lines changed: 75 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -233,3 +233,78 @@ macro_rules! event_cache_store_integration_tests {
233233
}
234234
};
235235
}
236+
237+
/// Macro generating tests for the event cache store, related to time (mostly
238+
/// for the cross-process lock).
239+
#[allow(unused_macros)]
240+
#[macro_export]
241+
macro_rules! event_cache_store_integration_tests_time {
242+
() => {
243+
mod event_cache_store_integration_tests_time {
244+
use std::time::Duration;
245+
246+
use matrix_sdk_test::async_test;
247+
use $crate::event_cache_store::IntoEventCacheStore;
248+
249+
use super::get_event_cache_store;
250+
251+
#[async_test]
252+
async fn test_lease_locks() {
253+
let store = get_event_cache_store().await.unwrap().into_event_cache_store();
254+
255+
let acquired0 = store.try_take_leased_lock(0, "key", "alice").await.unwrap();
256+
assert!(acquired0);
257+
258+
// Should extend the lease automatically (same holder).
259+
let acquired2 = store.try_take_leased_lock(300, "key", "alice").await.unwrap();
260+
assert!(acquired2);
261+
262+
// Should extend the lease automatically (same holder + time is ok).
263+
let acquired3 = store.try_take_leased_lock(300, "key", "alice").await.unwrap();
264+
assert!(acquired3);
265+
266+
// Another attempt at taking the lock should fail, because it's taken.
267+
let acquired4 = store.try_take_leased_lock(300, "key", "bob").await.unwrap();
268+
assert!(!acquired4);
269+
270+
// Even if we insist.
271+
let acquired5 = store.try_take_leased_lock(300, "key", "bob").await.unwrap();
272+
assert!(!acquired5);
273+
274+
// That's a nice test we got here, go take a little nap.
275+
tokio::time::sleep(Duration::from_millis(50)).await;
276+
277+
// Still too early.
278+
let acquired55 = store.try_take_leased_lock(300, "key", "bob").await.unwrap();
279+
assert!(!acquired55);
280+
281+
// Ok you can take another nap then.
282+
tokio::time::sleep(Duration::from_millis(250)).await;
283+
284+
// At some point, we do get the lock.
285+
let acquired6 = store.try_take_leased_lock(0, "key", "bob").await.unwrap();
286+
assert!(acquired6);
287+
288+
tokio::time::sleep(Duration::from_millis(1)).await;
289+
290+
// The other gets it almost immediately too.
291+
let acquired7 = store.try_take_leased_lock(0, "key", "alice").await.unwrap();
292+
assert!(acquired7);
293+
294+
tokio::time::sleep(Duration::from_millis(1)).await;
295+
296+
// But when we take a longer lease...
297+
let acquired8 = store.try_take_leased_lock(300, "key", "bob").await.unwrap();
298+
assert!(acquired8);
299+
300+
// It blocks the other user.
301+
let acquired9 = store.try_take_leased_lock(300, "key", "alice").await.unwrap();
302+
assert!(!acquired9);
303+
304+
// We can hold onto our lease.
305+
let acquired10 = store.try_take_leased_lock(300, "key", "bob").await.unwrap();
306+
assert!(acquired10);
307+
}
308+
}
309+
};
310+
}

crates/matrix-sdk-base/src/event_cache_store/memory_store.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -185,4 +185,5 @@ mod tests {
185185
}
186186

187187
event_cache_store_integration_tests!();
188+
event_cache_store_integration_tests_time!();
188189
}

crates/matrix-sdk-sqlite/src/event_cache_store.rs

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -276,7 +276,7 @@ mod tests {
276276

277277
use matrix_sdk_base::{
278278
event_cache_store::{EventCacheStore, EventCacheStoreError},
279-
event_cache_store_integration_tests,
279+
event_cache_store_integration_tests, event_cache_store_integration_tests_time,
280280
media::{MediaFormat, MediaRequest, MediaThumbnailSettings},
281281
};
282282
use matrix_sdk_test::async_test;
@@ -300,6 +300,7 @@ mod tests {
300300
}
301301

302302
event_cache_store_integration_tests!();
303+
event_cache_store_integration_tests_time!();
303304

304305
async fn get_event_cache_store_content_sorted_by_last_access(
305306
event_cache_store: &SqliteEventCacheStore,
@@ -381,6 +382,7 @@ mod encrypted_tests {
381382

382383
use matrix_sdk_base::{
383384
event_cache_store::EventCacheStoreError, event_cache_store_integration_tests,
385+
event_cache_store_integration_tests_time,
384386
};
385387
use once_cell::sync::Lazy;
386388
use tempfile::{tempdir, TempDir};
@@ -405,4 +407,5 @@ mod encrypted_tests {
405407
}
406408

407409
event_cache_store_integration_tests!();
410+
event_cache_store_integration_tests_time!();
408411
}

0 commit comments

Comments
 (0)