summaryrefslogtreecommitdiffstats
path: root/tests/mailtest.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'tests/mailtest.cpp')
-rw-r--r--tests/mailtest.cpp59
1 files changed, 59 insertions, 0 deletions
diff --git a/tests/mailtest.cpp b/tests/mailtest.cpp
index 88cacd2..8e20fae 100644
--- a/tests/mailtest.cpp
+++ b/tests/mailtest.cpp
@@ -474,3 +474,62 @@ void MailTest::testModifyMailToTrash()
474 } 474 }
475 VERIFYEXEC(ResourceControl::inspect<ApplicationDomain::Mail>(ResourceControl::Inspection::ExistenceInspection(mail, true))); 475 VERIFYEXEC(ResourceControl::inspect<ApplicationDomain::Mail>(ResourceControl::Inspection::ExistenceInspection(mail, true)));
476} 476}
477
478void MailTest::testBogusMessageAppend()
479{
480 auto folder = Folder::create(mResourceInstanceIdentifier);
481 folder.setName("bogusfolder");
482 VERIFYEXEC(Store::create(folder));
483
484 Mail bogusMail;
485 {
486 auto mail = Mail::create(mResourceInstanceIdentifier);
487 mail.setMimeMessage("Bogus message: \0 this doesn't make any sense and contains NUL.");
488 mail.setFolder(folder);
489
490 VERIFYEXEC(Store::create(mail));
491
492 VERIFYEXEC(ResourceControl::flushMessageQueue(mResourceInstanceIdentifier));
493 auto mails = Store::read<Mail>(Query().request<Mail::Folder>().request<Mail::Subject>().request<Mail::MimeMessage>());
494 QCOMPARE(mails.size(), 1);
495 bogusMail = mails.at(0);
496
497 VERIFYEXEC(ResourceControl::flushReplayQueue(mResourceInstanceIdentifier));
498 VERIFYEXEC(ResourceControl::inspect<ApplicationDomain::Mail>(ResourceControl::Inspection::ExistenceInspection(mail, false)));
499 //The cache will be off by one (because we failed to replay)
500 // VERIFYEXEC(ResourceControl::inspect<ApplicationDomain::Folder>(ResourceControl::Inspection::CacheIntegrityInspection(folder)));
501 }
502
503
504 //Ensure we can still append further messages:
505 {
506 auto mail = Mail::create(mResourceInstanceIdentifier);
507 {
508 auto message = KMime::Message::Ptr::create();
509 message->subject(true)->fromUnicodeString("Subject", "utf8");
510 message->assemble();
511 mail.setMimeMessage(message->encodedContent(true));
512 }
513 mail.setFolder(folder);
514 VERIFYEXEC(Store::create(mail));
515
516 VERIFYEXEC(ResourceControl::flushMessageQueue(mResourceInstanceIdentifier));
517 auto mails = Store::read<Mail>(Query().request<Mail::Folder>().request<Mail::Subject>().request<Mail::MimeMessage>());
518 QCOMPARE(mails.size(), 2);
519
520 VERIFYEXEC(ResourceControl::flushReplayQueue(mResourceInstanceIdentifier));
521 //The mail is still not available, because we'll end up trying to replay the bogus mail again.
522 VERIFYEXEC(ResourceControl::inspect<ApplicationDomain::Mail>(ResourceControl::Inspection::ExistenceInspection(mail, false)));
523
524 //Fix the situation by deleting the bogus mail and retrying to sync.
525 VERIFYEXEC(Store::remove(bogusMail));
526 VERIFYEXEC(ResourceControl::flushMessageQueue(mResourceInstanceIdentifier));
527 VERIFYEXEC(ResourceControl::flushReplayQueue(mResourceInstanceIdentifier));
528
529 //This will fail because we still try to resync the previous mail
530 VERIFYEXEC(ResourceControl::inspect<ApplicationDomain::Mail>(ResourceControl::Inspection::ExistenceInspection(mail, true)));
531 //The cache will be off by one (because we failed to replay)
532 VERIFYEXEC(ResourceControl::inspect<ApplicationDomain::Folder>(ResourceControl::Inspection::CacheIntegrityInspection(folder)));
533 }
534
535}