Skip to content

Commit d139a42

Browse files
Update ICDM 2.1 Test Script (#34714)
1 parent d0d9127 commit d139a42

File tree

2 files changed

+72
-43
lines changed

2 files changed

+72
-43
lines changed

src/python_testing/TC_ICDM_2_1.py

+14-2
Original file line numberDiff line numberDiff line change
@@ -109,6 +109,7 @@ def steps_TC_ICDM_2_1(self) -> list[TestStep]:
109109
TestStep(
110110
9, "TH reads from the DUT the UserActiveModeTriggerInstruction attribute"),
111111
TestStep(10, "TH reads from the DUT the OperatingMode attribute."),
112+
TestStep(11, "TH reads from the DUT the MaximumCheckInBackoff attribute."),
112113
]
113114
return steps
114115

@@ -254,8 +255,9 @@ async def test_TC_ICDM_2_1(self):
254255
"UserActiveModeTriggerInstruction is not in the correct format for the associated UserActiveModeTriggerHint")
255256

256257
if uatHintInstructionDepedentBitmap > 0 and uatHintInstructionDepedentBitmap in kUatColorInstructionBitMask:
257-
# TODO: https://github.com/CHIP-Specifications/connectedhomeip-spec/issues/9194
258-
asserts.assert_true(False, "Nothing to do for now")
258+
pattern = re.compile(r'^[0-9A-F]{6}$')
259+
asserts.assert_true(pattern.match(userActiveModeTriggerInstruction),
260+
"UserActiveModeTriggerInstruction is not in the correct format for the associated UserActiveModeTriggerHint")
259261
else:
260262
# Check if the UserActiveModeTriggerInstruction was required
261263
asserts.assert_false(uatHintInstructionDepedentBitmap in kUatInstructionMandatoryBitMask,
@@ -272,6 +274,16 @@ async def test_TC_ICDM_2_1(self):
272274

273275
asserts.assert_less(
274276
operatingMode, modes.kUnknownEnumValue, "OperatingMode can only have 0 and 1 as valid values")
277+
self.step(11)
278+
if self.pics_guard(self.check_pics("ICDM.S.A0009")):
279+
maximumCheckInBackOff = await self._read_icdm_attribute_expect_success(attributes.MaximumCheckInBackOff)
280+
281+
asserts.assert_true(self.is_valid_uint32_value(maximumCheckInBackOff),
282+
"MaximumCheckInBackOff attribute is not a valid uint32.")
283+
asserts.assert_greater_equal(maximumCheckInBackOff, idleModeDuration,
284+
"MaximumCheckInBack attribute is not greater or euqal to the IdleModeDuration")
285+
asserts.assert_less_equal(maximumCheckInBackOff, 64800,
286+
"MaximumCheckInBackOff attribute is greater than maximum value (64800).")
275287

276288

277289
if __name__ == "__main__":

src/python_testing/test_testing/test_TC_ICDM_2_1.py

+58-41
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,7 @@ class ICDMData():
4141
UserActiveModeTriggerHint: int
4242
UserActiveModeTriggerInstruction: string
4343
OperatingMode: c.Enums.OperatingModeEnum
44+
MaximumCheckInBackOff: int
4445
expect_pass: bool
4546

4647

@@ -57,145 +58,161 @@ class ICDMData():
5758
# --------
5859
# IdleModeDuration under minimum (< 1)
5960
ICDMData(0, 0, 0, 100, [], 0, 2, 0, "",
60-
c.Enums.OperatingModeEnum.kSit, False),
61+
c.Enums.OperatingModeEnum.kSit, 64800, False),
6162
# IdleModeDuration at minimum
6263
ICDMData(0, 1, 0, 100, [], 0, 2, 0, "",
63-
c.Enums.OperatingModeEnum.kSit, True),
64+
c.Enums.OperatingModeEnum.kSit, 64800, True),
6465
# IdleModeDuration at maximum
6566
ICDMData(0, 64800, 100, 100, [], 0, 2, 0, "",
66-
c.Enums.OperatingModeEnum.kSit, True),
67+
c.Enums.OperatingModeEnum.kSit, 64800, True),
6768
# IdleModeDuration over maximum (>64800)
6869
ICDMData(0, 64801, 100, 100, [], 0, 2, 0, "",
69-
c.Enums.OperatingModeEnum.kSit, False),
70+
c.Enums.OperatingModeEnum.kSit, 64800, False),
7071
# IdleModeDuration < ActiveModeDuration
7172
ICDMData(0, 1, 1001, 100, [], 0, 2, 0, "",
72-
c.Enums.OperatingModeEnum.kSit, False),
73+
c.Enums.OperatingModeEnum.kSit, 64800, False),
7374
# --------
7475
# Test cases to validate ActiveModeDuration
7576
# --------
7677
# ActiveModeDuration under minimum
7778
ICDMData(0, 100, -1, 100, [], 0, 2, 0, "",
78-
c.Enums.OperatingModeEnum.kSit, False),
79+
c.Enums.OperatingModeEnum.kSit, 64800, False),
7980
# ActiveModeDuration at minimum
8081
ICDMData(0, 100, 0, 100, [], 0, 2, 0, "",
81-
c.Enums.OperatingModeEnum.kSit, True),
82+
c.Enums.OperatingModeEnum.kSit, 64800, True),
8283
# ActiveModeDuration at maximum - value is max IdleModeDuration value - 1
8384
ICDMData(0, 64800, 0x3DCC4FF, 100, [], 0, 2, 0, "",
84-
c.Enums.OperatingModeEnum.kSit, True),
85+
c.Enums.OperatingModeEnum.kSit, 64800, True),
8586
# --------
8687
# Test cases to validate ActiveModeThreshold
8788
# --------
8889
# ActiveModeThreshold < minimum
8990
ICDMData(0, 1, 0, -1, [], 0, 2, 0, "",
90-
c.Enums.OperatingModeEnum.kSit, False),
91+
c.Enums.OperatingModeEnum.kSit, 64800, False),
9192
# ActiveModeThreshold at SIT minimum
9293
ICDMData(0, 1, 0, 0, [], 0, 2, 0, "",
93-
c.Enums.OperatingModeEnum.kSit, True),
94+
c.Enums.OperatingModeEnum.kSit, 64800, True),
9495
# ActiveModeThreshold under LIT minimum
9596
ICDMData(0x7, 1, 0, 4999, [], 0, 2, 0, "",
96-
c.Enums.OperatingModeEnum.kLit, False),
97+
c.Enums.OperatingModeEnum.kLit, 64800, False),
9798
# ActiveModeThreshold at LIT minimum
9899
ICDMData(0x7, 1, 0, 5000, [], 0, 2, 0, "",
99-
c.Enums.OperatingModeEnum.kLit, True),
100+
c.Enums.OperatingModeEnum.kLit, 64800, True),
100101
# ActiveModeThreshold at Maximum
101102
ICDMData(0, 1, 0, 0xFFFF, [], 0, 2, 0, "",
102-
c.Enums.OperatingModeEnum.kSit, True),
103+
c.Enums.OperatingModeEnum.kSit, 64800, True),
103104
# ActiveModeThreshold over Maximum
104105
ICDMData(0, 1, 0, 0x10000, [], 0, 2, 0, "",
105-
c.Enums.OperatingModeEnum.kSit, False),
106+
c.Enums.OperatingModeEnum.kSit, 64800, False),
106107
# --------
107108
# Test cases to validate ClientsSupportedPerFabric
108109
# --------
109110
# ClientsSupportedPerFabric under minimum (< 1)
110111
ICDMData(0, 1, 0, 100, [], 0, 0, 0, "",
111-
c.Enums.OperatingModeEnum.kLit, False),
112+
c.Enums.OperatingModeEnum.kLit, 64800, False),
112113
# ClientsSupportedPerFabric at minimum
113114
ICDMData(0, 1, 0, 100, [], 0, 1, 0, "",
114-
c.Enums.OperatingModeEnum.kLit, True),
115+
c.Enums.OperatingModeEnum.kLit, 64800, True),
115116
# ClientsSupportedPerFabric at maximum
116117
ICDMData(0, 1, 0, 100, [], 0, 255, 0, "",
117-
c.Enums.OperatingModeEnum.kLit, True),
118+
c.Enums.OperatingModeEnum.kLit, 64800, True),
118119
# ClientsSupportedPerFabric > maximum
119120
ICDMData(0, 1, 0, 100, [], 0, 256, 0, "",
120-
c.Enums.OperatingModeEnum.kLit, True),
121+
c.Enums.OperatingModeEnum.kLit, 64800, True),
121122
# --------
122123
# Test cases to validate RegisteredClients
123124
# --------
124125
# Incorrect type
125126
ICDMData(0, 1, 0, 100, 0, 0, 1, 0, "",
126-
c.Enums.OperatingModeEnum.kLit, False),
127+
c.Enums.OperatingModeEnum.kLit, 64800, False),
127128
# Correct type
128129
ICDMData(0, 1, 0, 100, [], 0, 1, 0, "",
129-
c.Enums.OperatingModeEnum.kLit, True),
130+
c.Enums.OperatingModeEnum.kLit, 64800, True),
130131
# --------
131132
# Test cases to validate ICDCounter
132133
# --------
133134
# ICDCounter under minimum (< 0)
134135
ICDMData(0, 1, 0, 100, [], -1, 1, 0, "",
135-
c.Enums.OperatingModeEnum.kLit, False),
136+
c.Enums.OperatingModeEnum.kLit, 64800, False),
136137
# ICDCounter at minimum
137138
ICDMData(0, 1, 0, 100, [], 0, 1, 0, "",
138-
c.Enums.OperatingModeEnum.kLit, True),
139+
c.Enums.OperatingModeEnum.kLit, 64800, True),
139140
# ICDCounter at maximum
140141
ICDMData(0, 1, 0, 100, [], 0xFFFFFFFF, 1, 0, "",
141-
c.Enums.OperatingModeEnum.kLit, True),
142+
c.Enums.OperatingModeEnum.kLit, 64800, True),
142143
# ICDCounter over maximum
143144
ICDMData(0, 1, 0, 100, [], 0x100000000, 1, 0, "",
144-
c.Enums.OperatingModeEnum.kLit, False),
145+
c.Enums.OperatingModeEnum.kLit, 64800, False),
145146
# --------
146147
# Test cases to validate UserActiveModeTriggerHint
147148
# --------
148149
# UserActiveModeTriggerHint outsite valid range
149150
ICDMData(0, 1, 0, 100, [], 0, 1, 0x1FFFF, "",
150-
c.Enums.OperatingModeEnum.kLit, False),
151+
c.Enums.OperatingModeEnum.kLit, 64800, False),
151152
# UserActiveModeTriggerHint outsite valid range
152153
ICDMData(0, 1, 0, 100, [], 0, 1, -1, "",
153-
c.Enums.OperatingModeEnum.kLit, False),
154+
c.Enums.OperatingModeEnum.kLit, 64800, False),
154155
# UserActiveModeTriggerHint with no hints
155156
ICDMData(0, 1, 0, 100, [], 0, 1, 0, "",
156-
c.Enums.OperatingModeEnum.kLit, True),
157+
c.Enums.OperatingModeEnum.kLit, 64800, True),
157158
# UserActiveModeTriggerHint wiht two instruction depedent bits set
158159
ICDMData(0, 1, 0, 100, [], 0, 1, uat.kCustomInstruction | uat.kActuateSensorSeconds, "",
159-
c.Enums.OperatingModeEnum.kLit, False),
160+
c.Enums.OperatingModeEnum.kLit, 64800, False),
160161
# --------
161162
# Test cases to validate UserActiveModeTriggerInstruction
162163
# --------
163164
# UserActiveModeTriggerInstruction with wrong encoding
164165
ICDMData(0, 1, 0, 100, [], 0, 1, uat.kCustomInstruction, "Hello\uD83D\uDE00World",
165-
c.Enums.OperatingModeEnum.kLit, False),
166+
c.Enums.OperatingModeEnum.kLit, 64800, False),
166167
# UserActiveModeTriggerInstruction with empty string
167168
ICDMData(0, 1, 0, 100, [], 0, 1, uat.kCustomInstruction, "",
168-
c.Enums.OperatingModeEnum.kLit, True),
169+
c.Enums.OperatingModeEnum.kLit, 64800, True),
169170
# UserActiveModeTriggerInstruction with empty string
170171
ICDMData(0, 1, 0, 100, [], 0, 1, uat.kCustomInstruction, "",
171-
c.Enums.OperatingModeEnum.kLit, True),
172+
c.Enums.OperatingModeEnum.kLit, 64800, True),
172173
# UserActiveModeTriggerInstruction with max string length
173174
ICDMData(0, 1, 0, 100, [], 0, 1, uat.kCustomInstruction, long_string,
174-
c.Enums.OperatingModeEnum.kLit, True),
175+
c.Enums.OperatingModeEnum.kLit, 64800, True),
175176
# UserActiveModeTriggerInstruction > max string length
176177
ICDMData(0, 1, 0, 100, [], 0, 1, uat.kCustomInstruction, too_long_string,
177-
c.Enums.OperatingModeEnum.kLit, False),
178+
c.Enums.OperatingModeEnum.kLit, 64800, False),
178179
# UserActiveModeTriggerInstruction invalid number - Trailing 0s
179180
ICDMData(0, 1, 0, 100, [], 0, 1, uat.kActuateSensorSeconds, "001",
180-
c.Enums.OperatingModeEnum.kLit, False),
181+
c.Enums.OperatingModeEnum.kLit, 64800, False),
181182
# UserActiveModeTriggerInstruction invalid number - Letters
182183
ICDMData(0, 1, 0, 100, [], 0, 1, uat.kActuateSensorSeconds, "not a number",
183-
c.Enums.OperatingModeEnum.kLit, False),
184+
c.Enums.OperatingModeEnum.kLit, 64800, False),
184185
# UserActiveModeTriggerInstruction Valid number
185186
ICDMData(0, 1, 0, 100, [], 0, 1, uat.kActuateSensorSeconds, "100000",
186-
c.Enums.OperatingModeEnum.kLit, True),
187+
c.Enums.OperatingModeEnum.kLit, 64800, True),
188+
ICDMData(0, 1, 0, 100, [], 0, 1, uat.kActuateSensorLightsBlink, "", c.Enums.OperatingModeEnum.kLit, 64800, False),
189+
ICDMData(0, 1, 0, 100, [], 0, 1, uat.kActuateSensorLightsBlink, "AAAAAAA", c.Enums.OperatingModeEnum.kLit, 64800, False),
190+
ICDMData(0, 1, 0, 100, [], 0, 1, uat.kActuateSensorLightsBlink, "AAAAA", c.Enums.OperatingModeEnum.kLit, 64800, False),
191+
ICDMData(0, 1, 0, 100, [], 0, 1, uat.kActuateSensorLightsBlink, "AAAAAK", c.Enums.OperatingModeEnum.kLit, 64800, False),
192+
ICDMData(0, 1, 0, 100, [], 0, 1, uat.kActuateSensorLightsBlink, "012345", c.Enums.OperatingModeEnum.kLit, 64800, True),
187193
# --------
188194
# Test cases to validate OpertingMode
189195
# --------
190196
# OpertingMode with negative value
191197
ICDMData(0, 1, 0, 100, [], 0, 1, uat.kActuateSensorSeconds, "100000",
192-
-1, False),
198+
-1, 64800, False),
193199
# OpertingMode with Accepted value
194200
ICDMData(0, 1, 0, 100, [], 0, 1, uat.kActuateSensorSeconds, "100000",
195-
c.Enums.OperatingModeEnum.kLit, True),
201+
c.Enums.OperatingModeEnum.kLit, 64800, True),
196202
# OpertingMode with unkown value
197203
ICDMData(0, 1, 0, 100, [], 0, 1, uat.kActuateSensorSeconds, "100000",
198-
c.Enums.OperatingModeEnum.kUnknownEnumValue, False),
204+
c.Enums.OperatingModeEnum.kUnknownEnumValue, 64800, False),
205+
# --------
206+
# Test cases to validate MaximumCheckInBackOff
207+
# --------
208+
ICDMData(0, 1, 0, 100, [], 0, 1, uat.kActuateSensorSeconds, "100000",
209+
c.Enums.OperatingModeEnum.kUnknownEnumValue, 0, False),
210+
ICDMData(0, 1, 0, 100, [], 0, 1, uat.kActuateSensorSeconds, "100000",
211+
c.Enums.OperatingModeEnum.kSit, 1, True),
212+
ICDMData(0, 1, 0, 100, [], 0, 1, uat.kActuateSensorSeconds, "100000",
213+
c.Enums.OperatingModeEnum.kSit, 64800, True),
214+
ICDMData(0, 1, 0, 100, [], 0, 1, uat.kActuateSensorSeconds, "100000",
215+
c.Enums.OperatingModeEnum.kSit, 64801, False),
199216

