From 6ee8b07cfe0ba995ece2c1df13a465dac30466bf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Damir=20Jeli=C4=87?= Date: Thu, 13 Aug 2020 15:03:28 +0200 Subject: [PATCH] crypto: Test that session expiration works correctly. --- matrix_sdk_crypto/src/olm/group_sessions.rs | 49 +++++++++++++++++++++ 1 file changed, 49 insertions(+) diff --git a/matrix_sdk_crypto/src/olm/group_sessions.rs b/matrix_sdk_crypto/src/olm/group_sessions.rs index ba349fbd..5073934f 100644 --- a/matrix_sdk_crypto/src/olm/group_sessions.rs +++ b/matrix_sdk_crypto/src/olm/group_sessions.rs @@ -468,3 +468,52 @@ impl std::fmt::Debug for OutboundGroupSession { .finish() } } + +#[cfg(test)] +mod test { + use std::{thread::sleep, time::Duration}; + + use matrix_sdk_common::{ + events::room::message::{MessageEventContent, TextMessageEventContent}, + identifiers::{room_id, user_id}, + }; + + use super::EncryptionSettings; + use crate::Account; + + #[tokio::test] + async fn expiration() { + let settings = EncryptionSettings { + rotation_period_msgs: 1, + ..Default::default() + }; + + let account = Account::new(&user_id!("@alice:example.org"), "DEVICEID".into()); + let (session, _) = account + .create_group_session_pair(&room_id!("!test_room:example.org"), settings) + .await + .unwrap(); + + assert!(!session.expired()); + let _ = session + .encrypt(MessageEventContent::Text(TextMessageEventContent::plain( + "Test message", + ))) + .await; + assert!(session.expired()); + + let settings = EncryptionSettings { + rotation_period: Duration::from_millis(100), + ..Default::default() + }; + + let (session, _) = account + .create_group_session_pair(&room_id!("!test_room:example.org"), settings) + .await + .unwrap(); + + assert!(!session.expired()); + sleep(Duration::from_millis(110)); + assert!(session.expired()); + } +}