From e452707fdfbd61be1e5633b516b653b7337e7865 Mon Sep 17 00:00:00 2001 From: Christian Mollekopf Date: Mon, 29 May 2017 16:17:04 +0200 Subject: Reduced the messagetreeparser to aproximately what we actually require While in a much more managable state it's still not pretty. However, further refactoring can now gradually happen as we need to do further work on it. Things that should happen eventually: * Simplify the logic that creates the messageparts (we don't need the whole formatter plugin complexity) * Get rid of the nodehelper (let the parts hold the necessary data) * Get rid of partmetadata (let the part handleit) --- .../mimetreeparser/autotests/cryptohelpertest.cpp | 144 +++++++++++++++++++++ 1 file changed, 144 insertions(+) create mode 100644 framework/src/domain/mime/mimetreeparser/autotests/cryptohelpertest.cpp (limited to 'framework/src/domain/mime/mimetreeparser/autotests/cryptohelpertest.cpp') diff --git a/framework/src/domain/mime/mimetreeparser/autotests/cryptohelpertest.cpp b/framework/src/domain/mime/mimetreeparser/autotests/cryptohelpertest.cpp new file mode 100644 index 00000000..251e657d --- /dev/null +++ b/framework/src/domain/mime/mimetreeparser/autotests/cryptohelpertest.cpp @@ -0,0 +1,144 @@ +/* Copyright 2015 Sandro Knauß + + This program is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public License as + published by the Free Software Foundation; either version 2 of + the License or (at your option) version 3 or any later version + accepted by the membership of KDE e.V. (or its successor approved + by the membership of KDE e.V.), which shall act as a proxy + defined in Section 14 of version 3 of the license. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . +*/ +#include "cryptohelpertest.h" + +#include "cryptohelper.h" + +#include + +using namespace MimeTreeParser; + +void CryptoHelperTest::testPMFDEmpty() +{ + QCOMPARE(prepareMessageForDecryption("").count(), 0); +} + +void CryptoHelperTest::testPMFDWithNoPGPBlock() +{ + const QByteArray text = "testblabla"; + const QList blocks = prepareMessageForDecryption(text); + QCOMPARE(blocks.count(), 1); + QCOMPARE(blocks[0].text(), text); + QCOMPARE(blocks[0].type(), NoPgpBlock); +} + +void CryptoHelperTest::testPGPBlockType() +{ + const QString blockText = QStringLiteral("text"); + const QString preString = QStringLiteral("before\n"); + for (int i = 1; i <= PrivateKeyBlock; ++i) { + QString name; + switch (i) { + case PgpMessageBlock: + name = QStringLiteral("MESSAGE"); + break; + case MultiPgpMessageBlock: + name = QStringLiteral("MESSAGE PART"); + break; + case SignatureBlock: + name = QStringLiteral("SIGNATURE"); + break; + case ClearsignedBlock: + name = QStringLiteral("SIGNED MESSAGE"); + break; + case PublicKeyBlock: + name = QStringLiteral("PUBLIC KEY BLOCK"); + break; + case PrivateKeyBlock: + name = QStringLiteral("PRIVATE KEY BLOCK"); + break; + } + QString text = QLatin1String("-----BEGIN PGP ") + name + QLatin1String("\n") + blockText; + QList blocks = prepareMessageForDecryption(preString.toLatin1() + text.toLatin1()); + QCOMPARE(blocks.count(), 1); + QCOMPARE(blocks[0].type(), UnknownBlock); + + text += QLatin1String("\n-----END PGP ") + name + QLatin1String("\n"); + blocks = prepareMessageForDecryption(preString.toLatin1() + text.toLatin1()); + QCOMPARE(blocks.count(), 2); + QCOMPARE(blocks[1].text(), text.toLatin1()); + QCOMPARE(blocks[1].type(), static_cast(i)); + } +} + +void CryptoHelperTest::testDeterminePGPBlockType() +{ + const QString blockText = QStringLiteral("text"); + for (int i = 1; i <= PrivateKeyBlock; ++i) { + QString name; + switch (i) { + + case PgpMessageBlock: + name = QStringLiteral("MESSAGE"); + break; + case MultiPgpMessageBlock: + name = QStringLiteral("MESSAGE PART"); + break; + case SignatureBlock: + name = QStringLiteral("SIGNATURE"); + break; + case ClearsignedBlock: + name = QStringLiteral("SIGNED MESSAGE"); + break; + case PublicKeyBlock: + name = QStringLiteral("PUBLIC KEY BLOCK"); + break; + case PrivateKeyBlock: + name = QStringLiteral("PRIVATE KEY BLOCK"); + break; + } + const QString text = QLatin1String("-----BEGIN PGP ") + name + QLatin1String("\n") + blockText + QLatin1String("\n"); + const Block block = Block(text.toLatin1()); + QCOMPARE(block.text(), text.toLatin1()); + QCOMPARE(block.type(), static_cast(i)); + } +} + +void CryptoHelperTest::testEmbededPGPBlock() +{ + const QByteArray text = QByteArray("before\n-----BEGIN PGP MESSAGE-----\ncrypted - you see :)\n-----END PGP MESSAGE-----\nafter"); + const QList blocks = prepareMessageForDecryption(text); + QCOMPARE(blocks.count(), 3); + QCOMPARE(blocks[0].text(), QByteArray("before\n")); + QCOMPARE(blocks[1].text(), QByteArray("-----BEGIN PGP MESSAGE-----\ncrypted - you see :)\n-----END PGP MESSAGE-----\n")); + QCOMPARE(blocks[2].text(), QByteArray("after")); +} + +void CryptoHelperTest::testClearSignedMessage() +{ + const QByteArray text = QByteArray("before\n-----BEGIN PGP SIGNED MESSAGE-----\nsigned content\n-----BEGIN PGP SIGNATURE-----\nfancy signature\n-----END PGP SIGNATURE-----\nafter"); + const QList blocks = prepareMessageForDecryption(text); + QCOMPARE(blocks.count(), 3); + QCOMPARE(blocks[0].text(), QByteArray("before\n")); + QCOMPARE(blocks[1].text(), QByteArray("-----BEGIN PGP SIGNED MESSAGE-----\nsigned content\n-----BEGIN PGP SIGNATURE-----\nfancy signature\n-----END PGP SIGNATURE-----\n")); + QCOMPARE(blocks[2].text(), QByteArray("after")); +} + +void CryptoHelperTest::testMultipleBlockMessage() +{ + const QByteArray text = QByteArray("before\n-----BEGIN PGP SIGNED MESSAGE-----\nsigned content\n-----BEGIN PGP SIGNATURE-----\nfancy signature\n-----END PGP SIGNATURE-----\nafter\n-----BEGIN PGP MESSAGE-----\ncrypted - you see :)\n-----END PGP MESSAGE-----\n"); + const QList blocks = prepareMessageForDecryption(text); + QCOMPARE(blocks.count(), 4); + QCOMPARE(blocks[0].text(), QByteArray("before\n")); + QCOMPARE(blocks[1].text(), QByteArray("-----BEGIN PGP SIGNED MESSAGE-----\nsigned content\n-----BEGIN PGP SIGNATURE-----\nfancy signature\n-----END PGP SIGNATURE-----\n")); + QCOMPARE(blocks[2].text(), QByteArray("after\n")); + QCOMPARE(blocks[3].text(), QByteArray("-----BEGIN PGP MESSAGE-----\ncrypted - you see :)\n-----END PGP MESSAGE-----\n")); +} + +QTEST_APPLESS_MAIN(CryptoHelperTest) -- cgit v1.2.3