diff --git a/test_scripts/Defects/7_0/3164_1_OnInteriorVehicleData_empty_module_data.lua b/test_scripts/Defects/7_0/3164_1_OnInteriorVehicleData_empty_module_data.lua new file mode 100644 index 0000000000..b825cae32c --- /dev/null +++ b/test_scripts/Defects/7_0/3164_1_OnInteriorVehicleData_empty_module_data.lua @@ -0,0 +1,83 @@ +--------------------------------------------------------------------------------------------------- +-- User story: https://github.com/smartdevicelink/sdl_core/issues/3164 +-- +-- Description: Check the successful merge of empty module data with existing data in cache +-- +-- Precondition: +-- 1. SDL Core and HMI are started +-- 2. RC app is registered and activated +-- 3. PTU with permission for RC is performed +-- 4. App is subscribed to + +-- Steps: +-- 1. HMI sends OnInteriorVehicleData notification with empty control data for +-- SDL does: +-- - a. merge received data with existing data in cache +-- - b. send OnInteriorVehicleData notification with data received from HMI to mobile app +-- 2. Mobile app requests GetInteriorVehicleData() +-- SDL does: +-- - a. respond to GetInteriorVehicleData with initial data from cache +--------------------------------------------------------------------------------------------------- +-- [[ Required Shared libraries ]] +local runner = require('user_modules/script_runner') +local common = require('user_modules/sequences/actions') +local rc = require('user_modules/sequences/remote_control') + +-- [[ Test Configuration ]] +runner.testSettings.isSelfIncluded = false +config.application1.registerAppInterfaceParams.appHMIType = { "REMOTE_CONTROL" } + +-- [[ Local Variables ]] +local appId = 1 +local isSubscriptionNotCached = false +local moduleData = { + emptyRadioData = { moduleType = "RADIO", radioControlData = {}}, + emptyAudioData = { moduleType = "AUDIO", audioControlData = {}}, + emptyHmiSettingsData = { moduleType = "HMI_SETTINGS", hmiSettingsControlData = {}}, + emptyClimateData = { moduleType = "CLIMATE", climateControlData = {}}, + emptySeatData = { moduleType = "SEAT", seatControlData = {}}, +} + +-- [[ Local Functions ]] +local function getModuleId(pModuleType) + return rc.predefined.getModuleControlData(pModuleType, 1).moduleId +end + +local function onInteriorVehicleData(pModuleData) + local rpc = "OnInteriorVehicleData" + common.hmi.getConnection():SendNotification(rc.rpc.getHMIEventName(rpc), { moduleData = pModuleData }) + common.mobile.getSession(appId):ExpectNotification(rc.rpc.getAppEventName(rpc), { moduleData = pModuleData }) +end + +local function getInteriorVehicleData(pModuleType) + local rpc = "GetInteriorVehicleData" + local mobSession = common.mobile.getSession(appId) + local moduleId = getModuleId(pModuleType) + local cid = mobSession:SendRPC(rc.rpc.getAppEventName(rpc), + rc.rpc.getAppRequestParams(rpc, pModuleType, moduleId)) + mobSession:ExpectResponse(cid, { + success = true, + resultCode = "SUCCESS", + moduleData = rc.state.getActualModuleIVData(pModuleType, moduleId) + }) +end + +--[[Scenario]] +runner.Title("Preconditions") +runner.Step("Clean environment", common.preconditions) +runner.Step("Start SDL, HMI, connect Mobile, start Session", rc.rc.start) +runner.Step("Register App", common.registerApp) +runner.Step("Activate App", common.activateApp) +runner.Step("PTU with permission for RC", rc.rc.policyTableUpdate) +for _, value in pairs (moduleData) do + runner.Step("Subscribe to moduleType " .. value.moduleType, rc.rc.subscribeToModule, + { value.moduleType, getModuleId(value.moduleType), appId, isSubscriptionNotCached }) +end + +runner.Title("Test") +for caseName, value in pairs(moduleData) do + runner.Step("OnInteriorVehicleData " .. caseName, onInteriorVehicleData, { value }) + runner.Step("GetInteriorVehicleData without changes " .. caseName, getInteriorVehicleData, { value.moduleType }) +end + +runner.Title("Postconditions") diff --git a/test_scripts/Defects/7_0/3164_2_GetInteriorVehicleData_empty_module_data_to_cache.lua b/test_scripts/Defects/7_0/3164_2_GetInteriorVehicleData_empty_module_data_to_cache.lua new file mode 100644 index 0000000000..91060d3b5d --- /dev/null +++ b/test_scripts/Defects/7_0/3164_2_GetInteriorVehicleData_empty_module_data_to_cache.lua @@ -0,0 +1,81 @@ +--------------------------------------------------------------------------------------------------- +-- User story: https://github.com/smartdevicelink/sdl_core/issues/3164 +-- +-- Description: Check the successful saving of empty module data in cache +-- +-- Precondition: +-- 1. SDL Core and HMI are started +-- 2. RC app is registered and activated +-- 3. PTU with permission for RC is performed + +-- Steps: +-- 1. Mobile app requests subscription for via GetInteriorVehicleData RPC +-- SDL does: +-- - a. send RC.GetInteriorVehicleData() to HMI +-- 2. HMI responds with empty moduleData to RC.GetInteriorVehicleData() +-- SDL does: +-- - a. save received moduleData from HMI in cache +-- - b. resend GetInteriorVehicleData response to mobile app +--------------------------------------------------------------------------------------------------- +-- [[ Required Shared libraries ]] +local runner = require('user_modules/script_runner') +local common = require('user_modules/sequences/actions') +local rc = require('user_modules/sequences/remote_control') + +-- [[ Test Configuration ]] +runner.testSettings.isSelfIncluded = false +config.application1.registerAppInterfaceParams.appHMIType = { "REMOTE_CONTROL" } + +-- [[ Local Variables ]] +local appId = 1 +local isSubscribe = true +local withoutSubscription = nil +local isCached = true +local moduleData = { + emptyRadioData = { moduleType = "RADIO", radioControlData = {}}, + emptyAudioData = { moduleType = "AUDIO", audioControlData = {}}, + emptyHmiSettingsData = { moduleType = "HMI_SETTINGS", hmiSettingsControlData = {}}, + emptyClimateData = { moduleType = "CLIMATE", climateControlData = {}}, + emptySeatData = { moduleType = "SEAT", seatControlData = {}}, +} + +-- [[ Local Functions ]] +local function getModuleId(pModuleType) + return rc.predefined.getModuleControlData(pModuleType, 1).moduleId +end + +local function getInteriorVehicleData(pModuleData, pIsSubscribe, pIsCached) + local rpc = "GetInteriorVehicleData" + local mobSession = common.mobile.getSession(appId) + local hmi = common.hmi.getConnection() + local moduleId = getModuleId(pModuleData.moduleType) + pModuleData.moduleId = moduleId + local resData = { moduleData = pModuleData, isSubscribed = pIsSubscribe } + local cid = mobSession:SendRPC(rc.rpc.getAppEventName(rpc), + rc.rpc.getAppRequestParams(rpc, pModuleData.moduleType, moduleId, pIsSubscribe)) + if pIsCached ~= true then + hmi:ExpectRequest(rc.rpc.getHMIEventName(rpc), + rc.rpc.getHMIRequestParams(rpc, pModuleData.moduleType, moduleId, appId, pIsSubscribe)) + :Do(function(_, data) + hmi:SendResponse(data.id, data.method, "SUCCESS", resData) + end) + end + mobSession:ExpectResponse(cid, { success = true, resultCode = "SUCCESS", table.unpack(resData) }) +end + +--[[Scenario]] +runner.Title("Preconditions") +runner.Step("Clean environment", common.preconditions) +runner.Step("Start SDL, HMI, connect Mobile, start Session", rc.rc.start) +runner.Step("Register App", common.registerApp) +runner.Step("Activate App", common.activateApp) +runner.Step("PTU with permission for RC", rc.rc.policyTableUpdate) + +runner.Title("Test") +for caseName, value in pairs(moduleData) do + runner.Step("Subscribe to moduleType " .. value.moduleType, getInteriorVehicleData, { value, isSubscribe }) + runner.Step("GetInteriorVehicleData after subscription " .. caseName, getInteriorVehicleData, + { value, withoutSubscription, isCached }) +end + +runner.Title("Postconditions") diff --git a/test_scripts/Defects/7_0/3164_3_GetInteriorVehicleData_empty_module_data_from_cache.lua b/test_scripts/Defects/7_0/3164_3_GetInteriorVehicleData_empty_module_data_from_cache.lua new file mode 100644 index 0000000000..6f187e53f2 --- /dev/null +++ b/test_scripts/Defects/7_0/3164_3_GetInteriorVehicleData_empty_module_data_from_cache.lua @@ -0,0 +1,97 @@ +--------------------------------------------------------------------------------------------------- +-- User story: https://github.com/smartdevicelink/sdl_core/issues/3164 +-- +-- Description: Check the successful merge of empty module data existed in cache with new data +-- from OnInteriorVehicleData +-- +-- Precondition: +-- 1. SDL Core and HMI are started +-- 2. RC app is registered and activated +-- 3. PTU with permission for RC is performed + +-- Steps: +-- 1. Mobile app requests subscription for via GetInteriorVehicleData RPC +-- SDL does: +-- - a. send RC.GetInteriorVehicleData() to HMI +-- 2. HMI responds with empty moduleData to RC.GetInteriorVehicleData() +-- SDL does: +-- - a. save received moduleData from HMI in cache +-- - b. resend GetInteriorVehicleData response to mobile app +-- 3. HMI sends OnInteriorVehicleData with updated moduleData for +-- SDL does: +-- - a. merge empty module data from cache with new data from OnInteriorVehicleData +-- - b. resend OnInteriorVehicleData notification with received data from HMI to mobile app +--------------------------------------------------------------------------------------------------- +-- [[ Required Shared libraries ]] +local runner = require('user_modules/script_runner') +local common = require('user_modules/sequences/actions') +local rc = require('user_modules/sequences/remote_control') + +-- [[ Test Configuration ]] +runner.testSettings.isSelfIncluded = false +config.application1.registerAppInterfaceParams.appHMIType = { "REMOTE_CONTROL" } + +-- [[ Local Variables ]] +local appId = 1 +local isSubscribe = true +local withoutSubscription = nil +local isCached = true +local moduleData = { + emptyRadioData = { moduleType = "RADIO", radioControlData = {}}, + emptyAudioData = { moduleType = "AUDIO", audioControlData = {}}, + emptyHmiSettingsData = { moduleType = "HMI_SETTINGS", hmiSettingsControlData = {}}, + emptyClimateData = { moduleType = "CLIMATE", climateControlData = {}}, + emptySeatData = { moduleType = "SEAT", seatControlData = {}}, +} + +-- [[ Local Functions ]] +local function getModuleId(pModuleType) + return rc.predefined.getModuleControlData(pModuleType, 1).moduleId +end + +local function getInteriorVehicleData(pModuleData, pIsSubscribe, pIsCached) + local rpc = "GetInteriorVehicleData" + local mobSession = common.mobile.getSession(appId) + local hmi = common.hmi.getConnection() + local moduleId = getModuleId(pModuleData.moduleType) + pModuleData.moduleId = moduleId + local resData = { moduleData = pModuleData, isSubscribed = pIsSubscribe } + local cid = mobSession:SendRPC(rc.rpc.getAppEventName(rpc), + rc.rpc.getAppRequestParams(rpc, pModuleData.moduleType, moduleId, pIsSubscribe)) + if pIsCached ~= true then + hmi:ExpectRequest(rc.rpc.getHMIEventName(rpc), + rc.rpc.getHMIRequestParams(rpc, pModuleData.moduleType, moduleId, appId, pIsSubscribe)) + :Do(function(_, data) + hmi:SendResponse(data.id, data.method, "SUCCESS", resData) + end) + end + mobSession:ExpectResponse(cid, { success = true, resultCode = "SUCCESS", table.unpack(resData) }) +end + +local function getActualModuleData(pModuleType) + return rc.state.getActualModuleIVData(pModuleType, getModuleId(pModuleType)) +end + +local function onInteriorVehicleData(pModuleType) + local actualModuleData = getActualModuleData(pModuleType) + rc.rc.checkSubscription(pModuleType, getModuleId(pModuleType), appId, isCached, actualModuleData ) +end + +--[[Scenario]] +runner.Title("Preconditions") +runner.Step("Clean environment", common.preconditions) +runner.Step("Start SDL, HMI, connect Mobile, start Session", rc.rc.start) +runner.Step("Register App", common.registerApp) +runner.Step("Activate App", common.activateApp) +runner.Step("PTU with permission for RC", rc.rc.policyTableUpdate) + +runner.Title("Test") +for caseName, value in pairs(moduleData) do + runner.Step("Subscribe to moduleType " .. value.moduleType, getInteriorVehicleData, { value, isSubscribe }) + runner.Step("OnInteriorVehicleData with updated data " .. caseName, onInteriorVehicleData, + { value.moduleType }) + runner.Step("GetInteriorVehicleData after subscription " .. caseName, getInteriorVehicleData, + { getActualModuleData(value.moduleType), withoutSubscription, isCached }) +end + +runner.Title("Postconditions") diff --git a/test_sets/Defects/Defects_release_7_0.txt b/test_sets/Defects/Defects_release_7_0.txt index f583f386d7..5779a89260 100644 --- a/test_sets/Defects/Defects_release_7_0.txt +++ b/test_sets/Defects/Defects_release_7_0.txt @@ -56,3 +56,6 @@ ./test_scripts/Defects/7_0/3175/3175_6_VR.OnLanguageChange_during_PTU_after_responding_to_BC_SystemRequest.lua ./test_scripts/Defects/7_0/3175/3175_7_VR.OnLanguageChange_during_PTU_after_sending_of_SDL_OnReceivedPolicyUpdate.lua ./test_scripts/Defects/7_0/3175/3175_8_VR.OnLanguageChange_during_PTU_after_receiving_of_SystemRequest.lua +./test_scripts/Defects/7_0/3164_1_OnInteriorVehicleData_empty_module_data.lua +./test_scripts/Defects/7_0/3164_2_GetInteriorVehicleData_empty_module_data_to_cache.lua +./test_scripts/Defects/7_0/3164_3_GetInteriorVehicleData_empty_module_data_from_cache.lua diff --git a/user_modules/sequences/remote_control.lua b/user_modules/sequences/remote_control.lua index acbedddd9f..400aa19c28 100644 --- a/user_modules/sequences/remote_control.lua +++ b/user_modules/sequences/remote_control.lua @@ -1231,7 +1231,7 @@ function m.rc.policyTableUpdate(pPTUpdateFunc, pExpNotificationFunc) appPolicies.moduleType = m.data.getRcModuleTypes() end end - pPTUpdateFunc(ptuTable) + if pPTUpdateFunc then pPTUpdateFunc(ptuTable) end end actions.ptu.policyTableUpdate(ptuUpdateFunc, pExpNotificationFunc) end