File indexing completed on 2024-04-28 05:18:34

0001 /*
0002   SPDX-FileCopyrightText: 2009 Bertjan Broeksema <broeksema@kde.org>
0003 
0004   SPDX-License-Identifier: LGPL-2.0-or-later
0005 */
0006 
0007 #include "mboxbenchmark.h"
0008 
0009 #include <QCryptographicHash>
0010 
0011 #include <QTemporaryDir>
0012 #include <QTest>
0013 
0014 QTEST_MAIN(MBoxBenchmark)
0015 
0016 #include "test-entries.h"
0017 
0018 using namespace KMBox;
0019 
0020 static const char *testDir = "libmbox-unit-test";
0021 static const char *testFile = "test-mbox-file";
0022 
0023 QString MBoxBenchmark::fileName()
0024 {
0025     return mTempDir->path() + QLatin1Char('/') + QLatin1StringView(testFile);
0026 }
0027 
0028 void MBoxBenchmark::initTestCase()
0029 {
0030     mTempDir = new QTemporaryDir(QDir::tempPath() + QLatin1Char('/') + QLatin1StringView(testDir));
0031     mMail1 = KMime::Message::Ptr(new KMime::Message);
0032     mMail1->setContent(KMime::CRLFtoLF(sEntry1));
0033     mMail1->parse();
0034 }
0035 
0036 void MBoxBenchmark::cleanupTestCase()
0037 {
0038     mTempDir->remove();
0039     delete mTempDir;
0040 }
0041 
0042 void MBoxBenchmark::testNoLockPerformance()
0043 {
0044     MBox mbox;
0045     mbox.setLockType(MBox::None);
0046     mbox.load(fileName());
0047 
0048     for (int i = 0; i < 1000; ++i) {
0049         mbox.appendMessage(mMail1);
0050     }
0051 
0052     mbox.save(fileName());
0053 
0054     QBENCHMARK {
0055         MBox mbox2;
0056         mbox2.setLockType(MBox::None);
0057         mbox2.setUnlockTimeout(5000);
0058         mbox2.load(fileName());
0059         const auto lst = mbox2.entries();
0060         for (const MBoxEntry &entry : lst) {
0061             auto mail = mbox2.readMessage(entry);
0062             delete mail;
0063         }
0064     }
0065 }
0066 
0067 void MBoxBenchmark::testProcfileLockPerformance()
0068 {
0069     mMail1 = KMime::Message::Ptr(new KMime::Message);
0070     mMail1->setContent(KMime::CRLFtoLF(sEntry1));
0071     mMail1->parse();
0072 
0073     MBox mbox;
0074     mbox.setLockType(MBox::ProcmailLockfile);
0075     mbox.load(fileName());
0076     for (int i = 0; i < 1000; ++i) {
0077         mbox.appendMessage(mMail1);
0078     }
0079 
0080     mbox.save(fileName());
0081 
0082     QBENCHMARK {
0083         MBox mbox2;
0084         mbox2.setLockType(MBox::ProcmailLockfile);
0085         mbox2.load(fileName());
0086         mbox2.setUnlockTimeout(5000); // Keep the mbox locked for five seconds.
0087 
0088         const auto lst = mbox2.entries();
0089         for (const MBoxEntry &entry : lst) {
0090             auto mail = mbox2.readMessage(entry);
0091             delete mail;
0092         }
0093     }
0094 }
0095 
0096 void MBoxBenchmark::voidTestMD5Performance()
0097 {
0098     MBox mbox;
0099     mbox.setLockType(MBox::None);
0100     mbox.load(fileName());
0101 
0102     for (int i = 0; i < 1000; ++i) {
0103         mbox.appendMessage(mMail1);
0104     }
0105 
0106     mbox.save(fileName());
0107 
0108     QBENCHMARK {
0109         QFile file(fileName());
0110         QVERIFY(file.exists());
0111         QVERIFY(file.open(QIODevice::ReadOnly));
0112 
0113         QCryptographicHash hash(QCryptographicHash::Md5);
0114         qint64 blockSize = 512 * 1024; // Read blocks of 512K
0115 
0116         while (!file.atEnd()) {
0117             hash.addData(file.read(blockSize));
0118         }
0119 
0120         file.close();
0121     }
0122 }
0123 
0124 #include "moc_mboxbenchmark.cpp"