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()34 void SignAndEncryptTest::initTestCase()
35 {
36     Test::setupEnv();
37 }
38 
testContent()39 void 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()83 void 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