kde-workspace/libs/ksysguard/tests/processtest.cpp
Ivailo Monev 47d5901d7e libs: plug tests memory leaks
Signed-off-by: Ivailo Monev <xakepa10@gmail.com>
2023-06-10 14:57:04 +03:00

166 lines
5.6 KiB
C++

/* This file is part of the KDE project
Copyright (C) 2007 John Tapsell <tapsell@kde.org>
This library is free software; you can redistribute it and/or
modify it under the terms of the GNU Library General Public
License as published by the Free Software Foundation; either
version 2 of the License, or (at your option) any later version.
This library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Library General Public License for more details.
You should have received a copy of the GNU Library General Public License
along with this library; see the file COPYING.LIB. If not, write to
the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
Boston, MA 02110-1301, USA.
*/
#include <QtTest>
#include <QtCore>
#include <QTreeView>
#include <klocale.h>
#include <qtest_kde.h>
#include <kdebug.h>
#include "processcore/processes.h"
#include "processcore/process.h"
#include "processcore/processes_base_p.h"
#include "processui/ksysguardprocesslist.h"
#include "processtest.h"
void testProcess::testProcesses() {
KSysGuard::Processes *processController = new KSysGuard::Processes();
processController->updateAllProcesses();
QList<KSysGuard::Process *> processes = processController->getAllProcesses();
QSet<long> pids;
Q_FOREACH( KSysGuard::Process *process, processes) {
if(process->pid == 0) continue;
QVERIFY(process->pid > 0);
QVERIFY(!process->name.isEmpty());
//test all the pids are unique
QVERIFY(!pids.contains(process->pid));
pids.insert(process->pid);
}
processController->updateAllProcesses();
QList<KSysGuard::Process *> processes2 = processController->getAllProcesses();
Q_FOREACH( KSysGuard::Process *process, processes2) {
if(process->pid == 0) continue;
QVERIFY(process->pid > 0);
QVERIFY(!process->name.isEmpty());
//test all the pids are unique
if(!pids.contains(process->pid)) {
kDebug() << process->pid << " not found. " << process->name;
}
pids.remove(process->pid);
}
// Make sure calling it twice gives the same results. The difference in
// time is so small that it really shouldn't have changed
if (processes2.size() != processes.size()) {
// But when it happens, it happens..
QSKIP("Flaky test, run on idle system", SkipSingle);
}
QVERIFY(processes2.size() == processes.size());
QCOMPARE(processes, processes2);
delete processController;
}
unsigned long testProcess::countNumChildren(KSysGuard::Process *p) {
unsigned long total = p->children.size();
for(int i =0; i < p->children.size(); i++) {
total += countNumChildren(p->children[i]);
}
return total;
}
void testProcess::testProcessesTreeStructure() {
KSysGuard::Processes *processController = new KSysGuard::Processes();
processController->updateAllProcesses();
QList<KSysGuard::Process *> processes = processController->getAllProcesses();
Q_FOREACH( KSysGuard::Process *process, processes) {
QCOMPARE(countNumChildren(process), process->numChildren);
for(int i =0; i < process->children.size(); i++) {
QVERIFY(process->children[i]->parent);
QCOMPARE(process->children[i]->parent, process);
}
}
delete processController;
}
void testProcess::testProcessesModification() {
//We will modify the tree, then re-call getProcesses and make sure that it fixed everything we modified
KSysGuard::Processes *processController = new KSysGuard::Processes();
processController->updateAllProcesses();
KSysGuard::Process *initProcess = processController->getProcess(1);
if(!initProcess || initProcess->numChildren < 3) {
delete processController;
return;
}
QVERIFY(initProcess);
QVERIFY(initProcess->children[0]);
QVERIFY(initProcess->children[1]);
kDebug() << initProcess->numChildren;
initProcess->children[0]->parent = initProcess->children[1];
initProcess->children[1]->children.append(initProcess->children[0]);
initProcess->children[1]->numChildren++;
initProcess->numChildren--;
initProcess->children.removeAt(0);
delete processController;
}
void testProcess::testTimeToUpdateAllProcesses() {
//See how long it takes to get process information
KSysGuard::Processes *processController = new KSysGuard::Processes();
QBENCHMARK {
processController->updateAllProcesses();
}
delete processController;
}
void testProcess::testTimeToUpdateModel() {
KSysGuardProcessList *processList = new KSysGuardProcessList;
processList->treeView()->setColumnHidden(13, false);
processList->show();
QTest::qWaitForWindowShown(processList);
QBENCHMARK {
processList->updateList();
QTest::qWait(0);
}
delete processList;
}
void testProcess::testUpdateOrAddProcess() {
KSysGuard::Processes *processController = new KSysGuard::Processes();
processController->updateAllProcesses();
KSysGuard::Process *process;
// Make sure that this doesn't crash at least
process = processController->getProcess(0);
process = processController->getProcess(1);
if (process)
QCOMPARE(process->pid, 1l);
// Make sure that this doesn't crash at least
processController->updateOrAddProcess(1);
processController->updateOrAddProcess(0);
processController->updateOrAddProcess(-1);
delete processController;
}
QTEST_KDEMAIN(testProcess,GUI)
#include "moc_processtest.cpp"