fixed inline comments and added a test
This commit is contained in:
parent
bea3b97cba
commit
1c008d0bef
@ -133,36 +133,39 @@ JsonReply* RulesHandler::AddRule(const QVariantMap ¶ms)
|
|||||||
if (params.contains("eventDescriptor") || params.contains("eventDescriptorList")) {
|
if (params.contains("eventDescriptor") || params.contains("eventDescriptorList")) {
|
||||||
if (params.contains("exitActions")) {
|
if (params.contains("exitActions")) {
|
||||||
QVariantMap returns;
|
QVariantMap returns;
|
||||||
qWarning() << "The exitActions will never be executed if the rule contains any eventDescriptor.";
|
qWarning() << "The exitActions will never be executed if the rule contains an eventDescriptor.";
|
||||||
returns.insert("ruleError", JsonTypes::ruleErrorToString(RuleEngine::RuleErrorInvalidRuleFormat));
|
returns.insert("ruleError", JsonTypes::ruleErrorToString(RuleEngine::RuleErrorInvalidRuleFormat));
|
||||||
return createReply(returns);
|
return createReply(returns);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Check and unpack eventDescriptors
|
||||||
QList<EventDescriptor> eventDescriptorList;
|
QList<EventDescriptor> eventDescriptorList;
|
||||||
if (params.contains("eventDescriptor")) {
|
if (params.contains("eventDescriptor")) {
|
||||||
QVariantMap eventMap = params.value("eventDescriptor").toMap();
|
QVariantMap eventMap = params.value("eventDescriptor").toMap();
|
||||||
|
qDebug() << "unpacking eventDescriptor" << eventMap;
|
||||||
eventDescriptorList.append(JsonTypes::unpackEventDescriptor(eventMap));
|
eventDescriptorList.append(JsonTypes::unpackEventDescriptor(eventMap));
|
||||||
} else if (params.contains("eventDescriptorList")) {
|
} else if (params.contains("eventDescriptorList")) {
|
||||||
foreach (const QVariant &eventVariant, params.value("eventDescriptorList").toList()) {
|
QVariantList eventDescriptors = params.value("eventDescriptorList").toList();
|
||||||
|
qDebug() << "unpacking eventDescriptorList:" << eventDescriptors;
|
||||||
|
foreach (const QVariant &eventVariant, eventDescriptors) {
|
||||||
QVariantMap eventMap = eventVariant.toMap();
|
QVariantMap eventMap = eventVariant.toMap();
|
||||||
eventDescriptorList.append(JsonTypes::unpackEventDescriptor(eventMap));
|
eventDescriptorList.append(JsonTypes::unpackEventDescriptor(eventMap));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
qDebug() << "unpacking:" << params.value("stateEvaluator").toMap();
|
// Check and unpack stateEvaluator
|
||||||
|
qDebug() << "unpacking stateEvaluator:" << params.value("stateEvaluator").toMap();
|
||||||
StateEvaluator stateEvaluator = JsonTypes::unpackStateEvaluator(params.value("stateEvaluator").toMap());
|
StateEvaluator stateEvaluator = JsonTypes::unpackStateEvaluator(params.value("stateEvaluator").toMap());
|
||||||
|
|
||||||
|
// Check and unpack actions
|
||||||
QList<RuleAction> actions;
|
QList<RuleAction> actions;
|
||||||
QVariantList actionList = params.value("actions").toList();
|
QVariantList actionList = params.value("actions").toList();
|
||||||
qDebug() << "unpacking actions:" << actionList;
|
qDebug() << "unpacking actions:" << actionList;
|
||||||
foreach (const QVariant &actionVariant, actionList) {
|
foreach (const QVariant &actionVariant, actionList) {
|
||||||
QVariantMap actionMap = actionVariant.toMap();
|
QVariantMap actionMap = actionVariant.toMap();
|
||||||
RuleAction action(ActionTypeId(actionMap.value("actionTypeId").toString()), DeviceId(actionMap.value("deviceId").toString()));
|
RuleAction action(ActionTypeId(actionMap.value("actionTypeId").toString()), DeviceId(actionMap.value("deviceId").toString()));
|
||||||
qDebug() << "actionParams from json" << actionMap.value("ruleActionParams");
|
|
||||||
RuleActionParamList actionParamList = JsonTypes::unpackRuleActionParams(actionMap.value("ruleActionParams").toList());
|
RuleActionParamList actionParamList = JsonTypes::unpackRuleActionParams(actionMap.value("ruleActionParams").toList());
|
||||||
qDebug() << "unpacked actionParamList:" << actionParamList;
|
|
||||||
foreach (const RuleActionParam &ruleActionParam, actionParamList) {
|
foreach (const RuleActionParam &ruleActionParam, actionParamList) {
|
||||||
if (!ruleActionParam.isValid()) {
|
if (!ruleActionParam.isValid()) {
|
||||||
qWarning() << "ERROR: got actionParam with value AND eventTypeId!";
|
qWarning() << "ERROR: got actionParam with value AND eventTypeId!";
|
||||||
@ -173,7 +176,6 @@ JsonReply* RulesHandler::AddRule(const QVariantMap ¶ms)
|
|||||||
}
|
}
|
||||||
|
|
||||||
action.setRuleActionParams(actionParamList);
|
action.setRuleActionParams(actionParamList);
|
||||||
qDebug() << "params in action" << action.ruleActionParams();
|
|
||||||
actions.append(action);
|
actions.append(action);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -202,7 +204,9 @@ JsonReply* RulesHandler::AddRule(const QVariantMap ¶ms)
|
|||||||
QVariant::Type actionParamType = getActionParamType(ruleAction.actionTypeId(), ruleActionParam.name());
|
QVariant::Type actionParamType = getActionParamType(ruleAction.actionTypeId(), ruleActionParam.name());
|
||||||
if (eventParamType != actionParamType) {
|
if (eventParamType != actionParamType) {
|
||||||
QVariantMap returns;
|
QVariantMap returns;
|
||||||
qWarning() << "RuleActionParam" << ruleActionParam.name() << " and given event param have not the same type.";
|
qWarning() << "RuleActionParam" << ruleActionParam.name() << " and given event param " << ruleActionParam.eventParamName() << "have not the same type:";
|
||||||
|
qWarning() << " -> actionParamType:" << actionParamType;
|
||||||
|
qWarning() << " -> eventParamType:" << eventParamType;
|
||||||
returns.insert("ruleError", JsonTypes::ruleErrorToString(RuleEngine::RuleErrorTypesNotMatching));
|
returns.insert("ruleError", JsonTypes::ruleErrorToString(RuleEngine::RuleErrorTypesNotMatching));
|
||||||
return createReply(returns);
|
return createReply(returns);
|
||||||
}
|
}
|
||||||
@ -218,13 +222,14 @@ JsonReply* RulesHandler::AddRule(const QVariantMap ¶ms)
|
|||||||
return createReply(returns);
|
return createReply(returns);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Check and unpack exitActions
|
||||||
QList<RuleAction> exitActions;
|
QList<RuleAction> exitActions;
|
||||||
if (params.contains("exitActions")) {
|
if (params.contains("exitActions")) {
|
||||||
QVariantList exitActionList = params.value("exitActions").toList();
|
QVariantList exitActionList = params.value("exitActions").toList();
|
||||||
|
qDebug() << "unpacking exitActions:" << exitActionList;
|
||||||
foreach (const QVariant &actionVariant, exitActionList) {
|
foreach (const QVariant &actionVariant, exitActionList) {
|
||||||
QVariantMap actionMap = actionVariant.toMap();
|
QVariantMap actionMap = actionVariant.toMap();
|
||||||
RuleAction action(ActionTypeId(actionMap.value("actionTypeId").toString()), DeviceId(actionMap.value("deviceId").toString()));
|
RuleAction action(ActionTypeId(actionMap.value("actionTypeId").toString()), DeviceId(actionMap.value("deviceId").toString()));
|
||||||
qDebug() << "params from json" << actionMap.value("ruleActionParams");
|
|
||||||
if (action.isEventBased()) {
|
if (action.isEventBased()) {
|
||||||
qWarning() << "ERROR: got exitAction with a param value containing an eventTypeId!";
|
qWarning() << "ERROR: got exitAction with a param value containing an eventTypeId!";
|
||||||
QVariantMap returns;
|
QVariantMap returns;
|
||||||
@ -232,7 +237,7 @@ JsonReply* RulesHandler::AddRule(const QVariantMap ¶ms)
|
|||||||
return createReply(returns);
|
return createReply(returns);
|
||||||
}
|
}
|
||||||
action.setRuleActionParams(JsonTypes::unpackRuleActionParams(actionMap.value("ruleActionParams").toList()));
|
action.setRuleActionParams(JsonTypes::unpackRuleActionParams(actionMap.value("ruleActionParams").toList()));
|
||||||
qDebug() << "params in action" << action.ruleActionParams();
|
qDebug() << "params in exitAction" << action.ruleActionParams();
|
||||||
exitActions.append(action);
|
exitActions.append(action);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -62,6 +62,8 @@ private slots:
|
|||||||
void testStateChange();
|
void testStateChange();
|
||||||
|
|
||||||
void enableDisableRule();
|
void enableDisableRule();
|
||||||
|
|
||||||
|
void testEventBasedAction();
|
||||||
};
|
};
|
||||||
|
|
||||||
void TestRules::cleanupMockHistory() {
|
void TestRules::cleanupMockHistory() {
|
||||||
@ -183,12 +185,6 @@ void TestRules::addRemoveRules_data()
|
|||||||
validEventDescriptor3.insert("deviceId", m_mockDeviceId);
|
validEventDescriptor3.insert("deviceId", m_mockDeviceId);
|
||||||
validEventDescriptor3.insert("paramDescriptors", QVariantList());
|
validEventDescriptor3.insert("paramDescriptors", QVariantList());
|
||||||
|
|
||||||
QVariantMap validEventDescriptor4;
|
|
||||||
validEventDescriptor4.insert("eventTypeId", mockEvent1Id);
|
|
||||||
validEventDescriptor4.insert("deviceId", m_mockDeviceId);
|
|
||||||
validEventDescriptor4.insert("paramDescriptors", QVariantList());
|
|
||||||
|
|
||||||
|
|
||||||
// EventDescriptorList
|
// EventDescriptorList
|
||||||
QVariantList eventDescriptorList;
|
QVariantList eventDescriptorList;
|
||||||
eventDescriptorList.append(validEventDescriptor1);
|
eventDescriptorList.append(validEventDescriptor1);
|
||||||
@ -254,7 +250,7 @@ void TestRules::addRemoveRules_data()
|
|||||||
QTest::newRow("valid rule. enabled, 1 Action (eventBased), 1 EventDescriptor, name") << true << validActionEventBased << QVariantMap() << validEventDescriptor3 << QVariantList() << QVariantMap() << RuleEngine::RuleErrorNoError << true << "ActionEventRule1";
|
QTest::newRow("valid rule. enabled, 1 Action (eventBased), 1 EventDescriptor, name") << true << validActionEventBased << QVariantMap() << validEventDescriptor3 << QVariantList() << QVariantMap() << RuleEngine::RuleErrorNoError << true << "ActionEventRule1";
|
||||||
QTest::newRow("invalid rule. enabled, 1 Action (eventBased), 1 EventDescriptor, name") << true << invalidActionEventBased2 << QVariantMap() << validEventDescriptor3 << QVariantList() << QVariantMap() << RuleEngine::RuleErrorInvalidRuleActionParameter << false << "TestRule";
|
QTest::newRow("invalid rule. enabled, 1 Action (eventBased), 1 EventDescriptor, name") << true << invalidActionEventBased2 << QVariantMap() << validEventDescriptor3 << QVariantList() << QVariantMap() << RuleEngine::RuleErrorInvalidRuleActionParameter << false << "TestRule";
|
||||||
|
|
||||||
QTest::newRow("invalid rule. enabled, 1 Action (eventBased), types not matching, name") << true << invalidActionEventBased3 << QVariantMap() << validEventDescriptor4 << QVariantList() << QVariantMap() << RuleEngine::RuleErrorTypesNotMatching << false << "TestRule";
|
QTest::newRow("invalid rule. enabled, 1 Action (eventBased), types not matching, name") << true << invalidActionEventBased3 << QVariantMap() << validEventDescriptor1 << QVariantList() << QVariantMap() << RuleEngine::RuleErrorTypesNotMatching << false << "TestRule";
|
||||||
|
|
||||||
QTest::newRow("invalid rule. enabled, 1 Action (eventBased), 1 EventDescriptor, name") << true << invalidActionEventBased << QVariantMap() << validEventDescriptor2 << QVariantList() << QVariantMap() << RuleEngine::RuleErrorInvalidRuleActionParameter << false << "TestRule";
|
QTest::newRow("invalid rule. enabled, 1 Action (eventBased), 1 EventDescriptor, name") << true << invalidActionEventBased << QVariantMap() << validEventDescriptor2 << QVariantList() << QVariantMap() << RuleEngine::RuleErrorInvalidRuleActionParameter << false << "TestRule";
|
||||||
QTest::newRow("invalid rule. enabled, 1 Action (eventBased), 1 StateEvaluator, name") << true << validActionEventBased << QVariantMap() << QVariantMap() << QVariantList() << validStateEvaluator << RuleEngine::RuleErrorInvalidRuleActionParameter << false << "TestRule";
|
QTest::newRow("invalid rule. enabled, 1 Action (eventBased), 1 StateEvaluator, name") << true << validActionEventBased << QVariantMap() << QVariantMap() << QVariantList() << validStateEvaluator << RuleEngine::RuleErrorInvalidRuleActionParameter << false << "TestRule";
|
||||||
@ -303,8 +299,8 @@ void TestRules::addRemoveRules()
|
|||||||
if (!eventDescriptorList.isEmpty()) {
|
if (!eventDescriptorList.isEmpty()) {
|
||||||
params.insert("eventDescriptorList", eventDescriptorList);
|
params.insert("eventDescriptorList", eventDescriptorList);
|
||||||
}
|
}
|
||||||
|
QVariantList exitActions;
|
||||||
if (!exitAction1.isEmpty()) {
|
if (!exitAction1.isEmpty()) {
|
||||||
QVariantList exitActions;
|
|
||||||
exitActions.append(exitAction1);
|
exitActions.append(exitAction1);
|
||||||
params.insert("exitActions", exitActions);
|
params.insert("exitActions", exitActions);
|
||||||
}
|
}
|
||||||
@ -361,6 +357,9 @@ void TestRules::addRemoveRules()
|
|||||||
QVariantList replyActions = rule.value("actions").toList();
|
QVariantList replyActions = rule.value("actions").toList();
|
||||||
QVERIFY2(actions == replyActions, "Actions don't match");
|
QVERIFY2(actions == replyActions, "Actions don't match");
|
||||||
|
|
||||||
|
QVariantList replyExitActions = rule.value("exitActions").toList();
|
||||||
|
QVERIFY2(exitActions == replyExitActions, "ExitActions don't match");
|
||||||
|
|
||||||
params.clear();
|
params.clear();
|
||||||
params.insert("ruleId", newRuleId);
|
params.insert("ruleId", newRuleId);
|
||||||
response = injectAndWait("Rules.RemoveRule", params);
|
response = injectAndWait("Rules.RemoveRule", params);
|
||||||
@ -969,5 +968,55 @@ void TestRules::enableDisableRule()
|
|||||||
verifyRuleExecuted(mockActionIdNoParams);
|
verifyRuleExecuted(mockActionIdNoParams);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void TestRules::testEventBasedAction()
|
||||||
|
{
|
||||||
|
// Add a rule
|
||||||
|
QVariantMap addRuleParams;
|
||||||
|
QVariantMap eventDescriptor;
|
||||||
|
eventDescriptor.insert("eventTypeId", mockIntStateId);
|
||||||
|
eventDescriptor.insert("deviceId", m_mockDeviceId);
|
||||||
|
addRuleParams.insert("eventDescriptor", eventDescriptor);
|
||||||
|
addRuleParams.insert("name", "TestRule");
|
||||||
|
addRuleParams.insert("enabled", true);
|
||||||
|
|
||||||
|
QVariantList actions;
|
||||||
|
QVariantMap action;
|
||||||
|
QVariantList ruleActionParams;
|
||||||
|
QVariantMap param1;
|
||||||
|
param1.insert("name", "mockActionParam1");
|
||||||
|
param1.insert("eventTypeId", mockIntStateId);
|
||||||
|
param1.insert("eventParamName", "value");
|
||||||
|
QVariantMap param2;
|
||||||
|
param2.insert("name", "mockActionParam2");
|
||||||
|
param2.insert("value", true);
|
||||||
|
ruleActionParams.append(param1);
|
||||||
|
ruleActionParams.append(param2);
|
||||||
|
action.insert("actionTypeId", mockActionIdWithParams);
|
||||||
|
action.insert("deviceId", m_mockDeviceId);
|
||||||
|
action.insert("ruleActionParams", ruleActionParams);
|
||||||
|
actions.append(action);
|
||||||
|
addRuleParams.insert("actions", actions);
|
||||||
|
|
||||||
|
qDebug() << addRuleParams;
|
||||||
|
|
||||||
|
QVariant response = injectAndWait("Rules.AddRule", addRuleParams);
|
||||||
|
verifyRuleError(response);
|
||||||
|
|
||||||
|
// Change the state
|
||||||
|
QNetworkAccessManager nam;
|
||||||
|
QSignalSpy spy(&nam, SIGNAL(finished(QNetworkReply*)));
|
||||||
|
|
||||||
|
// state state to 42
|
||||||
|
qDebug() << "setting mock int state to 42";
|
||||||
|
QNetworkRequest request(QUrl(QString("http://localhost:%1/setstate?%2=%3").arg(m_mockDevice1Port).arg(mockIntStateId.toString()).arg(42)));
|
||||||
|
QNetworkReply *reply = nam.get(request);
|
||||||
|
spy.wait();
|
||||||
|
QCOMPARE(spy.count(), 1);
|
||||||
|
reply->deleteLater();
|
||||||
|
|
||||||
|
verifyRuleExecuted(mockActionIdWithParams);
|
||||||
|
// TODO: check if this action was realy executed with the int state value 42
|
||||||
|
}
|
||||||
|
|
||||||
#include "testrules.moc"
|
#include "testrules.moc"
|
||||||
QTEST_MAIN(TestRules)
|
QTEST_MAIN(TestRules)
|
||||||
|
|||||||
Reference in New Issue
Block a user