Skip to content

Commit 9aa4fac

Browse files
committed
update and add new test cases for profile changed across drivers
1 parent 94ed074 commit 9aa4fac

3 files changed

Lines changed: 133 additions & 18 deletions

File tree

drivers/SmartThings/matter-lock/src/test/test_matter_lock_modular.lua

Lines changed: 18 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -607,16 +607,27 @@ test.register_coroutine_test(
607607
mock_device_modular:generate_test_message("main", capabilities.lock.supportedLockCommands({"lock", "unlock", "unlatch"}, {visibility = {displayed = false}}))
608608
)
609609
mock_device_modular:expect_metadata_update({ profile = "lock-modular-embedded-unlatch", optional_component_capabilities = {{"main", {"lockUsers", "lockCredentials", "lockSchedules", "battery"}}} })
610+
end,
611+
{ test_init = test_init_modular }
612+
)
610613

611-
local updated_device_profile = t_utils.get_profile_definition("lock-modular-embedded-unlatch.yml",
612-
{enabled_optional_capabilities = {{ "main", {"lockUsers", "lockCredentials", "lockSchedules", "battery"}},
613-
},}
614+
test.register_coroutine_test(
615+
"No component-capability update and no profile ID update should not cause a re-subscribe in infoChanged handler", function()
616+
test.socket.device_lifecycle:__queue_receive(mock_device_modular:generate_info_changed(
617+
{profile = {id = "00000000-1111-2222-3333-000000000010"}})
614618
)
615-
updated_device_profile.id = "00000000-1111-2222-3333-000000000010"
616-
617-
test.wait_for_events()
618-
test.socket.device_lifecycle:__queue_receive(mock_device_modular:generate_info_changed({ profile = updated_device_profile }))
619+
end,
620+
{ test_init = test_init_modular }
621+
)
619622

623+
test.register_coroutine_test(
624+
"Component-capability update without profile ID update should cause re-subscribe in infoChanged handler", function()
625+
test.socket.device_lifecycle:__queue_receive(mock_device_modular:generate_info_changed(
626+
{profile = {id = "00000000-1111-2222-3333-000000000010", components = { main = {capabilities={
627+
["lock"]= {id="lock", version=1}, ["lockAlarm"] = {id="lockAlarm", version=1}, ["remoteControlStatus"] = {id="remoteControlStatus", version=1},
628+
["lockUsers"] = {id="lockUsers", version=1}, ["lockCredentials"] = {id="lockCredentials", version=1}, ["lockSchedules"] = {id="lockSchedules", version=1},
629+
["battery"] = {id="battery", version=1}, ["firmwareUpdate"] = {id="firmwareUpdate", version=1}, ["refresh"] = {id="refresh", version=1}}}}}})
630+
)
620631
local subscribe_request = DoorLock.attributes.LockState:subscribe(mock_device_modular)
621632
subscribe_request:merge(DoorLock.attributes.OperatingMode:subscribe(mock_device_modular))
622633
subscribe_request:merge(DoorLock.attributes.NumberOfTotalUsersSupported:subscribe(mock_device_modular))

drivers/SmartThings/matter-sensor/src/test/test_matter_air_quality_sensor_modular.lua

Lines changed: 113 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -82,6 +82,36 @@ local mock_device_common = test.mock_device.build_test_matter_device({
8282
}
8383
})
8484

85+
local mock_device_modular_fingerprint = test.mock_device.build_test_matter_device({
86+
profile = t_utils.get_profile_definition("aqs-modular.yml",
87+
{enabled_optional_capabilities = {{"main", {}}}}),
88+
manufacturer_info = {
89+
vendor_id = 0x0000,
90+
product_id = 0x0000,
91+
},
92+
endpoints = {
93+
{
94+
endpoint_id = 0,
95+
clusters = {
96+
{cluster_id = clusters.Basic.ID, cluster_type = "SERVER"},
97+
},
98+
device_types = {
99+
{device_type_id = 0x0016, device_type_revision = 1} -- RootNode
100+
}
101+
},
102+
{
103+
endpoint_id = 1,
104+
clusters = {
105+
{cluster_id = clusters.AirQuality.ID, cluster_type = "SERVER", feature_map = 3},
106+
{cluster_id = clusters.TotalVolatileOrganicCompoundsConcentrationMeasurement.ID, cluster_type = "SERVER", feature_map = 1},
107+
},
108+
device_types = {
109+
{device_type_id = 0x002C, device_type_revision = 1} -- Air Quality Sensor
110+
}
111+
}
112+
}
113+
})
114+
85115
local function test_init_all()
86116
test.mock_device.add_test_device(mock_device_all)
87117
test.socket.device_lifecycle:__queue_receive({ mock_device_all.id, "init" })
@@ -94,6 +124,18 @@ local function test_init_all()
94124
test.socket.matter:__expect_send({mock_device_all.id, subscribe_request})
95125
end
96126

127+
local function test_init_modular_fingerprint()
128+
test.mock_device.add_test_device(mock_device_modular_fingerprint)
129+
test.socket.device_lifecycle:__queue_receive({ mock_device_modular_fingerprint.id, "init" })
130+
test.socket.capability:__expect_send(mock_device_modular_fingerprint:generate_test_message("main",
131+
capabilities.airQualityHealthConcern.supportedAirQualityValues({"unknown", "good", "unhealthy", "moderate", "slightlyUnhealthy"},
132+
{visibility={displayed=false}}))
133+
)
134+
-- on device create, a generic AQS device will be profiled as aqs, thus only subscribing to one attribute
135+
local subscribe_request = clusters.AirQuality.attributes.AirQuality:subscribe(mock_device_modular_fingerprint)
136+
test.socket.matter:__expect_send({mock_device_modular_fingerprint.id, subscribe_request})
137+
end
138+
97139
local function test_init_common()
98140
test.mock_device.add_test_device(mock_device_common)
99141
test.socket.device_lifecycle:__queue_receive({ mock_device_common.id, "added" })
@@ -243,6 +285,30 @@ local function get_subscribe_request_common()
243285
return subscribe_request
244286
end
245287

288+
local function get_subscribe_request_tvoc()
289+
local subscribed_attributes = {
290+
[capabilities.airQualityHealthConcern.ID] = {
291+
clusters.AirQuality.attributes.AirQuality
292+
},
293+
[capabilities.tvocMeasurement.ID] = {
294+
clusters.TotalVolatileOrganicCompoundsConcentrationMeasurement.attributes.MeasuredValue,
295+
clusters.TotalVolatileOrganicCompoundsConcentrationMeasurement.attributes.MeasurementUnit,
296+
},
297+
}
298+
local subscribe_request = nil
299+
for _, attributes in pairs(subscribed_attributes) do
300+
for _, attribute in pairs(attributes) do
301+
if subscribe_request == nil then
302+
subscribe_request = attribute:subscribe(mock_device_common)
303+
else
304+
subscribe_request:merge(attribute:subscribe(mock_device_common))
305+
end
306+
end
307+
end
308+
return subscribe_request
309+
end
310+
311+
246312
-- run the profile configuration tests
247313
local function test_aqs_device_type_update_modular_profile(generic_mock_device, expected_metadata, subscribe_request, expected_supported_values_setters)
248314
test.socket.device_lifecycle:__queue_receive({generic_mock_device.id, "doConfigure"})
@@ -349,5 +415,52 @@ test.register_coroutine_test(
349415
{ test_init = test_init_common }
350416
)
351417

418+
test.register_coroutine_test(
419+
"Component-capability update without profile ID update should cause re-subscribe in infoChanged handler",
420+
function()
421+
local expected_metadata_modular_disabled = {
422+
optional_component_capabilities={
423+
{
424+
"main",
425+
{
426+
"tvocMeasurement",
427+
},
428+
},
429+
},
430+
profile="aqs-modular",
431+
}
432+
local subscribe_request_tvoc = get_subscribe_request_tvoc()
433+
local updated_device_profile = t_utils.get_profile_definition("aqs-modular.yml",
434+
{enabled_optional_capabilities = expected_metadata_modular_disabled.optional_component_capabilities}
435+
)
436+
updated_device_profile.id = "00000000-1111-2222-3333-000000000006"
437+
test.socket.device_lifecycle:__queue_receive(mock_device_modular_fingerprint:generate_info_changed({ profile = updated_device_profile }))
438+
test.socket.capability:__expect_send(mock_device_modular_fingerprint:generate_test_message("main", capabilities.airQualityHealthConcern.supportedAirQualityValues({"unknown", "good", "unhealthy", "moderate", "slightlyUnhealthy"}, {visibility={displayed=false}})))
439+
test.socket.matter:__expect_send({mock_device_modular_fingerprint.id, subscribe_request_tvoc})
440+
end,
441+
{ test_init = test_init_modular_fingerprint }
442+
)
443+
444+
test.register_coroutine_test(
445+
"No component-capability update and no profile ID update should not cause a re-subscribe in infoChanged handler",
446+
function()
447+
local expected_metadata_modular_disabled = {
448+
optional_component_capabilities={
449+
{
450+
"main",
451+
{},
452+
},
453+
},
454+
profile="aqs-modular",
455+
}
456+
local updated_device_profile = t_utils.get_profile_definition("aqs-modular.yml",
457+
{enabled_optional_capabilities = expected_metadata_modular_disabled.optional_component_capabilities}
458+
)
459+
updated_device_profile.id = "00000000-1111-2222-3333-000000000006"
460+
test.socket.device_lifecycle:__queue_receive(mock_device_modular_fingerprint:generate_info_changed({ profile = updated_device_profile }))
461+
end,
462+
{ test_init = test_init_modular_fingerprint }
463+
)
464+
352465
-- run tests
353466
test.run_registered_tests()

drivers/SmartThings/matter-switch/src/test/test_matter_light_fan.lua

Lines changed: 2 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -169,18 +169,9 @@ test.register_coroutine_test(
169169
)
170170

171171
test.register_coroutine_test(
172-
"No component-capability update an no profile ID update should not cause a re-subscribe in infoChanged handler", function()
173-
local cluster_subscribe_list ={
174-
clusters.FanControl.attributes.FanModeSequence,
175-
clusters.FanControl.attributes.FanMode,
176-
clusters.FanControl.attributes.PercentCurrent,
177-
}
178-
local subscribe_request = cluster_subscribe_list[1]:subscribe(mock_device_capabilities_disabled)
179-
for i, clus in ipairs(cluster_subscribe_list) do
180-
if i > 1 then subscribe_request:merge(clus:subscribe(mock_device_capabilities_disabled)) end
181-
end
172+
"No component-capability update and no profile ID update should not cause a re-subscribe in infoChanged handler", function()
182173
test.socket.device_lifecycle:__queue_receive(mock_device_capabilities_disabled:generate_info_changed(
183-
{profile = {id = "00000000-1111-2222-3333-000000000004", components = { main = {capabilities={["firmwareUpdate"] = {id="firmwareUpdate", version=1}, ["refresh"] = {id="refresh", version=1}}}}}})
174+
{profile = {id = "00000000-1111-2222-3333-000000000004"}})
184175
)
185176
end,
186177
{ test_init = function() test.mock_device.add_test_device(mock_device_capabilities_disabled) end }

0 commit comments

Comments
 (0)