summaryrefslogtreecommitdiffstats
path: root/tests
diff options
context:
space:
mode:
authorChristian Mollekopf <chrigi_1@fastmail.fm>2018-05-18 10:46:15 +0200
committerChristian Mollekopf <chrigi_1@fastmail.fm>2018-05-18 10:46:15 +0200
commit2485dbb0f287d93061bc5098a8e11358d3d0d6f9 (patch)
tree03db841075f624565632b59f2dfd947eb6b6382f /tests
parent172e8c59defdc83ee11af3de923847024ed1f7e2 (diff)
downloadsink-2485dbb0f287d93061bc5098a8e11358d3d0d6f9.tar.gz
sink-2485dbb0f287d93061bc5098a8e11358d3d0d6f9.zip
Test what happens if we add a bogus message to the imap resource.
This test currently fails because we fail to recover.
Diffstat (limited to 'tests')
-rw-r--r--tests/mailtest.cpp59
-rw-r--r--tests/mailtest.h1
2 files changed, 60 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}
diff --git a/tests/mailtest.h b/tests/mailtest.h
index b827188..757da1b 100644
--- a/tests/mailtest.h
+++ b/tests/mailtest.h
@@ -53,6 +53,7 @@ private slots:
53 void testModifyMailToDraft(); 53 void testModifyMailToDraft();
54 54
55 void testModifyMailToTrash(); 55 void testModifyMailToTrash();
56 void testBogusMessageAppend();
56}; 57};
57 58
58} 59}