Skip to content

Commit 5e09d74

Browse files
Define LastReceivedEventNumber as a global variable. (project-chip#28896)
* Define LastReceivedEventNumber as a global variable. Keep this variable available for tests to use. Update SMOKECO tests to use it. * Restyle * Fix unit tests * Restyle * Updated based on code review feedback * Fix typo * Restyle --------- Co-authored-by: Andrei Litvin <andreilitvin@google.com>
1 parent ddacd49 commit 5e09d74

File tree

6 files changed

+65
-43
lines changed

6 files changed

+65
-43
lines changed

scripts/py_matter_yamltests/matter_yamltests/parser.py

+40
Original file line numberDiff line numberDiff line change
@@ -14,8 +14,10 @@
1414
# limitations under the License.
1515

1616
import copy
17+
import logging
1718
from dataclasses import dataclass, field
1819
from enum import Enum, auto
20+
from typing import Optional
1921

2022
from . import fixes
2123
from .constraints import get_constraints, is_typed_constraint
@@ -698,6 +700,28 @@ def event_number(self, value):
698700
def pics(self):
699701
return self._test.pics
700702

703+
def _get_last_event_number(self, responses) -> Optional[int]:
704+
if not self.is_event:
705+
return None
706+
707+
# find the largest event number in all responses
708+
# This iterates over everything (not just last element) since some commands like
709+
# `chip-tool any read-all` may return multiple replies
710+
event_number = None
711+
712+
for response in responses:
713+
if not isinstance(response, dict):
714+
continue
715+
received_event_number = response.get('eventNumber')
716+
717+
if not isinstance(received_event_number, int):
718+
continue
719+
720+
if (event_number is None) or (event_number < received_event_number):
721+
event_number = received_event_number
722+
723+
return event_number
724+
701725
def post_process_response(self, received_responses):
702726
result = PostProcessResponseResult()
703727

@@ -710,6 +734,18 @@ def post_process_response(self, received_responses):
710734
if self._test.save_response_as:
711735
self._runtime_config_variable_storage[self._test.save_response_as] = received_responses
712736

737+
if self.is_event:
738+
last_event_number = self._get_last_event_number(received_responses)
739+
if last_event_number:
740+
if 'LastReceivedEventNumber' in self._runtime_config_variable_storage:
741+
if self._runtime_config_variable_storage['LastReceivedEventNumber'] > last_event_number:
742+
logging.warning(
743+
"Received an older event than expected: received %r < %r",
744+
last_event_number,
745+
self._runtime_config_variable_storage['LastReceivedEventNumber']
746+
)
747+
self._runtime_config_variable_storage['LastReceivedEventNumber'] = last_event_number
748+
713749
if self.wait_for is not None:
714750
self._response_cluster_wait_validation(received_responses, result)
715751
return result
@@ -1162,6 +1198,10 @@ def __apply_legacy_config(self, config):
11621198
self.__apply_legacy_config_if_missing(config, 'cluster', '')
11631199
self.__apply_legacy_config_if_missing(config, 'timeout', 90)
11641200

1201+
# These values are default runtime values (non-legacy)
1202+
self.__apply_legacy_config_if_missing(
1203+
config, 'LastReceivedEventNumber', 0)
1204+
11651205
def __apply_legacy_config_if_missing(self, config, key, value):
11661206
if key not in config:
11671207
config[key] = value

scripts/py_matter_yamltests/matter_yamltests/runner.py

-18
Original file line numberDiff line numberDiff line change
@@ -122,14 +122,6 @@ def run(self, config: TestRunnerConfig) -> bool:
122122

123123

124124
class TestRunner(TestRunnerBase):
125-
"""
126-
TestRunner is a default runner implementation.
127-
128-
last_event_number: The latest event number value after the readEvent command.
129-
"""
130-
131-
last_event_number: int = 0
132-
133125
async def start(self):
134126
return
135127

@@ -180,9 +172,6 @@ async def _run(self, parser: TestParser, config: TestRunnerConfig):
180172

181173
test_duration = 0
182174
for idx, request in enumerate(parser.tests):
183-
if request.is_event and request.event_number == 'newEventsOnly':
184-
request.event_number = self.last_event_number + 1
185-
186175
if not request.is_pics_enabled:
187176
hooks.step_skipped(request.label, request.pics)
188177
continue
@@ -207,13 +196,6 @@ async def _run(self, parser: TestParser, config: TestRunnerConfig):
207196
duration = round((time.time() - start) * 1000, 2)
208197
test_duration += duration
209198

210-
if request.is_event:
211-
last_event = responses[-1]
212-
if isinstance(last_event, dict):
213-
received_event_number = last_event.get('eventNumber')
214-
if isinstance(received_event_number, int) and self.last_event_number < received_event_number:
215-
self.last_event_number = received_event_number
216-
217199
logger = request.post_process_response(responses)
218200

219201
if logger.is_failure():

src/app/tests/suites/certification/Test_TC_SMOKECO_2_2.yaml

+3-3
Original file line numberDiff line numberDiff line change
@@ -123,7 +123,7 @@ tests:
123123
PICS: SMOKECO.S.E00
124124
command: "readEvent"
125125
event: "SmokeAlarm"
126-
eventNumber: "newEventsOnly"
126+
eventNumber: "LastReceivedEventNumber + 1"
127127
response:
128128
value: { AlarmSeverityLevel: 1 }
129129

@@ -203,7 +203,7 @@ tests:
203203
PICS: SMOKECO.S.E00
204204
command: "readEvent"
205205
event: "SmokeAlarm"
206-
eventNumber: "newEventsOnly"
206+
eventNumber: "LastReceivedEventNumber + 1"
207207
response:
208208
value: { AlarmSeverityLevel: 2 }
209209

@@ -248,6 +248,6 @@ tests:
248248
PICS: SMOKECO.S.E0a
249249
command: "readEvent"
250250
event: "AllClear"
251-
eventNumber: "newEventsOnly"
251+
eventNumber: "LastReceivedEventNumber + 1"
252252
response:
253253
value: {}

src/app/tests/suites/certification/Test_TC_SMOKECO_2_3.yaml

+3-3
Original file line numberDiff line numberDiff line change
@@ -122,7 +122,7 @@ tests:
122122
PICS: SMOKECO.S.E01
123123
command: "readEvent"
124124
event: "COAlarm"
125-
eventNumber: "newEventsOnly"
125+
eventNumber: "LastReceivedEventNumber + 1"
126126
response:
127127
value: { AlarmSeverityLevel: 1 }
128128

@@ -202,7 +202,7 @@ tests:
202202
PICS: SMOKECO.S.E01
203203
command: "readEvent"
204204
event: "COAlarm"
205-
eventNumber: "newEventsOnly"
205+
eventNumber: "LastReceivedEventNumber + 1"
206206
response:
207207
value: { AlarmSeverityLevel: 2 }
208208

@@ -247,6 +247,6 @@ tests:
247247
PICS: SMOKECO.S.E0a
248248
command: "readEvent"
249249
event: "AllClear"
250-
eventNumber: "newEventsOnly"
250+
eventNumber: "LastReceivedEventNumber + 1"
251251
response:
252252
value: {}

src/app/tests/suites/certification/Test_TC_SMOKECO_2_4.yaml

+11-11
Original file line numberDiff line numberDiff line change
@@ -135,7 +135,7 @@ tests:
135135
PICS: SMOKECO.S.E02
136136
command: "readEvent"
137137
event: "LowBattery"
138-
eventNumber: "newEventsOnly"
138+
eventNumber: "LastReceivedEventNumber + 1"
139139
response:
140140
value: { AlarmSeverityLevel: 1 }
141141

@@ -180,7 +180,7 @@ tests:
180180
PICS: SMOKECO.S.E02
181181
command: "readEvent"
182182
event: "LowBattery"
183-
eventNumber: "newEventsOnly"
183+
eventNumber: "LastReceivedEventNumber + 1"
184184
response:
185185
value: { AlarmSeverityLevel: 2 }
186186

@@ -225,7 +225,7 @@ tests:
225225
PICS: SMOKECO.S.E0a
226226
command: "readEvent"
227227
event: "AllClear"
228-
eventNumber: "newEventsOnly"
228+
eventNumber: "LastReceivedEventNumber + 1"
229229
response:
230230
value: {}
231231

@@ -281,7 +281,7 @@ tests:
281281
PICS: SMOKECO.S.E03
282282
command: "readEvent"
283283
event: "HardwareFault"
284-
eventNumber: "newEventsOnly"
284+
eventNumber: "LastReceivedEventNumber + 1"
285285
response:
286286
value: {}
287287

@@ -327,7 +327,7 @@ tests:
327327
PICS: SMOKECO.S.E0a
328328
command: "readEvent"
329329
event: "AllClear"
330-
eventNumber: "newEventsOnly"
330+
eventNumber: "LastReceivedEventNumber + 1"
331331
response:
332332
value: {}
333333

@@ -383,7 +383,7 @@ tests:
383383
PICS: SMOKECO.S.E04
384384
command: "readEvent"
385385
event: "EndOfService"
386-
eventNumber: "newEventsOnly"
386+
eventNumber: "LastReceivedEventNumber + 1"
387387
response:
388388
value: {}
389389

@@ -429,7 +429,7 @@ tests:
429429
PICS: SMOKECO.S.E0a
430430
command: "readEvent"
431431
event: "AllClear"
432-
eventNumber: "newEventsOnly"
432+
eventNumber: "LastReceivedEventNumber + 1"
433433
response:
434434
value: {}
435435

@@ -503,7 +503,7 @@ tests:
503503
PICS: SMOKECO.S.E05
504504
command: "readEvent"
505505
event: "SelfTestComplete"
506-
eventNumber: "newEventsOnly"
506+
eventNumber: "LastReceivedEventNumber + 1"
507507
response:
508508
value: {}
509509

@@ -520,7 +520,7 @@ tests:
520520
PICS: SMOKECO.S.E0a
521521
command: "readEvent"
522522
event: "AllClear"
523-
eventNumber: "newEventsOnly"
523+
eventNumber: "LastReceivedEventNumber + 1"
524524
response:
525525
value: {}
526526

@@ -565,7 +565,7 @@ tests:
565565
PICS: SMOKECO.S.E05
566566
command: "readEvent"
567567
event: "SelfTestComplete"
568-
eventNumber: "newEventsOnly"
568+
eventNumber: "LastReceivedEventNumber + 1"
569569
response:
570570
value: {}
571571

@@ -582,6 +582,6 @@ tests:
582582
PICS: SMOKECO.S.E0a
583583
command: "readEvent"
584584
event: "AllClear"
585-
eventNumber: "newEventsOnly"
585+
eventNumber: "LastReceivedEventNumber + 1"
586586
response:
587587
value: {}

src/app/tests/suites/certification/Test_TC_SMOKECO_2_5.yaml

+8-8
Original file line numberDiff line numberDiff line change
@@ -163,7 +163,7 @@ tests:
163163
PICS: SMOKECO.S.A0008 && SMOKECO.S.E08
164164
command: "readEvent"
165165
event: "InterconnectSmokeAlarm"
166-
eventNumber: "newEventsOnly"
166+
eventNumber: "LastReceivedEventNumber + 1"
167167
response:
168168
value: { AlarmSeverityLevel: interconnectSmokeAlarmSeverityLevel }
169169

@@ -218,7 +218,7 @@ tests:
218218
PICS: SMOKECO.S.A0008 && SMOKECO.S.E0a
219219
command: "readEvent"
220220
event: "AllClear"
221-
eventNumber: "newEventsOnly"
221+
eventNumber: "LastReceivedEventNumber + 1"
222222
response:
223223
value: {}
224224

@@ -276,7 +276,7 @@ tests:
276276
PICS: SMOKECO.S.A0009 && SMOKECO.S.E09
277277
command: "readEvent"
278278
event: "InterconnectCOAlarm"
279-
eventNumber: "newEventsOnly"
279+
eventNumber: "LastReceivedEventNumber + 1"
280280
response:
281281
value: { AlarmSeverityLevel: interconnectCOAlarmSeverityLevel }
282282

@@ -331,7 +331,7 @@ tests:
331331
PICS: SMOKECO.S.A0009 && SMOKECO.S.E0a
332332
command: "readEvent"
333333
event: "AllClear"
334-
eventNumber: "newEventsOnly"
334+
eventNumber: "LastReceivedEventNumber + 1"
335335
response:
336336
value: {}
337337

@@ -689,7 +689,7 @@ tests:
689689
PICS: SMOKECO.S.A0004 && SMOKECO.S.F00 && SMOKECO.S.E06
690690
command: "readEvent"
691691
event: "AlarmMuted"
692-
eventNumber: "newEventsOnly"
692+
eventNumber: "LastReceivedEventNumber + 1"
693693
response:
694694
value: {}
695695

@@ -726,7 +726,7 @@ tests:
726726
PICS: SMOKECO.S.A0004 && SMOKECO.S.F00 && SMOKECO.S.E07
727727
command: "readEvent"
728728
event: "MuteEnded"
729-
eventNumber: "newEventsOnly"
729+
eventNumber: "LastReceivedEventNumber + 1"
730730
response:
731731
value: {}
732732

@@ -921,7 +921,7 @@ tests:
921921
PICS: SMOKECO.S.A0004 && SMOKECO.S.F01 && SMOKECO.S.E06
922922
command: "readEvent"
923923
event: "AlarmMuted"
924-
eventNumber: "newEventsOnly"
924+
eventNumber: "LastReceivedEventNumber + 1"
925925
response:
926926
value: {}
927927

@@ -958,7 +958,7 @@ tests:
958958
PICS: SMOKECO.S.A0004 && SMOKECO.S.F01 && SMOKECO.S.E07
959959
command: "readEvent"
960960
event: "MuteEnded"
961-
eventNumber: "newEventsOnly"
961+
eventNumber: "LastReceivedEventNumber + 1"
962962
response:
963963
value: {}
964964

0 commit comments

Comments
 (0)