From 09d66587ce6132812e44f799030e801ba25e7863 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Simon=20St=C3=BCrz?= Date: Thu, 26 Nov 2015 19:44:38 +0100 Subject: [PATCH] add tests for rule action param verification fix #231 --- libguh/devicemanager.cpp | 7 ++++ tests/auto/rules/testrules.cpp | 76 ++++++++++++++++++++++++++++++++++ 2 files changed, 83 insertions(+) diff --git a/libguh/devicemanager.cpp b/libguh/devicemanager.cpp index acf5f606..336a912a 100644 --- a/libguh/devicemanager.cpp +++ b/libguh/devicemanager.cpp @@ -298,10 +298,17 @@ DeviceManager::DeviceError DeviceManager::setPluginConfig(const PluginId &plugin if (!plugin) { return DeviceErrorPluginNotFound; } + + DeviceError verify = verifyParams(plugin->configurationDescription(), pluginConfig); + if (verify != DeviceErrorNoError) { + return verify; + } + DeviceError result = plugin->setConfiguration(pluginConfig); if (result != DeviceErrorNoError) { return result; } + GuhSettings settings(GuhSettings::SettingsRolePlugins); settings.beginGroup("PluginConfig"); settings.beginGroup(plugin->pluginId().toString()); diff --git a/tests/auto/rules/testrules.cpp b/tests/auto/rules/testrules.cpp index 12d38cf2..e92c8340 100644 --- a/tests/auto/rules/testrules.cpp +++ b/tests/auto/rules/testrules.cpp @@ -74,6 +74,9 @@ private slots: void enableDisableRule(); void testEventBasedAction(); + + void testRuleActionParams_data(); + void testRuleActionParams(); }; void TestRules::cleanupMockHistory() { @@ -150,6 +153,15 @@ void TestRules::addRemoveRules_data() validActionNoParams.insert("deviceId", m_mockDeviceId); validActionNoParams.insert("ruleActionParams", QVariantList()); + QVariantMap validActionWithParams; + validActionWithParams.insert("actionTypeId", mockActionIdNoParams); + validActionWithParams.insert("deviceId", m_mockDeviceId); + QVariantList actionParams; + + + validActionWithParams.insert("ruleActionParams", QVariantList()); + + QVariantMap invalidAction; invalidAction.insert("actionTypeId", ActionTypeId()); invalidAction.insert("deviceId", m_mockDeviceId); @@ -1375,5 +1387,69 @@ void TestRules::testEventBasedAction() // TODO: check if this action was realy executed with the int state value 42 } +void TestRules::testRuleActionParams_data() +{ + QVariantMap action; + QVariantList ruleActionParams; + QVariantMap param1; + param1.insert("name", "mockActionParam1"); + param1.insert("value", 4); + 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); + + QVariantMap invalidAction1; + invalidAction1.insert("actionTypeId", mockActionIdWithParams); + invalidAction1.insert("deviceId", m_mockDeviceId); + invalidAction1.insert("ruleActionParams", QVariantList() << param2); + + QVariantMap invalidAction2; + invalidAction2.insert("actionTypeId", mockActionIdWithParams); + invalidAction2.insert("deviceId", m_mockDeviceId); + invalidAction2.insert("ruleActionParams", QVariantList() << param1); + + + QTest::addColumn("action"); + QTest::addColumn("exitAction"); + QTest::addColumn("error"); + + QTest::newRow("valid action params") << action << QVariantMap() << RuleEngine::RuleErrorNoError; + QTest::newRow("valid action and exit action params") << action << action << RuleEngine::RuleErrorNoError; + QTest::newRow("invalid action params1") << invalidAction1 << QVariantMap() << RuleEngine::RuleErrorInvalidRuleActionParameter; + QTest::newRow("invalid action params2") << invalidAction2 << QVariantMap() << RuleEngine::RuleErrorInvalidRuleActionParameter; + QTest::newRow("valid action and invalid exit action params1") << action << invalidAction1 << RuleEngine::RuleErrorInvalidRuleActionParameter; + QTest::newRow("valid action and invalid exit action params2") << action << invalidAction2 << RuleEngine::RuleErrorInvalidRuleActionParameter; + +} + +void TestRules::testRuleActionParams() +{ + + QFETCH(QVariantMap, action); + QFETCH(QVariantMap, exitAction); + QFETCH(RuleEngine::RuleError, error); + + + // Add a rule + QVariantMap addRuleParams; + addRuleParams.insert("name", "TestRule"); + addRuleParams.insert("enabled", true); + if (!action.isEmpty()) + addRuleParams.insert("actions", QVariantList() << action); + if (!exitAction.isEmpty()) + addRuleParams.insert("exitActions", QVariantList() << exitAction); + + QVariant response = injectAndWait("Rules.AddRule", addRuleParams); + verifyRuleError(response, error); + + + +} + #include "testrules.moc" QTEST_MAIN(TestRules)