aboutsummaryrefslogtreecommitdiff
path: root/tools/tests
diff options
context:
space:
mode:
Diffstat (limited to 'tools/tests')
-rw-r--r--tools/tests/test_gen_products.py23
1 files changed, 21 insertions, 2 deletions
diff --git a/tools/tests/test_gen_products.py b/tools/tests/test_gen_products.py
index 47424d2..e57973f 100644
--- a/tools/tests/test_gen_products.py
+++ b/tools/tests/test_gen_products.py
@@ -1,5 +1,5 @@
# Author: cirakg & claude ai
-# Summary: Tests for tools/gen_products.py (the manifest product rule).
+# Summary: Tests for tools/gen_products.py (the manifest product rule and the watchdog the job runner assumes).
"""Tests for tools/gen_products.py, with synthetic device definitions."""
from __future__ import annotations
@@ -17,6 +17,7 @@ MANIFEST = """<iq:manifest version="3" xmlns:iq="http://www.garmin.com/xml/conne
def add_device(devices: Path, product: str, api: list[str], memory: int, group: str = gp.WATCH_GROUP) -> None:
folder = devices / product
folder.mkdir(parents=True)
+ set_watchdog(devices, product, gp.WATCHDOG_LARGE if memory > gp.LARGE_WATCH_MEMORY else gp.WATCHDOG_SMALL)
compiler = {
"displayName": product.upper(),
"webDocDeviceGroup": group,
@@ -26,6 +27,10 @@ def add_device(devices: Path, product: str, api: list[str], memory: int, group:
(folder / "compiler.json").write_text(json.dumps(compiler))
+def set_watchdog(devices: Path, product: str, count: int) -> None:
+ (devices / product / "simulator.json").write_text(json.dumps({"watchdogCount": count}))
+
+
def write_manifest(tmp_path: Path, products: list[str]) -> Path:
path = tmp_path / "manifest.xml"
path.write_text(MANIFEST.format(products="".join(f'<iq:product id="{p}"/>' for p in products)))
@@ -55,9 +60,23 @@ def test_missing_device_files(tmp_path: Path) -> None:
def test_problem_messages() -> None:
- device = gp.Device("x", "X", "Edge", (4, 2, 0), 131072)
+ device = gp.Device("x", "X", "Edge", (4, 2, 0), 131072, 120000)
assert device.problems() == [
"group is 'Edge', not 'Watches/Wearables'",
"API 4.2.0 is below 5.0.0",
"watch apps get 128 KB, below 512 KB",
]
+
+
+def test_watchdog_must_match_the_job_runner(tmp_path: Path) -> None:
+ devices = tmp_path / "Devices"
+ add_device(devices, "big_slow", ["6.0.0"], 786432)
+ set_watchdog(devices, "big_slow", 120000) # would run 2 steps on 120,000
+ add_device(devices, "small_fast", ["6.0.0"], 524288)
+ set_watchdog(devices, "small_fast", 240000) # fine: 1 step, more room
+ assert gp.check(write_manifest(tmp_path, ["small_fast"]), devices) == gp.EXIT_OK
+ assert gp.check(write_manifest(tmp_path, ["big_slow"]), devices) == gp.EXIT_UNQUALIFIED
+ problems = gp.load_device(devices, "big_slow").problems()
+ assert problems == [
+ "watchdog allows 120000 bytecodes per event; the job runner needs 240000 at 768 KB (change Jobs.stepsPerTick)"
+ ]