From 53fe5557e07868d6414a6a8000e1becdff37d4cb Mon Sep 17 00:00:00 2001 From: Michael Zanetti Date: Sun, 22 Jun 2014 23:43:27 +0200 Subject: [PATCH] fix issues in param handling in json api --- server/jsonrpc/devicehandler.cpp | 5 ++-- server/jsonrpc/jsontypes.cpp | 8 +++--- tests/auto/actions/testactions.cpp | 6 +++-- tests/auto/devices/testdevices.cpp | 41 +++++++++++++++++++++--------- tests/auto/guhtestbase.cpp | 9 +++++-- tests/auto/rules/testrules.cpp | 8 ++++-- 6 files changed, 53 insertions(+), 24 deletions(-) diff --git a/server/jsonrpc/devicehandler.cpp b/server/jsonrpc/devicehandler.cpp index d18b52e1..50625dd2 100644 --- a/server/jsonrpc/devicehandler.cpp +++ b/server/jsonrpc/devicehandler.cpp @@ -346,9 +346,8 @@ JsonReply* DeviceHandler::AddConfiguredDevice(const QVariantMap ¶ms) DeviceClassId deviceClass(params.value("deviceClassId").toString()); QList deviceParams; foreach (const QVariant ¶mVariant, params.value("deviceParams").toList()) { - QString paramName = paramVariant.toMap().keys().first(); - Param param(paramName); - param.setValue(paramVariant.toMap().value(paramName)); + Param param(paramVariant.toMap().value("name").toString()); + param.setValue(paramVariant.toMap().value("value")); deviceParams.append(param); } diff --git a/server/jsonrpc/jsontypes.cpp b/server/jsonrpc/jsontypes.cpp index a4dacfdb..4056a7a2 100644 --- a/server/jsonrpc/jsontypes.cpp +++ b/server/jsonrpc/jsontypes.cpp @@ -304,7 +304,8 @@ QVariantMap JsonTypes::packStateEvaluator(const StateEvaluator &stateEvaluator) QVariantMap JsonTypes::packParam(const Param ¶m) { QVariantMap variantMap; - variantMap.insert(param.name(), param.value()); + variantMap.insert("name", param.name()); + variantMap.insert("value", param.value()); return variantMap; } @@ -434,8 +435,9 @@ Param JsonTypes::unpackParam(const QVariantMap ¶mMap) if (paramMap.keys().count() == 0) { return Param(); } - QString key = paramMap.keys().first(); - return Param(key, paramMap.value(key)); + QString name = paramMap.value("name").toString(); + QVariant value = paramMap.value("value"); + return Param(name, value); } QList JsonTypes::unpackParams(const QVariantList ¶mList) diff --git a/tests/auto/actions/testactions.cpp b/tests/auto/actions/testactions.cpp index c5826404..753aef9a 100644 --- a/tests/auto/actions/testactions.cpp +++ b/tests/auto/actions/testactions.cpp @@ -51,10 +51,12 @@ void TestActions::executeAction_data() QVariantList params; QVariantMap param1; - param1.insert("mockActionParam1", 5); + param1.insert("name", "mockActionParam1"); + param1.insert("value", 5); params.append(param1); QVariantMap param2; - param2.insert("mockActionParam2", true); + param2.insert("name", "mockActionParam2"); + param2.insert("value", true); params.append(param2); QTest::newRow("valid action") << m_mockDeviceId << mockActionIdWithParams << params << true; diff --git a/tests/auto/devices/testdevices.cpp b/tests/auto/devices/testdevices.cpp index badd6543..b82624c0 100644 --- a/tests/auto/devices/testdevices.cpp +++ b/tests/auto/devices/testdevices.cpp @@ -119,7 +119,8 @@ void TestDevices::setPluginConfig() QVariantList configuration; QVariantMap configParam; - configParam.insert("configParamInt", value); + configParam.insert("name", "configParamInt"); + configParam.insert("value", value); configuration.append(configParam); params.insert("configuration", configuration); QVariant response = injectAndWait("Devices.SetPluginConfiguration", params); @@ -131,7 +132,8 @@ void TestDevices::setPluginConfig() response = injectAndWait("Devices.GetPluginConfiguration", params); verifySuccess(response); qDebug() << "222" << response.toMap().value("params").toMap().value("configuration").toList().first(); - QVERIFY2(response.toMap().value("params").toMap().value("configuration").toList().first().toMap().value("configParamInt") == value, "Value not set correctly"); + QVERIFY2(response.toMap().value("params").toMap().value("configuration").toList().first().toMap().value("name") == "configParamInt", "Value not set correctly"); + QVERIFY2(response.toMap().value("params").toMap().value("configuration").toList().first().toMap().value("value") == value, "Value not set correctly"); } } @@ -179,11 +181,14 @@ void TestDevices::getSupportedDevices() void TestDevices::addConfiguredDevice_data() { QTest::addColumn("deviceClassId"); - QTest::addColumn("deviceParams"); + QTest::addColumn("deviceParams"); QTest::addColumn("success"); - QVariantMap deviceParams; - deviceParams.insert("httpport", m_mockDevice1Port - 1); + QVariantList deviceParams; + QVariantMap httpportParam; + httpportParam.insert("name", "httpport"); + httpportParam.insert("value", m_mockDevice1Port - 1); + deviceParams.append(httpportParam); QTest::newRow("User, JustAdd") << mockDeviceClassId << deviceParams << true; QTest::newRow("Auto, JustAdd") << mockDeviceAutoClassId << deviceParams << false; @@ -193,16 +198,25 @@ void TestDevices::addConfiguredDevice_data() QTest::newRow("Setup failure") << mockDeviceBrokenClassId << deviceParams << false; QTest::newRow("Setup failure, Async") << mockDeviceBrokenAsyncSetupClassId << deviceParams << false; - QVariantMap invalidDeviceParams; - invalidDeviceParams.insert("tropptth", m_mockDevice1Port - 1); - QTest::newRow("User, JustAdd, invalid params") << mockDeviceClassId << invalidDeviceParams << false; + QVariantList invalidDeviceParams; + QTest::newRow("User, JustAdd, missing params") << mockDeviceClassId << invalidDeviceParams << false; + + QVariantMap fakeparam; + fakeparam.insert("name", "tropptth"); + invalidDeviceParams.append(fakeparam); + QTest::newRow("User, JustAdd, invalid param") << mockDeviceClassId << invalidDeviceParams << false; + + fakeparam.insert("value", "buhuu"); + invalidDeviceParams.clear(); + invalidDeviceParams.append(fakeparam); + QTest::newRow("User, JustAdd, wrong param") << mockDeviceClassId << invalidDeviceParams << false; } void TestDevices::addConfiguredDevice() { QFETCH(DeviceClassId, deviceClassId); - QFETCH(QVariantMap, deviceParams); + QFETCH(QVariantList, deviceParams); QFETCH(bool, success); QVariantMap params; @@ -270,8 +284,11 @@ void TestDevices::storedDevices() { QVariantMap params; params.insert("deviceClassId", mockDeviceClassId); - QVariantMap deviceParams; - deviceParams.insert("httpport", 8888); + QVariantList deviceParams; + QVariantMap httpportParam; + httpportParam.insert("name", "httpport"); + httpportParam.insert("value", 8888); + deviceParams.append(httpportParam); params.insert("deviceParams", deviceParams); QVariant response = injectAndWait("Devices.AddConfiguredDevice", params); verifySuccess(response); @@ -293,7 +310,7 @@ void TestDevices::storedDevices() qDebug() << "found added device" << device.toMap().value("params").toList().first().toMap(); qDebug() << "expected deviceParams:" << deviceParams; - QCOMPARE(device.toMap().value("params").toList().first().toMap(), deviceParams); + QCOMPARE(device.toMap().value("params").toList(), deviceParams); found = true; break; } diff --git a/tests/auto/guhtestbase.cpp b/tests/auto/guhtestbase.cpp index a3263925..7db34b43 100644 --- a/tests/auto/guhtestbase.cpp +++ b/tests/auto/guhtestbase.cpp @@ -64,9 +64,14 @@ void GuhTestBase::initTestCase() // Lets add one instance of the mockdevice QVariantMap params; params.insert("deviceClassId", "{753f0d32-0468-4d08-82ed-1964aab03298}"); - QVariantMap deviceParams; - deviceParams.insert("httpport", m_mockDevice1Port); + + QVariantList deviceParams; + QVariantMap httpPortParam; + httpPortParam.insert("name", "httpport"); + httpPortParam.insert("value", m_mockDevice1Port); + deviceParams.append(httpPortParam); params.insert("deviceParams", deviceParams); + QVariant response = injectAndWait("Devices.AddConfiguredDevice", params); verifySuccess(response); diff --git a/tests/auto/rules/testrules.cpp b/tests/auto/rules/testrules.cpp index 11381f27..45744137 100644 --- a/tests/auto/rules/testrules.cpp +++ b/tests/auto/rules/testrules.cpp @@ -234,10 +234,12 @@ void TestRules::loadStoreConfig() action2.insert("deviceId", m_mockDeviceId); QVariantList action2Params; QVariantMap action2Param1; - action2Param1.insert("mockActionParam1", 5); + action2Param1.insert("name", "mockActionParam1"); + action2Param1.insert("value", 5); action2Params.append(action2Param1); QVariantMap action2Param2; - action2Param2.insert("mockActionParam2", true); + action2Param2.insert("name", "mockActionParam2"); + action2Param2.insert("value", true); action2Params.append(action2Param2); action2.insert("params", action2Params); @@ -289,6 +291,8 @@ void TestRules::loadStoreConfig() if (actionVariant.toMap().value("actionTypeId") == replyActionVariant.toMap().value("actionTypeId") && actionVariant.toMap().value("deviceId") == replyActionVariant.toMap().value("deviceId")) { found = true; + qDebug() << "AAA:" << actionVariant; + qDebug() << "BBB:" << replyActionVariant; QVERIFY2(actionVariant == replyActionVariant, "Action doesn't match after loading from config."); } }