diff options
author | Christian Mollekopf <chrigi_1@fastmail.fm> | 2018-05-18 10:46:15 +0200 |
---|---|---|
committer | Christian Mollekopf <chrigi_1@fastmail.fm> | 2018-05-18 10:46:15 +0200 |
commit | 2485dbb0f287d93061bc5098a8e11358d3d0d6f9 (patch) | |
tree | 03db841075f624565632b59f2dfd947eb6b6382f /tests/mailtest.cpp | |
parent | 172e8c59defdc83ee11af3de923847024ed1f7e2 (diff) | |
download | sink-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/mailtest.cpp')
-rw-r--r-- | tests/mailtest.cpp | 59 |
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 | |||
478 | void 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 | } | ||