Fix tests that didn't wait long enough for log entries to be written
This commit is contained in:
parent
619bbf76f3
commit
64a494e44a
@ -274,6 +274,11 @@ DevicesFetchJob *LogEngine::fetchDevices()
|
|||||||
return fetchJob;
|
return fetchJob;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool LogEngine::jobsRunning() const
|
||||||
|
{
|
||||||
|
return !m_jobQueue.isEmpty() || m_currentJob;
|
||||||
|
}
|
||||||
|
|
||||||
void LogEngine::setMaxLogEntries(int maxLogEntries, int overflow)
|
void LogEngine::setMaxLogEntries(int maxLogEntries, int overflow)
|
||||||
{
|
{
|
||||||
m_dbMaxSize = maxLogEntries;
|
m_dbMaxSize = maxLogEntries;
|
||||||
@ -547,6 +552,7 @@ void LogEngine::enqueJob(DatabaseJob *job)
|
|||||||
void LogEngine::processQueue()
|
void LogEngine::processQueue()
|
||||||
{
|
{
|
||||||
if (m_jobQueue.isEmpty()) {
|
if (m_jobQueue.isEmpty()) {
|
||||||
|
emit jobsRunningChanged();
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -554,6 +560,8 @@ void LogEngine::processQueue()
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
emit jobsRunningChanged();
|
||||||
|
|
||||||
if (m_dbMalformed) {
|
if (m_dbMalformed) {
|
||||||
qCWarning(dcLogEngine()) << "Database is malformed. Trying to recover...";
|
qCWarning(dcLogEngine()) << "Database is malformed. Trying to recover...";
|
||||||
m_db.close();
|
m_db.close();
|
||||||
|
|||||||
@ -54,6 +54,8 @@ public:
|
|||||||
LogEntriesFetchJob *fetchLogEntries(const LogFilter &filter = LogFilter());
|
LogEntriesFetchJob *fetchLogEntries(const LogFilter &filter = LogFilter());
|
||||||
DevicesFetchJob *fetchDevices();
|
DevicesFetchJob *fetchDevices();
|
||||||
|
|
||||||
|
bool jobsRunning() const;
|
||||||
|
|
||||||
void setMaxLogEntries(int maxLogEntries, int overflow);
|
void setMaxLogEntries(int maxLogEntries, int overflow);
|
||||||
void clearDatabase();
|
void clearDatabase();
|
||||||
|
|
||||||
@ -74,6 +76,8 @@ signals:
|
|||||||
void logEntryAdded(const LogEntry &logEntry);
|
void logEntryAdded(const LogEntry &logEntry);
|
||||||
void logDatabaseUpdated();
|
void logDatabaseUpdated();
|
||||||
|
|
||||||
|
void jobsRunningChanged();
|
||||||
|
|
||||||
private:
|
private:
|
||||||
bool initDB(const QString &username, const QString &password);
|
bool initDB(const QString &username, const QString &password);
|
||||||
void appendLogEntry(const LogEntry &entry);
|
void appendLogEntry(const LogEntry &entry);
|
||||||
|
|||||||
@ -41,6 +41,7 @@ private:
|
|||||||
|
|
||||||
private slots:
|
private slots:
|
||||||
void initTestCase();
|
void initTestCase();
|
||||||
|
void cleanup();
|
||||||
|
|
||||||
void testHandshake();
|
void testHandshake();
|
||||||
|
|
||||||
@ -148,6 +149,13 @@ void TestJSONRPC::initTestCase()
|
|||||||
"Tests.debug=true");
|
"Tests.debug=true");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void TestJSONRPC::cleanup()
|
||||||
|
{
|
||||||
|
while (NymeaCore::instance()->logEngine()->jobsRunning()) {
|
||||||
|
qApp->processEvents();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void TestJSONRPC::testHandshake()
|
void TestJSONRPC::testHandshake()
|
||||||
{
|
{
|
||||||
QUuid newClientId = QUuid::createUuid();
|
QUuid newClientId = QUuid::createUuid();
|
||||||
@ -846,16 +854,56 @@ void TestJSONRPC::ruleActiveChangedNotifications()
|
|||||||
QCOMPARE(notificationVariant.toMap().value("params").toMap().value("ruleId").toUuid().toString(), ruleId.toString());
|
QCOMPARE(notificationVariant.toMap().value("params").toMap().value("ruleId").toUuid().toString(), ruleId.toString());
|
||||||
QCOMPARE(notificationVariant.toMap().value("params").toMap().value("active").toBool(), true);
|
QCOMPARE(notificationVariant.toMap().value("params").toMap().value("active").toBool(), true);
|
||||||
|
|
||||||
|
clientSpy.wait();
|
||||||
|
|
||||||
|
// Make sure the logg notification contains all the stuff we expect
|
||||||
|
QVariantList logEntryAddedVariants = checkNotifications(clientSpy, "Logging.LogEntryAdded");
|
||||||
|
QVERIFY2(!logEntryAddedVariants.isEmpty(), "Did not get Logging.LogEntryAdded notification.");
|
||||||
|
bool found = false;
|
||||||
|
foreach (const QVariant &loggEntryAddedVariant, logEntryAddedVariants) {
|
||||||
|
if (loggEntryAddedVariant.toMap().value("params").toMap().value("logEntry").toMap().value("typeId").toUuid() == mockIntStateTypeId) {
|
||||||
|
found = true;
|
||||||
|
QCOMPARE(loggEntryAddedVariant.toMap().value("params").toMap().value("logEntry").toMap().value("source").toString(), QString("LoggingSourceStates"));
|
||||||
|
QCOMPARE(loggEntryAddedVariant.toMap().value("params").toMap().value("logEntry").toMap().value("value").toInt(), 20);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
QVERIFY2(found, "LogEntryAdded notification not received");
|
||||||
|
|
||||||
spy.clear(); clientSpy.clear();
|
spy.clear(); clientSpy.clear();
|
||||||
|
|
||||||
// set the rule inactive
|
// set the rule inactive
|
||||||
qDebug() << "setting mock int state to 42";
|
qDebug() << "setting mock int state to 42";
|
||||||
QNetworkRequest request2(QUrl(QString("http://localhost:%1/setstate?%2=%3").arg(m_mockDevice1Port).arg(mockIntStateTypeId.toString()).arg(42)));
|
QNetworkRequest request2(QUrl(QString("http://localhost:%1/setstate?%2=%3").arg(m_mockDevice1Port).arg(mockIntStateTypeId.toString()).arg(42)));
|
||||||
QNetworkReply *reply2 = nam.get(request2);
|
QNetworkReply *reply2 = nam.get(request2);
|
||||||
if (spy.count() == 0) spy.wait();
|
|
||||||
QCOMPARE(spy.count(), 1);
|
|
||||||
connect(reply2, SIGNAL(finished()), reply2, SLOT(deleteLater()));
|
connect(reply2, SIGNAL(finished()), reply2, SLOT(deleteLater()));
|
||||||
|
|
||||||
|
// Waiting for notifications:
|
||||||
|
// Devices.StateChanged for the change we did
|
||||||
|
// Devices.EventTriggered
|
||||||
|
// Events.EventTriggered <-- deprecated
|
||||||
|
// Rules.RuleActiveChanged
|
||||||
|
// Logging.LogEntryAdded
|
||||||
|
// Devices.StateChanged for the change done by the rule
|
||||||
|
// Devices.EventTriggered
|
||||||
|
// Events.EventTriggered <-- deprecated
|
||||||
|
while (clientSpy.count() < 8) {
|
||||||
|
clientSpy.wait();
|
||||||
|
}
|
||||||
|
|
||||||
|
// Make sure the logg notification contains all the stuff we expect
|
||||||
|
logEntryAddedVariants = checkNotifications(clientSpy, "Logging.LogEntryAdded");
|
||||||
|
QVERIFY2(!logEntryAddedVariants.isEmpty(), "Did not get Logging.LogEntryAdded notification.");
|
||||||
|
found = false;
|
||||||
|
foreach (const QVariant &loggEntryAddedVariant, logEntryAddedVariants) {
|
||||||
|
if (loggEntryAddedVariant.toMap().value("params").toMap().value("logEntry").toMap().value("typeId").toUuid() == mockIntStateTypeId) {
|
||||||
|
found = true;
|
||||||
|
QCOMPARE(loggEntryAddedVariant.toMap().value("params").toMap().value("logEntry").toMap().value("source").toString(), QString("LoggingSourceStates"));
|
||||||
|
QCOMPARE(loggEntryAddedVariant.toMap().value("params").toMap().value("logEntry").toMap().value("value").toInt(), 42);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
QVERIFY2(found, "LogEntryAdded notification not received");
|
||||||
|
|
||||||
if (clientSpy.count() == 0) clientSpy.wait();
|
if (clientSpy.count() == 0) clientSpy.wait();
|
||||||
notificationVariant = checkNotification(clientSpy, "Rules.RuleActiveChanged");
|
notificationVariant = checkNotification(clientSpy, "Rules.RuleActiveChanged");
|
||||||
@ -994,7 +1042,14 @@ void TestJSONRPC::stateChangeEmitsNotifications()
|
|||||||
|
|
||||||
QVERIFY2(found, "Could not find the correct Devices.StateChanged notification");
|
QVERIFY2(found, "Could not find the correct Devices.StateChanged notification");
|
||||||
|
|
||||||
clientSpy.wait();
|
// Waiting for:
|
||||||
|
// Devices.StateChanged
|
||||||
|
// Devices.EventTriggered
|
||||||
|
// Events.EventTriggered <-- deprecated
|
||||||
|
// Logging.LogEntryAdded
|
||||||
|
while (clientSpy.count() < 4) {
|
||||||
|
clientSpy.wait();
|
||||||
|
}
|
||||||
|
|
||||||
// Make sure the logg notification contains all the stuff we expect
|
// Make sure the logg notification contains all the stuff we expect
|
||||||
QVariantList logEntryAddedVariants = checkNotifications(clientSpy, "Logging.LogEntryAdded");
|
QVariantList logEntryAddedVariants = checkNotifications(clientSpy, "Logging.LogEntryAdded");
|
||||||
@ -1011,7 +1066,6 @@ void TestJSONRPC::stateChangeEmitsNotifications()
|
|||||||
|
|
||||||
QVERIFY2(found, "Could not find the corresponding Logging.LogEntryAdded notification");
|
QVERIFY2(found, "Could not find the corresponding Logging.LogEntryAdded notification");
|
||||||
|
|
||||||
|
|
||||||
// Make sure the notification contains all the stuff we expect
|
// Make sure the notification contains all the stuff we expect
|
||||||
QVariantList eventTriggeredVariants = checkNotifications(clientSpy, "Events.EventTriggered");
|
QVariantList eventTriggeredVariants = checkNotifications(clientSpy, "Events.EventTriggered");
|
||||||
QVERIFY2(!eventTriggeredVariants.isEmpty(), "Did not get Events.EventTriggered notification.");
|
QVERIFY2(!eventTriggeredVariants.isEmpty(), "Did not get Events.EventTriggered notification.");
|
||||||
|
|||||||
Reference in New Issue
Block a user