Skip to content

Commit de183df

Browse files
arikgreencfriedt
authored andcommitted
tests: pm: Fix collecting data after fail
Fix for collecting and presenting measured data. During verify measured values, the test skipped all results after the first incorrect one. Furthermore, it duplicated already collected data on the output list. So in this case the result list include wrong data. Signed-off-by: Artur Wilczak <[email protected]>
1 parent a90cc80 commit de183df

File tree

3 files changed

+38
-19
lines changed

3 files changed

+38
-19
lines changed

scripts/pylib/power-twister-harness/stm32l562e_dk/PowerShield.py

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
1-
# Copyright: (c) 2025, Intel Corporation
1+
# Copyright (c) 2025, Intel Corporation
2+
# SPDX-License-Identifier: Apache-2.0
23
# Author: Arkadiusz Cholewinski <[email protected]>
34

45
import csv
@@ -303,7 +304,7 @@ def __acq_data(self):
303304
while True:
304305
# Read the first byte
305306
first_byte = self.handler.read_bytes(1)
306-
if len(first_byte) < 1 or self.acqComplete: # Exit conditions
307+
if len(first_byte) < 1 or self.acqComplete:
307308
logging.info("Stopping data acquisition...")
308309
return
309310

@@ -408,7 +409,6 @@ def __start_measurement(self):
408409
:return: None
409410
"""
410411
command = "start"
411-
self.acqComplete = False
412412
self.__send_command(command)
413413

414414
raw_to_file_Thread = threading.Thread(
@@ -420,11 +420,10 @@ def __start_measurement(self):
420420
raw_to_file_Thread.join()
421421

422422
def __raw_to_file(self, outputFilePath: str):
423-
# Open a CSV file for writing
424423
with open(outputFilePath, 'w', newline='') as outputFile:
425424
writer = csv.writer(outputFile)
426425
while True:
427-
if self.dataQueue.empty() and bool(self.acqComplete):
426+
if self.dataQueue.empty() and self.acqComplete:
428427
outputFile.close()
429428
break
430429
if not self.dataQueue.empty():
@@ -457,7 +456,6 @@ def measure(self, time: int, freq: str = None, reset: bool = False):
457456

458457
def get_data(self, unit: str = PowerShieldConf.MeasureUnit.RAW_DATA):
459458
if self.acqComplete:
460-
# Open the CSV file
461459
with open(self.power_shield_conf.output_file) as file:
462460
csv_reader = csv.reader(file)
463461
for row in csv_reader:

scripts/pylib/power-twister-harness/test_power.py

Lines changed: 33 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
1-
# Copyright: (c) 2024, Intel Corporation
1+
# Copyright (c) 2024 Intel Corporation
2+
# SPDX-License-Identifier: Apache-2.0
23

34
import logging
45

@@ -45,17 +46,31 @@ def test_power_harness(probe_class: PowerMonitor, test_data, request, dut: Devic
4546
padding=measurements_dict['peak_padding'],
4647
)
4748

48-
# # Convert measured values from amps to milliamps for comparison
49+
# Convert measured values from amps to milliamps for comparison
50+
# Measured states: ['idle', 'state 0', 'state 1', 'state 2', 'active']
4951
rms_values_in_milliamps = [value * 1e3 for value in rms_values_measured]
5052

51-
# # Log the calculated values in milliamps for debugging purposes
53+
# Log the calculated values in milliamps for debugging purposes
5254
logger.debug(f"Measured RMS values in mA: {rms_values_in_milliamps}")
55+
logger.debug(f"Expected RMS values in mA: {measurements_dict['expected_rms_values']}")
5356

5457
tuples = zip(measurements_dict['expected_rms_values'], rms_values_in_milliamps, strict=False)
58+
if not tuple:
59+
pytest.skip('Measured values not provided')
60+
61+
logger.debug("Check if measured values are in tolerance")
62+
measure_passed = True
5563
for expected_rms_value, measured_rms_value in tuples:
56-
assert is_within_tolerance(
64+
if not is_within_tolerance(
5765
measured_rms_value, expected_rms_value, measurements_dict['tolerance_percentage']
58-
)
66+
):
67+
logger.error(f"Measured RMS value {measured_rms_value} mA is out of tolerance.")
68+
measure_passed = False
69+
70+
assert measure_passed, (
71+
f"Measured RMS value in mA is out of tolerance "
72+
f"{measurements_dict['tolerance_percentage']} %"
73+
)
5974

6075

6176
def is_within_tolerance(measured_rms_value, expected_rms_value, tolerance_percentage) -> bool:
@@ -74,21 +89,27 @@ def is_within_tolerance(measured_rms_value, expected_rms_value, tolerance_percen
7489
tolerance = (tolerance_percentage / 100) * expected_rms_value
7590

7691
# Log the values for debugging purposes
77-
logger.debug(f"Expected RMS: {expected_rms_value:.2f} mA")
78-
logger.debug(f"Tolerance: {tolerance:.2f} mA")
79-
logger.debug(f"Measured RMS: {measured_rms_value:.2f} mA")
92+
logger.debug(f"Expected RMS: {expected_rms_value:.3f} mA")
93+
logger.debug(f"Tolerance: {tolerance:.3f} mA")
94+
logger.debug(f"Measured RMS: {measured_rms_value:.3f} mA")
8095
logger.info(
8196
'RECORD: ['
8297
'{'
83-
f'"expected_rms_ua": {expected_rms_value:.2f}'
98+
f'"expected_rms_ua": {expected_rms_value:.3f}'
8499
'}'
85100
',{'
86-
f'"tolerance_ua": {tolerance:.2f}'
101+
f'"tolerance_ua": {tolerance:.3f}'
87102
'}'
88103
',{'
89-
f'"measured_rms_ua": {measured_rms_value:.2f}'
104+
f'"measured_rms_ua": {measured_rms_value:.3f}'
90105
'}'
91106
']'
92107
)
93108
# Check if the measured value is within the range of expected ± tolerance
94-
return (expected_rms_value - tolerance) < measured_rms_value < (expected_rms_value + tolerance)
109+
if (expected_rms_value - tolerance) < measured_rms_value < (expected_rms_value + tolerance):
110+
return True
111+
112+
logger.error(
113+
f"Measured RMS value: {measured_rms_value:.3f} mA is out of tolerance: {tolerance:.3f} mA"
114+
)
115+
return False

tests/subsys/pm/power_states/testcase.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ common:
1717
tolerance_percentage: 20
1818
record:
1919
regex:
20-
- "RECORD:(?P<metrics>.*)"
20+
- "^INFO: RECORD:(?P<metrics>.*)"
2121
as_json: ['metrics']
2222

2323
tests:

0 commit comments

Comments
 (0)