Heart/HeartTests/units/shedullertest.cpp

131 lines
3.2 KiB
C++
Raw Normal View History

2021-10-12 00:47:39 +03:00
//#
2024-12-30 22:44:47 +01:00
//# Copyright (C) 2021-2025 QuasarApp.
2021-10-12 00:47:39 +03:00
//# Distributed under the lgplv3 software license, see the accompanying
//# Everyone is permitted to copy and distribute verbatim copies
//# of this license document, but changing it is not allowed.
//#
#include "shedullertest.h"
#include "abstractnode.h"
#include "abstracttask.h"
#include "ctime"
#include <QTest>
2021-10-12 11:36:26 +03:00
#include <QDateTime>
#include <cmath>
2021-10-12 00:47:39 +03:00
class ShedullerestNode: public QH::AbstractNode {
public:
2021-10-12 11:36:26 +03:00
quint64 executedTime = 0;
2021-10-12 00:47:39 +03:00
2022-12-01 22:03:49 +03:00
// AbstractNode interface
public:
NodeType nodeType() const override {
return NodeType::Node;
};
2021-10-12 00:47:39 +03:00
};
class TestTask: public QH::AbstractTask {
// AbstractTask interface
public:
bool execute(QH::AbstractNode *node) const override {
2021-10-12 11:36:26 +03:00
static_cast<ShedullerestNode*>(node)->executedTime = QDateTime::currentMSecsSinceEpoch();
2021-10-12 00:47:39 +03:00
return true;
};
};
2023-05-25 10:21:32 +02:00
#ifdef Q_OS_WIN
const int stepTime = 5000;
const int measurementError = 2000;
#else
const int stepTime = 2000;
const int measurementError = 1000;
#endif
2021-10-12 00:47:39 +03:00
ShedullerTest::ShedullerTest() {
}
void ShedullerTest::test() {
testSingleMode();
testRepeatMode();
testTimePointMode();
}
void ShedullerTest::testSingleMode() {
ShedullerestNode *node = new ShedullerestNode();
auto task = QSharedPointer<TestTask>::create();
2021-10-12 15:14:19 +03:00
task->setMode(QH::ScheduleMode::SingleWork);
2023-05-25 10:21:32 +02:00
task->setTime(stepTime);
2021-10-12 00:47:39 +03:00
2021-10-12 11:36:26 +03:00
quint64 ct = QDateTime::currentMSecsSinceEpoch();
2021-10-12 00:47:39 +03:00
node->sheduleTask(task);
QVERIFY(wait([&node](){return node->executedTime;}, WAIT_TIME));
2023-05-25 10:21:32 +02:00
int diff = std::abs(static_cast<long long>(node->executedTime - (ct + stepTime)));
QVERIFY(diff < measurementError);
2021-10-12 00:47:39 +03:00
node->executedTime = 0;
QVERIFY(node->sheduledTaskCount() == 0);
node->softDelete();
}
void ShedullerTest::testRepeatMode() {
ShedullerestNode *node = new ShedullerestNode();
auto task = QSharedPointer<TestTask>::create();
2023-05-25 10:21:32 +02:00
task->setTime(stepTime);
2021-10-12 15:14:19 +03:00
task->setMode(QH::ScheduleMode::Repeat);
2021-10-12 00:47:39 +03:00
2021-10-12 11:36:26 +03:00
quint64 ct = QDateTime::currentMSecsSinceEpoch();
2021-10-12 00:47:39 +03:00
node->sheduleTask(task);
QVERIFY(wait([&node](){return node->executedTime;}, WAIT_TIME));
2021-10-12 11:36:26 +03:00
2023-05-25 10:21:32 +02:00
int diff = std::abs(static_cast<long long>(node->executedTime - (ct + stepTime)));
2021-10-12 11:36:26 +03:00
2023-05-25 10:21:32 +02:00
QVERIFY(diff < measurementError);
2021-10-12 00:47:39 +03:00
node->executedTime = 0;
QVERIFY(node->sheduledTaskCount() == 1);
QVERIFY(wait([&node](){return node->executedTime;}, WAIT_TIME));
2023-05-25 10:21:32 +02:00
diff = std::abs(static_cast<long long>(node->executedTime - (ct + stepTime * 2)));
2021-10-12 11:36:26 +03:00
2023-05-25 10:21:32 +02:00
QVERIFY(diff < measurementError);
2021-10-12 00:47:39 +03:00
QVERIFY(node->sheduledTaskCount() == 1);
node->removeTask(task->taskId());
QVERIFY(node->sheduledTaskCount() == 0);
node->softDelete();
}
void ShedullerTest::testTimePointMode() {
ShedullerestNode *node = new ShedullerestNode();
auto task = QSharedPointer<TestTask>::create();
2021-10-12 15:14:19 +03:00
task->setMode(QH::ScheduleMode::TimePoint);
2021-10-12 11:36:26 +03:00
2021-10-12 11:52:29 +03:00
quint64 requestTime = QDateTime::currentMSecsSinceEpoch() + 5000;
2021-10-12 00:47:39 +03:00
task->setTime(requestTime);
node->sheduleTask(task);
QVERIFY(wait([&node](){return node->executedTime;}, WAIT_TIME));
2021-10-12 11:52:29 +03:00
int diff = std::abs(static_cast<long long>(node->executedTime - requestTime));
2021-10-12 00:47:39 +03:00
2023-05-25 10:21:32 +02:00
QVERIFY(diff < measurementError);
2021-10-12 00:47:39 +03:00
QVERIFY(node->sheduledTaskCount() == 0);
node->softDelete();
}