File indexing completed on 2024-04-28 16:49:47
0001 /* 0002 SPDX-FileCopyrightText: 2020 Arjen Hiemstra <ahiemstra@heimr.nl> 0003 SPDX-FileCopyrightText: 2020 David Redondo <kde@david-redondo.de> 0004 0005 SPDX-License-Identifier: LGPL-2.1-only OR LGPL-3.0-only OR LicenseRef-KDE-Accepted-LGPL 0006 */ 0007 0008 #include <QTest> 0009 0010 #include <QJsonArray> 0011 #include <QJsonDocument> 0012 0013 #include <KConfig> 0014 #include <Solid/Block> 0015 #include <Solid/Device> 0016 #include <Solid/Predicate> 0017 #include <Solid/StorageAccess> 0018 #include <Solid/StorageVolume> 0019 0020 #include "SensorFaceController.h" 0021 0022 #include "SensorFaceController_p.h" 0023 0024 class SensorFaceControllerTest : public QObject 0025 { 0026 Q_OBJECT 0027 private Q_SLOTS: 0028 void testSensorIdConversion_data() 0029 { 0030 QTest::addColumn<QJsonArray>("oldSensors"); 0031 QTest::addColumn<QJsonArray>("expectedSensors"); 0032 0033 QTest::addRow("network") 0034 << QJsonArray { 0035 QStringLiteral("network/all/sentDataRate"), 0036 QStringLiteral("network/all/totalReceivedData"), 0037 QStringLiteral("network/interfaces/test/receiver/data"), 0038 QStringLiteral("network/interfaces/test/transmitter/dataTotal"), 0039 } 0040 << QJsonArray { 0041 QStringLiteral("network/all/upload"), 0042 QStringLiteral("network/all/totalDownload"), 0043 QStringLiteral("network/test/download"), 0044 QStringLiteral("network/test/totalUpload"), 0045 }; 0046 0047 const auto storageAccesses = Solid::Device::listFromQuery(Solid::Predicate(Solid::DeviceInterface::StorageAccess, QStringLiteral("accessible"), true)); 0048 for (int i = 0; i < storageAccesses.size(); ++i) { 0049 const auto storageAccess = storageAccesses[i].as<Solid::StorageAccess>(); 0050 const auto blockDevice = storageAccesses[i].as<Solid::Block>(); 0051 const auto storageVolume = storageAccesses[i].as<Solid::StorageVolume>(); 0052 if (!storageVolume) { 0053 continue; 0054 } 0055 0056 const QString newPrefix = QStringLiteral("disk/") + (storageVolume->uuid().isEmpty() ? storageVolume->label() : storageVolume->uuid()); 0057 // Old code uses "disk/sdc2_(8:34)/..." 0058 QString device = blockDevice->device().mid(strlen("/dev/")); 0059 const QString diskPrefix = QStringLiteral("disk/%1_(%2:%3)").arg(device).arg(blockDevice->deviceMajor()).arg(blockDevice->deviceMinor()); 0060 QTest::addRow("disk%d",i) 0061 << QJsonArray { 0062 {diskPrefix + QStringLiteral("/Rate/rio")}, 0063 {diskPrefix + QStringLiteral("/Rate/wio")}, 0064 } 0065 << QJsonArray { 0066 {newPrefix + QStringLiteral("/read")}, 0067 {newPrefix + QStringLiteral("/write")}, 0068 }; 0069 // Old code uses "partitions/mountPath/..." 0070 const QString mountPath = storageAccess->filePath() == QLatin1String("/") ? QStringLiteral("/__root__") : storageAccess->filePath(); 0071 QString partitionPrefix = QStringLiteral("partitions") + mountPath; 0072 QTest::addRow("partition%d", i) 0073 << QJsonArray { 0074 {partitionPrefix + QStringLiteral("/total")}, 0075 {partitionPrefix + QStringLiteral("/freespace")}, 0076 {partitionPrefix + QStringLiteral("/filllevel")}, 0077 {partitionPrefix + QStringLiteral("/usedspace")}, 0078 } << QJsonArray { 0079 {newPrefix + QStringLiteral("/total")}, 0080 {newPrefix + QStringLiteral("/free")}, 0081 {newPrefix + QStringLiteral("/usedPercent")}, 0082 {newPrefix + QStringLiteral("/used")}, 0083 }; 0084 } 0085 0086 QTest::addRow("paritionsall") 0087 << QJsonArray { 0088 QStringLiteral("partitions/all/total"), 0089 QStringLiteral("partitions/all/freespace"), 0090 QStringLiteral("partitions/all/filllevel"), 0091 QStringLiteral("partitions/all/usedspace"), 0092 } << QJsonArray { 0093 QStringLiteral("disk/all/total"), 0094 QStringLiteral("disk/all/free"), 0095 QStringLiteral("disk/all/usedPercent"), 0096 QStringLiteral("disk/all/used"), 0097 }; 0098 0099 QTest::addRow("cpu") 0100 << QJsonArray { 0101 QStringLiteral("cpu/cpu1/clock"), 0102 QStringLiteral("cpu/cpu1/sys"), 0103 QStringLiteral("cpu/cpu1/TotalLoad"), 0104 QStringLiteral("cpu/system/sys"), 0105 QStringLiteral("cpu/system/TotalLoad"), 0106 QStringLiteral("cpu/system/user"), 0107 QStringLiteral("cpu/system/wait"), 0108 } 0109 << QJsonArray { 0110 QStringLiteral("cpu/cpu1/frequency"), 0111 QStringLiteral("cpu/cpu1/system"), 0112 QStringLiteral("cpu/cpu1/usage"), 0113 QStringLiteral("cpu/all/system"), 0114 QStringLiteral("cpu/all/usage"), 0115 QStringLiteral("cpu/all/user"), 0116 QStringLiteral("cpu/all/wait"), 0117 }; 0118 0119 QTest::addRow("memory") 0120 << QJsonArray{ 0121 QStringLiteral("mem/physical/allocated"), 0122 QStringLiteral("mem/physical/allocatedlevel"), 0123 QStringLiteral("mem/physical/application"), 0124 QStringLiteral("mem/physical/applicationlevel"), 0125 QStringLiteral("mem/physical/available"), 0126 QStringLiteral("mem/physical/availablelevel"), 0127 QStringLiteral("mem/physical/buf"), 0128 QStringLiteral("mem/physical/buflevel"), 0129 QStringLiteral("mem/physical/cached"), 0130 QStringLiteral("mem/physical/cachedlevel"), 0131 QStringLiteral("mem/physical/free"), 0132 QStringLiteral("mem/physical/freelevel"), 0133 QStringLiteral("mem/physical/total"), 0134 QStringLiteral("mem/physical/used"), 0135 QStringLiteral("mem/physical/usedlevel"), 0136 QStringLiteral("mem/swap/free"), 0137 QStringLiteral("mem/swap/used"), 0138 } << QJsonArray { 0139 QStringLiteral("memory/physical/used"), 0140 QStringLiteral("memory/physical/usedPercent"), 0141 QStringLiteral("memory/physical/application"), 0142 QStringLiteral("memory/physical/applicationPercent"), 0143 QStringLiteral("memory/physical/free"), 0144 QStringLiteral("memory/physical/freePercent"), 0145 QStringLiteral("memory/physical/buffer"), 0146 QStringLiteral("memory/physical/bufferPercent"), 0147 QStringLiteral("memory/physical/cache"), 0148 QStringLiteral("memory/physical/cachePercent"), 0149 QStringLiteral("memory/physical/free"), 0150 QStringLiteral("memory/physical/freePercent"), 0151 QStringLiteral("memory/physical/total"), 0152 QStringLiteral("memory/physical/used"), 0153 QStringLiteral("memory/physical/usedPercent"), 0154 QStringLiteral("memory/swap/free"), 0155 QStringLiteral("memory/swap/used"), 0156 }; 0157 0158 QTest::addRow("gpu") 0159 << QJsonArray { 0160 QStringLiteral("nvidia/gpu1/temperature"), 0161 QStringLiteral("nvidia/gpu2/memory"), 0162 QStringLiteral("nvidia/gpu3/sharedMemory"), 0163 QStringLiteral("nvidia/gpu4/memoryClock"), 0164 QStringLiteral("nvidia/gpu5/processorClock"), 0165 QStringLiteral("nvidia/gpu6/encoderUsage"), 0166 QStringLiteral("nvidia/gpu7/decoderUsage"), 0167 } 0168 << QJsonArray { 0169 QStringLiteral("gpu/gpu1/temperature"), 0170 QStringLiteral("gpu/gpu2/usedVram"), 0171 QStringLiteral("gpu/gpu3/usedVram"), 0172 QStringLiteral("gpu/gpu4/memoryFrequency"), 0173 QStringLiteral("gpu/gpu5/coreFrequency"), 0174 QStringLiteral("gpu/gpu6/usage"), 0175 QStringLiteral("gpu/gpu7/usage"), 0176 }; 0177 0178 QTest::addRow("uptime") 0179 << QJsonArray { 0180 QStringLiteral("uptime"), 0181 QStringLiteral("system/uptime/uptime"), 0182 } 0183 << QJsonArray { 0184 QStringLiteral("os/system/uptime"), 0185 QStringLiteral("os/system/uptime"), 0186 }; 0187 } 0188 0189 void testSensorIdConversion() 0190 { 0191 QFETCH(QJsonArray, oldSensors); 0192 QFETCH(QJsonArray, expectedSensors); 0193 KConfig config; 0194 auto sensorsGroup = config.group("Sensors"); 0195 sensorsGroup.writeEntry("sensors", QJsonDocument{oldSensors}.toJson(QJsonDocument::Compact)); 0196 0197 KSysGuard::SensorFaceControllerPrivate d; 0198 0199 auto sensors = d.readAndUpdateSensors(sensorsGroup, QStringLiteral("sensors")); 0200 0201 QCOMPARE(sensors.size(), expectedSensors.size()); 0202 0203 for (int i = 0; i < sensors.size(); ++i) { 0204 QCOMPARE(sensors.at(i).toString(), expectedSensors.at(i).toString()); 0205 } 0206 0207 auto newEntry = sensorsGroup.readEntry("sensors"); 0208 QCOMPARE(newEntry.toUtf8(), QJsonDocument{expectedSensors}.toJson(QJsonDocument::Compact)); 0209 } 0210 }; 0211 0212 QTEST_MAIN(SensorFaceControllerTest); 0213 0214 #include "sensorfacecontrollertest.moc"