File indexing completed on 2024-12-08 12:47:26
0001 /** 0002 * Copyright (C) 2007 Brad Hards <bradh@frogmouth.net> 0003 * 0004 * Redistribution and use in source and binary forms, with or without 0005 * modification, are permitted provided that the following conditions 0006 * are met: 0007 * 0008 * 1. Redistributions of source code must retain the above copyright 0009 * notice, this list of conditions and the following disclaimer. 0010 * 2. Redistributions in binary form must reproduce the above copyright 0011 * notice, this list of conditions and the following disclaimer in the 0012 * documentation and/or other materials provided with the distribution. 0013 * 0014 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR 0015 * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES 0016 * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. 0017 * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, 0018 * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT 0019 * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 0020 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 0021 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 0022 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF 0023 * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 0024 */ 0025 0026 #include <QtCrypto> 0027 #include <QtTest/QtTest> 0028 0029 #ifdef QT_STATICPLUGIN 0030 #include "import_plugins.h" 0031 #endif 0032 0033 class LoggerUnitTest : public QObject 0034 { 0035 Q_OBJECT 0036 0037 private Q_SLOTS: 0038 void initTestCase(); 0039 void cleanupTestCase(); 0040 void basicSetup(); 0041 void logText1(); 0042 void logText2(); 0043 void logBlob(); 0044 void logLevel(); 0045 0046 private: 0047 QCA::Initializer *m_init; 0048 }; 0049 0050 class NullLogger : public QCA::AbstractLogDevice 0051 { 0052 Q_OBJECT 0053 public: 0054 NullLogger() 0055 : QCA::AbstractLogDevice(QStringLiteral("null logger")) 0056 { 0057 } 0058 }; 0059 0060 class LastLogger : public QCA::AbstractLogDevice 0061 { 0062 Q_OBJECT 0063 public: 0064 LastLogger() 0065 : QCA::AbstractLogDevice(QStringLiteral("last logger")) 0066 { 0067 } 0068 0069 void logTextMessage(const QString &message, enum QCA::Logger::Severity severity) override 0070 { 0071 m_lastMessage = message; 0072 m_messageSeverity = severity; 0073 } 0074 0075 QString lastMessage() const 0076 { 0077 return m_lastMessage; 0078 } 0079 0080 void logBinaryMessage(const QByteArray &blob, enum QCA::Logger::Severity severity) override 0081 { 0082 m_lastBlob = blob; 0083 m_blobSeverity = severity; 0084 } 0085 0086 QByteArray lastBlob() const 0087 { 0088 return m_lastBlob; 0089 } 0090 0091 QCA::Logger::Severity lastMessageSeverity() const 0092 { 0093 return m_messageSeverity; 0094 } 0095 0096 QCA::Logger::Severity lastBlobSeverity() const 0097 { 0098 return m_blobSeverity; 0099 } 0100 0101 private: 0102 QString m_lastMessage; 0103 QByteArray m_lastBlob; 0104 QCA::Logger::Severity m_messageSeverity; 0105 QCA::Logger::Severity m_blobSeverity; 0106 }; 0107 0108 void LoggerUnitTest::initTestCase() 0109 { 0110 m_init = new QCA::Initializer; 0111 } 0112 0113 void LoggerUnitTest::cleanupTestCase() 0114 { 0115 QCA::unloadAllPlugins(); 0116 delete m_init; 0117 } 0118 0119 void LoggerUnitTest::basicSetup() 0120 { 0121 QCA::Logger *logSystem = QCA::logger(); 0122 0123 QCOMPARE(logSystem->currentLogDevices().count(), 0); 0124 0125 logSystem->setLevel(QCA::Logger::Debug); 0126 QCOMPARE(logSystem->level(), QCA::Logger::Debug); 0127 0128 NullLogger *nullLogger = new NullLogger; 0129 0130 logSystem->registerLogDevice(nullLogger); 0131 QCOMPARE(logSystem->currentLogDevices().count(), 1); 0132 QVERIFY(logSystem->currentLogDevices().contains(QStringLiteral("null logger"))); 0133 logSystem->unregisterLogDevice(QStringLiteral("null logger")); 0134 QCOMPARE(logSystem->currentLogDevices().count(), 0); 0135 0136 delete nullLogger; 0137 } 0138 0139 void LoggerUnitTest::logText1() 0140 { 0141 QCA::Logger *logSystem = QCA::logger(); 0142 0143 logSystem->logTextMessage(QStringLiteral("Sending with no recipients")); 0144 0145 LastLogger *lastlogger = new LastLogger; 0146 logSystem->registerLogDevice(lastlogger); 0147 QCOMPARE(logSystem->currentLogDevices().count(), 1); 0148 QVERIFY(logSystem->currentLogDevices().contains(QStringLiteral("last logger"))); 0149 0150 logSystem->logTextMessage(QStringLiteral("Sending to system, checking for log device")); 0151 QCOMPARE(lastlogger->lastMessage(), QStringLiteral("Sending to system, checking for log device")); 0152 QCOMPARE(lastlogger->lastMessageSeverity(), QCA::Logger::Information); 0153 0154 logSystem->logTextMessage(QStringLiteral("Sending at Error severity"), QCA::Logger::Error); 0155 QCOMPARE(lastlogger->lastMessage(), QStringLiteral("Sending at Error severity")); 0156 QCOMPARE(lastlogger->lastMessageSeverity(), QCA::Logger::Error); 0157 0158 LastLogger *lastlogger2 = new LastLogger; 0159 logSystem->registerLogDevice(lastlogger2); 0160 QCOMPARE(logSystem->currentLogDevices().count(), 2); 0161 QVERIFY(logSystem->currentLogDevices().contains(QStringLiteral("last logger"))); 0162 0163 logSystem->logTextMessage(QStringLiteral("Sending to system, checking for two log devices")); 0164 QCOMPARE(lastlogger->lastMessage(), QStringLiteral("Sending to system, checking for two log devices")); 0165 QCOMPARE(lastlogger->lastMessageSeverity(), QCA::Logger::Information); 0166 QCOMPARE(lastlogger2->lastMessage(), QStringLiteral("Sending to system, checking for two log devices")); 0167 QCOMPARE(lastlogger2->lastMessageSeverity(), QCA::Logger::Information); 0168 0169 logSystem->unregisterLogDevice(QStringLiteral("last logger")); // this will remove them both 0170 0171 QCOMPARE(logSystem->currentLogDevices().count(), 0); 0172 0173 delete lastlogger; 0174 delete lastlogger2; 0175 } 0176 0177 // same as above, but use convenience routine. 0178 void LoggerUnitTest::logText2() 0179 { 0180 QCA_logTextMessage(QStringLiteral("Sending with no recipients"), QCA::Logger::Notice); 0181 0182 LastLogger *lastlogger = new LastLogger; 0183 0184 QCA::Logger *logSystem = QCA::logger(); 0185 logSystem->registerLogDevice(lastlogger); 0186 QCOMPARE(logSystem->currentLogDevices().count(), 1); 0187 QVERIFY(logSystem->currentLogDevices().contains(QStringLiteral("last logger"))); 0188 0189 QCA_logTextMessage(QStringLiteral("Sending to system, checking for log device"), QCA::Logger::Information); 0190 QCOMPARE(lastlogger->lastMessage(), QStringLiteral("Sending to system, checking for log device")); 0191 QCOMPARE(lastlogger->lastMessageSeverity(), QCA::Logger::Information); 0192 0193 QCA_logTextMessage(QStringLiteral("Sending at Error severity"), QCA::Logger::Error); 0194 QCOMPARE(lastlogger->lastMessage(), QStringLiteral("Sending at Error severity")); 0195 QCOMPARE(lastlogger->lastMessageSeverity(), QCA::Logger::Error); 0196 0197 LastLogger *lastlogger2 = new LastLogger; 0198 logSystem->registerLogDevice(lastlogger2); 0199 QCOMPARE(logSystem->currentLogDevices().count(), 2); 0200 QVERIFY(logSystem->currentLogDevices().contains(QStringLiteral("last logger"))); 0201 0202 QCA_logTextMessage(QStringLiteral("Sending to system, checking for two log devices"), QCA::Logger::Information); 0203 QCOMPARE(lastlogger->lastMessage(), QStringLiteral("Sending to system, checking for two log devices")); 0204 QCOMPARE(lastlogger->lastMessageSeverity(), QCA::Logger::Information); 0205 QCOMPARE(lastlogger2->lastMessage(), QStringLiteral("Sending to system, checking for two log devices")); 0206 QCOMPARE(lastlogger2->lastMessageSeverity(), QCA::Logger::Information); 0207 0208 logSystem->unregisterLogDevice(QStringLiteral("last logger")); // this will remove them both 0209 0210 QCOMPARE(logSystem->currentLogDevices().count(), 0); 0211 0212 delete lastlogger; 0213 delete lastlogger2; 0214 } 0215 0216 void LoggerUnitTest::logBlob() 0217 { 0218 QCA::Logger *logSystem = QCA::logger(); 0219 0220 QCOMPARE(logSystem->currentLogDevices().count(), 0); 0221 0222 QByteArray test("abcd\x34"); 0223 logSystem->logBinaryMessage(test); 0224 0225 LastLogger *lastlogger = new LastLogger; 0226 logSystem->registerLogDevice(lastlogger); 0227 QCOMPARE(logSystem->currentLogDevices().count(), 1); 0228 QVERIFY(logSystem->currentLogDevices().contains(QStringLiteral("last logger"))); 0229 0230 logSystem->logBinaryMessage(test); 0231 QCOMPARE(lastlogger->lastBlob(), test); 0232 QCOMPARE(lastlogger->lastBlobSeverity(), QCA::Logger::Information); 0233 0234 logSystem->logBinaryMessage(test, QCA::Logger::Critical); 0235 QCOMPARE(lastlogger->lastBlob(), test); 0236 QCOMPARE(lastlogger->lastBlobSeverity(), QCA::Logger::Critical); 0237 0238 LastLogger *lastlogger2 = new LastLogger; 0239 logSystem->registerLogDevice(lastlogger2); 0240 QCOMPARE(logSystem->currentLogDevices().count(), 2); 0241 QVERIFY(logSystem->currentLogDevices().contains(QStringLiteral("last logger"))); 0242 0243 test += test; 0244 logSystem->logBinaryMessage(test); 0245 QCOMPARE(lastlogger->lastBlob(), test); 0246 QCOMPARE(lastlogger->lastBlobSeverity(), QCA::Logger::Information); 0247 QCOMPARE(lastlogger2->lastBlob(), test); 0248 QCOMPARE(lastlogger2->lastBlobSeverity(), QCA::Logger::Information); 0249 0250 logSystem->unregisterLogDevice(QStringLiteral("last logger")); // this will remove them both 0251 0252 QCOMPARE(logSystem->currentLogDevices().count(), 0); 0253 delete lastlogger; 0254 delete lastlogger2; 0255 } 0256 0257 void LoggerUnitTest::logLevel() 0258 { 0259 QCA::Logger *logSystem = QCA::logger(); 0260 0261 LastLogger *lastlogger = new LastLogger; 0262 logSystem->registerLogDevice(lastlogger); 0263 0264 logSystem->setLevel(QCA::Logger::Error); 0265 QCOMPARE(logSystem->level(), QCA::Logger::Error); 0266 0267 QCA_logTextMessage(QStringLiteral("Sending to system, checking that it is filtered out"), QCA::Logger::Information); 0268 QEXPECT_FAIL("", "Should fail", Continue); 0269 QCOMPARE(lastlogger->lastMessage(), QStringLiteral("Sending to system, checking that it is filtered out")); 0270 0271 QCA_logTextMessage(QStringLiteral("Sending to system, checking that it is not filtered out"), QCA::Logger::Error); 0272 QCOMPARE(lastlogger->lastMessage(), QStringLiteral("Sending to system, checking that it is not filtered out")); 0273 0274 logSystem->setLevel(QCA::Logger::Debug); 0275 0276 delete lastlogger; 0277 } 0278 0279 QTEST_MAIN(LoggerUnitTest) 0280 0281 #include "loggerunittest.moc"