atagen

macltok

public
Star0
Watch0
d1313f47f24eff9c7654a76b44fdf9e65ba6db5d
3
ssh://brewery@pls.lobotomise.me:33/atagen/macltok.git

Blame: tests/prepare.rs

38c4caecdb3datagen2026-09-26 13:35 UTC1
use std::time::Duration;
38c4caecdb3datagen2026-09-26 13:35 UTC2
38c4caecdb3datagen2026-09-26 13:35 UTC3
use macltok::{Engine, EngineConfig};
38c4caecdb3datagen2026-09-26 13:35 UTC4
use matrix_sdk::{
38c4caecdb3datagen2026-09-26 13:35 UTC5
    ruma::{api::client::sync::sync_events::v5, room_id, user_id},
38c4caecdb3datagen2026-09-26 13:35 UTC6
    test_utils::mocks::MatrixMockServer,
38c4caecdb3datagen2026-09-26 13:35 UTC7
};
38c4caecdb3datagen2026-09-26 13:35 UTC8
use matrix_sdk_test::{JoinedRoomBuilder, event_factory::EventFactory};
38c4caecdb3datagen2026-09-26 13:35 UTC9
use wiremock::ResponseTemplate;
38c4caecdb3datagen2026-09-26 13:35 UTC10
38c4caecdb3datagen2026-09-26 13:35 UTC11
async fn prepare_twice(encrypted: bool, member_syncs: u64) {
38c4caecdb3datagen2026-09-26 13:35 UTC12
    let server = MatrixMockServer::new().await;
38c4caecdb3datagen2026-09-26 13:35 UTC13
    server
38c4caecdb3datagen2026-09-26 13:35 UTC14
        .mock_sliding_sync()
38c4caecdb3datagen2026-09-26 13:35 UTC15
        .ok(v5::Response::new("1".to_owned()))
38c4caecdb3datagen2026-09-26 13:35 UTC16
        .mount()
38c4caecdb3datagen2026-09-26 13:35 UTC17
        .await;
38c4caecdb3datagen2026-09-26 13:35 UTC18
    let client = server.client_builder().build().await;
38c4caecdb3datagen2026-09-26 13:35 UTC19
    let room_id = room_id!("!prepare:localhost");
38c4caecdb3datagen2026-09-26 13:35 UTC20
    let factory = EventFactory::new().room(room_id);
38c4caecdb3datagen2026-09-26 13:35 UTC21
    let mut room = JoinedRoomBuilder::new(room_id).add_state_event(
38c4caecdb3datagen2026-09-26 13:35 UTC22
        factory
38c4caecdb3datagen2026-09-26 13:35 UTC23
            .member(user_id!("@example:localhost"))
38c4caecdb3datagen2026-09-26 13:35 UTC24
            .into_raw_sync_state(),
38c4caecdb3datagen2026-09-26 13:35 UTC25
    );
38c4caecdb3datagen2026-09-26 13:35 UTC26
    if encrypted {
38c4caecdb3datagen2026-09-26 13:35 UTC27
        room = room.add_state_event(
38c4caecdb3datagen2026-09-26 13:35 UTC28
            factory
38c4caecdb3datagen2026-09-26 13:35 UTC29
                .room_encryption()
38c4caecdb3datagen2026-09-26 13:35 UTC30
                .sender(user_id!("@example:localhost"))
38c4caecdb3datagen2026-09-26 13:35 UTC31
                .into_raw_sync_state(),
38c4caecdb3datagen2026-09-26 13:35 UTC32
        );
38c4caecdb3datagen2026-09-26 13:35 UTC33
    }
38c4caecdb3datagen2026-09-26 13:35 UTC34
    server.sync_room(&client, room).await;
38c4caecdb3datagen2026-09-26 13:35 UTC35
    let member: matrix_sdk::ruma::serde::Raw<
38c4caecdb3datagen2026-09-26 13:35 UTC36
        matrix_sdk::ruma::events::room::member::RoomMemberEvent,
38c4caecdb3datagen2026-09-26 13:35 UTC37
    > = factory.member(user_id!("@example:localhost")).into_raw();
38c4caecdb3datagen2026-09-26 13:35 UTC38
    server
38c4caecdb3datagen2026-09-26 13:35 UTC39
        .mock_get_members()
38c4caecdb3datagen2026-09-26 13:35 UTC40
        .respond_with(
38c4caecdb3datagen2026-09-26 13:35 UTC41
            ResponseTemplate::new(200)
38c4caecdb3datagen2026-09-26 13:35 UTC42
                .set_body_json(serde_json::json!({ "chunk": [member] }))
38c4caecdb3datagen2026-09-26 13:35 UTC43
                .set_delay(Duration::from_millis(300)),
38c4caecdb3datagen2026-09-26 13:35 UTC44
        )
38c4caecdb3datagen2026-09-26 13:35 UTC45
        .expect(member_syncs)
38c4caecdb3datagen2026-09-26 13:35 UTC46
        .mount()
38c4caecdb3datagen2026-09-26 13:35 UTC47
        .await;
dc609022bb53atagen2026-10-08 12:39 UTC48
    let encryption = server.mock_room_state_encryption();
dc609022bb53atagen2026-10-08 12:39 UTC49
    if encrypted {
dc609022bb53atagen2026-10-08 12:39 UTC50
        encryption.encrypted().mount().await;
dc609022bb53atagen2026-10-08 12:39 UTC51
    } else {
dc609022bb53atagen2026-10-08 12:39 UTC52
        encryption.plain().mount().await;
dc609022bb53atagen2026-10-08 12:39 UTC53
    }
dc609022bb53atagen2026-10-08 12:39 UTC54
    server.mock_query_keys().ok().mount().await;
38c4caecdb3datagen2026-09-26 13:35 UTC55
    let config = EngineConfig::default()
38c4caecdb3datagen2026-09-26 13:35 UTC56
        .with_initial_history_limit(0)
38c4caecdb3datagen2026-09-26 13:35 UTC57
        .with_prepare_to_send(false);
38c4caecdb3datagen2026-09-26 13:35 UTC58
    let (engine, handle, mut events) = Engine::from_client(client, config).await.unwrap();
38c4caecdb3datagen2026-09-26 13:35 UTC59
    let running = tokio::spawn(engine.run());
38c4caecdb3datagen2026-09-26 13:35 UTC60
    let draining = tokio::spawn(async move { while events.recv().await.is_some() {} });
38c4caecdb3datagen2026-09-26 13:35 UTC61
    let (first, second) = tokio::join!(
38c4caecdb3datagen2026-09-26 13:35 UTC62
        handle.prepare_to_send(room_id.to_owned()),
38c4caecdb3datagen2026-09-26 13:35 UTC63
        handle.prepare_to_send(room_id.to_owned()),
38c4caecdb3datagen2026-09-26 13:35 UTC64
    );
38c4caecdb3datagen2026-09-26 13:35 UTC65
    first.unwrap();
38c4caecdb3datagen2026-09-26 13:35 UTC66
    second.unwrap();
38c4caecdb3datagen2026-09-26 13:35 UTC67
    handle.shutdown().await.unwrap();
38c4caecdb3datagen2026-09-26 13:35 UTC68
    running.await.unwrap().unwrap();
38c4caecdb3datagen2026-09-26 13:35 UTC69
    draining.await.unwrap();
38c4caecdb3datagen2026-09-26 13:35 UTC70
    server.server().verify().await;
38c4caecdb3datagen2026-09-26 13:35 UTC71
}
38c4caecdb3datagen2026-09-26 13:35 UTC72
38c4caecdb3datagen2026-09-26 13:35 UTC73
#[tokio::test]
38c4caecdb3datagen2026-09-26 13:35 UTC74
async fn two_prepares_at_once_sync_members_once() {
38c4caecdb3datagen2026-09-26 13:35 UTC75
    prepare_twice(true, 1).await;
38c4caecdb3datagen2026-09-26 13:35 UTC76
}
38c4caecdb3datagen2026-09-26 13:35 UTC77
38c4caecdb3datagen2026-09-26 13:35 UTC78
#[tokio::test]
38c4caecdb3datagen2026-09-26 13:35 UTC79
async fn a_plain_room_needs_no_preparing() {
38c4caecdb3datagen2026-09-26 13:35 UTC80
    prepare_twice(false, 0).await;
38c4caecdb3datagen2026-09-26 13:35 UTC81
}