Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[CCB-3164] Add test script for defect #2451

Merged
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -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 <moduleType>

-- Steps:
-- 1. HMI sends OnInteriorVehicleData notification with empty control data for <moduleType>
-- 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(<moduleType>)
-- 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")
Original file line number Diff line number Diff line change
@@ -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 <moduleType> via GetInteriorVehicleData RPC
-- SDL does:
-- - a. send RC.GetInteriorVehicleData(<moduleType>) to HMI
-- 2. HMI responds with empty moduleData to RC.GetInteriorVehicleData(<moduleType>)
-- 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")
Original file line number Diff line number Diff line change
@@ -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 <moduleType> via GetInteriorVehicleData RPC
-- SDL does:
-- - a. send RC.GetInteriorVehicleData(<moduleType>) to HMI
-- 2. HMI responds with empty moduleData to RC.GetInteriorVehicleData(<moduleType>)
-- 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 <moduleType>
-- 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")
3 changes: 3 additions & 0 deletions test_sets/Defects/Defects_release_7_0.txt
Original file line number Diff line number Diff line change
Expand Up @@ -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
2 changes: 1 addition & 1 deletion user_modules/sequences/remote_control.lua
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down