Skip to content

Commit ed7a7fd

Browse files
58 Unit test fixes for matter test cases
This change covers the matter test case updates associated with #2310.
1 parent 0fcd44c commit ed7a7fd

10 files changed

+190
-124
lines changed

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

Lines changed: 15 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,8 @@ local mock_device = test.mock_device.build_test_matter_device({
4141
cluster_id = clusters.DoorLock.ID,
4242
cluster_type = "SERVER",
4343
cluster_revision = 1,
44-
feature_map = 0x0001, --u32 bitmap
44+
feature_map = clusters.DoorLock.types.Feature.PIN_CREDENTIAL |
45+
clusters.DoorLock.types.Feature.USER
4546
}
4647
},
4748
device_types = {
@@ -52,6 +53,13 @@ local mock_device = test.mock_device.build_test_matter_device({
5253
})
5354

5455
local function test_init()
56+
test.disable_startup_messages()
57+
test.mock_device.add_test_device(mock_device)
58+
test.socket.device_lifecycle:__queue_receive({ mock_device.id, "added" })
59+
test.socket.capability:__expect_send(
60+
mock_device:generate_test_message("main", capabilities.lockAlarm.alarm.clear({state_change = true}))
61+
)
62+
test.socket.device_lifecycle:__queue_receive({ mock_device.id, "init" })
5563
local subscribe_request = clusters.DoorLock.attributes.LockState:subscribe(mock_device)
5664
subscribe_request:merge(clusters.DoorLock.attributes.OperatingMode:subscribe(mock_device))
5765
subscribe_request:merge(clusters.DoorLock.attributes.NumberOfTotalUsersSupported:subscribe(mock_device))
@@ -63,7 +71,12 @@ local function test_init()
6371
subscribe_request:merge(clusters.DoorLock.events.DoorLockAlarm:subscribe(mock_device))
6472
subscribe_request:merge(clusters.DoorLock.events.LockUserChange:subscribe(mock_device))
6573
test.socket["matter"]:__expect_send({mock_device.id, subscribe_request})
66-
test.mock_device.add_test_device(mock_device)
74+
test.socket.device_lifecycle:__queue_receive({ mock_device.id, "doConfigure" })
75+
test.socket.capability:__expect_send(
76+
mock_device:generate_test_message("main", capabilities.lock.supportedLockCommands({"lock", "unlock"}, {visibility = {displayed = false}}))
77+
)
78+
mock_device:expect_metadata_update({ profile = "lock-user-pin" })
79+
mock_device:expect_metadata_update({ provisioning_state = "PROVISIONED" })
6780
end
6881

6982
test.set_test_init_function(test_init)

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

Lines changed: 54 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515
local test = require "integration_test"
1616
test.add_package_capability("lockAlarm.yml")
1717
local t_utils = require "integration_test.utils"
18+
local capabilities = require "st.capabilities"
1819
local clusters = require "st.matter.clusters"
1920

2021
local mock_device_record = {
@@ -41,58 +42,75 @@ local mock_device_record = {
4142
local mock_device = test.mock_device.build_test_matter_device(mock_device_record)
4243

4344
local mock_device_record_level = {
44-
profile = t_utils.get_profile_definition("lock-nocodes-notamper-batteryLevel.yml"),
45-
manufacturer_info = {vendor_id = 0x129F, product_id = 0x0001}, -- Level Lock Plus
46-
endpoints = {
47-
{
48-
endpoint_id = 2,
49-
clusters = {
50-
{cluster_id = clusters.Basic.ID, cluster_type = "SERVER"},
51-
},
52-
device_types = {
53-
device_type_id = 0x0016, device_type_revision = 1, -- RootNode
54-
}
45+
profile = t_utils.get_profile_definition("lock-nocodes-notamper-batteryLevel.yml"),
46+
manufacturer_info = {vendor_id = 0x129F, product_id = 0x0001}, -- Level Lock Plus
47+
endpoints = {
48+
{
49+
endpoint_id = 2,
50+
clusters = {
51+
{cluster_id = clusters.Basic.ID, cluster_type = "SERVER"},
5552
},
56-
{
57-
endpoint_id = 10,
58-
clusters = {
59-
{cluster_id = clusters.DoorLock.ID, cluster_type = "SERVER", feature_map = 0x0000},
60-
},
53+
device_types = {
54+
device_type_id = 0x0016, device_type_revision = 1, -- RootNode
55+
}
56+
},
57+
{
58+
endpoint_id = 10,
59+
clusters = {
60+
{cluster_id = clusters.DoorLock.ID, cluster_type = "SERVER", feature_map = 0x0000},
6161
},
6262
},
63+
},
6364
}
6465

6566
local mock_device_level = test.mock_device.build_test_matter_device(mock_device_record_level)
6667

6768
local function test_init()
68-
local subscribe_request = clusters.DoorLock.attributes.LockState:subscribe(mock_device)
69-
subscribe_request:merge(clusters.DoorLock.events.DoorLockAlarm:subscribe(mock_device))
70-
subscribe_request:merge(clusters.DoorLock.events.LockOperation:subscribe(mock_device))
71-
subscribe_request:merge(clusters.DoorLock.events.LockUserChange:subscribe(mock_device))
72-
test.socket["matter"]:__expect_send({mock_device.id, subscribe_request})
73-
test.mock_device.add_test_device(mock_device)
69+
test.disable_startup_messages()
70+
test.mock_device.add_test_device(mock_device)
71+
test.socket.device_lifecycle:__queue_receive({ mock_device.id, "added" })
72+
test.socket.capability:__expect_send(
73+
mock_device:generate_test_message("main", capabilities.tamperAlert.tamper.clear())
74+
)
75+
test.socket.capability:__expect_send(
76+
mock_device:generate_test_message("main", capabilities.lockCodes.lockCodes("[]", {visibility = {displayed = false}}))
77+
)
78+
local req = clusters.DoorLock.attributes.MaxPINCodeLength:read(mock_device, 10)
79+
req:merge(clusters.DoorLock.attributes.MinPINCodeLength:read(mock_device, 10))
80+
req:merge(clusters.DoorLock.attributes.NumberOfPINUsersSupported:read(mock_device, 10))
81+
test.socket.matter:__expect_send({mock_device.id, req})
82+
test.socket.device_lifecycle:__queue_receive({ mock_device.id, "init" })
83+
local subscribe_request = clusters.DoorLock.attributes.LockState:subscribe(mock_device)
84+
subscribe_request:merge(clusters.DoorLock.events.DoorLockAlarm:subscribe(mock_device))
85+
subscribe_request:merge(clusters.DoorLock.events.LockOperation:subscribe(mock_device))
86+
subscribe_request:merge(clusters.DoorLock.events.LockUserChange:subscribe(mock_device))
87+
test.socket["matter"]:__expect_send({mock_device.id, subscribe_request})
88+
test.mock_device.add_test_device(mock_device)
89+
7490

75-
local subscribe_request_level = clusters.DoorLock.attributes.LockState:subscribe(mock_device_level)
76-
test.socket["matter"]:__expect_send({mock_device_level.id, subscribe_request_level})
77-
test.mock_device.add_test_device(mock_device_level)
91+
test.mock_device.add_test_device(mock_device_level)
92+
test.socket.device_lifecycle:__queue_receive({ mock_device_level.id, "added" })
93+
test.socket.device_lifecycle:__queue_receive({ mock_device_level.id, "init" })
94+
local subscribe_request_level = clusters.DoorLock.attributes.LockState:subscribe(mock_device_level)
95+
test.socket["matter"]:__expect_send({mock_device_level.id, subscribe_request_level})
7896
end
7997
test.set_test_init_function(test_init)
8098

8199
test.register_coroutine_test(
82-
"doConfigure lifecycle event for base-lock-nobattery",
83-
function()
84-
test.socket.device_lifecycle:__queue_receive({ mock_device.id, "doConfigure" })
85-
mock_device:expect_metadata_update({ profile = "base-lock-nobattery" })
86-
mock_device:expect_metadata_update({ provisioning_state = "PROVISIONED" })
87-
end
100+
"doConfigure lifecycle event for base-lock-nobattery",
101+
function()
102+
test.socket.device_lifecycle:__queue_receive({ mock_device.id, "doConfigure" })
103+
mock_device:expect_metadata_update({ profile = "base-lock-nobattery" })
104+
mock_device:expect_metadata_update({ provisioning_state = "PROVISIONED" })
105+
end
88106
)
89107

90108
test.register_coroutine_test(
91-
"doConfigure lifecycle event for Level Lock Plus profile",
92-
function()
93-
test.socket.device_lifecycle:__queue_receive({ mock_device_level.id, "doConfigure" })
94-
mock_device_level:expect_metadata_update({ provisioning_state = "PROVISIONED" })
95-
end
109+
"doConfigure lifecycle event for Level Lock Plus profile",
110+
function()
111+
test.socket.device_lifecycle:__queue_receive({ mock_device_level.id, "doConfigure" })
112+
mock_device_level:expect_metadata_update({ provisioning_state = "PROVISIONED" })
113+
end
96114
)
97115

98116
test.run_registered_tests()

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

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -43,12 +43,21 @@ local mock_device_record = {
4343
local mock_device = test.mock_device.build_test_matter_device(mock_device_record)
4444

4545
local function test_init()
46+
test.disable_startup_messages()
47+
test.mock_device.add_test_device(mock_device)
48+
test.socket.device_lifecycle:__queue_receive({ mock_device.id, "added" })
49+
test.socket.capability:__expect_send(
50+
mock_device:generate_test_message("main", capabilities.tamperAlert.tamper.clear())
51+
)
52+
mock_device:expect_metadata_update({ profile = "lock-without-codes" })
53+
test.socket.device_lifecycle:__queue_receive({ mock_device.id, "init" })
4654
local subscribe_request = clusters.DoorLock.attributes.LockState:subscribe(mock_device)
4755
subscribe_request:merge(clusters.PowerSource.attributes.BatPercentRemaining:subscribe(mock_device))
4856
subscribe_request:merge(clusters.DoorLock.events.DoorLockAlarm:subscribe(mock_device))
4957
subscribe_request:merge(clusters.DoorLock.events.LockOperation:subscribe(mock_device))
5058
test.socket["matter"]:__expect_send({mock_device.id, subscribe_request})
51-
test.mock_device.add_test_device(mock_device)
59+
test.socket.device_lifecycle:__queue_receive({ mock_device.id, "doConfigure" })
60+
mock_device:expect_metadata_update({ provisioning_state = "PROVISIONED" })
5261
end
5362

5463
test.set_test_init_function(test_init)

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

Lines changed: 19 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515
local test = require "integration_test"
1616
test.add_package_capability("lockAlarm.yml")
1717
local t_utils = require "integration_test.utils"
18+
local capabilities = require "st.capabilities"
1819
local clusters = require "st.matter.clusters"
1920
local uint32 = require "st.matter.data_types.Uint32"
2021

@@ -67,28 +68,41 @@ local mock_device_no_battery_record = {
6768
local mock_device_no_battery = test.mock_device.build_test_matter_device(mock_device_no_battery_record)
6869

6970
local function test_init()
71+
test.disable_startup_messages()
72+
test.mock_device.add_test_device(mock_device)
73+
test.socket.device_lifecycle:__queue_receive({ mock_device.id, "added" })
74+
test.socket.capability:__expect_send(
75+
mock_device:generate_test_message("main", capabilities.tamperAlert.tamper.clear())
76+
)
77+
mock_device:expect_metadata_update({ profile = "lock-without-codes" })
78+
test.socket.device_lifecycle:__queue_receive({ mock_device.id, "init" })
7079
local subscribe_request = clusters.DoorLock.attributes.LockState:subscribe(mock_device)
7180
subscribe_request:merge(clusters.PowerSource.attributes.BatPercentRemaining:subscribe(mock_device))
7281
subscribe_request:merge(clusters.DoorLock.events.DoorLockAlarm:subscribe(mock_device))
7382
subscribe_request:merge(clusters.DoorLock.events.LockOperation:subscribe(mock_device))
7483
subscribe_request:merge(clusters.DoorLock.events.LockUserChange:subscribe(mock_device))
7584
test.socket["matter"]:__expect_send({mock_device.id, subscribe_request})
76-
test.mock_device.add_test_device(mock_device)
7785
test.socket.device_lifecycle:__queue_receive({ mock_device.id, "doConfigure" })
7886
mock_device:expect_metadata_update({ provisioning_state = "PROVISIONED" })
79-
local read_attribute_list = clusters.PowerSource.attributes.AttributeList:read()
80-
test.socket.matter:__expect_send({mock_device.id, read_attribute_list})
87+
test.socket.matter:__expect_send({mock_device.id, clusters.PowerSource.attributes.AttributeList:read()})
8188
end
8289
test.set_test_init_function(test_init)
8390

8491
local function test_init_no_battery()
92+
test.disable_startup_messages()
93+
test.mock_device.add_test_device(mock_device_no_battery)
94+
test.socket.device_lifecycle:__queue_receive({ mock_device_no_battery.id, "added" })
95+
test.socket.capability:__expect_send(
96+
mock_device_no_battery:generate_test_message("main", capabilities.tamperAlert.tamper.clear())
97+
)
98+
mock_device_no_battery:expect_metadata_update({ profile = "lock-without-codes-nobattery" })
99+
test.socket.device_lifecycle:__queue_receive({ mock_device_no_battery.id, "init" })
85100
local subscribe_request = clusters.DoorLock.attributes.LockState:subscribe(mock_device_no_battery)
86-
subscribe_request:merge(clusters.PowerSource.attributes.BatPercentRemaining:subscribe(mock_device))
101+
subscribe_request:merge(clusters.PowerSource.attributes.BatPercentRemaining:subscribe(mock_device_no_battery))
87102
subscribe_request:merge(clusters.DoorLock.events.DoorLockAlarm:subscribe(mock_device_no_battery))
88103
subscribe_request:merge(clusters.DoorLock.events.LockOperation:subscribe(mock_device_no_battery))
89104
subscribe_request:merge(clusters.DoorLock.events.LockUserChange:subscribe(mock_device_no_battery))
90105
test.socket["matter"]:__expect_send({mock_device_no_battery.id, subscribe_request})
91-
test.mock_device.add_test_device(mock_device_no_battery)
92106
test.socket.device_lifecycle:__queue_receive({ mock_device_no_battery.id, "doConfigure" })
93107
mock_device_no_battery:expect_metadata_update({ profile = "base-lock-nobattery" })
94108
mock_device_no_battery:expect_metadata_update({ provisioning_state = "PROVISIONED" })

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

Lines changed: 22 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -44,10 +44,15 @@ local mock_device = test.mock_device.build_test_matter_device(mock_device_record
4444

4545

4646
local function test_init()
47-
local subscribe_request = clusters.DoorLock.attributes.LockState:subscribe(mock_device)
48-
subscribe_request:merge(clusters.PowerSource.attributes.BatChargeLevel:subscribe(mock_device))
49-
test.socket["matter"]:__expect_send({mock_device.id, subscribe_request})
50-
test.mock_device.add_test_device(mock_device)
47+
test.disable_startup_messages()
48+
test.mock_device.add_test_device(mock_device)
49+
test.socket.device_lifecycle:__queue_receive({ mock_device.id, "added" })
50+
test.socket.device_lifecycle:__queue_receive({ mock_device.id, "init" })
51+
local subscribe_request = clusters.DoorLock.attributes.LockState:subscribe(mock_device)
52+
subscribe_request:merge(clusters.PowerSource.attributes.BatChargeLevel:subscribe(mock_device))
53+
test.socket["matter"]:__expect_send({mock_device.id, subscribe_request})
54+
test.socket.device_lifecycle:__queue_receive({ mock_device.id, "doConfigure" })
55+
mock_device:expect_metadata_update({ provisioning_state = "PROVISIONED" })
5156
end
5257
test.set_test_init_function(test_init)
5358

@@ -84,20 +89,20 @@ test.register_message_test(
8489
message = mock_device:generate_test_message("main", capabilities.batteryLevel.battery.warning()),
8590
},
8691
{
87-
channel = "matter",
88-
direction = "receive",
89-
message = {
90-
mock_device.id,
91-
clusters.PowerSource.attributes.BatChargeLevel:build_test_report_data(
92-
mock_device, 10, clusters.PowerSource.types.BatChargeLevelEnum.OK
93-
),
94-
},
95-
},
96-
{
97-
channel = "capability",
98-
direction = "send",
99-
message = mock_device:generate_test_message("main", capabilities.batteryLevel.battery.normal()),
92+
channel = "matter",
93+
direction = "receive",
94+
message = {
95+
mock_device.id,
96+
clusters.PowerSource.attributes.BatChargeLevel:build_test_report_data(
97+
mock_device, 10, clusters.PowerSource.types.BatChargeLevelEnum.OK
98+
),
10099
},
100+
},
101+
{
102+
channel = "capability",
103+
direction = "send",
104+
message = mock_device:generate_test_message("main", capabilities.batteryLevel.battery.normal()),
105+
},
101106
}
102107
)
103108

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

Lines changed: 10 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -12,20 +12,6 @@
1212
-- See the License for the specific language governing permissions and
1313
-- limitations under the License.
1414

15-
-- Copyright 2022 SmartThings
16-
--
17-
-- Licensed under the Apache License, Version 2.0 (the "License");
18-
-- you may not use this file except in compliance with the License.
19-
-- You may obtain a copy of the License at
20-
--
21-
-- http://www.apache.org/licenses/LICENSE-2.0
22-
--
23-
-- Unless required by applicable law or agreed to in writing, software
24-
-- distributed under the License is distributed on an "AS IS" BASIS,
25-
-- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
26-
-- See the License for the specific language governing permissions and
27-
-- limitations under the License.
28-
-- Mock out globals
2915
local test = require "integration_test"
3016
local capabilities = require "st.capabilities"
3117
test.add_package_capability("lockAlarm.yml")
@@ -35,6 +21,7 @@ local clusters = require "st.matter.clusters"
3521
local DoorLock = clusters.DoorLock
3622
local im = require "st.matter.interaction_model"
3723
local types = DoorLock.types
24+
3825
local mock_device_record = {
3926
profile = t_utils.get_profile_definition("base-lock.yml"),
4027
manufacturer_info = {vendor_id = 0xcccc, product_id = 0x1},
@@ -56,21 +43,26 @@ local mock_device_record = {
5643
cluster_type = "SERVER",
5744
feature_map = 0x0101, -- PIN & USR
5845
},
59-
{cluster_id = clusters.PowerSource.ID, cluster_type = "SERVER"},
46+
{cluster_id = clusters.PowerSource.ID, cluster_type = "SERVER", feature_map = 0},
6047
},
6148
},
6249
},
6350
}
6451
local mock_device = test.mock_device.build_test_matter_device(mock_device_record)
6552

6653
local function test_init()
54+
test.disable_startup_messages()
55+
test.mock_device.add_test_device(mock_device)
56+
test.socket.device_lifecycle:__queue_receive({ mock_device.id, "init" })
6757
local subscribe_request = DoorLock.attributes.LockState:subscribe(mock_device)
6858
subscribe_request:merge(clusters.PowerSource.attributes.BatPercentRemaining:subscribe(mock_device))
6959
subscribe_request:merge(DoorLock.events.LockUserChange:subscribe(mock_device))
7060
subscribe_request:merge(DoorLock.events.LockOperation:subscribe(mock_device))
7161
subscribe_request:merge(DoorLock.events.DoorLockAlarm:subscribe(mock_device))
7262
test.socket["matter"]:__expect_send({mock_device.id, subscribe_request})
73-
test.mock_device.add_test_device(mock_device)
63+
test.socket.device_lifecycle:__queue_receive({ mock_device.id, "doConfigure" })
64+
mock_device:expect_metadata_update({ profile = "base-lock-nobattery" })
65+
mock_device:expect_metadata_update({ provisioning_state = "PROVISIONED" })
7466
end
7567

7668
test.set_test_init_function(test_init)
@@ -189,11 +181,11 @@ local function init_code_slot(slot_number, name, device)
189181
)
190182

191183
local credential = DoorLock.types.DlCredential(
192-
{
184+
{
193185
credential_type = DoorLock.types.DlCredentialType.PIN,
194186
credential_index = slot_number,
195187
}
196-
)
188+
)
197189
test.socket.matter:__expect_send(
198190
{
199191
device.id,

0 commit comments

Comments
 (0)