@@ -57,6 +57,36 @@ local mock_device = test.mock_device.build_test_matter_device({
57
57
}
58
58
})
59
59
60
+ local mock_device_colevel = test .mock_device .build_test_matter_device ({
61
+ profile = t_utils .get_profile_definition (" co-comeas-colevel-battery.yml" ),
62
+ manufacturer_info = {
63
+ vendor_id = 0x0000 ,
64
+ product_id = 0x0000 ,
65
+ },
66
+ endpoints = {
67
+ {
68
+ endpoint_id = 0 ,
69
+ clusters = {
70
+ {cluster_id = clusters .Basic .ID , cluster_type = " SERVER" },
71
+ },
72
+ device_types = {
73
+ {device_type_id = 0x0016 , device_type_revision = 1 } -- RootNode
74
+ }
75
+ },
76
+ {
77
+ endpoint_id = 1 ,
78
+ clusters = {
79
+ {cluster_id = clusters .SmokeCoAlarm .ID , cluster_type = " SERVER" , feature_map = clusters .SmokeCoAlarm .types .Feature .CO_ALARM },
80
+ {cluster_id = clusters .CarbonMonoxideConcentrationMeasurement .ID , cluster_type = " SERVER" , feature_map = clusters .CarbonMonoxideConcentrationMeasurement .types .Feature .NUMERIC_MEASUREMENT | clusters .CarbonMonoxideConcentrationMeasurement .types .Feature .LEVEL_INDICATION },
81
+ {cluster_id = clusters .PowerSource .ID , cluster_type = " SERVER" , feature_map = clusters .PowerSource .types .PowerSourceFeature .BATTERY },
82
+ },
83
+ device_types = {
84
+ {device_type_id = 0x0076 , device_type_revision = 1 } -- Smoke CO Alarm
85
+ }
86
+ }
87
+ }
88
+ })
89
+
60
90
local cluster_subscribe_list = {
61
91
clusters .SmokeCoAlarm .attributes .SmokeState ,
62
92
clusters .SmokeCoAlarm .attributes .TestInProgress ,
@@ -87,6 +117,27 @@ local function test_init()
87
117
test .mock_device .add_test_device (mock_device )
88
118
end
89
119
120
+ local cluster_subscribe_list_colevel = {
121
+ clusters .SmokeCoAlarm .attributes .TestInProgress ,
122
+ clusters .SmokeCoAlarm .attributes .COState ,
123
+ clusters .SmokeCoAlarm .attributes .HardwareFaultAlert ,
124
+ clusters .CarbonMonoxideConcentrationMeasurement .attributes .MeasurementUnit ,
125
+ clusters .CarbonMonoxideConcentrationMeasurement .attributes .LevelValue ,
126
+ clusters .CarbonMonoxideConcentrationMeasurement .attributes .MeasuredValue ,
127
+ clusters .PowerSource .attributes .BatPercentRemaining ,
128
+ }
129
+
130
+ local function test_init_colevel ()
131
+ local subscribe_request = cluster_subscribe_list_colevel [1 ]:subscribe (mock_device_colevel )
132
+ for i , cluster in ipairs (cluster_subscribe_list_colevel ) do
133
+ if i > 1 then
134
+ subscribe_request :merge (cluster :subscribe (mock_device_colevel ))
135
+ end
136
+ end
137
+ test .socket .matter :__expect_send ({mock_device_colevel .id , subscribe_request })
138
+ test .mock_device .add_test_device (mock_device_colevel )
139
+ end
140
+
90
141
test .set_test_init_function (test_init )
91
142
92
143
test .register_message_test (
@@ -134,6 +185,58 @@ test.register_message_test(
134
185
}
135
186
)
136
187
188
+ test .register_coroutine_test (
189
+ " Level value reports should generate events" ,
190
+ function ()
191
+ test .socket .matter :__queue_receive ({
192
+ mock_device_colevel .id ,
193
+ clusters .CarbonMonoxideConcentrationMeasurement .attributes .LevelValue :build_test_report_data (
194
+ mock_device_colevel , 1 , clusters .CarbonMonoxideConcentrationMeasurement .types .LevelValueEnum .UNKNOWN
195
+ )
196
+ })
197
+ test .socket .capability :__expect_send (
198
+ mock_device_colevel :generate_test_message (" main" , capabilities .carbonMonoxideHealthConcern .carbonMonoxideHealthConcern .unknown ())
199
+ )
200
+ test .socket .matter :__queue_receive ({
201
+ mock_device_colevel .id ,
202
+ clusters .CarbonMonoxideConcentrationMeasurement .attributes .LevelValue :build_test_report_data (
203
+ mock_device_colevel , 1 , clusters .CarbonMonoxideConcentrationMeasurement .types .LevelValueEnum .LOW
204
+ )
205
+ })
206
+ test .socket .capability :__expect_send (
207
+ mock_device_colevel :generate_test_message (" main" , capabilities .carbonMonoxideHealthConcern .carbonMonoxideHealthConcern .good ())
208
+ )
209
+ test .socket .matter :__queue_receive ({
210
+ mock_device_colevel .id ,
211
+ clusters .CarbonMonoxideConcentrationMeasurement .attributes .LevelValue :build_test_report_data (
212
+ mock_device_colevel , 1 , clusters .CarbonMonoxideConcentrationMeasurement .types .LevelValueEnum .MEDIUM
213
+ )
214
+ })
215
+ test .socket .capability :__expect_send (
216
+ mock_device_colevel :generate_test_message (" main" , capabilities .carbonMonoxideHealthConcern .carbonMonoxideHealthConcern .moderate ())
217
+ )
218
+ test .socket .matter :__queue_receive ({
219
+ mock_device_colevel .id ,
220
+ clusters .CarbonMonoxideConcentrationMeasurement .attributes .LevelValue :build_test_report_data (
221
+ mock_device_colevel , 1 , clusters .CarbonMonoxideConcentrationMeasurement .types .LevelValueEnum .HIGH
222
+ )
223
+ })
224
+ test .socket .capability :__expect_send (
225
+ mock_device_colevel :generate_test_message (" main" , capabilities .carbonMonoxideHealthConcern .carbonMonoxideHealthConcern .unhealthy ())
226
+ )
227
+ test .socket .matter :__queue_receive ({
228
+ mock_device_colevel .id ,
229
+ clusters .CarbonMonoxideConcentrationMeasurement .attributes .LevelValue :build_test_report_data (
230
+ mock_device_colevel , 1 , clusters .CarbonMonoxideConcentrationMeasurement .types .LevelValueEnum .CRITICAL
231
+ )
232
+ })
233
+ test .socket .capability :__expect_send (
234
+ mock_device_colevel :generate_test_message (" main" , capabilities .carbonMonoxideHealthConcern .carbonMonoxideHealthConcern .hazardous ())
235
+ )
236
+ end ,
237
+ { test_init = test_init_colevel }
238
+ )
239
+
137
240
test .register_message_test (
138
241
" Test CO state handler" ,
139
242
{
0 commit comments