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"