diff --git a/libnymea-core/servers/webserver.cpp b/libnymea-core/servers/webserver.cpp index 2ac0f391..7a93037c 100644 --- a/libnymea-core/servers/webserver.cpp +++ b/libnymea-core/servers/webserver.cpp @@ -301,7 +301,6 @@ void WebServer::readClient() HttpRequest request; if (m_incompleteRequests.contains(socket)) { - qCDebug(dcWebServer()) << "Append data to incomlete request"; request = m_incompleteRequests.take(socket); request.appendData(data); } else { diff --git a/plugins/mock/httpdaemon.cpp b/plugins/mock/httpdaemon.cpp index 4d684002..5d5ab4c9 100644 --- a/plugins/mock/httpdaemon.cpp +++ b/plugins/mock/httpdaemon.cpp @@ -104,7 +104,7 @@ void HttpDaemon::readClient() } else if (stateTypeId == mockDoubleStateTypeId) { stateValue.convert(QVariant::Double); } - qCDebug(dcMock()) << "Set state value" << stateValue; + qCDebug(dcMock()) << "Setting state value" << stateValue; emit setState(stateTypeId, stateValue); } else if (url.path() == "/generateevent") { emit triggerEvent(EventTypeId(query.queryItemValue("eventtypeid"))); diff --git a/tests/auto/jsonrpc/testjsonrpc.cpp b/tests/auto/jsonrpc/testjsonrpc.cpp index 4f7280bd..ab46d928 100644 --- a/tests/auto/jsonrpc/testjsonrpc.cpp +++ b/tests/auto/jsonrpc/testjsonrpc.cpp @@ -852,22 +852,6 @@ void TestJSONRPC::ruleActiveChangedNotifications() clientSpy.wait(); - waitForDBSync(); - - // 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(); // set the rule inactive @@ -889,22 +873,6 @@ void TestJSONRPC::ruleActiveChangedNotifications() 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 &logEntryAddedVariant, logEntryAddedVariants) { - qCDebug(dcTests()) << "Checking log entry" << mockIntStateTypeId << qUtf8Printable(QJsonDocument::fromVariant(logEntryAddedVariant).toJson()); - if (logEntryAddedVariant.toMap().value("params").toMap().value("logEntry").toMap().value("typeId").toUuid() == mockIntStateTypeId) { - found = true; - QCOMPARE(logEntryAddedVariant.toMap().value("params").toMap().value("logEntry").toMap().value("source").toString(), QString("LoggingSourceStates")); - QCOMPARE(logEntryAddedVariant.toMap().value("params").toMap().value("logEntry").toMap().value("value").toInt(), 42); - break; - } - } - QVERIFY2(found, "LogEntryAdded notification not received"); - - if (clientSpy.count() == 0) clientSpy.wait(); notificationVariant = checkNotification(clientSpy, "Rules.RuleActiveChanged"); verifyRuleError(response); @@ -960,26 +928,10 @@ void TestJSONRPC::stateChangeEmitsNotifications() // Devices.StateChanged // Devices.EventTriggered // Events.EventTriggered <-- deprecated - // Logging.LogEntryAdded - while (clientSpy.count() < 4) { + while (clientSpy.count() < 3) { 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."); - found = false; - foreach (const QVariant &loggEntryAddedVariant, logEntryAddedVariants) { - if (loggEntryAddedVariant.toMap().value("params").toMap().value("logEntry").toMap().value("typeId").toUuid() == stateTypeId) { - 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(), newVal); - break; - } - } - - QVERIFY2(found, "Could not find the corresponding Logging.LogEntryAdded notification"); - // Make sure the notification contains all the stuff we expect QVariantList eventTriggeredVariants = checkNotifications(clientSpy, "Events.EventTriggered"); QVERIFY2(!eventTriggeredVariants.isEmpty(), "Did not get Events.EventTriggered notification."); diff --git a/tests/auto/logging/testlogging.cpp b/tests/auto/logging/testlogging.cpp index 10045f6d..f0cc833e 100644 --- a/tests/auto/logging/testlogging.cpp +++ b/tests/auto/logging/testlogging.cpp @@ -71,6 +71,7 @@ private slots: void invalidFilter_data(); void invalidFilter(); + void eventLogs_data(); void eventLogs(); void actionLog(); @@ -261,24 +262,53 @@ void TestLogging::invalidFilter() qDebug() << response.toMap().value("error").toString(); } +void TestLogging::eventLogs_data() +{ + QTest::addColumn("stateTypeId"); + QTest::addColumn("initValue"); + QTest::addColumn("newValue"); + QTest::addColumn("expectLogEntry"); + + QTest::newRow("logged event") << mockConnectedStateTypeId << QVariant(false) << QVariant(true) << true; + QTest::newRow("not logged event") << mockSignalStrengthStateTypeId << QVariant(10) << QVariant(20) << false; +} void TestLogging::eventLogs() { + QFETCH(StateTypeId, stateTypeId); + QFETCH(QVariant, initValue); + QFETCH(QVariant, newValue); + QFETCH(bool, expectLogEntry); + QList devices = NymeaCore::instance()->thingManager()->findConfiguredThings(mockThingClassId); QVERIFY2(devices.count() > 0, "There needs to be at least one configured Mock Device for this test"); Thing *device = devices.first(); - enableNotifications({"Events", "Logging"}); - // Setup connection to mock client QNetworkAccessManager nam; + int port = device->paramValue(mockThingHttpportParamTypeId).toInt(); + + // init state in mock device + QNetworkRequest request(QUrl(QString("http://localhost:%1/setstate?%2=%3").arg(port).arg(stateTypeId.toString()).arg(initValue.toString()))); + QNetworkReply *reply = nam.get(request); + { + QSignalSpy finishedSpy(reply, &QNetworkReply::finished); + finishedSpy.wait(); + } + + // Now snoop in for the events + clearLoggingDatabase(); + enableNotifications({"Events", "Logging"}); QSignalSpy clientSpy(m_mockTcpServer, SIGNAL(outgoingData(QUuid,QByteArray))); - // trigger event in mock device - int port = device->paramValue(mockThingHttpportParamTypeId).toInt(); - QNetworkRequest request(QUrl(QString("http://localhost:%1/generateevent?eventtypeid=%2").arg(port).arg(mockEvent1EventTypeId.toString()))); - QNetworkReply *reply = nam.get(request); + // trigger state change in mock device + request = QNetworkRequest(QUrl(QString("http://localhost:%1/setstate?%2=%3").arg(port).arg(stateTypeId.toString()).arg(newValue.toString()))); + reply = nam.get(request); + { + QSignalSpy finishedSpy(reply, &QNetworkReply::finished); + finishedSpy.wait(); + } // Lets wait for the notification QTest::qWait(200); @@ -286,41 +316,42 @@ void TestLogging::eventLogs() reply->deleteLater(); // Make sure the logg notification contains all the stuff we expect - QVariantList loggEntryAddedVariants = checkNotifications(clientSpy, "Logging.LogEntryAdded"); - QVERIFY2(!loggEntryAddedVariants.isEmpty(), "Did not get Logging.LogEntryAdded notification."); - qDebug() << "got" << loggEntryAddedVariants.count() << "Logging.LogEntryAdded notifications"; + QVariantList logEntryAddedVariants = checkNotifications(clientSpy, "Logging.LogEntryAdded"); + qDebug() << "got" << logEntryAddedVariants.count() << "Logging.LogEntryAdded notifications"; bool found = false; - qDebug() << "got" << loggEntryAddedVariants.count() << "Logging.LogEntryAdded"; - foreach (const QVariant &loggEntryAddedVariant, loggEntryAddedVariants) { - QVariantMap logEntry = loggEntryAddedVariant.toMap().value("params").toMap().value("logEntry").toMap(); + qDebug() << "got" << logEntryAddedVariants.count() << "Logging.LogEntryAdded"; + foreach (const QVariant &logEntryAddedVariant, logEntryAddedVariants) { + QVariantMap logEntry = logEntryAddedVariant.toMap().value("params").toMap().value("logEntry").toMap(); if (logEntry.value("thingId").toUuid() == device->id()) { found = true; // Make sure the notification contains all the stuff we expect - QCOMPARE(logEntry.value("typeId").toUuid().toString(), mockEvent1EventTypeId.toString()); + QCOMPARE(logEntry.value("typeId").toUuid().toString(), stateTypeId.toString()); QCOMPARE(logEntry.value("eventType").toString(), enumValueName(Logging::LoggingEventTypeTrigger)); - QCOMPARE(logEntry.value("source").toString(), enumValueName(Logging::LoggingSourceEvents)); + QCOMPARE(logEntry.value("source").toString(), enumValueName(Logging::LoggingSourceStates)); QCOMPARE(logEntry.value("loggingLevel").toString(), enumValueName(Logging::LoggingLevelInfo)); break; } } - if (!found) - qDebug() << QJsonDocument::fromVariant(loggEntryAddedVariants).toJson(); - QVERIFY2(found, "Could not find the corresponding Logging.LogEntryAdded notification"); + QVERIFY2(found == expectLogEntry, "Could not find the corresponding Logging.LogEntryAdded notification"); - // get this logentry with filter - QVariantMap params; - params.insert("thingIds", QVariantList() << device->id()); - params.insert("loggingSources", QVariantList() << enumValueName(Logging::LoggingSourceEvents)); - params.insert("eventTypes", QVariantList() << enumValueName(Logging::LoggingEventTypeTrigger)); - params.insert("typeIds", QVariantList() << mockEvent1EventTypeId); + if (expectLogEntry) { + // get this logentry with filter + QVariantMap params; + params.insert("thingIds", QVariantList() << device->id()); + params.insert("loggingSources", QVariantList() << enumValueName(Logging::LoggingSourceStates)); + params.insert("eventTypes", QVariantList() << enumValueName(Logging::LoggingEventTypeTrigger)); + params.insert("typeIds", QVariantList() << stateTypeId); - QVariant response = injectAndWait("Logging.GetLogEntries", params); - verifyLoggingError(response); + QVariant response = injectAndWait("Logging.GetLogEntries", params); + verifyLoggingError(response); + + QVariantList logEntries = response.toMap().value("params").toMap().value("logEntries").toList(); + qCDebug(dcTests()) << qUtf8Printable(QJsonDocument::fromVariant(logEntries).toJson()); + QCOMPARE(logEntries.count(), 1); + } - QVariantList logEntries = response.toMap().value("params").toMap().value("logEntries").toList(); - QVERIFY(logEntries.count() == 1); // disable notifications QCOMPARE(disableNotifications(), true); @@ -629,7 +660,7 @@ void TestLogging::testHouseKeeping() // Trigger something that creates a logging entry QNetworkAccessManager nam; QSignalSpy spy(&nam, SIGNAL(finished(QNetworkReply*))); - QNetworkRequest request(QUrl(QString("http://localhost:%1/setstate?%2=%3").arg(6667).arg(mockIntStateTypeId.toString()).arg(4321))); + QNetworkRequest request(QUrl(QString("http://localhost:%1/setstate?%2=%3").arg(6667).arg(mockConnectedStateTypeId.toString()).arg(false))); QNetworkReply *reply = nam.get(request); connect(reply, SIGNAL(finished()), reply, SLOT(deleteLater())); spy.wait();