File indexing completed on 2024-04-21 05:46:12

0001 /*
0002     KKernelLog, a kernel log viewer tool
0003     SPDX-FileCopyrightText: 2007 Nicolas Ternisien <nicolas.ternisien@gmail.com>
0004 
0005     SPDX-License-Identifier: GPL-2.0-or-later
0006 */
0007 
0008 #include <QList>
0009 #include <QStringList>
0010 #include <QTest>
0011 #include <QThread>
0012 
0013 #include "testUtil.h"
0014 
0015 #include "analyzer.h"
0016 #include "globals.h"
0017 
0018 #include "logFile.h"
0019 #include "logLevel.h"
0020 #include "logViewModel.h"
0021 #include "logViewWidget.h"
0022 
0023 #include "ksystemlogConfig.h"
0024 
0025 #include "ksystemlog_debug.h"
0026 
0027 #include "kernelAnalyzer.h"
0028 #include "localLogFileReader.h"
0029 
0030 /**
0031  * Reimplements the Kernel Analyzer using a Local File Reader
0032  */
0033 class KernelAnalyzerLocalReader : public KernelAnalyzer
0034 {
0035 public:
0036     KernelAnalyzerLocalReader(LogMode *logMode)
0037         : KernelAnalyzer(logMode)
0038     {
0039     }
0040 
0041     ~KernelAnalyzerLocalReader() override
0042     {
0043     }
0044 
0045     QDateTime findStartupTime()
0046     {
0047         return mStartupDateTime;
0048     }
0049 
0050 protected:
0051     LogFileReader *createLogFileReader(const LogFile &logFile) override
0052     {
0053         return new LocalLogFileReader(logFile);
0054     }
0055 };
0056 
0057 class KernelAnalyzerTest : public QObject
0058 {
0059     Q_OBJECT
0060 
0061 private Q_SLOTS:
0062 
0063     void initTestCase();
0064 
0065     void testUbuntuDmesg();
0066     void testSuseDmesg();
0067 
0068 private:
0069     void compareWithMinTime(QList<LogLine *> lines, const QDateTime &minTime);
0070 
0071 private:
0072     TestUtil testUtil;
0073 };
0074 
0075 void KernelAnalyzerTest::initTestCase()
0076 {
0077     testUtil.registerLogModeFactories();
0078 }
0079 
0080 void KernelAnalyzerTest::testUbuntuDmesg()
0081 {
0082     // Specifical configuration
0083     KSystemLogConfig::setMaxLines(1000);
0084     KSystemLogConfig::setDeleteDuplicatedLines(false);
0085 
0086     LogMode *logMode = Globals::instance().findLogMode(QStringLiteral("kernelLogMode"));
0087     auto kernelAnalyzer = new KernelAnalyzerLocalReader(logMode);
0088     LogViewModel *model = testUtil.defineLogViewModel(kernelAnalyzer);
0089 
0090     QVERIFY(kernelAnalyzer);
0091     QVERIFY(model);
0092 
0093     QVector<LogFile> const logFiles = testUtil.createLogFiles(QStringLiteral(":/testFiles/kernel/ubuntu.dmesg"));
0094 
0095     kernelAnalyzer->setLogFiles(logFiles);
0096 
0097     kernelAnalyzer->watchLogFiles(true);
0098 
0099     QCOMPARE(model->itemCount(), 25);
0100     QCOMPARE(model->isEmpty(), false);
0101 
0102     QList<LogLine *> const logLines = model->logLines();
0103 
0104     QStringList const items = QStringList() << QStringLiteral("ADDRCONF(NETDEV_UP)") << QStringLiteral("eth0: link is not ready");
0105     QDateTime assertedDateTime = kernelAnalyzer->findStartupTime();
0106     assertedDateTime = assertedDateTime.addSecs(22);
0107     assertedDateTime = assertedDateTime.addMSecs(232);
0108 
0109     testUtil.testLine(logLines.at(0), logFiles.at(0).url().toLocalFile(), Globals::instance().informationLogLevel(), assertedDateTime, items);
0110 
0111     testUtil.destroyReader(kernelAnalyzer);
0112 }
0113 
0114 void KernelAnalyzerTest::testSuseDmesg()
0115 {
0116     // Specifical configuration
0117     KSystemLogConfig::setMaxLines(1000);
0118     KSystemLogConfig::setDeleteDuplicatedLines(false);
0119 
0120     LogMode *logMode = Globals::instance().findLogMode(QStringLiteral("kernelLogMode"));
0121     auto kernelAnalyzer = new KernelAnalyzerLocalReader(logMode);
0122     LogViewModel *model = testUtil.defineLogViewModel(kernelAnalyzer);
0123 
0124     QVERIFY(kernelAnalyzer);
0125     QVERIFY(model);
0126 
0127     QVector<LogFile> const logFiles = testUtil.createLogFiles(QStringLiteral(":/testFiles/kernel/suse.dmesg"));
0128 
0129     kernelAnalyzer->setLogFiles(logFiles);
0130 
0131     kernelAnalyzer->watchLogFiles(true);
0132 
0133     QCOMPARE(model->itemCount(), 23);
0134     QCOMPARE(model->isEmpty(), false);
0135 
0136     QList<LogLine *> const logLines = model->logLines();
0137 
0138     QStringList const items = QStringList() << QStringLiteral("r8169") << QStringLiteral("eth0: link down");
0139 
0140     testUtil.testLine(logLines.at(0), logFiles.at(0).url().toLocalFile(), Globals::instance().informationLogLevel(), kernelAnalyzer->findStartupTime(), items);
0141 
0142     testUtil.destroyReader(kernelAnalyzer);
0143 }
0144 
0145 QTEST_MAIN(KernelAnalyzerTest)
0146 
0147 #include "kernelAnalyzerTest.moc"