200217
]
201218

@@ -205,13 +222,13 @@ def test_spec_to_attribute_cache(test_icdm: ICDMData) -> Attribute.AsyncReadTran
205222
resp.attributes = {0: {c: {attr.FeatureMap: test_icdm.FeatureMap, attr.IdleModeDuration: test_icdm.IdleModeDuration, attr.ActiveModeDuration: test_icdm.ActiveModeDuration, attr.ActiveModeThreshold: test_icdm.ActiveModeThreshold,
206223
attr.RegisteredClients: test_icdm.RegisteredClients, attr.ICDCounter: test_icdm.ICDCounter,
207224
attr.ClientsSupportedPerFabric: test_icdm.ClientsSupportedPerFabric, attr.UserActiveModeTriggerHint: test_icdm.UserActiveModeTriggerHint,
208-
attr.UserActiveModeTriggerInstruction: test_icdm.UserActiveModeTriggerInstruction, attr.OperatingMode: test_icdm.OperatingMode}}}
225+
attr.UserActiveModeTriggerInstruction: test_icdm.UserActiveModeTriggerInstruction, attr.OperatingMode: test_icdm.OperatingMode, attr.MaximumCheckInBackOff: test_icdm.MaximumCheckInBackOff}}}
209226
return resp
210227

211228

212229
def main():
213230
pics = {"ICDM.S.A0000": True, "ICDM.S.A0001": True, "ICDM.S.A0002": True, "ICDM.S.A0003": True, "ICDM.S.A0004": True,
214-
"ICDM.S.A0005": True, "ICDM.S.A0006": True, "ICDM.S.A0007": True, "ICDM.S.A0008": True, }
231+
"ICDM.S.A0005": True, "ICDM.S.A0006": True, "ICDM.S.A0007": True, "ICDM.S.A0008": True, "ICDM.S.A0009": True, }
215232

216233
test_runner = MockTestRunner(
217234
'TC_ICDM_2_1', 'TC_ICDM_2_1', 'test_TC_ICDM_2_1', 0, pics)

0 commit comments

Comments
 (0)