Skip to content

Commit 04ba902

Browse files
committed
test that Autocrypt-gossip and selfavatar should never go into
full-messages and fix exclusion of gossip header, which was broken
1 parent 757cefd commit 04ba902

File tree

2 files changed

+29
-15
lines changed

2 files changed

+29
-15
lines changed

src/download.rs

Lines changed: 19 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -216,6 +216,7 @@ mod tests {
216216
use crate::headerdef::{HeaderDef, HeaderDefMap};
217217
use crate::message::Viewtype;
218218
use crate::receive_imf::receive_imf_from_inbox;
219+
use crate::mimeparser::MimeMessage;
219220
use crate::test_utils::TestContext;
220221

221222
#[test]
@@ -315,11 +316,15 @@ mod tests {
315316
}
316317
/// Tests that pre message is sent for attachment larger than `PRE_MESSAGE_ATTACHMENT_SIZE_THRESHOLD`
317318
/// Also test that pre message is sent first, before the full message
319+
/// And that Autocrypt-gossip and selfavatar never go into full-messages
318320
#[tokio::test(flavor = "multi_thread", worker_threads = 2)]
319321
async fn test_sending_pre_message() -> Result<()> {
320322
let alice = TestContext::new_alice().await;
321323
let bob = TestContext::new_bob().await;
322-
let chat = alice.create_chat(&bob).await;
324+
let fiona = TestContext::new_fiona().await;
325+
let group_id = alice
326+
.create_group_with_members("test group", &[&bob, &fiona])
327+
.await;
323328

324329
let mut msg = Message::new(Viewtype::File);
325330
msg.set_file_from_bytes(&alice.ctx, "test.bin", &[0u8; 300_000], None)?;
@@ -330,7 +335,9 @@ mod tests {
330335
msg.get_filebytes(&alice.ctx).await?.unwrap() > PRE_MESSAGE_ATTACHMENT_SIZE_THRESHOLD
331336
);
332337

333-
let msg_id = chat::send_msg(&alice.ctx, chat.id, &mut msg).await.unwrap();
338+
let msg_id = chat::send_msg(&alice.ctx, group_id, &mut msg)
339+
.await
340+
.unwrap();
334341
let smtp_rows = alice.get_smtp_rows_for_msg(msg_id).await;
335342

336343
// pre-message and full message should be present
@@ -343,13 +350,12 @@ mod tests {
343350
.2
344351
.as_bytes(),
345352
)?;
346-
let full_message = mailparse::parse_mail(
347-
smtp_rows
348-
.get(1)
349-
.expect("second element exists")
350-
.2
351-
.as_bytes(),
352-
)?;
353+
let full_message_bytes = smtp_rows
354+
.get(1)
355+
.expect("second element exists")
356+
.2
357+
.as_bytes();
358+
let full_message = mailparse::parse_mail(full_message_bytes)?;
353359

354360
assert!(
355361
pre_message
@@ -390,7 +396,10 @@ mod tests {
390396
);
391397

392398
// also test that Autocrypt-gossip and selfavatar should never go into full-messages
393-
// TODO: (this needs decryption, right?)
399+
let decrypted_full_message = MimeMessage::from_bytes(&bob.ctx, full_message_bytes).await?;
400+
assert!(!decrypted_full_message.decrypting_failed);
401+
assert_eq!(decrypted_full_message.gossiped_keys.len(), 0);
402+
assert_eq!(decrypted_full_message.user_avatar, None);
394403
Ok(())
395404
}
396405

src/mimefactory.rs

Lines changed: 10 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1145,11 +1145,12 @@ impl MimeFactory {
11451145
let fingerprint = key.dc_fingerprint().hex();
11461146
let cmd = msg.param.get_cmd();
11471147
let is_full_msg =
1148-
self.pre_message_mode != Some(PreMessageMode::FullMessage);
1149-
let should_do_gossip = is_full_msg
1150-
&& cmd == SystemMessage::MemberAddedToGroup
1151-
|| cmd == SystemMessage::SecurejoinMessage
1152-
|| multiple_recipients && {
1148+
self.pre_message_mode == Some(PreMessageMode::FullMessage);
1149+
let should_do_gossip = !is_full_msg
1150+
&& (cmd == SystemMessage::MemberAddedToGroup
1151+
|| cmd == SystemMessage::SecurejoinMessage
1152+
|| multiple_recipients)
1153+
&& {
11531154
let gossiped_timestamp: Option<i64> = context
11541155
.sql
11551156
.query_get_value(
@@ -1186,6 +1187,10 @@ impl MimeFactory {
11861187
continue;
11871188
}
11881189

1190+
debug_assert!(
1191+
self.pre_message_mode != Some(PreMessageMode::FullMessage)
1192+
);
1193+
11891194
let header = Aheader {
11901195
addr: addr.clone(),
11911196
public_key: key.clone(),

0 commit comments

Comments
 (0)