Skip to content

Commit 2c26a6a

Browse files
committed
test: Testing the cross-process event cache store.
1 parent 1a2b09e commit 2c26a6a

File tree

3 files changed

+78
-1
lines changed

3 files changed

+78
-1
lines changed

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

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

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)