void testSetImportanceImpl(const vmime::misc::importanceHelper::Importance i, const std::string& ImportanceValue, const std::string& XPriorityValue) { vmime::ref <vmime::header> hdr = vmime::create <vmime::header>(); vmime::misc::importanceHelper::setImportanceHeader(hdr, i); VASSERT_NO_THROW("1", hdr->findField("Importance")); VASSERT_EQ("2", ImportanceValue, hdr->findField("Importance")->getValue()->generate()); VASSERT_NO_THROW("3", hdr->findField("X-Priority")); VASSERT_EQ("4", XPriorityValue, hdr->findField("X-Priority")->getValue()->generate()); }
// For Apple iCloud/Exchange IMAP server void testContinueReqWithoutSpace() { // continue_req ::= "+" SPACE (resp_text / base64) // // Some servers do not send SPACE when response text is empty. // IMAP parser should allow this in non-strict mode. // // Eg: // // C: a002 AUTHENTICATE xxx[CR][LF] // S: +[CR][LF] vmime::shared_ptr <testSocket> socket = vmime::make_shared <testSocket>(); vmime::shared_ptr <vmime::net::timeoutHandler> toh = vmime::make_shared <testTimeoutHandler>(); vmime::shared_ptr <vmime::net::imap::IMAPTag> tag = vmime::make_shared <vmime::net::imap::IMAPTag>(); socket->localSend("+\r\n"); vmime::shared_ptr <vmime::net::imap::IMAPParser> parser = vmime::make_shared <vmime::net::imap::IMAPParser> (tag, vmime::dynamicCast <vmime::net::socket>(socket), toh); parser->setStrict(false); VASSERT_NO_THROW("non-strict mode", parser->readResponse()); ++(*tag); socket->localSend("+\r\n"); parser->setStrict(true); VASSERT_THROW("strict mode", parser->readResponse(), vmime::exceptions::invalid_response); }
VMIME_TEST_LIST_END // For Apple iCloud IMAP server void testExtraSpaceInCapaResponse() { vmime::shared_ptr <testSocket> socket = vmime::make_shared <testSocket>(); vmime::shared_ptr <vmime::net::timeoutHandler> toh = vmime::make_shared <testTimeoutHandler>(); vmime::shared_ptr <vmime::net::imap::IMAPTag> tag = vmime::make_shared <vmime::net::imap::IMAPTag>(); socket->localSend( "* CAPABILITY IMAP4rev1 AUTH=ATOKEN AUTH=PLAIN \r\n" // extra space at end "a001 OK Capability completed.\r\n"); vmime::shared_ptr <vmime::net::imap::IMAPParser> parser = vmime::make_shared <vmime::net::imap::IMAPParser> (tag, vmime::dynamicCast <vmime::net::socket>(socket), toh); parser->setStrict(false); VASSERT_NO_THROW("non-strict mode", parser->readResponse(/* literalHandler */ NULL)); ++(*tag); socket->localSend( "* CAPABILITY IMAP4rev1 AUTH=ATOKEN AUTH=PLAIN \r\n" // extra space at end "a002 OK Capability completed.\r\n"); parser->setStrict(true); VASSERT_THROW("strict mode", parser->readResponse(/* literalHandler */ NULL), vmime::exceptions::invalid_response); }
void testMAILandRCPT() { vmime::ref <vmime::net::session> session = vmime::create <vmime::net::session>(); vmime::ref <vmime::net::transport> tr = session->getTransport (vmime::utility::url("smtp://localhost")); tr->setSocketFactory(vmime::create <testSocketFactory <MAILandRCPTSMTPTestSocket> >()); tr->setTimeoutHandlerFactory(vmime::create <testTimeoutHandlerFactory>()); VASSERT_NO_THROW("Connection", tr->connect()); vmime::mailbox exp("*****@*****.**"); vmime::mailboxList recips; recips.appendMailbox(vmime::create <vmime::mailbox>("*****@*****.**")); recips.appendMailbox(vmime::create <vmime::mailbox>("*****@*****.**")); recips.appendMailbox(vmime::create <vmime::mailbox>("*****@*****.**")); vmime::string data("Message data"); vmime::utility::inputStreamStringAdapter is(data); tr->send(exp, recips, is, 0); }
// When an IMAP4 client sends a FETCH (bodystructure) request to a server // that is running the Exchange Server 2007 IMAP4 service, a corrupted // response is sent as a reply // --> http://support.microsoft.com/kb/975918/en-us void testNILValueInBodyFldEnc() { vmime::shared_ptr <testSocket> socket = vmime::make_shared <testSocket>(); vmime::shared_ptr <vmime::net::timeoutHandler> toh = vmime::make_shared <testTimeoutHandler>(); vmime::shared_ptr <vmime::net::imap::IMAPTag> tag = vmime::make_shared <vmime::net::imap::IMAPTag>(); const char* resp = "* 7970 FETCH (UID 8036 FLAGS () BODYSTRUCTURE (\"text\" \"html\" (\"charset\" \"utf-8\") NIL NIL NIL 175501 1651 NIL NIL NIL NIL) RFC822.HEADER {3}\r\nx\r\n)\r\na001 OK FETCH complete\r\n"; socket->localSend(resp); vmime::shared_ptr <vmime::net::imap::IMAPParser> parser = vmime::make_shared <vmime::net::imap::IMAPParser>(); parser->setTag(tag); parser->setSocket(socket); parser->setTimeoutHandler(toh); parser->setStrict(false); VASSERT_NO_THROW("non-strict mode", parser->readResponse()); ++(*tag); socket->localSend(resp); parser->setStrict(true); VASSERT_THROW("strict mode", parser->readResponse(), vmime::exceptions::invalid_response); }
VMIME_TEST_LIST_END void testBadValueType() { vmime::headerFieldFactory *hfactory = vmime::headerFieldFactory::getInstance(); // "To" header field accepts values of type "addressList" vmime::ref <vmime::headerField> to = hfactory->create(vmime::fields::TO); VASSERT_THROW("to", to->setValue(vmime::mailbox("*****@*****.**")), vmime::exceptions::bad_field_value_type); // Unregistered header field accepts any value type vmime::ref <vmime::headerField> custom = hfactory->create("X-MyCustomHeader"); VASSERT_NO_THROW("custom/1", custom->setValue(vmime::mailbox("*****@*****.**"))); VASSERT_NO_THROW("custom/2", custom->setValue(vmime::text("field value text"))); }
VMIME_TEST_LIST_END // resetImportance void testResetImportance() { vmime::ref <vmime::header> hdr = vmime::create <vmime::header>(); hdr->getField("Importance")->setValue("xxx"); hdr->getField("X-Priority")->setValue("yyy"); VASSERT_NO_THROW("1", hdr->findField("Importance")); VASSERT_NO_THROW("2", hdr->findField("X-Priority")); vmime::misc::importanceHelper::resetImportanceHeader(hdr); VASSERT_THROW("3", hdr->findField("Importance"), vmime::exceptions::no_such_field); VASSERT_THROW("4", hdr->findField("X-Priority"), vmime::exceptions::no_such_field); }
VMIME_TEST_LIST_END // resetImportance void testResetImportance() { vmime::shared_ptr <vmime::header> hdr = vmime::make_shared <vmime::header>(); hdr->getField("Importance")->setValue("xxx"); hdr->getField("X-Priority")->setValue("yyy"); VASSERT_NO_THROW("1", hdr->findField("Importance")); VASSERT_NO_THROW("2", hdr->findField("X-Priority")); vmime::misc::importanceHelper::resetImportanceHeader(hdr); VASSERT_NULL("3", hdr->findField("Importance")); VASSERT_NULL("4", hdr->findField("X-Priority")); }
void testCreateFolderImpl(const vmime::string* const dirs, const vmime::string* const files) { createMaildir(dirs, files); vmime::ref <vmime::net::store> store = createAndConnectStore(); vmime::ref <vmime::net::folder> rootFolder = store->getRootFolder(); VASSERT("Before", !store->getFolder(fpath() / "Folder" / "NewFolder")->exists()); VASSERT_NO_THROW("Creation", store->getFolder(fpath() / "Folder" / "NewFolder")-> create(vmime::net::folder::TYPE_CONTAINS_MESSAGES)); VASSERT("After", store->getFolder(fpath() / "Folder" / "NewFolder")->exists()); destroyMaildir(); }
// "body_fld_lang" is optional after "body_fld_dsp" in "body_ext_mpart" (Yahoo) void testFETCHResponse_optional_body_fld_lang() { vmime::shared_ptr <testSocket> socket = vmime::make_shared <testSocket>(); vmime::shared_ptr <vmime::net::timeoutHandler> toh = vmime::make_shared <testTimeoutHandler>(); vmime::shared_ptr <vmime::net::imap::IMAPTag> tag = vmime::make_shared <vmime::net::imap::IMAPTag>(); const char* resp = "* 1 FETCH (UID 7 RFC822.SIZE 694142 BODYSTRUCTURE (((\"text\" \"plain\" (\"charset\" \"utf-8\") NIL NIL \"7bit\" 0 0 NIL NIL NIL NIL)(\"text\" \"html\" (\"charset\" \"utf-8\") NIL NIL \"7bit\" 193 0 NIL NIL NIL NIL) \"alternative\" (\"boundary\" \"----=_Part_536_109505883.1410847112666\") NIL)(\"image\" \"jpeg\" NIL \"<*****@*****.**>\" NIL \"base64\" 351784 NIL (\"attachment\" (\"name\" \"att2\" \"filename\" \"9.jpg\")) NIL NIL)(\"image\" \"jpeg\" NIL \"<*****@*****.**>\" NIL \"base64\" 337676 NIL (\"attachment\" (\"name\" \"att3\" \"filename\" \"10.jpg\")) NIL NIL) \"mixed\" (\"boundary\" \"----=_Part_537_1371134700.1410847112668\") NIL) RFC822.HEADER {3}\r\nx\r\n)\r\na001 OK FETCH complete\r\n"; socket->localSend(resp); vmime::shared_ptr <vmime::net::imap::IMAPParser> parser = vmime::make_shared <vmime::net::imap::IMAPParser>(); parser->setTag(tag); parser->setSocket(socket); parser->setTimeoutHandler(toh); VASSERT_NO_THROW("parse", parser->readResponse()); }