Skip to content

Commit e50a48d

Browse files
committed
test(oauth): Add some more tests for the MSC4388 QR login variant
1 parent 8a3d947 commit e50a48d

File tree

4 files changed

+549
-101
lines changed

4 files changed

+549
-101
lines changed

crates/matrix-sdk/src/authentication/oauth/qrcode/grant.rs

Lines changed: 60 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -678,11 +678,11 @@ mod test {
678678
);
679679
}
680680

681-
#[async_test]
682-
async fn test_grant_login_with_generated_qr_code() {
681+
async fn test_grant_login_with_generated_qr_code(msc_4388: bool) {
683682
let server = MatrixMockServer::new().await;
684683
let rendezvous_server =
685-
MockedRendezvousServer::new(server.server(), "abcdEFG12345", Duration::MAX).await;
684+
MockedRendezvousServer::new(server.server(), "abcdEFG12345", Duration::MAX, msc_4388)
685+
.await;
686686
debug!("Set up rendezvous server mock at {}", rendezvous_server.rendezvous_url);
687687

688688
let device_authorization_grant = AuthorizationGrant {
@@ -727,10 +727,15 @@ mod test {
727727

728728
// Prepare the login granting future.
729729
let oauth = alice.oauth();
730-
let grant = oauth
730+
let mut grant = oauth
731731
.grant_login_with_qr_code()
732732
.device_creation_timeout(Duration::from_secs(2))
733733
.generate();
734+
735+
if msc_4388 {
736+
grant.with_msc4388_support();
737+
}
738+
734739
let secrets_bundle = export_secrets_bundle(&alice)
735740
.await
736741
.expect("Alice should be able to export the secrets bundle");
@@ -823,10 +828,20 @@ mod test {
823828
}
824829

825830
#[async_test]
826-
async fn test_grant_login_with_scanned_qr_code() {
831+
async fn test_grant_login_with_generated_qr_code_msc_4108() {
832+
test_grant_login_with_generated_qr_code(false).await;
833+
}
834+
835+
#[async_test]
836+
async fn test_grant_login_with_generated_qr_code_msc_4388() {
837+
test_grant_login_with_generated_qr_code(true).await;
838+
}
839+
840+
async fn test_grant_login_with_scanned_qr_code(msc_4388: bool) {
827841
let server = MatrixMockServer::new().await;
828842
let rendezvous_server =
829-
MockedRendezvousServer::new(server.server(), "abcdEFG12345", Duration::MAX).await;
843+
MockedRendezvousServer::new(server.server(), "abcdEFG12345", Duration::MAX, msc_4388)
844+
.await;
830845
debug!("Set up rendezvous server mock at {}", rendezvous_server.rendezvous_url);
831846

832847
let device_authorization_grant = AuthorizationGrant {
@@ -857,7 +872,7 @@ mod test {
857872

858873
// Create a secure channel on the new client (Bob) and extract the QR code.
859874
let client = HttpClient::new(reqwest::Client::new(), Default::default());
860-
let channel = SecureChannel::login(client, &rendezvous_server.homeserver_url, false)
875+
let channel = SecureChannel::login(client, &rendezvous_server.homeserver_url, msc_4388)
861876
.await
862877
.expect("Bob should be able to create a secure channel.");
863878
let qr_code_data = channel.qr_code_data().clone();
@@ -949,11 +964,22 @@ mod test {
949964
bob_task.await.expect("Bob's task should finish");
950965
}
951966

967+
#[async_test]
968+
async fn test_grant_login_with_scanned_qr_code_msc_4108() {
969+
test_grant_login_with_scanned_qr_code(false).await;
970+
}
971+
972+
#[async_test]
973+
async fn test_grant_login_with_scanned_qr_code_msc_4388() {
974+
test_grant_login_with_scanned_qr_code(true).await;
975+
}
976+
952977
#[async_test]
953978
async fn test_grant_login_with_scanned_qr_code_with_homeserver_swap() {
954979
let server = MatrixMockServer::new().await;
955980
let rendezvous_server =
956-
MockedRendezvousServer::new(server.server(), "abcdEFG12345", Duration::MAX).await;
981+
MockedRendezvousServer::new(server.server(), "abcdEFG12345", Duration::MAX, false)
982+
.await;
957983
debug!("Set up rendezvous server mock at {}", rendezvous_server.rendezvous_url);
958984

959985
let device_authorization_grant = AuthorizationGrant {
@@ -1083,7 +1109,8 @@ mod test {
10831109
{
10841110
let server = MatrixMockServer::new().await;
10851111
let rendezvous_server =
1086-
MockedRendezvousServer::new(server.server(), "abcdEFG12345", Duration::MAX).await;
1112+
MockedRendezvousServer::new(server.server(), "abcdEFG12345", Duration::MAX, false)
1113+
.await;
10871114
debug!("Set up rendezvous server mock at {}", rendezvous_server.rendezvous_url);
10881115

10891116
server.mock_upload_keys().ok().expect(1).named("upload_keys").mount().await;
@@ -1200,7 +1227,8 @@ mod test {
12001227
async fn test_grant_login_with_scanned_qr_code_unexpected_message_instead_of_login_protocol() {
12011228
let server = MatrixMockServer::new().await;
12021229
let rendezvous_server =
1203-
MockedRendezvousServer::new(server.server(), "abcdEFG12345", Duration::MAX).await;
1230+
MockedRendezvousServer::new(server.server(), "abcdEFG12345", Duration::MAX, false)
1231+
.await;
12041232
debug!("Set up rendezvous server mock at {}", rendezvous_server.rendezvous_url);
12051233

12061234
server.mock_upload_keys().ok().expect(1).named("upload_keys").mount().await;
@@ -1303,7 +1331,8 @@ mod test {
13031331
async fn test_grant_login_with_generated_qr_code_device_already_exists() {
13041332
let server = MatrixMockServer::new().await;
13051333
let rendezvous_server =
1306-
MockedRendezvousServer::new(server.server(), "abcdEFG12345", Duration::MAX).await;
1334+
MockedRendezvousServer::new(server.server(), "abcdEFG12345", Duration::MAX, false)
1335+
.await;
13071336
debug!("Set up rendezvous server mock at {}", rendezvous_server.rendezvous_url);
13081337

13091338
let device_authorization_grant = AuthorizationGrant {
@@ -1429,7 +1458,8 @@ mod test {
14291458
async fn test_grant_login_with_scanned_qr_code_device_already_exists() {
14301459
let server = MatrixMockServer::new().await;
14311460
let rendezvous_server =
1432-
MockedRendezvousServer::new(server.server(), "abcdEFG12345", Duration::MAX).await;
1461+
MockedRendezvousServer::new(server.server(), "abcdEFG12345", Duration::MAX, false)
1462+
.await;
14331463
debug!("Set up rendezvous server mock at {}", rendezvous_server.rendezvous_url);
14341464

14351465
let device_authorization_grant = AuthorizationGrant {
@@ -1540,7 +1570,8 @@ mod test {
15401570
async fn test_grant_login_with_generated_qr_code_device_not_created() {
15411571
let server = MatrixMockServer::new().await;
15421572
let rendezvous_server =
1543-
MockedRendezvousServer::new(server.server(), "abcdEFG12345", Duration::MAX).await;
1573+
MockedRendezvousServer::new(server.server(), "abcdEFG12345", Duration::MAX, false)
1574+
.await;
15441575
debug!("Set up rendezvous server mock at {}", rendezvous_server.rendezvous_url);
15451576

15461577
let device_authorization_grant = AuthorizationGrant {
@@ -1676,7 +1707,8 @@ mod test {
16761707
async fn test_grant_login_with_scanned_qr_code_device_not_created() {
16771708
let server = MatrixMockServer::new().await;
16781709
let rendezvous_server =
1679-
MockedRendezvousServer::new(server.server(), "abcdEFG12345", Duration::MAX).await;
1710+
MockedRendezvousServer::new(server.server(), "abcdEFG12345", Duration::MAX, false)
1711+
.await;
16801712
debug!("Set up rendezvous server mock at {}", rendezvous_server.rendezvous_url);
16811713

16821714
let device_authorization_grant = AuthorizationGrant {
@@ -1794,9 +1826,13 @@ mod test {
17941826
#[async_test]
17951827
async fn test_grant_login_with_generated_qr_code_session_expired() {
17961828
let server = MatrixMockServer::new().await;
1797-
let rendezvous_server =
1798-
MockedRendezvousServer::new(server.server(), "abcdEFG12345", Duration::from_secs(2))
1799-
.await;
1829+
let rendezvous_server = MockedRendezvousServer::new(
1830+
server.server(),
1831+
"abcdEFG12345",
1832+
Duration::from_secs(2),
1833+
false,
1834+
)
1835+
.await;
18001836
debug!("Set up rendezvous server mock at {}", rendezvous_server.rendezvous_url);
18011837

18021838
server.mock_upload_keys().ok().expect(1).named("upload_keys").mount().await;
@@ -1869,9 +1905,13 @@ mod test {
18691905
#[async_test]
18701906
async fn test_grant_login_with_scanned_qr_code_session_expired() {
18711907
let server = MatrixMockServer::new().await;
1872-
let rendezvous_server =
1873-
MockedRendezvousServer::new(server.server(), "abcdEFG12345", Duration::from_secs(2))
1874-
.await;
1908+
let rendezvous_server = MockedRendezvousServer::new(
1909+
server.server(),
1910+
"abcdEFG12345",
1911+
Duration::from_secs(2),
1912+
false,
1913+
)
1914+
.await;
18751915
debug!("Set up rendezvous server mock at {}", rendezvous_server.rendezvous_url);
18761916

18771917
server.mock_upload_keys().ok().expect(1).named("upload_keys").mount().await;

0 commit comments

Comments
 (0)