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"