Changeset View
Changeset View
Standalone View
Standalone View
messagecomposer/autotests/encryptjobtest.cpp
Show All 24 Lines | |||||
25 | #include "setupenv.h" | 25 | #include "setupenv.h" | ||
26 | 26 | | |||
27 | #include <KMime/Content> | 27 | #include <KMime/Content> | ||
28 | 28 | | |||
29 | #include <Libkleo/Enum> | 29 | #include <Libkleo/Enum> | ||
30 | 30 | | |||
31 | #include <MessageComposer/Composer> | 31 | #include <MessageComposer/Composer> | ||
32 | #include <MessageComposer/EncryptJob> | 32 | #include <MessageComposer/EncryptJob> | ||
33 | #include <MessageComposer/GlobalPart> | ||||
33 | #include <MessageComposer/MainTextJob> | 34 | #include <MessageComposer/MainTextJob> | ||
34 | #include <MessageComposer/TextPart> | 35 | #include <MessageComposer/TextPart> | ||
35 | #include <MessageComposer/GlobalPart> | 36 | #include <MessageComposer/TransparentJob> | ||
37 | #include <MessageComposer/Util> | ||||
36 | 38 | | |||
37 | #include <MimeTreeParser/ObjectTreeParser> | 39 | #include <MimeTreeParser/ObjectTreeParser> | ||
38 | #include <MimeTreeParser/NodeHelper> | 40 | #include <MimeTreeParser/NodeHelper> | ||
39 | 41 | | |||
42 | #include <QGpgME/Protocol> | ||||
43 | #include <QGpgME/DecryptVerifyJob> | ||||
44 | | ||||
45 | #include <gpgme++/verificationresult.h> | ||||
46 | #include <gpgme++/decryptionresult.h> | ||||
47 | | ||||
40 | #include <stdlib.h> | 48 | #include <stdlib.h> | ||
41 | #include <KCharsets> | 49 | #include <KCharsets> | ||
42 | 50 | | |||
43 | #include <QDebug> | 51 | #include <QDebug> | ||
44 | #include <QTest> | 52 | #include <QTest> | ||
53 | #include <decryptionresult.h> | ||||
45 | 54 | | |||
46 | QTEST_MAIN(EncryptJobTest) | 55 | QTEST_MAIN(EncryptJobTest) | ||
47 | 56 | | |||
57 | using namespace MessageComposer; | ||||
58 | | ||||
48 | void EncryptJobTest::initTestCase() | 59 | void EncryptJobTest::initTestCase() | ||
49 | { | 60 | { | ||
50 | MessageComposer::Test::setupEnv(); | 61 | MessageComposer::Test::setupEnv(); | ||
51 | } | 62 | } | ||
52 | 63 | | |||
53 | void EncryptJobTest::testContentDirect() | 64 | void EncryptJobTest::testContentDirect() | ||
54 | { | 65 | { | ||
55 | MessageComposer::Composer *composer = new MessageComposer::Composer; | 66 | MessageComposer::Composer *composer = new MessageComposer::Composer; | ||
▲ Show 20 Lines • Show All 41 Lines • ▼ Show 20 Line(s) | 99 | { | |||
97 | MessageComposer::MainTextJob *mainTextJob = new MessageComposer::MainTextJob(part, composer); | 108 | MessageComposer::MainTextJob *mainTextJob = new MessageComposer::MainTextJob(part, composer); | ||
98 | 109 | | |||
99 | QVERIFY(composer); | 110 | QVERIFY(composer); | ||
100 | QVERIFY(mainTextJob); | 111 | QVERIFY(mainTextJob); | ||
101 | 112 | | |||
102 | VERIFYEXEC(mainTextJob); | 113 | VERIFYEXEC(mainTextJob); | ||
103 | 114 | | |||
104 | std::vector< GpgME::Key > keys = MessageComposer::Test::getKeys(); | 115 | std::vector< GpgME::Key > keys = MessageComposer::Test::getKeys(); | ||
105 | qDebug() << "done getting keys"; | | |||
106 | MessageComposer::EncryptJob *eJob = new MessageComposer::EncryptJob(composer); | 116 | MessageComposer::EncryptJob *eJob = new MessageComposer::EncryptJob(composer); | ||
107 | 117 | | |||
108 | QStringList recipients; | 118 | QStringList recipients; | ||
109 | recipients << QString::fromLocal8Bit("test@kolab.org"); | 119 | recipients << QString::fromLocal8Bit("test@kolab.org"); | ||
110 | 120 | | |||
111 | eJob->setCryptoMessageFormat(Kleo::OpenPGPMIMEFormat); | 121 | eJob->setCryptoMessageFormat(Kleo::OpenPGPMIMEFormat); | ||
112 | eJob->setRecipients(recipients); | 122 | eJob->setRecipients(recipients); | ||
113 | eJob->setEncryptionKeys(keys); | 123 | eJob->setEncryptionKeys(keys); | ||
114 | eJob->setContent(mainTextJob->content()); | 124 | eJob->setContent(mainTextJob->content()); | ||
115 | 125 | | |||
116 | checkEncryption(eJob); | 126 | checkEncryption(eJob); | ||
117 | } | 127 | } | ||
118 | 128 | | |||
129 | void EncryptJobTest::testContentSubjobChained() | ||||
130 | { | ||||
131 | std::vector< GpgME::Key > keys = MessageComposer::Test::getKeys(); | ||||
132 | | ||||
133 | QByteArray data(QString::fromLocal8Bit("one flew over the cuckoo's nest").toUtf8()); | ||||
134 | KMime::Message skeletonMessage; | ||||
135 | | ||||
136 | KMime::Content *content = new KMime::Content; | ||||
137 | content->contentType(true)->setMimeType("text/plain"); | ||||
138 | content->setBody(data); | ||||
139 | | ||||
140 | auto tJob = new TransparentJob; | ||||
141 | tJob->setContent(content); | ||||
142 | | ||||
143 | QStringList recipients; | ||||
144 | recipients << QString::fromLocal8Bit("test@kolab.org"); | ||||
145 | | ||||
146 | Composer composer; | ||||
147 | auto eJob = new MessageComposer::EncryptJob(&composer); | ||||
148 | | ||||
149 | eJob->setCryptoMessageFormat(Kleo::OpenPGPMIMEFormat); | ||||
150 | eJob->setRecipients(recipients); | ||||
151 | eJob->setEncryptionKeys(keys); | ||||
152 | eJob->setSkeletonMessage(&skeletonMessage); | ||||
153 | eJob->appendSubjob(tJob); | ||||
154 | | ||||
155 | checkEncryption(eJob); | ||||
156 | } | ||||
157 | | ||||
119 | void EncryptJobTest::testHeaders() | 158 | void EncryptJobTest::testHeaders() | ||
120 | { | 159 | { | ||
121 | std::vector< GpgME::Key > keys = MessageComposer::Test::getKeys(); | 160 | std::vector< GpgME::Key > keys = MessageComposer::Test::getKeys(); | ||
122 | 161 | | |||
123 | MessageComposer::EncryptJob *eJob = new MessageComposer::EncryptJob(this); | 162 | MessageComposer::EncryptJob *eJob = new MessageComposer::EncryptJob(this); | ||
124 | 163 | | |||
125 | QVERIFY(eJob); | 164 | QVERIFY(eJob); | ||
126 | 165 | | |||
Show All 19 Lines | |||||
146 | 185 | | |||
147 | QVERIFY(result->contentType(false)); | 186 | QVERIFY(result->contentType(false)); | ||
148 | QCOMPARE(result->contentType()->mimeType(), mimeType); | 187 | QCOMPARE(result->contentType()->mimeType(), mimeType); | ||
149 | QCOMPARE(result->contentType()->charset(), charset); | 188 | QCOMPARE(result->contentType()->charset(), charset); | ||
150 | QCOMPARE(result->contentType()->parameter(QString::fromLocal8Bit("protocol")), QString::fromLocal8Bit("application/pgp-encrypted")); | 189 | QCOMPARE(result->contentType()->parameter(QString::fromLocal8Bit("protocol")), QString::fromLocal8Bit("application/pgp-encrypted")); | ||
151 | QCOMPARE(result->contentTransferEncoding()->encoding(), KMime::Headers::CE7Bit); | 190 | QCOMPARE(result->contentTransferEncoding()->encoding(), KMime::Headers::CE7Bit); | ||
152 | } | 191 | } | ||
153 | 192 | | |||
193 | void EncryptJobTest::testProtectedHeaders_data() | ||||
194 | { | ||||
195 | QTest::addColumn<bool>("protectedHeaders"); | ||||
196 | QTest::addColumn<bool>("protectedHeadersObvoscate"); | ||||
197 | QTest::addColumn<QString>("referenceFile"); | ||||
198 | | ||||
199 | QTest::newRow("simple-obvoscate") << true << true << QStringLiteral("protected_headers-obvoscate.mbox"); | ||||
200 | QTest::newRow("simple-non-obvoscate") << true << false << QStringLiteral("protected_headers-non-obvoscate.mbox"); | ||||
201 | QTest::newRow("non-protected_headers") << false << false << QStringLiteral("non-protected_headers.mbox"); | ||||
202 | } | ||||
203 | | ||||
204 | void EncryptJobTest::testProtectedHeaders() | ||||
205 | { | ||||
206 | QFETCH(bool,protectedHeaders); | ||||
207 | QFETCH(bool, protectedHeadersObvoscate); | ||||
208 | QFETCH(QString, referenceFile); | ||||
209 | | ||||
210 | std::vector< GpgME::Key > keys = MessageComposer::Test::getKeys(); | ||||
211 | | ||||
212 | MessageComposer::Composer composer; | ||||
213 | MessageComposer::EncryptJob *eJob = new MessageComposer::EncryptJob(&composer); | ||||
214 | | ||||
215 | QVERIFY(eJob); | ||||
216 | | ||||
217 | const QByteArray data(QString::fromLocal8Bit("one flew over the cuckoo's nest").toUtf8()); | ||||
218 | const QString subject(QStringLiteral("asdfghjklö")); | ||||
219 | | ||||
220 | KMime::Content *content = new KMime::Content; | ||||
221 | content->contentType(true)->setMimeType("text/plain"); | ||||
222 | content->setBody(data); | ||||
223 | | ||||
224 | KMime::Message skeletonMessage; | ||||
225 | skeletonMessage.contentType(true)->setMimeType("foo/bla"); | ||||
226 | skeletonMessage.to(true)->from7BitString("to@test.de, to2@test.de"); | ||||
227 | skeletonMessage.cc(true)->from7BitString("cc@test.de, cc2@test.de"); | ||||
228 | skeletonMessage.bcc(true)->from7BitString("bcc@test.de, bcc2@test.de"); | ||||
229 | skeletonMessage.subject(true)->fromUnicodeString(subject, "utf-8"); | ||||
230 | | ||||
231 | QStringList recipients; | ||||
232 | recipients << QString::fromLocal8Bit("test@kolab.org"); | ||||
233 | | ||||
234 | eJob->setContent(content); | ||||
235 | eJob->setCryptoMessageFormat(Kleo::OpenPGPMIMEFormat); | ||||
236 | eJob->setRecipients(recipients); | ||||
237 | eJob->setEncryptionKeys(keys); | ||||
238 | eJob->setSkeletonMessage(&skeletonMessage); | ||||
239 | eJob->setProtectedHeaders(protectedHeaders); | ||||
240 | eJob->setProtectedHeadersObvoscate(protectedHeadersObvoscate); | ||||
241 | | ||||
242 | VERIFYEXEC(eJob); | ||||
243 | | ||||
244 | if (protectedHeadersObvoscate) { | ||||
245 | QCOMPARE(skeletonMessage.subject()->as7BitString(false), "..."); | ||||
246 | } else { | ||||
247 | QCOMPARE(skeletonMessage.subject()->asUnicodeString(), subject); | ||||
248 | } | ||||
249 | | ||||
250 | KMime::Content *result = eJob->content(); | ||||
251 | result->assemble(); | ||||
252 | | ||||
253 | KMime::Content *encPart = MessageComposer::Util::findTypeInMessage(result, "application", "octet-stream"); | ||||
254 | KMime::Content tempNode; | ||||
mlaurent: Mem leak as it never deleted no ? | |||||
255 | { | ||||
256 | QByteArray plainText; | ||||
257 | auto job = QGpgME::openpgp()->decryptVerifyJob(); | ||||
258 | job->exec(encPart->encodedBody(), plainText); | ||||
259 | | ||||
260 | tempNode.setContent(KMime::CRLFtoLF(plainText.constData())); | ||||
261 | tempNode.parse(); | ||||
262 | } | ||||
263 | if (protectedHeadersObvoscate) { | ||||
264 | tempNode.contentType(false)->setBoundary("123456789"); | ||||
265 | tempNode.assemble(); | ||||
266 | } | ||||
267 | | ||||
268 | delete result; | ||||
269 | | ||||
270 | QFile f(referenceFile); | ||||
271 | QVERIFY(f.open(QIODevice::WriteOnly | QIODevice::Truncate)); | ||||
272 | const QByteArray encodedContent(tempNode.encodedContent()); | ||||
273 | f.write(encodedContent); | ||||
274 | if (!encodedContent.endsWith('\n')) { | ||||
mlaurent: endsWith('\n') | |||||
275 | f.write("\n"); | ||||
276 | } | ||||
277 | f.close(); | ||||
278 | | ||||
279 | Test::compareFile(referenceFile, QStringLiteral(MAIL_DATA_DIR "/")+referenceFile); | ||||
280 | } | ||||
281 | | ||||
154 | void EncryptJobTest::checkEncryption(MessageComposer::EncryptJob *eJob) | 282 | void EncryptJobTest::checkEncryption(MessageComposer::EncryptJob *eJob) | ||
155 | { | 283 | { | ||
156 | VERIFYEXEC(eJob); | 284 | VERIFYEXEC(eJob); | ||
157 | 285 | | |||
158 | KMime::Content *result = eJob->content(); | 286 | KMime::Content *result = eJob->content(); | ||
159 | Q_ASSERT(result); | 287 | Q_ASSERT(result); | ||
160 | result->assemble(); | 288 | result->assemble(); | ||
161 | 289 | | |||
162 | ComposerTestUtil::verifyEncryption(result, QString::fromLocal8Bit("one flew over the cuckoo's nest").toUtf8(), Kleo::OpenPGPMIMEFormat); | 290 | ComposerTestUtil::verifyEncryption(result, QString::fromLocal8Bit("one flew over the cuckoo's nest").toUtf8(), Kleo::OpenPGPMIMEFormat); | ||
163 | } | 291 | } |
Mem leak as it never deleted no ?