Skip to content

Commit a1ab486

Browse files
committed
test: Testing the cross-process event cache store.
1 parent 170ccdf commit a1ab486

File tree

3 files changed

+81
-1
lines changed

3 files changed

+81
-1
lines changed

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

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

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)