Skip to content

Commit 1b1ea31

Browse files
tests: on_target: make ppk test more stable
Make ppk test more stable. Signed-off-by: Giacomo Dematteis <giacomo.dematteis@nordicsemi.no>
1 parent 48fdfc8 commit 1b1ea31

File tree

2 files changed

+24
-6
lines changed

2 files changed

+24
-6
lines changed

.github/workflows/target-test.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -151,7 +151,7 @@ jobs:
151151
APP_BUNDLEID: ${{ vars.APP_BUNDLEID }}
152152

153153
- name: Generate and Push Power Badge
154-
if: ${{ matrix.device }} == ppk_thingy91x
154+
if: ${{ always() && matrix.device == 'ppk_thingy91x' }}
155155
continue-on-error: true
156156
working-directory: asset-tracker-template
157157
env:

tests/on_target/tests/test_ppk/test_power.py

Lines changed: 23 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,13 @@
2323

2424
UART_TIMEOUT = 60 * 30
2525
POWER_TIMEOUT = 60 * 5
26+
2627
MAX_CURRENT_PSM_UA = 10
28+
GREEN_THRESOLD_CURRENT_UA = MAX_CURRENT_PSM_UA # ≤ 10μA (good PSM current)
29+
YELLOW_THRESOLD_CURRENT_UA = 100 # ≤ 100μA (concerning but possible)
30+
RED_THRESOLD_CURRENT_UA = 1000 # ≤ 1000μA (bad but still plausible)
31+
# Readings above 1000uA are probably due to PPK crapping out, test is skipped in that case
32+
2733
SAMPLING_INTERVAL = 0.01
2834
CSV_FILE = "power_measurements.csv"
2935
HMTL_PLOT_FILE = "power_measurements_plot.html"
@@ -34,13 +40,15 @@ def save_badge_data(average):
3440
badge_filename = "power_badge.json"
3541
logger.info(f"Minimum average current measured: {average}uA")
3642
if average < 0:
37-
pytest.skip(f"current cant be negative, current average: {average}")
38-
elif average <= 10:
43+
pytest.skip(f"Current can't be negative, current average: {average}")
44+
elif average <= GREEN_THRESOLD_CURRENT_UA:
3945
color = "green"
40-
elif average <= 50:
46+
elif average <= YELLOW_THRESOLD_CURRENT_UA:
4147
color = "yellow"
42-
else:
48+
elif average <= RED_THRESOLD_CURRENT_UA:
4349
color = "red"
50+
else:
51+
pytest.skip(f"Skipping test due to unreliable PPK reading: {average} uA")
4452

4553
badge_data = {
4654
"label": "🔗 PSM current uA",
@@ -234,7 +242,17 @@ def test_power(thingy91x_ppk2, hex_file):
234242
generate_time_series_html(CSV_FILE, 'Time (s)', 'Current (uA)', HMTL_PLOT_FILE)
235243

236244
# Determine test result based on whether PSM was reached
237-
if not psm_reached:
245+
if psm_reached:
246+
pass # Test passes if PSM was reached
247+
elif min_rolling_average > RED_THRESOLD_CURRENT_UA:
248+
# Skip test if reading is absurdly high (likely PPK error)
249+
# Note: save_badge_data won't create file in this case
250+
pytest.skip(f"Skipping test due to unreliable PPK reading: {min_rolling_average} uA")
251+
elif min_rolling_average > YELLOW_THRESOLD_CURRENT_UA:
252+
# Fail if current is in red zone (but still plausible)
253+
pytest.fail(f"PSM target not reached after {POWER_TIMEOUT / 60} minutes, current too high: {min_rolling_average} uA")
254+
else:
255+
# Current is between 0 and YELLOW_THRESHOLD but PSM wasn't reached
238256
pytest.fail(f"PSM target not reached after {POWER_TIMEOUT / 60} minutes, only reached {min_rolling_average} uA")
239257

240258
def test_dummy_placeholder():

0 commit comments

Comments
 (0)