fix rest rule executable parameter
This commit is contained in:
parent
3438d74ee4
commit
2823832ed1
@ -276,9 +276,10 @@ HttpReply *RulesResource::addRule(const QByteArray &payload) const
|
|||||||
|
|
||||||
QString name = params.value("name", QString()).toString();
|
QString name = params.value("name", QString()).toString();
|
||||||
bool enabled = params.value("enabled", true).toBool();
|
bool enabled = params.value("enabled", true).toBool();
|
||||||
|
bool executable = params.value("executable", true).toBool();
|
||||||
|
|
||||||
RuleId newRuleId = RuleId::createRuleId();
|
RuleId newRuleId = RuleId::createRuleId();
|
||||||
RuleEngine::RuleError status = GuhCore::instance()->addRule(newRuleId, name, eventDescriptorList, stateEvaluator, actions, exitActions, enabled);
|
RuleEngine::RuleError status = GuhCore::instance()->addRule(newRuleId, name, eventDescriptorList, stateEvaluator, actions, exitActions, enabled, executable);
|
||||||
|
|
||||||
if (status == RuleEngine::RuleErrorNoError) {
|
if (status == RuleEngine::RuleErrorNoError) {
|
||||||
QVariant returns = JsonTypes::packRule(GuhCore::instance()->findRule(newRuleId));
|
QVariant returns = JsonTypes::packRule(GuhCore::instance()->findRule(newRuleId));
|
||||||
|
|||||||
@ -50,7 +50,11 @@ private:
|
|||||||
|
|
||||||
void triggerMockEvent();
|
void triggerMockEvent();
|
||||||
|
|
||||||
|
QVariant validIntStateBasedRule(const QString &name, const bool &executable, const bool &enabled);
|
||||||
|
|
||||||
private slots:
|
private slots:
|
||||||
|
void getRules();
|
||||||
|
|
||||||
void addRemoveRules_data();
|
void addRemoveRules_data();
|
||||||
void addRemoveRules();
|
void addRemoveRules();
|
||||||
|
|
||||||
@ -61,7 +65,9 @@ private slots:
|
|||||||
|
|
||||||
void enableDisableRule();
|
void enableDisableRule();
|
||||||
|
|
||||||
void getRules();
|
void executeRuleActions_data();
|
||||||
|
void executeRuleActions();
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
void TestRestRules::cleanupMockHistory()
|
void TestRestRules::cleanupMockHistory()
|
||||||
@ -70,45 +76,26 @@ void TestRestRules::cleanupMockHistory()
|
|||||||
QSignalSpy spy(&nam, SIGNAL(finished(QNetworkReply*)));
|
QSignalSpy spy(&nam, SIGNAL(finished(QNetworkReply*)));
|
||||||
QNetworkRequest request(QUrl(QString("http://localhost:%1/clearactionhistory").arg(m_mockDevice1Port).arg(mockEvent1Id.toString())));
|
QNetworkRequest request(QUrl(QString("http://localhost:%1/clearactionhistory").arg(m_mockDevice1Port).arg(mockEvent1Id.toString())));
|
||||||
QNetworkReply *reply = nam.get(request);
|
QNetworkReply *reply = nam.get(request);
|
||||||
spy.wait(500);
|
spy.wait();
|
||||||
QCOMPARE(spy.count(), 1);
|
QCOMPARE(spy.count(), 1);
|
||||||
reply->deleteLater();
|
reply->deleteLater();
|
||||||
}
|
}
|
||||||
|
|
||||||
void TestRestRules::cleanupRules()
|
void TestRestRules::cleanupRules()
|
||||||
{
|
{
|
||||||
QNetworkAccessManager *nam = new QNetworkAccessManager(this);
|
|
||||||
QSignalSpy clientSpy(nam, SIGNAL(finished(QNetworkReply*)));
|
|
||||||
|
|
||||||
// Get all rules
|
// Get all rules
|
||||||
QNetworkRequest request = QNetworkRequest(QUrl("http://localhost:3333/api/v1/rules"));
|
QNetworkRequest request(QUrl("http://localhost:3333/api/v1/rules"));
|
||||||
QNetworkReply *reply = nam->get(request);
|
QVariant response = getAndWait(request);
|
||||||
clientSpy.wait();
|
QVERIFY(!response.isNull());
|
||||||
QVERIFY2(clientSpy.count() == 1, "expected exactly 1 response from webserver");
|
QVariantList rulesList = response.toList();
|
||||||
int statusCode = reply->attribute(QNetworkRequest::HttpStatusCodeAttribute).toInt();
|
|
||||||
QCOMPARE(statusCode, 200);
|
|
||||||
QByteArray data = reply->readAll();
|
|
||||||
reply->deleteLater();
|
|
||||||
|
|
||||||
QJsonParseError error;
|
|
||||||
QJsonDocument jsonDoc = QJsonDocument::fromJson(data, &error);
|
|
||||||
QCOMPARE(error.error, QJsonParseError::NoError);
|
|
||||||
QVariantList rulesList = jsonDoc.toVariant().toList();
|
|
||||||
|
|
||||||
// delete each rule
|
// delete each rule
|
||||||
foreach (const QVariant &rule, rulesList) {
|
foreach (const QVariant &rule, rulesList) {
|
||||||
clientSpy.clear();
|
|
||||||
QVariantMap ruleMap = rule.toMap();
|
QVariantMap ruleMap = rule.toMap();
|
||||||
QNetworkRequest request(QUrl(QString("http://localhost:3333/api/v1/rules/%1").arg(ruleMap.value("id").toString())));
|
QNetworkRequest request(QUrl(QString("http://localhost:3333/api/v1/rules/%1").arg(ruleMap.value("id").toString())));
|
||||||
request.setHeader(QNetworkRequest::ContentTypeHeader, "text/json");
|
response = deleteAndWait(request);
|
||||||
reply = nam->deleteResource(request);
|
QVERIFY(!response.isNull());
|
||||||
clientSpy.wait();
|
|
||||||
QVERIFY2(clientSpy.count() == 1, "expected exactly 1 response from webserver");
|
|
||||||
int statusCode = reply->attribute(QNetworkRequest::HttpStatusCodeAttribute).toInt();
|
|
||||||
QCOMPARE(statusCode, 200);
|
|
||||||
reply->deleteLater();
|
|
||||||
}
|
}
|
||||||
nam->deleteLater();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void TestRestRules::verifyRuleExecuted(const ActionTypeId &actionTypeId)
|
void TestRestRules::verifyRuleExecuted(const ActionTypeId &actionTypeId)
|
||||||
@ -118,7 +105,7 @@ void TestRestRules::verifyRuleExecuted(const ActionTypeId &actionTypeId)
|
|||||||
QSignalSpy spy(&nam, SIGNAL(finished(QNetworkReply*)));
|
QSignalSpy spy(&nam, SIGNAL(finished(QNetworkReply*)));
|
||||||
QNetworkRequest request(QUrl(QString("http://localhost:%1/actionhistory").arg(m_mockDevice1Port)));
|
QNetworkRequest request(QUrl(QString("http://localhost:%1/actionhistory").arg(m_mockDevice1Port)));
|
||||||
QNetworkReply *reply = nam.get(request);
|
QNetworkReply *reply = nam.get(request);
|
||||||
spy.wait(500);
|
spy.wait();
|
||||||
QCOMPARE(spy.count(), 1);
|
QCOMPARE(spy.count(), 1);
|
||||||
|
|
||||||
QByteArray actionHistory = reply->readAll();
|
QByteArray actionHistory = reply->readAll();
|
||||||
@ -154,6 +141,70 @@ void TestRestRules::triggerMockEvent()
|
|||||||
reply->deleteLater();
|
reply->deleteLater();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
QVariant TestRestRules::validIntStateBasedRule(const QString &name, const bool &executable, const bool &enabled)
|
||||||
|
{
|
||||||
|
QVariantMap params;
|
||||||
|
|
||||||
|
// StateDescriptor
|
||||||
|
QVariantMap stateDescriptor;
|
||||||
|
stateDescriptor.insert("stateTypeId", mockIntStateId);
|
||||||
|
stateDescriptor.insert("deviceId", m_mockDeviceId);
|
||||||
|
stateDescriptor.insert("operator", JsonTypes::valueOperatorToString(Types::ValueOperatorLess));
|
||||||
|
stateDescriptor.insert("value", 25);
|
||||||
|
|
||||||
|
// StateEvaluator
|
||||||
|
QVariantMap stateEvaluator;
|
||||||
|
stateEvaluator.insert("stateDescriptor", stateDescriptor);
|
||||||
|
stateEvaluator.insert("operator", JsonTypes::stateOperatorToString(Types::StateOperatorAnd));
|
||||||
|
|
||||||
|
// RuleAction
|
||||||
|
QVariantMap action;
|
||||||
|
action.insert("actionTypeId", mockActionIdWithParams);
|
||||||
|
QVariantList actionParams;
|
||||||
|
QVariantMap param1;
|
||||||
|
param1.insert("name", "mockActionParam1");
|
||||||
|
param1.insert("value", 5);
|
||||||
|
actionParams.append(param1);
|
||||||
|
QVariantMap param2;
|
||||||
|
param2.insert("name", "mockActionParam2");
|
||||||
|
param2.insert("value", true);
|
||||||
|
actionParams.append(param2);
|
||||||
|
action.insert("deviceId", m_mockDeviceId);
|
||||||
|
action.insert("ruleActionParams", actionParams);
|
||||||
|
|
||||||
|
// RuleExitAction
|
||||||
|
QVariantMap exitAction;
|
||||||
|
exitAction.insert("actionTypeId", mockActionIdNoParams);
|
||||||
|
exitAction.insert("deviceId", m_mockDeviceId);
|
||||||
|
exitAction.insert("ruleActionParams", QVariantList());
|
||||||
|
|
||||||
|
params.insert("name", name);
|
||||||
|
params.insert("enabled", enabled);
|
||||||
|
params.insert("executable", executable);
|
||||||
|
params.insert("stateEvaluator", stateEvaluator);
|
||||||
|
params.insert("actions", QVariantList() << action);
|
||||||
|
params.insert("exitActions", QVariantList() << exitAction);
|
||||||
|
|
||||||
|
return params;
|
||||||
|
}
|
||||||
|
|
||||||
|
void TestRestRules::getRules()
|
||||||
|
{
|
||||||
|
// Get all rules
|
||||||
|
QVariant response = getAndWait(QNetworkRequest(QUrl("http://localhost:3333/api/v1/rules")));
|
||||||
|
QVariantList rulesList = response.toList();
|
||||||
|
QVERIFY2(rulesList.count() == 0, "Not enought rules");
|
||||||
|
|
||||||
|
foreach (const QVariant &rule, rulesList) {
|
||||||
|
QVariantMap ruleMap = rule.toMap();
|
||||||
|
QNetworkRequest request(QUrl(QString("http://localhost:3333/api/v1/rules/%1").arg(ruleMap.value("id").toString())));
|
||||||
|
request.setHeader(QNetworkRequest::ContentTypeHeader, "text/json");
|
||||||
|
|
||||||
|
response = getAndWait(request);
|
||||||
|
QVERIFY2(!response.isNull(), "Could not get rule");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void TestRestRules::addRemoveRules_data()
|
void TestRestRules::addRemoveRules_data()
|
||||||
{
|
{
|
||||||
// RuleAction
|
// RuleAction
|
||||||
@ -342,72 +393,34 @@ void TestRestRules::addRemoveRules()
|
|||||||
params.insert("enabled", enabled);
|
params.insert("enabled", enabled);
|
||||||
}
|
}
|
||||||
|
|
||||||
QNetworkAccessManager *nam = new QNetworkAccessManager(this);
|
|
||||||
QSignalSpy clientSpy(nam, SIGNAL(finished(QNetworkReply*)));
|
|
||||||
|
|
||||||
// Get rules and verify there is no rule added
|
// Get rules and verify there is no rule added
|
||||||
QNetworkRequest request;
|
QNetworkRequest request(QUrl("http://localhost:3333/api/v1/rules"));
|
||||||
request.setUrl(QUrl("http://localhost:3333/api/v1/rules"));
|
QVariant response = getAndWait(request);
|
||||||
QNetworkReply *reply = nam->get(request);
|
QVariantList rulesList = response.toList();
|
||||||
clientSpy.wait();
|
|
||||||
QVERIFY2(clientSpy.count() == 1, "expected exactly 1 response from webserver");
|
|
||||||
int statusCode = reply->attribute(QNetworkRequest::HttpStatusCodeAttribute).toInt();
|
|
||||||
QCOMPARE(statusCode, 200);
|
|
||||||
QByteArray data = reply->readAll();
|
|
||||||
reply->deleteLater();
|
|
||||||
|
|
||||||
QJsonParseError error;
|
|
||||||
QJsonDocument jsonDoc = QJsonDocument::fromJson(data, &error);
|
|
||||||
QCOMPARE(error.error, QJsonParseError::NoError);
|
|
||||||
QVariantList rulesList = jsonDoc.toVariant().toList();
|
|
||||||
QVERIFY2(rulesList.count() == 0, "there should be no rules.");
|
QVERIFY2(rulesList.count() == 0, "there should be no rules.");
|
||||||
|
|
||||||
// ADD rule
|
// ADD rule
|
||||||
clientSpy.clear();
|
|
||||||
request = QNetworkRequest(QUrl(QString("http://localhost:3333/api/v1/rules")));
|
request = QNetworkRequest(QUrl(QString("http://localhost:3333/api/v1/rules")));
|
||||||
request.setHeader(QNetworkRequest::ContentTypeHeader, "text/json");
|
request.setHeader(QNetworkRequest::ContentTypeHeader, "text/json");
|
||||||
reply = nam->post(request, QJsonDocument::fromVariant(params).toJson(QJsonDocument::Compact));
|
|
||||||
clientSpy.wait();
|
|
||||||
QVERIFY2(clientSpy.count() == 1, "expected exactly 1 response from webserver");
|
|
||||||
statusCode = reply->attribute(QNetworkRequest::HttpStatusCodeAttribute).toInt();
|
|
||||||
QCOMPARE(statusCode, expectedStatusCode);
|
|
||||||
|
|
||||||
|
response = postAndWait(request, params, expectedStatusCode);
|
||||||
if (expectedStatusCode != 200)
|
if (expectedStatusCode != 200)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
jsonDoc = QJsonDocument::fromJson(reply->readAll(), &error);
|
RuleId ruleId = RuleId(response.toMap().value("id").toString());
|
||||||
QCOMPARE(error.error, QJsonParseError::NoError);
|
|
||||||
reply->deleteLater();
|
|
||||||
|
|
||||||
RuleId ruleId = RuleId(jsonDoc.toVariant().toMap().value("id").toString());
|
|
||||||
QVERIFY(!ruleId.isNull());
|
QVERIFY(!ruleId.isNull());
|
||||||
|
|
||||||
// GET rule details
|
// GET rule details
|
||||||
clientSpy.clear();
|
|
||||||
request = QNetworkRequest(QUrl(QString("http://localhost:3333/api/v1/rules/%1").arg(ruleId.toString())));
|
request = QNetworkRequest(QUrl(QString("http://localhost:3333/api/v1/rules/%1").arg(ruleId.toString())));
|
||||||
request.setHeader(QNetworkRequest::ContentTypeHeader, "text/json");
|
request.setHeader(QNetworkRequest::ContentTypeHeader, "text/json");
|
||||||
reply = nam->get(request);
|
response = getAndWait(request);
|
||||||
clientSpy.wait();
|
QVERIFY(!response.isNull());
|
||||||
QVERIFY2(clientSpy.count() == 1, "expected exactly 1 response from webserver");
|
|
||||||
statusCode = reply->attribute(QNetworkRequest::HttpStatusCodeAttribute).toInt();
|
|
||||||
QCOMPARE(statusCode, 200);
|
|
||||||
data = reply->readAll();
|
|
||||||
reply->deleteLater();
|
|
||||||
jsonDoc = QJsonDocument::fromJson(data, &error);
|
|
||||||
QCOMPARE(error.error, QJsonParseError::NoError);
|
|
||||||
|
|
||||||
// REMOVE rule
|
// REMOVE rule
|
||||||
clientSpy.clear();
|
|
||||||
request = QNetworkRequest(QUrl(QString("http://localhost:3333/api/v1/rules/%1").arg(ruleId.toString())));
|
request = QNetworkRequest(QUrl(QString("http://localhost:3333/api/v1/rules/%1").arg(ruleId.toString())));
|
||||||
request.setHeader(QNetworkRequest::ContentTypeHeader, "text/json");
|
request.setHeader(QNetworkRequest::ContentTypeHeader, "text/json");
|
||||||
reply = nam->deleteResource(request);
|
response = deleteAndWait(request);
|
||||||
clientSpy.wait();
|
QVERIFY(!response.isNull());
|
||||||
QVERIFY2(clientSpy.count() == 1, "expected exactly 1 response from webserver");
|
|
||||||
statusCode = reply->attribute(QNetworkRequest::HttpStatusCodeAttribute).toInt();
|
|
||||||
QCOMPARE(statusCode, 200);
|
|
||||||
reply->deleteLater();
|
|
||||||
|
|
||||||
nam->deleteLater();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void TestRestRules::emptyRule()
|
void TestRestRules::emptyRule()
|
||||||
@ -417,27 +430,13 @@ void TestRestRules::emptyRule()
|
|||||||
params.insert("name", QString());
|
params.insert("name", QString());
|
||||||
params.insert("actions", QVariantList());
|
params.insert("actions", QVariantList());
|
||||||
|
|
||||||
QNetworkAccessManager *nam = new QNetworkAccessManager(this);
|
|
||||||
QSignalSpy clientSpy(nam, SIGNAL(finished(QNetworkReply*)));
|
|
||||||
|
|
||||||
// Get rules and verify there is no rule added
|
// Get rules and verify there is no rule added
|
||||||
QNetworkRequest request = QNetworkRequest(QUrl(QString("http://localhost:3333/api/v1/rules")));
|
QNetworkRequest request = QNetworkRequest(QUrl(QString("http://localhost:3333/api/v1/rules")));
|
||||||
request.setHeader(QNetworkRequest::ContentTypeHeader, "text/json");
|
request.setHeader(QNetworkRequest::ContentTypeHeader, "text/json");
|
||||||
QNetworkReply *reply = nam->post(request, QJsonDocument::fromVariant(params).toJson(QJsonDocument::Compact));
|
|
||||||
clientSpy.wait();
|
|
||||||
QVERIFY2(clientSpy.count() == 1, "expected exactly 1 response from webserver");
|
|
||||||
int statusCode = reply->attribute(QNetworkRequest::HttpStatusCodeAttribute).toInt();
|
|
||||||
QCOMPARE(statusCode, 400);
|
|
||||||
QByteArray data = reply->readAll();
|
|
||||||
reply->deleteLater();
|
|
||||||
|
|
||||||
QJsonParseError error;
|
QVariant response = postAndWait(request, params, 400);
|
||||||
QJsonDocument jsonDoc = QJsonDocument::fromJson(data, &error);
|
QCOMPARE(response.toMap().value("error").toString(), JsonTypes::ruleErrorToString(RuleEngine::RuleErrorMissingParameter));
|
||||||
QCOMPARE(error.error, QJsonParseError::NoError);
|
|
||||||
|
|
||||||
QVERIFY2(jsonDoc.toVariant().toMap().contains("error"), "The error message is missing");
|
|
||||||
QVERIFY2(jsonDoc.toVariant().toMap().value("error").toString() == "RuleErrorMissingParameter", "Wrong RuleError.");
|
|
||||||
nam->deleteLater();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void TestRestRules::editRules_data()
|
void TestRestRules::editRules_data()
|
||||||
@ -688,42 +687,19 @@ void TestRestRules::editRules()
|
|||||||
params.insert("stateEvaluator", stateEvaluator0);
|
params.insert("stateEvaluator", stateEvaluator0);
|
||||||
params.insert("name", "TestRule");
|
params.insert("name", "TestRule");
|
||||||
|
|
||||||
|
|
||||||
QNetworkAccessManager *nam = new QNetworkAccessManager(this);
|
|
||||||
QSignalSpy clientSpy(nam, SIGNAL(finished(QNetworkReply*)));
|
|
||||||
|
|
||||||
// Get rules and verify there is no rule added
|
// Get rules and verify there is no rule added
|
||||||
QNetworkRequest request;
|
QNetworkRequest request(QUrl("http://localhost:3333/api/v1/rules"));
|
||||||
request.setUrl(QUrl("http://localhost:3333/api/v1/rules"));
|
QVariant response = getAndWait(request);
|
||||||
QNetworkReply *reply = nam->get(request);
|
QVariantList rulesList = response.toList();
|
||||||
clientSpy.wait();
|
|
||||||
QVERIFY2(clientSpy.count() == 1, "expected exactly 1 response from webserver");
|
|
||||||
int statusCode = reply->attribute(QNetworkRequest::HttpStatusCodeAttribute).toInt();
|
|
||||||
QCOMPARE(statusCode, 200);
|
|
||||||
QByteArray data = reply->readAll();
|
|
||||||
reply->deleteLater();
|
|
||||||
|
|
||||||
QJsonParseError error;
|
|
||||||
QJsonDocument jsonDoc = QJsonDocument::fromJson(data, &error);
|
|
||||||
QCOMPARE(error.error, QJsonParseError::NoError);
|
|
||||||
QVariantList rulesList = jsonDoc.toVariant().toList();
|
|
||||||
QVERIFY2(rulesList.count() == 0, "there should be no rules.");
|
QVERIFY2(rulesList.count() == 0, "there should be no rules.");
|
||||||
|
|
||||||
// ADD rule
|
// ADD rule
|
||||||
clientSpy.clear();
|
request.setUrl(QUrl(QString("http://localhost:3333/api/v1/rules")));
|
||||||
request = QNetworkRequest(QUrl(QString("http://localhost:3333/api/v1/rules")));
|
|
||||||
request.setHeader(QNetworkRequest::ContentTypeHeader, "text/json");
|
request.setHeader(QNetworkRequest::ContentTypeHeader, "text/json");
|
||||||
reply = nam->post(request, QJsonDocument::fromVariant(params).toJson(QJsonDocument::Compact));
|
response = postAndWait(request, params);
|
||||||
clientSpy.wait();
|
QVERIFY(!response.isNull());
|
||||||
QVERIFY2(clientSpy.count() == 1, "expected exactly 1 response from webserver");
|
|
||||||
statusCode = reply->attribute(QNetworkRequest::HttpStatusCodeAttribute).toInt();
|
|
||||||
QCOMPARE(statusCode, 200);
|
|
||||||
|
|
||||||
jsonDoc = QJsonDocument::fromJson(reply->readAll(), &error);
|
RuleId ruleId = RuleId(response.toMap().value("id").toString());
|
||||||
QCOMPARE(error.error, QJsonParseError::NoError);
|
|
||||||
reply->deleteLater();
|
|
||||||
|
|
||||||
RuleId ruleId = RuleId(jsonDoc.toVariant().toMap().value("id").toString());
|
|
||||||
QVERIFY(!ruleId.isNull());
|
QVERIFY(!ruleId.isNull());
|
||||||
|
|
||||||
// now create the new rule and edit the original one
|
// now create the new rule and edit the original one
|
||||||
@ -752,54 +728,27 @@ void TestRestRules::editRules()
|
|||||||
}
|
}
|
||||||
|
|
||||||
// EDIT rule
|
// EDIT rule
|
||||||
clientSpy.clear();
|
request.setUrl(QUrl(QString("http://localhost:3333/api/v1/rules/%1").arg(ruleId.toString())));
|
||||||
request = QNetworkRequest(QUrl(QString("http://localhost:3333/api/v1/rules/%1").arg(ruleId.toString())));
|
|
||||||
request.setHeader(QNetworkRequest::ContentTypeHeader, "text/json");
|
request.setHeader(QNetworkRequest::ContentTypeHeader, "text/json");
|
||||||
reply = nam->put(request, QJsonDocument::fromVariant(params).toJson(QJsonDocument::Compact));
|
response = putAndWait(request, params, expectedStatusCode);
|
||||||
clientSpy.wait();
|
QVERIFY(!response.isNull());
|
||||||
QVERIFY2(clientSpy.count() == 1, "expected exactly 1 response from webserver");
|
|
||||||
statusCode = reply->attribute(QNetworkRequest::HttpStatusCodeAttribute).toInt();
|
|
||||||
QCOMPARE(statusCode, expectedStatusCode);
|
|
||||||
|
|
||||||
if (expectedStatusCode == 200) {
|
if (expectedStatusCode == 200) {
|
||||||
// get edit rule and verify params
|
// get edit rule and verify params
|
||||||
clientSpy.clear();
|
request.setUrl(QUrl(QString("http://localhost:3333/api/v1/rules")));
|
||||||
request = QNetworkRequest(QUrl(QString("http://localhost:3333/api/v1/rules")));
|
response = getAndWait(request);
|
||||||
request.setHeader(QNetworkRequest::ContentTypeHeader, "text/json");
|
QVERIFY(!response.isNull());
|
||||||
reply = nam->get(request);
|
|
||||||
clientSpy.wait();
|
|
||||||
QVERIFY2(clientSpy.count() == 1, "expected exactly 1 response from webserver");
|
|
||||||
statusCode = reply->attribute(QNetworkRequest::HttpStatusCodeAttribute).toInt();
|
|
||||||
QCOMPARE(statusCode, 200);
|
|
||||||
jsonDoc = QJsonDocument::fromJson(reply->readAll(), &error);
|
|
||||||
QCOMPARE(error.error, QJsonParseError::NoError);
|
|
||||||
reply->deleteLater();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// REMOVE rule
|
// REMOVE rule
|
||||||
clientSpy.clear();
|
request.setUrl(QUrl(QString("http://localhost:3333/api/v1/rules/%1").arg(ruleId.toString())));
|
||||||
request = QNetworkRequest(QUrl(QString("http://localhost:3333/api/v1/rules/%1").arg(ruleId.toString())));
|
response = deleteAndWait(request);
|
||||||
request.setHeader(QNetworkRequest::ContentTypeHeader, "text/json");
|
QVERIFY(!response.isNull());
|
||||||
reply = nam->deleteResource(request);
|
|
||||||
clientSpy.wait();
|
|
||||||
QVERIFY2(clientSpy.count() == 1, "expected exactly 1 response from webserver");
|
|
||||||
statusCode = reply->attribute(QNetworkRequest::HttpStatusCodeAttribute).toInt();
|
|
||||||
QCOMPARE(statusCode, 200);
|
|
||||||
reply->deleteLater();
|
|
||||||
|
|
||||||
|
|
||||||
// check if removed
|
// check if removed
|
||||||
clientSpy.clear();
|
request.setUrl(QUrl(QString("http://localhost:3333/api/v1/rules/%1").arg(ruleId.toString())));
|
||||||
request = QNetworkRequest(QUrl(QString("http://localhost:3333/api/v1/rules/%1").arg(ruleId.toString())));
|
response = getAndWait(request, 404);
|
||||||
request.setHeader(QNetworkRequest::ContentTypeHeader, "text/json");
|
QVERIFY(!response.isNull());
|
||||||
reply = nam->get(request);
|
|
||||||
clientSpy.wait();
|
|
||||||
QVERIFY2(clientSpy.count() == 1, "expected exactly 1 response from webserver");
|
|
||||||
statusCode = reply->attribute(QNetworkRequest::HttpStatusCodeAttribute).toInt();
|
|
||||||
QCOMPARE(statusCode, 404);
|
|
||||||
reply->deleteLater();
|
|
||||||
|
|
||||||
nam->deleteLater();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void TestRestRules::enableDisableRule()
|
void TestRestRules::enableDisableRule()
|
||||||
@ -823,7 +772,6 @@ void TestRestRules::enableDisableRule()
|
|||||||
// ADD rule
|
// ADD rule
|
||||||
QNetworkRequest request = QNetworkRequest(QUrl(QString("http://localhost:3333/api/v1/rules")));
|
QNetworkRequest request = QNetworkRequest(QUrl(QString("http://localhost:3333/api/v1/rules")));
|
||||||
request.setHeader(QNetworkRequest::ContentTypeHeader, "text/json");
|
request.setHeader(QNetworkRequest::ContentTypeHeader, "text/json");
|
||||||
|
|
||||||
QVariant response = postAndWait(request, addRuleParams);
|
QVariant response = postAndWait(request, addRuleParams);
|
||||||
RuleId ruleId = RuleId(response.toMap().value("id").toString());
|
RuleId ruleId = RuleId(response.toMap().value("id").toString());
|
||||||
QVERIFY(!ruleId.isNull());
|
QVERIFY(!ruleId.isNull());
|
||||||
@ -862,23 +810,82 @@ void TestRestRules::enableDisableRule()
|
|||||||
cleanupRules();
|
cleanupRules();
|
||||||
}
|
}
|
||||||
|
|
||||||
void TestRestRules::getRules()
|
void TestRestRules::executeRuleActions_data()
|
||||||
{
|
{
|
||||||
// Get all rules
|
QTest::addColumn<QVariant>("params");
|
||||||
QVariant response = getAndWait(QNetworkRequest(QUrl("http://localhost:3333/api/v1/rules")));
|
QTest::addColumn<int>("expectedStatusCode");
|
||||||
QVariantList rulesList = response.toList();
|
QTest::addColumn<RuleEngine::RuleError>("ruleError");
|
||||||
QVERIFY2(rulesList.count() == 0, "Not enought rules");
|
|
||||||
|
|
||||||
foreach (const QVariant &rule, rulesList) {
|
QTest::newRow("executable rule, enabled") << validIntStateBasedRule("Executeable", true, true) << 200 << RuleEngine::RuleErrorNoError;
|
||||||
QVariantMap ruleMap = rule.toMap();
|
QTest::newRow("executable rule, disabled") << validIntStateBasedRule("Executeable", true, false) << 200 << RuleEngine::RuleErrorNoError;
|
||||||
QNetworkRequest request(QUrl(QString("http://localhost:3333/api/v1/rules/%1").arg(ruleMap.value("id").toString())));
|
QTest::newRow("not executable rule, enabled") << validIntStateBasedRule("Not Executable", false, true) << 500 << RuleEngine::RuleErrorNotExecutable;
|
||||||
request.setHeader(QNetworkRequest::ContentTypeHeader, "text/json");
|
QTest::newRow("not executable rule, disabled") << validIntStateBasedRule("Not Executable", false, false) << 500 << RuleEngine::RuleErrorNotExecutable;
|
||||||
|
|
||||||
response = getAndWait(request);
|
|
||||||
QVERIFY2(!response.isNull(), "Could not get rule");
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void TestRestRules::executeRuleActions()
|
||||||
|
{
|
||||||
|
QFETCH(QVariant, params);
|
||||||
|
QFETCH(int, expectedStatusCode);
|
||||||
|
QFETCH(RuleEngine::RuleError, ruleError);
|
||||||
|
|
||||||
|
// ADD rule
|
||||||
|
QNetworkRequest request(QUrl(QString("http://localhost:3333/api/v1/rules")));
|
||||||
|
request.setHeader(QNetworkRequest::ContentTypeHeader, "text/json");
|
||||||
|
QVariant response = postAndWait(request, params);
|
||||||
|
|
||||||
|
RuleId ruleId = RuleId(response.toMap().value("id").toString());
|
||||||
|
QVERIFY(!ruleId.isNull());
|
||||||
|
|
||||||
|
request.setUrl(QUrl(QString("http://localhost:3333/api/v1/rules/%1").arg(ruleId.toString())));
|
||||||
|
response = getAndWait(request);
|
||||||
|
|
||||||
|
qDebug() << QJsonDocument::fromVariant(response).toJson();
|
||||||
|
|
||||||
|
|
||||||
|
cleanupMockHistory();
|
||||||
|
|
||||||
|
// EXECUTE actions
|
||||||
|
request.setUrl(QUrl(QString("http://localhost:3333/api/v1/rules/%1/executeactions").arg(ruleId.toString())));
|
||||||
|
response = postAndWait(request, QVariant(), expectedStatusCode);
|
||||||
|
QVERIFY(!response.isNull());
|
||||||
|
QCOMPARE(JsonTypes::ruleErrorToString(ruleError), response.toMap().value("error").toString());
|
||||||
|
|
||||||
|
if (ruleError == RuleEngine::RuleErrorNoError) {
|
||||||
|
verifyRuleExecuted(mockActionIdWithParams);
|
||||||
|
} else {
|
||||||
|
verifyRuleNotExecuted();
|
||||||
|
}
|
||||||
|
|
||||||
|
cleanupMockHistory();
|
||||||
|
|
||||||
|
// EXECUTE exit actions
|
||||||
|
request.setUrl(QUrl(QString("http://localhost:3333/api/v1/rules/%1/executeexitactions").arg(ruleId.toString())));
|
||||||
|
response = postAndWait(request, QVariant(), expectedStatusCode);
|
||||||
|
QVERIFY(!response.isNull());
|
||||||
|
QCOMPARE(JsonTypes::ruleErrorToString(ruleError), response.toMap().value("error").toString());
|
||||||
|
|
||||||
|
if (ruleError == RuleEngine::RuleErrorNoError) {
|
||||||
|
verifyRuleExecuted(mockActionIdNoParams);
|
||||||
|
} else {
|
||||||
|
verifyRuleNotExecuted();
|
||||||
|
}
|
||||||
|
|
||||||
|
cleanupMockHistory();
|
||||||
|
|
||||||
|
// REMOVE rule
|
||||||
|
request.setUrl(QUrl(QString("http://localhost:3333/api/v1/rules/%1").arg(ruleId.toString())));
|
||||||
|
response = deleteAndWait(request);
|
||||||
|
QVERIFY(!response.isNull());
|
||||||
|
QCOMPARE(JsonTypes::ruleErrorToString(RuleEngine::RuleErrorNoError), response.toMap().value("error").toString());
|
||||||
|
|
||||||
|
// check if removed
|
||||||
|
request.setUrl(QUrl(QString("http://localhost:3333/api/v1/rules/%1").arg(ruleId.toString())));
|
||||||
|
response = getAndWait(request, 404);
|
||||||
|
QVERIFY(!response.isNull());
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
#include "testrestrules.moc"
|
#include "testrestrules.moc"
|
||||||
QTEST_MAIN(TestRestRules)
|
QTEST_MAIN(TestRestRules)
|
||||||
|
|||||||
@ -48,8 +48,8 @@ private:
|
|||||||
private slots:
|
private slots:
|
||||||
|
|
||||||
void cleanup();
|
void cleanup();
|
||||||
|
|
||||||
void emptyRule();
|
void emptyRule();
|
||||||
|
void getInvalidRule();
|
||||||
|
|
||||||
void addRemoveRules_data();
|
void addRemoveRules_data();
|
||||||
void addRemoveRules();
|
void addRemoveRules();
|
||||||
@ -112,6 +112,14 @@ void TestRules::emptyRule()
|
|||||||
verifyRuleError(response, RuleEngine::RuleErrorMissingParameter);
|
verifyRuleError(response, RuleEngine::RuleErrorMissingParameter);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void TestRules::getInvalidRule()
|
||||||
|
{
|
||||||
|
QVariantMap params;
|
||||||
|
params.insert("ruleId", QUuid::createUuid());
|
||||||
|
QVariant response = injectAndWait("Rules.GetRuleDetails", params);
|
||||||
|
verifyRuleError(response, RuleEngine::RuleErrorRuleNotFound);
|
||||||
|
}
|
||||||
|
|
||||||
void TestRules::verifyRuleExecuted(const ActionTypeId &actionTypeId)
|
void TestRules::verifyRuleExecuted(const ActionTypeId &actionTypeId)
|
||||||
{
|
{
|
||||||
// Verify rule got executed
|
// Verify rule got executed
|
||||||
@ -721,7 +729,7 @@ void TestRules::editRules()
|
|||||||
QVERIFY2(exitActions == replyExitActions, "ExitActions don't match");
|
QVERIFY2(exitActions == replyExitActions, "ExitActions don't match");
|
||||||
}
|
}
|
||||||
|
|
||||||
// Remove th rule
|
// Remove the rule
|
||||||
params.clear();
|
params.clear();
|
||||||
params.insert("ruleId", ruleId);
|
params.insert("ruleId", ruleId);
|
||||||
response = injectAndWait("Rules.RemoveRule", params);
|
response = injectAndWait("Rules.RemoveRule", params);
|
||||||
|
|||||||
@ -48,8 +48,8 @@ private slots:
|
|||||||
void TestStates::getStateTypes()
|
void TestStates::getStateTypes()
|
||||||
{
|
{
|
||||||
QVariantMap params;
|
QVariantMap params;
|
||||||
params.insert("deviceId", m_mockDeviceId);
|
params.insert("deviceClassId", mockDeviceClassId);
|
||||||
QVariant response = injectAndWait("Devices.GetStateValues", params);
|
QVariant response = injectAndWait("Devices.GetStateTypes", params);
|
||||||
verifyDeviceError(response);
|
verifyDeviceError(response);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user