Commit 8d93a5d23add
tarball3 files changed+131-19
@@ -2217,7 +2217,7 @@ dependencies = [
22172217
[[package]]22182218
name = "matrix-sdk"22192219
version = "0.18.0"2220
-source = "git+ssh://brewery@pls.lobotomise.me:33/atagen/matrix-rust-sdk?rev=ec026bc9ea2393fd0cce6212b950d91ab6d36097#ec026bc9ea2393fd0cce6212b950d91ab6d36097"2220
+source = "git+ssh://brewery@pls.lobotomise.me:33/atagen/matrix-rust-sdk?rev=0f2f982989765b79c39efdc30e86eaafccf69e4a#0f2f982989765b79c39efdc30e86eaafccf69e4a"22212221
dependencies = [22222222
"anymap2",22232223
"aquamarine",@@ -2280,7 +2280,7 @@ dependencies = [
22802280
[[package]]22812281
name = "matrix-sdk-base"22822282
version = "0.18.0"2283
-source = "git+ssh://brewery@pls.lobotomise.me:33/atagen/matrix-rust-sdk?rev=ec026bc9ea2393fd0cce6212b950d91ab6d36097#ec026bc9ea2393fd0cce6212b950d91ab6d36097"2283
+source = "git+ssh://brewery@pls.lobotomise.me:33/atagen/matrix-rust-sdk?rev=0f2f982989765b79c39efdc30e86eaafccf69e4a#0f2f982989765b79c39efdc30e86eaafccf69e4a"22842284
dependencies = [22852285
"as_variant",22862286
"assert_matches",@@ -2310,7 +2310,7 @@ dependencies = [
23102310
[[package]]23112311
name = "matrix-sdk-common"23122312
version = "0.18.0"2313
-source = "git+ssh://brewery@pls.lobotomise.me:33/atagen/matrix-rust-sdk?rev=ec026bc9ea2393fd0cce6212b950d91ab6d36097#ec026bc9ea2393fd0cce6212b950d91ab6d36097"2313
+source = "git+ssh://brewery@pls.lobotomise.me:33/atagen/matrix-rust-sdk?rev=0f2f982989765b79c39efdc30e86eaafccf69e4a#0f2f982989765b79c39efdc30e86eaafccf69e4a"23142314
dependencies = [23152315
"eyeball-im",23162316
"futures-core",@@ -2333,7 +2333,7 @@ dependencies = [
23332333
[[package]]23342334
name = "matrix-sdk-crypto"23352335
version = "0.18.0"2336
-source = "git+ssh://brewery@pls.lobotomise.me:33/atagen/matrix-rust-sdk?rev=ec026bc9ea2393fd0cce6212b950d91ab6d36097#ec026bc9ea2393fd0cce6212b950d91ab6d36097"2336
+source = "git+ssh://brewery@pls.lobotomise.me:33/atagen/matrix-rust-sdk?rev=0f2f982989765b79c39efdc30e86eaafccf69e4a#0f2f982989765b79c39efdc30e86eaafccf69e4a"23372337
dependencies = [23382338
"aes",23392339
"aquamarine",@@ -2374,7 +2374,7 @@ dependencies = [
23742374
[[package]]23752375
name = "matrix-sdk-indexeddb"23762376
version = "0.18.0"2377
-source = "git+ssh://brewery@pls.lobotomise.me:33/atagen/matrix-rust-sdk?rev=ec026bc9ea2393fd0cce6212b950d91ab6d36097#ec026bc9ea2393fd0cce6212b950d91ab6d36097"2377
+source = "git+ssh://brewery@pls.lobotomise.me:33/atagen/matrix-rust-sdk?rev=0f2f982989765b79c39efdc30e86eaafccf69e4a#0f2f982989765b79c39efdc30e86eaafccf69e4a"23782378
dependencies = [23792379
"async-trait",23802380
"base64",@@ -2406,7 +2406,7 @@ dependencies = [
24062406
[[package]]24072407
name = "matrix-sdk-sqlite"24082408
version = "0.18.0"2409
-source = "git+ssh://brewery@pls.lobotomise.me:33/atagen/matrix-rust-sdk?rev=ec026bc9ea2393fd0cce6212b950d91ab6d36097#ec026bc9ea2393fd0cce6212b950d91ab6d36097"2409
+source = "git+ssh://brewery@pls.lobotomise.me:33/atagen/matrix-rust-sdk?rev=0f2f982989765b79c39efdc30e86eaafccf69e4a#0f2f982989765b79c39efdc30e86eaafccf69e4a"24102410
dependencies = [24112411
"as_variant",24122412
"async-trait",@@ -2433,7 +2433,7 @@ dependencies = [
24332433
[[package]]24342434
name = "matrix-sdk-store-encryption"24352435
version = "0.18.0"2436
-source = "git+ssh://brewery@pls.lobotomise.me:33/atagen/matrix-rust-sdk?rev=ec026bc9ea2393fd0cce6212b950d91ab6d36097#ec026bc9ea2393fd0cce6212b950d91ab6d36097"2436
+source = "git+ssh://brewery@pls.lobotomise.me:33/atagen/matrix-rust-sdk?rev=0f2f982989765b79c39efdc30e86eaafccf69e4a#0f2f982989765b79c39efdc30e86eaafccf69e4a"24372437
dependencies = [24382438
"base64",24392439
"blake3",@@ -2454,7 +2454,7 @@ dependencies = [
24542454
[[package]]24552455
name = "matrix-sdk-test"24562456
version = "0.18.0"2457
-source = "git+ssh://brewery@pls.lobotomise.me:33/atagen/matrix-rust-sdk?rev=ec026bc9ea2393fd0cce6212b950d91ab6d36097#ec026bc9ea2393fd0cce6212b950d91ab6d36097"2457
+source = "git+ssh://brewery@pls.lobotomise.me:33/atagen/matrix-rust-sdk?rev=0f2f982989765b79c39efdc30e86eaafccf69e4a#0f2f982989765b79c39efdc30e86eaafccf69e4a"24582458
dependencies = [24592459
"as_variant",24602460
"ctor",@@ -2477,7 +2477,7 @@ dependencies = [
24772477
[[package]]24782478
name = "matrix-sdk-test-macros"24792479
version = "0.18.0"2480
-source = "git+ssh://brewery@pls.lobotomise.me:33/atagen/matrix-rust-sdk?rev=ec026bc9ea2393fd0cce6212b950d91ab6d36097#ec026bc9ea2393fd0cce6212b950d91ab6d36097"2480
+source = "git+ssh://brewery@pls.lobotomise.me:33/atagen/matrix-rust-sdk?rev=0f2f982989765b79c39efdc30e86eaafccf69e4a#0f2f982989765b79c39efdc30e86eaafccf69e4a"24812481
dependencies = [24822482
"quote",24832483
"syn 2.0.119",@@ -2486,7 +2486,7 @@ dependencies = [
24862486
[[package]]24872487
name = "matrix-sdk-ui"24882488
version = "0.18.0"2489
-source = "git+ssh://brewery@pls.lobotomise.me:33/atagen/matrix-rust-sdk?rev=ec026bc9ea2393fd0cce6212b950d91ab6d36097#ec026bc9ea2393fd0cce6212b950d91ab6d36097"2489
+source = "git+ssh://brewery@pls.lobotomise.me:33/atagen/matrix-rust-sdk?rev=0f2f982989765b79c39efdc30e86eaafccf69e4a#0f2f982989765b79c39efdc30e86eaafccf69e4a"24902490
dependencies = [24912491
"as_variant",24922492
"async-rx",@@ -26,11 +26,11 @@ indexeddb = [
2626
futures-util = { version = "0.3.31", default-features = false, features = ["std"] }2727
http = "1"2828
imbl = { version = "6.1.0", default-features = false }29
-matrix-sdk = { git = "ssh://brewery@pls.lobotomise.me:33/atagen/matrix-rust-sdk", rev = "ec026bc9ea2393fd0cce6212b950d91ab6d36097", default-features = false, features = ["e2e-encryption"] }30
-matrix-sdk-base = { git = "ssh://brewery@pls.lobotomise.me:33/atagen/matrix-rust-sdk", rev = "ec026bc9ea2393fd0cce6212b950d91ab6d36097", default-features = false }31
-matrix-sdk-crypto = { git = "ssh://brewery@pls.lobotomise.me:33/atagen/matrix-rust-sdk", rev = "ec026bc9ea2393fd0cce6212b950d91ab6d36097", default-features = false }32
-matrix-sdk-store-encryption = { git = "ssh://brewery@pls.lobotomise.me:33/atagen/matrix-rust-sdk", rev = "ec026bc9ea2393fd0cce6212b950d91ab6d36097", optional = true }33
-matrix-sdk-ui = { git = "ssh://brewery@pls.lobotomise.me:33/atagen/matrix-rust-sdk", rev = "ec026bc9ea2393fd0cce6212b950d91ab6d36097", default-features = false }29
+matrix-sdk = { git = "ssh://brewery@pls.lobotomise.me:33/atagen/matrix-rust-sdk", rev = "0f2f982989765b79c39efdc30e86eaafccf69e4a", default-features = false, features = ["e2e-encryption"] }30
+matrix-sdk-base = { git = "ssh://brewery@pls.lobotomise.me:33/atagen/matrix-rust-sdk", rev = "0f2f982989765b79c39efdc30e86eaafccf69e4a", default-features = false }31
+matrix-sdk-crypto = { git = "ssh://brewery@pls.lobotomise.me:33/atagen/matrix-rust-sdk", rev = "0f2f982989765b79c39efdc30e86eaafccf69e4a", default-features = false }32
+matrix-sdk-store-encryption = { git = "ssh://brewery@pls.lobotomise.me:33/atagen/matrix-rust-sdk", rev = "0f2f982989765b79c39efdc30e86eaafccf69e4a", optional = true }33
+matrix-sdk-ui = { git = "ssh://brewery@pls.lobotomise.me:33/atagen/matrix-rust-sdk", rev = "0f2f982989765b79c39efdc30e86eaafccf69e4a", default-features = false }3434
ruma = { version = "0.16.0", default-features = false, features = ["unstable-msc2545", "unstable-msc4095"] }3535
serde = { version = "1.0.219", features = ["derive", "rc"], optional = true }3636
serde_json = { version = "1.0.143", features = ["raw_value"] }@@ -54,8 +54,8 @@ js-sys = { version = "0.3.105", optional = true }
5454
# tantivy 0.26's merger reads Instant::now() whenever debug logging is on, and that panics in5555
# wasm. both caps, since a release_max_level a host sets would otherwise win in release5656
log = { version = "0.4.29", features = ["max_level_info", "release_max_level_info"] }57
-matrix-sdk = { git = "ssh://brewery@pls.lobotomise.me:33/atagen/matrix-rust-sdk", rev = "ec026bc9ea2393fd0cce6212b950d91ab6d36097", default-features = false, features = ["js"] }58
-matrix-sdk-ui = { git = "ssh://brewery@pls.lobotomise.me:33/atagen/matrix-rust-sdk", rev = "ec026bc9ea2393fd0cce6212b950d91ab6d36097", default-features = false, features = ["js"] }57
+matrix-sdk = { git = "ssh://brewery@pls.lobotomise.me:33/atagen/matrix-rust-sdk", rev = "0f2f982989765b79c39efdc30e86eaafccf69e4a", default-features = false, features = ["js"] }58
+matrix-sdk-ui = { git = "ssh://brewery@pls.lobotomise.me:33/atagen/matrix-rust-sdk", rev = "0f2f982989765b79c39efdc30e86eaafccf69e4a", default-features = false, features = ["js"] }5959
# the sdk's own wasm reqwest leaves out stream, which the bounded media download needs6060
reqwest = { version = "0.13.1", default-features = false, features = ["stream"] }6161
uuid = { version = "1", features = ["js"] }@@ -70,8 +70,8 @@ web-sys = { version = "0.3.105", optional = true, features = [
7070
] }7171
7272
[target.'cfg(not(target_family = "wasm"))'.dev-dependencies]73
-matrix-sdk = { git = "ssh://brewery@pls.lobotomise.me:33/atagen/matrix-rust-sdk", rev = "ec026bc9ea2393fd0cce6212b950d91ab6d36097", default-features = false, features = ["testing"] }74
-matrix-sdk-test = { git = "ssh://brewery@pls.lobotomise.me:33/atagen/matrix-rust-sdk", rev = "ec026bc9ea2393fd0cce6212b950d91ab6d36097" }73
+matrix-sdk = { git = "ssh://brewery@pls.lobotomise.me:33/atagen/matrix-rust-sdk", rev = "0f2f982989765b79c39efdc30e86eaafccf69e4a", default-features = false, features = ["testing"] }74
+matrix-sdk-test = { git = "ssh://brewery@pls.lobotomise.me:33/atagen/matrix-rust-sdk", rev = "0f2f982989765b79c39efdc30e86eaafccf69e4a" }7575
tokio = { version = "1.47.1", features = ["macros", "rt-multi-thread", "signal", "time"] }7676
wiremock = "0.6.5"7777
@@ -1314,3 +1314,115 @@ async fn a_resumed_inbox_with_threaded_replies_still_answers_a_page() {
13141314
sessions.discard().await.unwrap();13151315
std::fs::remove_dir_all(root).unwrap();13161316
}1317
+1318
+#[tokio::test]1319
+async fn a_resumed_room_with_only_memberships_still_opens() {1320
+ static NEXT_TEMPORARY_PATH: AtomicUsize = AtomicUsize::new(0);1321
+1322
+ let server = MatrixMockServer::new().await;1323
+ server1324
+ .mock_versions()1325
+ .with_simplified_sliding_sync()1326
+ .ok()1327
+ .mount()1328
+ .await;1329
+ server.mock_login().ok().mount().await;1330
+ server1331
+ .mock_room_messages()1332
+ .ok(matrix_sdk::test_utils::mocks::RoomMessagesResponseTemplate::default())1333
+ .mount()1334
+ .await;1335
+ let root = std::env::temp_dir().join(format!(1336
+ "macltok-membership-room-{}-{}",1337
+ std::process::id(),1338
+ NEXT_TEMPORARY_PATH.fetch_add(1, Ordering::Relaxed)1339
+ ));1340
+ let sessions = Arc::new(EncryptedSessionStore::file(1341
+ root.join("records").join("session"),1342
+ StoreConfig::sqlite(root.join("store"), "membership room test passphrase"),1343
+ ));1344
+ let room_id = room_id!("!memberships-resume:matrix.org");1345
+ let own_user = user_id!("@cheeky_monkey:matrix.org");1346
+ let member = |event_id: &str, user: &str, ts: u64| {1347
+ json!({1348
+ "type": "m.room.member",1349
+ "event_id": event_id,1350
+ "sender": user,1351
+ "state_key": user,1352
+ "origin_server_ts": ts,1353
+ "content": { "membership": "join" },1354
+ })1355
+ };1356
+ let feed = SlidingFeed::new(1357
+ room_id.to_owned(),1358
+ vec![1359
+ json!({1360
+ "type": "m.room.create",1361
+ "event_id": "$created",1362
+ "sender": own_user,1363
+ "state_key": "",1364
+ "origin_server_ts": 1,1365
+ "content": { "room_version": "11" },1366
+ }),1367
+ member("$own-joined", own_user.as_str(), 2),1368
+ member("$alice-joined", "@alice:matrix.org", 3),1369
+ ],1370
+ );1371
+ feed.set_required_state(room_id, vec![member("$own-joined", own_user.as_str(), 2)]);1372
+ feed.mount(&server).await;1373
+1374
+ let config = EngineConfig::default()1375
+ .with_initial_history_limit(0)1376
+ .with_search_backfill_pages_per_room(0);1377
+ let session = Session::login_password(1378
+ PasswordLogin::new(server.uri(), "example", "wordpass").allow_insecure_loopback(true),1379
+ sessions.clone(),1380
+ )1381
+ .await1382
+ .unwrap();1383
+ let (engine, handle, mut events) = session.build(config.clone()).await.unwrap();1384
+ let running = tokio::spawn(engine.run());1385
+ tokio::time::timeout(Duration::from_secs(10), async {1386
+ while !handle1387
+ .rooms()1388
+ .await1389
+ .iter()1390
+ .any(|room| room.room_id == room_id)1391
+ {1392
+ tokio::time::sleep(Duration::from_millis(20)).await;1393
+ }1394
+ })1395
+ .await1396
+ .expect("the room never synced");1397
+ tokio::time::timeout(1398
+ Duration::from_secs(10),1399
+ handle.open_room(room_id.to_owned()),1400
+ )1401
+ .await1402
+ .expect("opening the room never answered before the restart")1403
+ .unwrap();1404
+ shut_down(&handle, &mut events, running).await;1405
+ drop(handle);1406
+1407
+ let Some(Restore::Resumed(session)) = Session::restore(sessions.clone()).await.unwrap() else {1408
+ panic!("the saved session did not resume");1409
+ };1410
+ let (engine, handle, mut events) = session.build(config).await.unwrap();1411
+ let running = tokio::spawn(engine.run());1412
+ receive_until(&mut events, |event| {1413
+ matches!(event, Event::Authenticated { .. })1414
+ })1415
+ .await;1416
+ tokio::time::timeout(1417
+ Duration::from_secs(10),1418
+ handle.open_room(room_id.to_owned()),1419
+ )1420
+ .await1421
+ .expect("opening the resumed room never answered")1422
+ .unwrap();1423
+ shut_down(&handle, &mut events, running).await;1424
+ drop(handle);1425
+1426
+ sessions.discard().await.unwrap();1427
+ std::fs::remove_dir_all(root).unwrap();1428
+}