1 /* 2 SPDX-FileCopyrightText: 2009 Klaralvdalens Datakonsult AB, a KDAB Group company, info@kdab.net 3 SPDX-FileCopyrightText: 2009 Leo Franchi <lfranchi@kde.org> 4 5 SPDX-License-Identifier: LGPL-2.0-or-later 6 */ 7 8 #include "signandencrypttest.h" 9 10 #include "cryptofunctions.h" 11 #include "qtest_messagecomposer.h" 12 #include <QTest> 13 14 #include <KMime/Content> 15 16 #include <Libkleo/Enum> 17 18 #include <MessageComposer/Composer> 19 #include <MessageComposer/EncryptJob> 20 #include <MessageComposer/GlobalPart> 21 #include <MessageComposer/MainTextJob> 22 #include <MessageComposer/SignJob> 23 #include <MessageComposer/TextPart> 24 25 #include <MimeTreeParser/NodeHelper> 26 #include <setupenv.h> 27 28 #include <MessageCore/NodeHelper> 29 30 QTEST_MAIN(SignAndEncryptTest) 31 32 using namespace MessageComposer; 33 initTestCase()34void SignAndEncryptTest::initTestCase() 35 { 36 Test::setupEnv(); 37 } 38 testContent()39void SignAndEncryptTest::testContent() 40 { 41 const std::vector<GpgME::Key> &keys = Test::getKeys(); 42 43 Composer composer; 44 45 const QVector<QByteArray> charsets = {"us-ascii"}; 46 composer.globalPart()->setCharsets(charsets); 47 48 TextPart part; 49 part.setWordWrappingEnabled(false); 50 part.setCleanPlainText(QStringLiteral("one flew over the cuckoo's nest")); 51 52 auto mainTextJob = new MainTextJob(&part, &composer); 53 auto sJob = new SignJob(&composer); 54 auto eJob = new EncryptJob(&composer); 55 56 QVERIFY(mainTextJob); 57 58 VERIFYEXEC(mainTextJob); 59 60 const QStringList recipients = {QStringLiteral("test@kolab.org")}; 61 62 sJob->setContent(mainTextJob->content()); 63 sJob->setSigningKeys(keys); 64 sJob->setCryptoMessageFormat(Kleo::OpenPGPMIMEFormat); 65 66 eJob->setCryptoMessageFormat(Kleo::OpenPGPMIMEFormat); 67 eJob->setRecipients(recipients); 68 eJob->setEncryptionKeys(keys); 69 70 eJob->appendSubjob(sJob); 71 72 VERIFYEXEC(eJob); 73 74 KMime::Content *result = eJob->content(); 75 QVERIFY(result); 76 result->assemble(); 77 78 ComposerTestUtil::verifySignatureAndEncryption(result, QStringLiteral("one flew over the cuckoo's nest").toUtf8(), Kleo::OpenPGPMIMEFormat); 79 80 delete result; 81 } 82 testHeaders()83void SignAndEncryptTest::testHeaders() 84 { 85 const std::vector<GpgME::Key> &keys = Test::getKeys(); 86 87 Composer composer; 88 auto sJob = new SignJob(&composer); 89 auto eJob = new EncryptJob(&composer); 90 91 QVERIFY(sJob); 92 QVERIFY(eJob); 93 94 const QByteArray data(QStringLiteral("one flew over the cuckoo's nest").toUtf8()); 95 auto content = new KMime::Content; 96 content->setBody(data); 97 98 const QStringList recipients = {QStringLiteral("test@kolab.org")}; 99 100 sJob->setContent(content); 101 sJob->setSigningKeys(keys); 102 sJob->setCryptoMessageFormat(Kleo::OpenPGPMIMEFormat); 103 104 eJob->setCryptoMessageFormat(Kleo::OpenPGPMIMEFormat); 105 eJob->setRecipients(recipients); 106 eJob->setEncryptionKeys(keys); 107 108 eJob->appendSubjob(sJob); 109 110 VERIFYEXEC(eJob); 111 112 KMime::Content *result = eJob->content(); 113 QVERIFY(result); 114 result->assemble(); 115 116 QVERIFY(result->contentType(false)); 117 QCOMPARE(result->contentType()->mimeType(), "multipart/encrypted"); 118 QCOMPARE(result->contentType()->charset(), "ISO-8859-1"); 119 QCOMPARE(result->contentType()->parameter(QStringLiteral("protocol")), QStringLiteral("application/pgp-encrypted")); 120 QCOMPARE(result->contentTransferEncoding()->encoding(), KMime::Headers::CE7Bit); 121 122 delete result; 123 } 124