Skip to content

Commit 3a72f4b

Browse files
committed
Use StateStore to fulfill messages requests
1 parent 4b54fed commit 3a72f4b

File tree

2 files changed

+394
-7
lines changed

2 files changed

+394
-7
lines changed

crates/matrix-sdk/src/client.rs

Lines changed: 180 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2342,6 +2342,8 @@ pub(crate) mod test {
23422342
use matrix_sdk_base::media::{MediaFormat, MediaRequest, MediaThumbnailSize, MediaType};
23432343
use matrix_sdk_test::{test_json, EventBuilder, EventsJson};
23442344
use mockito::{mock, Matcher};
2345+
#[cfg(feature = "sled_state_store")]
2346+
use ruma::api::client::r0::message::get_message_events::Direction;
23452347
use ruma::{
23462348
api::{
23472349
client::{
@@ -3650,4 +3652,182 @@ pub(crate) mod test {
36503652

36513653
matches::assert_matches!(encryption_event, AnySyncStateEvent::RoomEncryption(_));
36523654
}
3655+
3656+
#[cfg(feature = "sled_state_store")]
3657+
#[tokio::test]
3658+
async fn messages() {
3659+
let room_id = room_id!("!SVkFJHzfwvuaIEawgC:localhost");
3660+
let client = logged_in_client().await;
3661+
3662+
let _m = mock("GET", Matcher::Regex(r"^/_matrix/client/r0/sync\?.*$".to_string()))
3663+
.with_status(200)
3664+
.with_body(test_json::MORE_SYNC.to_string())
3665+
.match_header("authorization", "Bearer 1234")
3666+
.create();
3667+
3668+
let mocked_messages = mock(
3669+
"GET",
3670+
Matcher::Regex(
3671+
r"^/_matrix/client/r0/rooms/.*/messages.*from=t392-516_47314_0_7_1_1_1_11444_1.*"
3672+
.to_string(),
3673+
),
3674+
)
3675+
.with_status(200)
3676+
.with_body(test_json::SYNC_ROOM_MESSAGES_BATCH_1.to_string())
3677+
.match_header("authorization", "Bearer 1234")
3678+
.create();
3679+
3680+
let _m = mock(
3681+
"GET",
3682+
Matcher::Regex(
3683+
r"^/_matrix/client/r0/rooms/.*/messages.*from=s526_47314_0_7_1_1_1_11444_2"
3684+
.to_string(),
3685+
),
3686+
)
3687+
.with_status(200)
3688+
.match_header("authorization", "Bearer 1234")
3689+
.create();
3690+
3691+
let mocked_context =
3692+
mock("GET", Matcher::Regex(r"^/_matrix/client/r0/rooms/.*/context/.*".to_string()))
3693+
.with_status(200)
3694+
.with_body(test_json::CONTEXT_MESSAGE.to_string())
3695+
.match_header("authorization", "Bearer 1234")
3696+
.create();
3697+
3698+
let sync_settings = SyncSettings::new().timeout(Duration::from_millis(3000));
3699+
3700+
let _ = client.sync_once(sync_settings).await.unwrap();
3701+
3702+
let room = client.get_joined_room(&room_id).unwrap();
3703+
3704+
// Try to get the full timeline
3705+
let events = room.messages(None, None, 3, Direction::Forward).await.unwrap().unwrap();
3706+
3707+
assert_eq!(events.len(), 0);
3708+
3709+
let events = room.messages(None, None, 3, Direction::Backward).await.unwrap().unwrap();
3710+
3711+
let expected_events = [
3712+
event_id!("$098237280074GZeOm:localhost"),
3713+
event_id!("$15275047031IXQRi:localhost"),
3714+
event_id!("$15275046980maRLj:localhost"),
3715+
];
3716+
3717+
assert_eq!(events.len(), expected_events.len());
3718+
assert!(events
3719+
.iter()
3720+
.map(|event| event.event_id())
3721+
.zip(&expected_events)
3722+
.all(|(a, b)| a.as_ref().unwrap() == b));
3723+
3724+
// Try to get the timeline starting at an event not known to the store.
3725+
let events = room
3726+
.messages(Some(&event_id!("$f3h4d129462ha:example.com")), None, 3, Direction::Backward)
3727+
.await
3728+
.unwrap()
3729+
.unwrap();
3730+
3731+
let expected_events = [
3732+
event_id!("$f3h4d129462ha:example.com"),
3733+
event_id!("$143273582443PhrSnbefore1:example.org"),
3734+
event_id!("$143273582443PhrSnbefore2:example.org"),
3735+
];
3736+
3737+
assert_eq!(events.len(), expected_events.len());
3738+
assert!(events
3739+
.iter()
3740+
.map(|event| event.event_id())
3741+
.zip(&expected_events)
3742+
.all(|(a, b)| a.as_ref().unwrap() == b));
3743+
3744+
mocked_context.assert();
3745+
3746+
let expected_events = [
3747+
event_id!("$152037280074GZeOm:localhost"),
3748+
event_id!("$1444812213350496Caaaf:example.com"),
3749+
event_id!("$1444812213350496Cbbbf:example.com"),
3750+
event_id!("$1444812213350496Ccccf:example.com"),
3751+
];
3752+
3753+
let events = room
3754+
.messages(
3755+
Some(&event_id!("$152037280074GZeOm:localhost")),
3756+
None,
3757+
expected_events.len() as u32,
3758+
Direction::Backward,
3759+
)
3760+
.await
3761+
.unwrap()
3762+
.unwrap();
3763+
3764+
assert_eq!(events.len(), expected_events.len());
3765+
assert!(events
3766+
.iter()
3767+
.map(|event| event.event_id())
3768+
.zip(&expected_events)
3769+
.all(|(a, b)| a.as_ref().unwrap() == b));
3770+
3771+
let events = room
3772+
.messages(
3773+
Some(&event_id!("$1444812213350496Ccccf:example.com")),
3774+
None,
3775+
expected_events.len() as u32,
3776+
Direction::Forward,
3777+
)
3778+
.await
3779+
.unwrap()
3780+
.unwrap();
3781+
3782+
assert_eq!(events.len(), expected_events.len());
3783+
assert!(events
3784+
.iter()
3785+
.rev()
3786+
.map(|event| event.event_id())
3787+
.zip(&expected_events)
3788+
.all(|(a, b)| a.as_ref().unwrap() == b));
3789+
3790+
let end_event = event_id!("$1444812213350496Cbbbf:example.com");
3791+
let events = room
3792+
.messages(
3793+
Some(&event_id!("$152037280074GZeOm:localhost")),
3794+
Some(&end_event),
3795+
expected_events.len() as u32,
3796+
Direction::Backward,
3797+
)
3798+
.await
3799+
.unwrap()
3800+
.unwrap();
3801+
3802+
assert_eq!(events.len(), 3);
3803+
assert_eq!(events.last().unwrap().event_id().unwrap(), end_event);
3804+
assert!(events
3805+
.iter()
3806+
.map(|event| event.event_id())
3807+
.zip(&expected_events[0..4])
3808+
.any(|(a, b)| a.as_ref().unwrap() == b));
3809+
3810+
let end_event = event_id!("$1444812213350496Cbbbf:example.com");
3811+
let events = room
3812+
.messages(
3813+
Some(&event_id!("$1444812213350496Ccccf:example.com")),
3814+
Some(&end_event),
3815+
expected_events.len() as u32,
3816+
Direction::Forward,
3817+
)
3818+
.await
3819+
.unwrap()
3820+
.unwrap();
3821+
3822+
assert_eq!(events.len(), 2);
3823+
assert_eq!(events.last().unwrap().event_id().unwrap(), end_event);
3824+
assert!(events
3825+
.iter()
3826+
.rev()
3827+
.map(|event| event.event_id())
3828+
.zip(&expected_events[2..])
3829+
.all(|(a, b)| a.as_ref().unwrap() == b));
3830+
3831+
mocked_messages.assert();
3832+
}
36533833
}

0 commit comments

Comments
 (0)